데이터분석/분석-지도학습

적분선형확률과정 ARIMA

씩씩한 IT블로그 2020. 12. 30. 10:56
반응형

 1. ARIMA 분석

 

ARMA분석은 데이터에 추세가 있고 이 추세를 없애기 위해 ARMA에 (추세)차분을 추가로 적용한 상태를 말한다. (ARIMA = ARMA+차분) 

즉 ARIMA(p,d,q)모델은 Y_t대신 (1-L)^d*Y_t 가 대입된 형태이다.

acf결과 추세로 인한 비정상성이 보이고, 차분의 필요성이 있을 때 ARIMA(차분+ARMA적합) 분석을 수행한다.

 

 2. 모수추정

 

ARMA와 마찬가지로 ACF와 PACF그래프를 보고 모수를 추정한다.

대략 아래와 같다. 

 

 3. 코드

import numpy as np
import statsmodels.api as sm
import matplotlib.pyplot as plt

# 2차누적/1차누적/미누적 데이터생성 및 적분차수 이해
np.random.seed(123)

# cumsum을 두번하여 비정상화했다.
y2 = sm.tsa.ArmaProcess([1], [1, 0.6]).generate_sample(100).cumsum().cumsum() 
y1 = np.diff(y2)
y0 = np.diff(y1)

plt.figure(figsize=(10,8))
plt.subplot(311)
plt.title("ARIMA Simulation")
plt.plot(y2, 'o-')
plt.subplot(312)
plt.plot(y1, 'o-')
plt.subplot(313)
plt.plot(y0, 'o-')
plt.tight_layout()
plt.grid()
plt.show()

차분할 수록 정상화되는 모습을 볼 수 있다.

 

# 2차누적/1차누적/미누적 데이터시각화
plt.figure(figsize=(10,8))
sm.tsa.graphics.plot_acf(y2, ax=plt.subplot(311))
plt.grid()
sm.tsa.graphics.plot_acf(y1, ax=plt.subplot(312))
plt.grid()
sm.tsa.graphics.plot_acf(y0, ax=plt.subplot(313))
plt.grid()
plt.tight_layout()
plt.show()

 

* 주의할점 - 과차분 시에는 acf가 더 커질 수 있으므로 유의한다.

# 과적차분 데이터 이해
y1_minus = np.diff(y0)

plt.figure(figsize=(10,8))
plt.subplot(211)
plt.plot(y1_minus, 'o-')
plt.title("Over-differencing 1 (Data)")
plt.grid()
sm.tsa.graphics.plot_acf(y1_minus, ax=plt.subplot(212))
plt.title("Over-differencing 1 (ACF)")
plt.grid()
plt.show()

y2_minus = np.diff(y1_minus)

plt.figure(figsize=(10,8))
plt.subplot(211)
plt.plot(y2_minus, 'o-')
plt.title("Over-differencing 2 (Data)")
plt.grid()
sm.tsa.graphics.plot_acf(y2_minus, ax=plt.subplot(212))
plt.title("Over-differencing 2 (ACF)")
plt.grid()
plt.show()

 

*출처 : 패스트캠퍼스 "파이썬을 활용한 시계열 데이터분석 A-Z"

반응형