카테고리 없음

[시계열 분석] ARIMA 실습

yennle 2022. 11. 20. 22:30
728x90
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.arima.model import ARIMA

 

데이터는 market-price.csv를 사용했다.

x가 timestamp였는데 이를 datetime 형식으로 바꾸는 과정을 거쳤다.

 


 

그리고 데이터의 그래프와 자기상관함수 그래프를 그려보았다.

시간이 지남에 따라 하락하는 추세를 띈다.

sm.graphics.tsa.plot_acf(data['y'])

추세를 띄기 때문에 값이 천천히 떨어진다.

 

 

PACF도 함께 그려보았으며, 몇 번의 차분을 진행할지에 대해 판단했다.

그래프를 통해 한 번의 차분을 진행하고자 했다.

sm.graphics.tsa.plot_pacf(data['y'])

 

 

 

1차 차분을 진행했다.

acf와 pacf의 결과로 차분한 데이터는 정상성을 띈다는 것을 알 수 있었다.

diff_1 = data['y'].diff(1)[1:]
plt.plot(diff_1)

sm.graphics.tsa.plot_acf(diff_1)

diff1의 ACF

 

sm.graphics.tsa.plot_pacf(diff_1)

diff1의 PACF

 

 

 

그런데, 몇 번의 차분을 거쳐야 하는지에 대해서 알기 위해

사용할 수 있는 라이브러리 함수가 존재한다 !

import pmdarima as pm
from pmdarima.arima import ndiffs
kpss_diffs = ndiffs(data['y'], alpha=0.05, test='kpss', max_d=6)
adf_diffs = ndiffs(data['y'], alpha=0.05, test='adf', max_d=6)
n_diffs = max(adf_diffs, kpss_diffs)

print(f"추정된 차수 d = {n_diffs}")

 

그리고 베스트 모델까지 알려준다 !!

model = pm.auto_arima(y = data['y']        # 데이터
                      , d = 1            # 차분 차수, ndiffs 결과!
                      , start_p = 0 
                      , max_p = 3   
                      , start_q = 0 
                      , max_q = 3   
                      , m = 1       
                      , seasonal = False # 계절성 ARIMA가 아니라면 필수!
                      , stepwise = True
                      , trace=True
                      )

 

 

 

ARIMA모델을 실행해보자 !!

model = ARIMA(data['y'], order=(0,1,0))  # order의 두번째가 1차 차분을 하겠다의 의미
model_fit = model.fit()
print(model_fit.summary())

이런식으로 모델을 완성할 수 있었다 ! 

728x90