카테고리 없음
[시계열 분석] 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)
sm.graphics.tsa.plot_pacf(diff_1)
그런데, 몇 번의 차분을 거쳐야 하는지에 대해서 알기 위해
사용할 수 있는 라이브러리 함수가 존재한다 !
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