시계열 데이터 분석은 현대 데이터 사이언스의 중요한 부분이다. 그 중에서도 자기회귀 통합 이동 평균 모델(ARIMA)은 복잡한 시계열 데이터를 분석하고 예측하는 데 매우 유용한 도구로 이번 포스트에서는 ARIMA 모델의 기본 개념, 특징, 그리고 이를 활용하는 방법에 대해 자세히 살펴볼 예정이다.
ARIMA 모델의 기본 이론
ARIMA 모델은 시계열 데이터의 과거 정보를 사용하여 미래 값을 예측하는 통계적 방법론이다. 이 모델은 크게 세 가지 주요 구성 요소로 이루어져 있다:
- 자기회귀(AR, Autoregressive): 이 부분은 과거의 값들이 미래 값에 어떤 영향을 미치는지를 나타낸다.
- 통합(I, Integrated): 시계열 데이터를 한 번 이상 차분하여 정상성을 확보하는 과정이다.
- 이동 평균(MA, Moving Average): 과거 예측 오차가 현재의 예측에 미치는 영향을 나타낸다.
수학적 표현
ARIMA 모델은 일반적으로 ARIMA(p,d,q)로 표현한다.
여기서 p는 자기회귀(AR) 부분의 차수, d는 차분의 차수, q는 이동 평균(MA) 부분의 차수를 말한다.
이 수식은 다음과 같이 구성된다.
여기서,
는 차분된 시계열 데이터 이며,
는 자기회귀(AR)부분의 계수이며,
는 이동평균(MA)부분의 계수이며,
는 시간 에서의 오차항이다.
ARIMA 모델의 구성요소
- 자기회귀(AR) 부분: 이 부분은 과거의 값들이 현재 값에 어떻게 영향을 미치는지를 설명한다. p 차수는 과거 몇 개의 시점을 모델링에 포함할지 결정한다.
- 차분(Integrated) 부분: 비정상 시계열 데이터를 정상적인 시계열 데이터로 변환하기 위해 사용된다. 차분은 데이터의 연속된 관측값들의 차이를 취하는 과정이다. d 차수는 데이터를 몇 번 차분할지 결정한다.
- 이동 평균(MA) 부분: 이 부분은 과거의 오차 항이 현재 값에 어떻게 영향을 미치는지 설명한다. q 차수는 과거 몇 개의 오차 항을 모델링에 포함할지 결정한다.
ARIMA 모델의 특징
- 비정상 시계열 데이터 적용 가능: ARIMA는 원래 비정상 시계열 데이터에 적합하도록 설계되었다. 차분을 통해 정상성을 확보한 후 AR과 MA 모델을 적용한다.
- 유연한 모델링: 다양한 시계열 패턴을 모델링 할 수 있으며, 모델의 파라미터를 조정함으로써 다양한 데이터에 적용할 수 있다.
- 장기적 예측 가능: ARIMA 모델은 단기 예측뿐만 아니라 장기 예측에도 사용될 수 있다.
ARIMA 모델 활용
ARIMA 모델은 다음과 같은 다양한 분야에서 활용된다
- 경제 및 금융 분야: 주식 가격, 환율, 경제 지표 등의 시계열 데이터 분석과 예측에 주로 사용된다.
- 기상학: 기온, 강수량 등의 기상 데이터 분석과 예측에 활용된다.
- 수요 예측: 비즈니스 분야에서 제품의 수요 변화 예측에 적용될 수 있다.
Python 구현 예제
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_error
# 예제 데이터 생성
data = np.random.randn(100).cumsum() + 100
# 데이터를 pandas Series로 변환
ts = pd.Series(data)
# 학습 데이터와 테스트 데이터로 분리
train, test = ts[:80], ts[80:]
# ARIMA 모델 피팅
model = ARIMA(train, order=(20, 3, 60))
model_fitted = model.fit()
# 예측
predictions = model_fitted.predict(start=len(train), end=len(train) + len(test) - 1, typ='levels')
# 테스트 데이터와 예측 결과를 시각화
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('ARIMA Model')
plt.legend()
plt.show()
# 모델의 성능 평가
mse = mean_squared_error(ts[-10:], predictions)
print(mse)
위 예제에서는 ARIMA(20, 3, 60) 모델을 사용하여 시계열 데이터를 분석하였다. 이 예제는 100개의 가상 시계열 데이터 포인트를 생성하고, 이 중 80%를 학습 데이터로, 나머지 20%를 테스트 데이터로 분리하여 사용한다.
- 자기회귀(AR) 부분 – p:
- p = 20: 이는 AR 부분의 차수를 나타내며, 현재 값이 과거 20개의 데이터 포인트의 선형 조합에 의해 결정됨을 의미한다.
- 내용: AR 부분의 차수가 높으면 모델이 과거 데이터의 더 긴 시퀀스를 고려하며, 이는 복잡한 시계열 패턴을 잘 포착할 수 있지만, 모델이 과적합될 위험이 있으며, 계산 복잡도가 증가할 수 있다.
- 차분(I) 부분 – d:
- d = 3: 이는 시계열 데이터를 세 번 차분하는 것을 의미한다. 차분은 비정상 시계열 데이터를 정상적인 시계열로 변환하기 위해 사용된다.
- 내용: 데이터를 세 번 차분하면 시계열의 계절성이나 추세를 제거할 수 있지만, 과도한 차분은 데이터의 중요한 정보를 손실할 수 있으며, 노이즈가 증가할 수 있다.
- 이동 평균(MA) 부분 – q:
- q = 60: 이는 MA 부분의 차수를 나타내며, 현재 값이 과거 60개의 예측 오차의 선형 조합에 의해 결정됨을 의미한다.
- 예상 결과: MA 부분의 차수가 높으면 모델이 더 많은 과거의 오차 정보를 고려한다. 이는 짧은 시계열 데이터에서는 예측력을 향상시킬 수 있지만, 많은 파라미터를 추정해야 하므로 계산 복잡도가 증가하고 과적합의 위험이 있을 수 있다.