본문 바로가기
ML/Time-Series Analysis

[ML][Time - Series Analysis] ARMA(Auto Regression Moving Average, 자기 회귀 이동 평균) 모델

by 어떻게든 되겠지~ 2024. 8. 25.

ARMA(Auto Regression Moving Average, 자기 회귀 이동 평균) 모델이란?

AR 모델과 MA 모델을 결합한 형태로, 현재 시점의 데이터가 과거 데이터의 상태(AR 부분)와 과거 오차(MA 부분) 모두에 의존한다고 가정한 모델이다

 

ARMA 모델 수식

$$ {\large Z_{t} = \alpha + \Phi_{1} Z_{t-1} + \Phi_{2} Z_{t-2} + \cdots + \Phi_{p} Z_{t-p} \; + \; \epsilon_{t} + \theta_{1}\epsilon_{t-1} + \theta_{2}\epsilon_{t-2} + \cdots + \theta_{q}\epsilon_{t-q} } $$

  • AR(Auto Regression) 부분
    • $\alpha + \Phi_{1} Z_{t-1} + \Phi_{2} Z_{t-2} + \cdots + \Phi_{p} Z_{t-p}$
    • 차수 p
  • MA(Moving Average) 부분
    •  $\epsilon_{t} + \theta_{1}\epsilon_{t-1} + \theta_{2}\epsilon_{t-2} + \cdots + \theta_{q}\epsilon_{t-q}$
    • 차수 q

 

AR 모델의 장점

  • 효율적인 시계열 예측
    • 과거 값과 예측 오차를 모두 고려하기 때문에, 단순한 AR 모델이나 MA 모델보다 더 정교한 예측 가능
  • 적은 파라미터 수
    •  ARMA 모델은 적은 수의 파라미터를 사용하여 시계열 데이터를 설명
  • 선형성
    • ARMA 모델은 선형 모델이기 때문에, 모델의 구조가 비교적 단순하며 해석이 쉽다
    • 즉, 데이터 분석이나 경제 모델링에서 직관적으로 이해할 수 있는 결과를 제공
  • 모델의 융통성
    • AR과 MA의 조합을 통해 시계열 데이터가 갖는 다양한 자기 상관성을 설명하는 데 유연한 접근이 가능

AR 모델의 특성

  • 안정성(Stationarity)
    • ARMA 모델은 안정적(stationary) 시계열 데이터에 적합
  • 자기 상관성(Autocorrelation)
    • ARMA 모델은 시계열 데이터의 자기 상관성을 잘 설명한다
    • AR 부분은 데이터의 자기 상관성을, MA 부분은 데이터의 잔차(오차) 상관성을 처리합니다.
  • 백색잡음 가정
    • ARMA 모델에서 사용되는 오차(잔차)는 백색잡음이어야 한다
    • 즉, 평균이 0이고 분산이 일정하며, 시계열 데이터에 자기 상관이 없어야한다
  • 모델의 순서 결정
    • ARMA 모델의 성능은 AR(p)와 MA(q) 차수(p, q)의 선택에 크게 의존한다
    • 차수를 결정하는 데는 AIC(Akaike Information Criterion), BIC(Bayesian Information Criterion) 등의 정보 기준을 사용하거나, ACF(Autocorrelation Function)와 PACF(Partial Autocorrelation Function) 플롯을 분석

AR 모델의 한계

  • 비안정적 데이터에 대한 한계
    • ARMA 모델은 비안정적(non-stationary) 데이터에는 적합하지 않다
    • 데이터가 트렌드나 계절성을 포함할 경우, ARMA 모델을 사용하기 전에 데이터의 안정성을 확보해야한다
    • 이를 위해 차분(differencing) 등의 기법을 사용해 데이터를 안정적으로 변환가능
  • 복잡한 패턴 설명의 어려움
    • ARMA 모델은 선형 모델이기 때문에, 비선형적 패턴을 잘 설명하지 못할 수 있다
    • 시계열 데이터가 복잡한 비선형 구조를 가지는 경우, ARMA 모델은 한계를 보일 수 있으며,
    • 이러한 경우 비선형 모델이나 더 복잡한 모델(예: ARIMA, GARCH)을 사용하는 것이 좋다
  • 모델 파라미터 선택의 어려움
    • ARMA 모델에서 p와 q의 차수를 결정하는 것이 굉장히 어렵다
    • 잘못된 차수 선택은 모델의 예측력을 저하시킬 수 있으며 Overfitting이 발생할 수 있다
  • 해석의 어려움
    • ARMA 모델은 AR과 MA를 결합한 형태로, 두 가지 모델의 파라미터가 복합적으로 작용
    • 이로 인해 모델이 복잡해지면 해석이 어려울 수 있다

ARMA 모델 예제 코드

1) 필요한 라이브러리 Import

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.arima.model import ARIMA
from sklearn.metrics import mean_squared_erro


통계분석 라이브러리인 statsmodels에서 시계열 분석을 위한 tsa 모듈을 사용한다.

tsa 모듈에서 ARIMA Class를 불러와 차수를 조절하여 ARMA 모델로써 사용한다.

2) 랜덤으로 예제 데이터 생성

# 예제 데이터 생성
data = np.random.randn(100).cumsum() + 100

# 예제 데이터를 Time Series Data로 변환
ts = pd.Series(data)

# 학습 데이터와 테스트 데이터로 분리
train, test = ts[:80], ts[80:]

3) ARIMA Class를 통해 ARMA 모델 생성 및 Fitting

# ARMA 모델 fitting
# ARIMA 모델의 parameter로 ARMA 모델 생성 (AR: p=10, MA: q=10)
model = ARIMA(train, order=(10, 0, 10))  # AR(p=10), MA(q=10)
model_fit = model.fit()

# 예측
predictions = model_fit.predict(start=len(train), end=len(train) + len(test)-1)

 

4) 성능 평가 및 결과 시각화

# 테스트 데이터와 예측 결과를 시각화
plt.figure(figsize=(10, 5))
plt.plot(train, label='Train')
plt.plot(test.index, test, label='Test', color='gray')
plt.plot(test.index, predictions, label='Predicted', color='red')
plt.title('ARMA Model')
plt.legend()
plt.show()

# 모델의 성능 평가
mse = mean_squared_error(test, predictions)
print(f"MSE Loss: {mse:.4f}")

 

반응형