Database for Everything

[삼성 SDS Brightics] 시계열 분석 - ARIMA를 이용하여 샴푸 매출액 분석 및 예측하기 본문

삼성 SDS Brightics

[삼성 SDS Brightics] 시계열 분석 - ARIMA를 이용하여 샴푸 매출액 분석 및 예측하기

Yeenn 2021. 7. 9. 02:18
728x90



안녕하세요! yeenn입니다.

요즘 날이 너무 더워져서.. 선풍기와 에어컨 없이는 하루도 버틸 수 없게 되었어요ㅎㅎ....

코로나 상황도 점점 악화되고 있는 상황이라
이래저래 걱정이 많이 되지만,

그래도 브라이틱스 서포터즈는 열일을 멈추지 않습니다★



예전에 전공 수업 과제에서 엑셀로 수요예측 분석을 했던 적이 있었는데,
이제껏 개인 실습으로 다루지 않은 주제를 다루면서도, 이전에 다른 플랫폼으로 진행했던 분석 과제와 접점이 있는 주제를 실습 목표로 삼아보면 어떨까 생각해 보다가 '시계열 분석 실습'을 진행해보기로 결정했습니다..!

여유가 된다면, 이전 과제 파일도 불러와 브라이틱스로도 다시 분석을 진행해보도록 하겠습니다:>


[이론학습]

 


시계열 분석이란?


우선, 시계열 자료란 주가, 강우량, 기온, 심박수 등 시간의 흐름에 따라 관측되는 자료들입니다.
시계열 자료를 이해하기 위한 관점 중 '시간영역(time domain)'위에서 시계열 자료를 다루는 관점은 가장 흔한 관점인데요, 이번 이론 학습에서는 이러한 관점을 기반으로 대표적인 시계열 모델인

'AR 모형', 'MA 모형', 'ARMA 모형', 'ARIMA 모형'에 대해 간단히 알아보겠습니다!


● 자기상관모형(AutoCorrelation)

자기상관이란, 어떠한 random 변수에 대해 이전의 값이 이후의 값에 영향을 미치고 있는 상황을 말합니다. 자기상관성을 시계열 모형으로 구성한 것을 AR 모형이라고 부르는데, 가장 간단한 형태는 바로 직전의 데이터가 다음의 데이터에 영향을 준다고 가정하는 모형입니다.

● 이동평균모형(MovingAverage)

이동평균과정은 이전 시점들이 설명해주지 못하는 오차들로 현재 시점이 설명될수 있다는 가정을 바탕으로 합니다. 이동평균을 시계열 모형으로 구성한 것을 MA 모형이라고 하는데, 간단히 말해 시간이 지날수록 어떠한 random 변수의 평균값이 지속적으로 감소하거나 증가하는 평균의 이동 경향성이 있는 모형이라고 할 수 있습니다.

● 자기회귀이동평균과정(Autoregressive Moving Average)

자기회귀이동평균과정(ARMA) 모형은 AR 모형과 MA 모형을 합친 모형입니다. 시계열 자료들을 순수하게 AR 또는 MA과정으로만 설명하려면, p나 q의 값이 지나치게 커질 수 있고, 이는 모형의 관점에서 추정해야 할 모수의 개수가 많아짐을 의미합니다. 모수의 개수가 많아지면 추정의 효율성이 떨어지고 해석의 정확성이 감소할 수 있기 때문에, 이러한 두 과정을 혼합한 ARMA(p, q) 모형을 사용합니다.

● 자기회귀누적이동평균과정(AutoRegressive Integrated Moving Average)

ARIMA 모형은 ARMA 모형이 과거의 데이터들을 사용하는 것에 반해, 이것을 넘어 과거의 데이터가 가지고 있던 추세(Momentum)까지 반영하는 모형입니다. 즉, 선형관계인 Correlation 뿐 아니라 추세관계인 Conintegration까지 반영하는 모델이라고 할 수 있습니다.

 

[실습]



이번 시계열분석 실습에서 살펴볼 모형은 ARIMA 모형인데요,
ARIMA를 통해 미래구간의 값을 예측해보고, p, d, q파라미터를 수동/자동 조정하여 예측력을 높이는 실습을 진행해보도록 하겠습니다!

※ 해당 포스팅은 Brightics Github에 수록된 dataset을 활용하여 작성되었습니다.

0. Data Flow Model

 

 

이번 시계열분석 실습의 work flow model은 위와 같습니다.

 

 

1. Data Load

 


shampoo.txt 데이터를 load해주세요. Delimiter은 Comma로 설정하시면 됩니다.

 

먼저, load 된 데이터를 간단하게 line chart로 시각화해보았습니다.
Chart Type: Line
X-axis: Month
Y-axis: Sales
를 지정해주세요!
시간이 지날수록 매출액 데이터가 계속 증가하는 패턴을 보이고 있는 것을 확인할 수 있네요!


 

2. 자기상관(AutoCorrelation) 분석


직전시점의 에러, 혹은 회귀 식으로 도출하기 위한 데이터의 패턴을 알기 위해 AutoCorrelation 함수를 불러와 ACF(autocorrelation function), PACF(partial autocorrelation function)를 그려보겠습니다.

Input Column: Sales
Number of Lags: 20
Confidence Level: 0.95
를 지정해주세요.

 

 


자기상관을 나타내는 ACF의 경우, 시간에 따라 점점 줄어드는 패턴을 보이고 있습니다.
20의 time lag를 기준으로 자기 상관이 양에서 음으로 이어지는 하향 추세를 보이고 있는데요, 이 때 ACF가 비교적 느리게 감소하기 때문에 확률적 처분의 필요여부를 확인하기 위해 추후 단위근 검정을 실시해보도록 하겠습니다.

 

 

 

 

편자기상관을 나타내는 PACF의 경우, 시차가 다른 두 시계열 데이터간 순수한 상관관계를 나타내는 것으로,
지금까지 계산한 다른 시점과의 상관은 제거하고 보는 그래프입니다!
12(-0.475)와 16(-0.750) 등에서 비교적 큰 음의 값을 지니므로, 주기성이 의심되네요!



 

3. 단위근 검정(Unit Root Test)


단위근 검정은 확률적 차분이 필요한지를 확인하는 과정인데요,
아래와 같은 귀무가설 H0을 기각하지 못할 경우, 차분이 필요하다고 판단을 내릴 수 있습니다.

H0: 현재 시계열에 단위근이 존재한다.
H1: 단위근이 존재하지 않는다. 즉, 정상성을 확보했다.

브라이틱스의 Unit Root Test를 통해 Augmented-Dickey Fuller 단위근 검정(ADF test)을 확인해볼 수 있습니다!

 

 

 

Unit Root Test 함수를 불러와,
Input Data Series: Sales
Regression: Constant only
Auto lag: AIC
를 지정해주세요.

결과표의 p-value를 살펴보니, 1이 나온 것을 확인할 수 있었는데요,
이를 바탕으로 단위근이 존재한다는 귀무가설 H0을 기각하지 못해 차분이 필요하다고 판단하였습니다!



4. ARIMA Train 1


ARIMA는 Autoregressive Integrated Moving Average라는 뜻으로,
AR(Auto Regression) + MA(Moving Average)의 두 모형을 합친 모형입니다.

  • AR 모형

AR 모형이란 자기 회귀 모형으로, Auto Regression의 약자이며, 예측하고자 하는 특정 변수의 과거 관측값의 선형결합으로 해당 변수의 미래값을 예측하는 모형입니다.

  • MA 모형

MA 모형이란 Moving Average의 약자이며, 예측오차를 이용하여 미래를 예측하는 모형입니다.

  • ARIMA 모형

d차 차분한 데이터에 AR(p) 모형과 MA(q) 모형을 합친 모형입니다.

ARIMA에는 AR, I, MA의 차수를 조정하는 파라미터 (AR의 차수)p, (d의 차수)I, (MA의 차수)q 가 있습니다.
Auto ARIMA를 통해 파라미터를 자동으로 찾을 수도 있고, 수동으로 조정할 수도 있지만, 본 실습에서는 이를 수동으로 조정해보겠습니다. ((1.0.0) 모델)

 

 

Input Columnd: Sales
p: 1
d: 0
q: 0
Intercept: True
를 지정해주시면, 위와 같은 결과가 나오게 됩니다.
Intercept를 true로 지정했기 때문에, 절편과 계수가 동시에 도출되는 것을 확인할 수 있습니다!



5. ARIMA 예측 1


그럼, 실제 값이 이와 같이 예측되는지 확인하기 위해 ARIMA Predict로 값을 예측해보겠습니다!

 

 

시계열 데이터이기 때문에, 1년정도를 예측한다고 하고 Prediction Number에 12를 입력한 뒤, 예측을 진행해보았습니다.
우측 table에서 예측된 미래값을 확인할 수 있었습니다!


 

6. 결괏값 반환 1


그 다음, 이 값을 기존의 데이터와 합치기 위해서, 쿼리로 predict의 결괏값을 변환해보겠습니다.
Query Executor 함수를 불러와서 아래와 같은 SQL문을 입력해줍니다!

 

 

 

 

7. 예측 데이터 시각화 1


마지막으로, Bind Row Column을 통해 기존의 데이터와 새롭게 예측된 데이터를 모두 결합하여 포함한 다음, Line Chart를 그려 시각화해보도록 하겠습니다.

 

 

 

Load data와 Query Executor을 통해 반환된 결괏값을 Bind Row Column을 통해 결합해줍니다.
Row를 선택하고, Run을 눌러주세요!

 

 

 


그 다음, Chart Settings 설정창에서
Chart Type: Line
X-axis: Month
Y-axis: Sales
를 지정하여 Line Chart를 그려주세요.

차트를 살펴볼까요?
4_01 부터 시작하는 구간은 미래 데이터 지표를 나타내는데요,
이 때는 실제 데이터가 존재하지 않는 미래 구간이라 추세를 잘 반영하지는 못합니다.

그렇다면, 조금 더 예측률을 높이기 위해 앞서 수행한 ARIMA 훈련 → 예측 → 시각화 절차를
파라미터 세팅 조정을 통해 재수행해보겠습니다!



 

8. ARIMA Train 2


앞서 수행한 ARIMA Train 의 p, d, q를
p=0
d=1
q=0
으로 설정하고 훈련해보겠습니다.

 



 

나머지 과정은 위의 과정과 동일하니, 설명은 축소하고 빠르게 시각화로 넘어가도록 하겠습니다!



 

9. ARIMA 예측 2

 



 

10. 결괏값 반환 2

 



 

11. 예측 데이터 시각화 2

 

 


앞의 설명과 마찬가지로, Chart Settings 설정창에서
Chart Type: Line
X-axis: Month
Y-axis: Sales
를 지정하여 Line Chart를 그려주세요.

차트를 살펴볼까요?

미래구간에서 상수 항만큼 증가하는 모델이 구현되었습니다!
ARIMA TRAIN Parameter을 (1,0,0)으로 설정했을 때보다 예측 정확도가 올라간 듯 보이네요!


 

12. AutoARIMA Train


p, d, f 값을 변경해보며 ARIMA 예측을 진행해보았지만, ARIMA 차수에 어떠한 수치를 설정해야 하는지 아직은 불확실해보입니다

이럴 때 우리가 할 수 있는 것은?

컴퓨터의 힘을 빌리는 것...!ㅋㅋㅋ

Auto ARIMA Train을 이용하여 최적의 p, d, q값을 찾아보겠습니다!

 

 


결과를 살펴보면, ARIMA(2,1,0)모델이 나온 것을 확인할 수 있습니다!



 

13. Auto ARIMA 예측

 

 

 

그 다음, Auto ARIMA Predict 함수를 불러와 Prediction Number 에 12를 입력해줍니다.

그 다음, 앞서 살펴본 과정의 SQL문을 통한 결합과정과 Bind Row Column 함수를 통해 데이터를 결합하여 최종적인 예측데이터를 시각화해보겠습니다!

 

 

14. 결괏값 반환


위의 과정과 똑같이 다음과 같은 SQL문을 입력해주세요!

 

 

 

 

 

15. 예측 데이터 시각화

 

 

 

Bind Row Column을 통해 기존의 데이터와 새롭게 예측된 데이터를 모두 결합하여 포함해주세요.
Load된 data와 Query Executor함수로 결합된 데이터를 Bind Row Column을 통해 결합한 후,

Line Chart를 그려 시각화해보도록 하겠습니다.
Chart Type: Line
X-axis: Month
Y-axis: Sales
로 지정해주세요!

 

 

 


차트를 살펴보겠습니다!

미래의 예측구간을 확인해볼까요?

AUTO ARIMA Predict를 통해 찾은 적당한 parameter(2,1,0)을 적용하여 학습한 결과 이동평균법(AR)을 통해 예측한 수치보다 더 예측력이 높아진 것을 확인할 수 있습니다!


 

★ 예측 데이터 정확도 향상 과정 ★


사각형 프레임 속 미래 구간 위주로 예측 데이터의 정확도 향상 과정을 확인해주세요!

 




 

16. Holt-Winters 훈련


Shampoo 데이터의 흐름을 보면, 추세와 함께 주기가 반복되는 것처럼 보이는 부분이 있더라구요!

 




 

17. Holt-Winters Train


하지만, Auto ARIMA를 통해 얻은 예측값은 주기성이 반영되지 않은 값이라 정확한 값을 확인하기 힘들기 때문에, Holt-Winters로 주기를 반영하여 모델링을 진행해보겠습니다!

 

 

 

Holt-Winters Train 함수를 불러온 후,
Input Columns: Sales
Model Type: Additive(가법모형)
Period: 12
을 지정해주세요!


 

 

18. Holt-Winters 예측



그 다음, 미래구간의 값을 예측하기 위해 Holt-Winters Predict 함수를 불러옵니다.

 

 

 

Holt-Winters에서는
1. 수평성분
2. 추세성분
3. 계절성분

3가지의 조합으로 데이터를 예측하게 되는데요, Holt Winter 예측을 통해,
이러한 성분들이 비교적 적절히 반영된 예측결과를 위 Line Chart를 통해 확인해볼 수 있습니다!
.
.
.
.
.
.
다음 포스팅은 생생한 Brightics 홍보 영상 제작후기로 돌아오겠습니다!

(코로나 제발...도와주세요.....0-ㅠ)



-본 게시물은 Brightics 서포터즈 활동의 일환으로 작성된 포스팅 입니다.

728x90
Comments