6-1. 들어가며


학습 목표

  • ARIMA에 대해 알아보기
  • ARIMA의 파생 모델 알아보기 & 실습


6-2. 시계열 예측의 절대강자, ARIMA


용어 정리

  • Overfitting(과대적합)
    • score, accracy는 높게 나오나, 너무 기존 데이터에 적합해서 새 데이터는 예측을 제대로 하지 못하는 경우

  • Underfitting(과소적합)
    • 모델이 데이터셋 규칙을 잘 찾지 못해 성능이 낮음
    • 학습 데이터를 잘 이해하지 못한 것

  • Auto-Arima
    • R언어 제공 함수 -> 파이썬으로 옮겨옴
    • 단위근 검정, AICc 최소화, MLE 사용 -> ARIMA의 p,d,q 및 계수 자동 찾기

  • Likelihood(우도법 및 가능도)
    • 데이터가 특정 분포로부터 만들어졌을 확률 의미(가능성)

  • Likelihood Function(가능도 함수)
    • 데이터에 대한 확률 분포 값 모두 곱한 것

  • Log Likelihood(로그 가능도)
    • likelihood가 최대가 되는 분포 -> MLE가 됨!

  • MLE(Maximum Likelihood Estimation, 최대우도법)
    • likelihood가 최대가 되는 파라미터 값 찾는 것

  • Box-jenkins(박스 젠킨스)
    • 자동회귀 이동평균 or 자동회귀 누적이동평균 모델의 적용 -> 최적 시계열 모델 찾는 것

ARIMA = 자기회귀 누적 이동평균 모델

  • 복잡성이 낮은 예측 문제에서 높은 예측 성능을 보임
    • AR : AutoRegressive Model(자기 회귀)
    • Integration : 차분
    • MA: Moving Average Model(이동 평균)

Auto Regressive Model

  • AR(p) 모델
    • yt=c+ϕ1yt1+ϕ2yt2+...+ϕpytp+ϵty_t = c + ϕ_1y_{t-1} + ϕ_2y_{t-2} + ... + ϕ_py_{t-p} + ϵ_t
    • "과거가 ➡️ 미래를 예측한다"는 직관적 사실에 의존하는 모델
    • 특정 시점 t값 = 이전 시점 구성 값 함수

Moving Average Model

  • MA(q) 모델
    • yt=c+ϵt+θ1ϵt1+θ2ϵt2++θqϵtqy_t = c + \epsilon_t + \theta_1 \epsilon_{t-1} + \theta_2 \epsilon_{t-2} + \cdots + \theta_q \epsilon_{t-q}
    • 현재 값이 과거 오차항 함수로 구성됨
    • 현재 시점 데이터가 최근 과거 시점에서 발생한 오차항을 기반으로 계산되기 때문
      • 과거 오차가 현재 과정에 영향을 미친다는 것 = 어떤 특정 시점까지의 과거 값이 현재 시점 값을 구성하는 데 있어 영향을 유의미하게 미치는 것인지!
    • 각 오차항은 서로 독립적

ARIMA equation

  • p : AR lagged values
  • d : 차분 개수
  • q : MA lagged errors

yt=c+ϕ1yt1+ϕ2yt2++ϕpytp+θ1ϵt1+θ2ϵt2++θqϵtq+ϵty_t' = c + \phi_1 y_{t-1}' + \phi_2 y_{t-2}' + \cdots + \phi_p y_{t-p}' + \theta_1 \epsilon_{t-1} + \theta_2 \epsilon_{t-2} + \cdots + \theta_q \epsilon_{t-q} + \epsilon_t

  • yty_t' : differenced time series
  • cc : intercept
  • ϕ1yt1+ϕ2yt2++ϕpytp\phi_1 y_{t-1}' + \phi_2 y_{t-2}' + \cdots + \phi_p y_{t-p}' : lagged values
  • θ1ϵt1+θ2ϵt2++θqϵtq+ϵt\theta_1 \epsilon_{t-1} + \theta_2 \epsilon_{t-2} + \cdots + \theta_q \epsilon_{t-q} + \epsilon_t : lagged errors

파라미터 p, d, q의 적합

  • Box-Jenkins(박스-젠킨스 법)
    • ACF, PACF 함수를 보면서 수동 파라미터 적합하는 방법
      그래프 종류AR(p)MA(q)ARMA
      ACF plot천천히 감소Lag q 이후 빠르게 감소가파른 절단 ❌
      PACF plotLag p 이후 빠르게 감소천천히 감소가파른 절단 ❌

      순서

      1. 초기 파라미터(p,d,q) 추정 - 시각화, 도메인 지식 등을 바탕으로
      2. 모델 적합 ➡️ 시각화 및 성능 평가 수행
      3. 부적합 ➡️ 파라미터 조정
      4. 위를 반복하는 것

Auto-Arima와 Overfitting의 가능성

  • Auto-Arima를 이용할 경우, 과적합 위험이 높아짐
    • Log likelihood를 이용한 Step-wise 방법

      일반적인 과적합 기준

      • 차분(d)이 2를 넘어가는 경우
      • AR(p) MA(q) 3을 넘어가는 경우

ARIMA가 높은 성능을 보이는 이유

  • 월드의 정리
    • 정상 시계열이 결정론적 시계열 + 확률론적 시계열로 작성될 수 있음
    • 백색 잡음의 선형 결합으로 표현이 가능하다는 의미


6-3. ARIMA의 파생 모델


용어 정리

  • Error Terms(오차항) : ε
    • 독립변수 x가 주어진 경우의 종속변수 y 실제 값 & 예측값의 차이

  • Regression Analysis(회귀 분석)
    • 독립변수 x가 종속변수 y에 미치는 영향과 관계를 통계 모델로 예측, 분석

  • dynamic regression model(동적 회귀 모델)
    • 시계열 분석 모델 : 과거 시점 정보는 볼 수 있으나, 그 외 정보는 보기 어려움
    • 회귀 분석 모델 : 관련 변수 추가 가능하나, 시계열 분석 모델에서 사용하는 장점을 쓸 수 없음
      ➡️ 이 2가지 모델을 합친 것!
    • 회귀에 자기 상관 추가(오차항을 넣어서)

  • Time series regression(시계열 회귀)
    • 일반적인 회귀 분석 모델
    • 독립변수, 종속변수 모두 time series만으로 구성

  • independent and identically distributed(독립 항등 분포)
    • 여러 확률 변수들이 각각 통계적으로 독립 + 동일 확률 분포를 가지고 있는 경우를 말함
    • iid

더 많은 요소를 ARIMA에 추가해볼 수는 없을까?

ARIMA 파생 모델 종류

  • SARIMA

    • ARIMA + seasonality
    • 계절성 추가 모델
    • 계절(m)에 대한 : AR(P), 차분(D), MA(Q) 추가 ➡️ 계절성 데이터도 모델링 가능!
  • ARIMAX(dynamic regression)

    • ARIMA + Time series regression
    • 선형 회귀는 iid(독립 항등 분포)를 가정하기 때문에 시계열 특성과 달라서 -> 적합하지 않음
    • 이 경우, 회귀 오차항이 AIRMA 시계열이라면 회귀분석의 적용이 가능한 원리
  • SARIMAX

    • SARIMA + ARIMAX

ARIMA 실습

라이브러리 import

import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
from statsmodels.tsa.arima.model import ARIMA
import pmdarima as pm

데이터 불러오기

  • 데이터셋 : Daily_Demand_Forecasting_Orders
df = pd.read_csv('{경로}/Daily_Demand_Forecasting_Orders.csv', delimiter=';')
df.columns


시각화

  • Target : Total orders
    • 어떤 추세나 계절성을 가지고 있는 것으로 보이지는 않음
    • 분산은 크게 튀는 값 없이 일정하게 유지되고 있음
data = df['Target (Total orders)']
plt.plot(data)
plt.show()


ACF 시각화


PACF 시각화


ACF와 PACF에서는 유의미한 lag가 보이지 않음


ARIMA 적용해보기

  • 모델별로 p,d,q 다르게 적용
model1 = ARIMA(data, order=(1,0,0))
model2 = ARIMA(data, order=(0,0,1))
model3 = ARIMA(data, order=(1,0,1))

res1 = model1.fit()
res2 = model2.fit()
res3 = model3.fit()

ARIMA 결과 확인

  • fittedvalues
    • 값 x를 ➡️ 회귀 방정식에 대입하여 결과 출력
      • y^\hat{y} : 모델을 통해 예측된 결과
      • y^i=b0+b1xi\hat{y}_i = b_0 + b_1x_i : y가 fitted value
      • et=yty^te_t = y_t - \hat{y}_t : e(잔차)는 관측치 및 적합값 사이의 차이와 같음

  • 시각화 : fitted value 비교
print(res1.summary())


print(res2.summary())


print(res3.summary())

AIC, BIC 값을 봤을 때, res2가 가장 적합한 모델 즉, (0,0,1)의 경우가 가장 적합한 것으로 추측됨


  • 실제 fittedvalues로 비교
    • 파란색 : 원본 데이터
    • 주황색 : 예측값
    • ARIMA 모델 값과 실제 데이터를 비교해보니, 전혀 비슷하지 않음.
predictions = res2.fittedvalues

plt.figure()
plt.plot(data)
plt.plot(predictions)
plt.show()


이렇게 다른 경우가 많기 때문에, Auto ARIMA를 이용함

Auto ARIMA 적용

  • Auto ARIMA 결과 vs summary로 나온 결과
model = pm.AutoARIMA(seasonal=False, stepwise=True, suppress_warnings=True, trace=True)

res = model.fit(data)

  • summary 결과 확인
print(res.summary())

결과 분석

  • 최선의 모델은 ARIMA(0, 0, 0)
    • 하지만, 백색잡음 값이라 유의미한 예측은 불가능..
profile
언젠가 내 코드로 세상에 기여할 수 있도록, BE&Data Science 개발 기록 노트☘️

0개의 댓글