AR(Auto Regression, 자기 회귀)모델
AR 모델은 이전 관측값이 이후 관측값에 영향을 준다는 아이디어에 대한 모델이다
즉, 현재 값이 이전 값들의 선형 결합으로 설명된다고 가정합니다
수식
$${\large Z_t = \alpha + \Phi_1 Z_{t-1} + \Phi_2 Z_{t-z} + \cdots + \Phi_p Z_{t-p}+ \epsilon_t }$$
- $Z_t$ : 시계열 데이터의 시점 t의 값
- $\Phi_1, \Phi_2, \cdots, \Phi_p$ : 회귀 계수(자기회귀 계수)
- $\epsilon_t$ : 평균이 0이고 분산이 일정한 백색 잡음(white noise)
- $p$ : AR 모델의 차수(order, 이전 시점의 데이터 개수)
수식을 통해 알 수 있는건 AR 모델은 과거 p개의 데이터와 현재 데이터 간의 관계를 설명하는 모델이라는 것이다
※ 자기 회귀 계수(Auto Regression Coefficients)
AR 모델에서 과거 시점의 데이터가 현재 데이터에 얼마나 영향을 미치는지를 나타내는 계수
- 자기 회귀 계수의 역할
- 과거 데이터의 영향력 측정 : 과거 데이터가 현재 데이터에 미치는 영향을 정향적으로 측정
- 데이터의 패턴 파악 : 데이터 패턴을 이해하는데 중요한 역할(양수, 음수)
- 자기 회귀 계수의 의미
- 양수 계수 : 이전 값이 현재 값과 같은 방향으로 영향을 미친다
- 음수 계수 : 이전 값이 현재 값과 반대 방향으로 영향을 미친다
- 계수 크기 : 절대값이 클수록 과거 데이터가 현재 데이터에 더 큰 영향을 미친
- 자기 회귀 계수 추정
- 자기 회귀 계수는 최소 제곱법(OLS)이나 최대우도법(MLE)을 사용하여 추정한다
특성
1. 자기 상관성(Auto Correlation)
AR 모델은 시계열 데이터의 자기 상관성을 잘 설명한다
즉, 이전 데이터와 현재 데이터 간의 상관관계를 모델링하는데 적합하다
자기 상관성은 ACF(Auto Correlation Function)를 통해 확인 할 수 있다
2. 안정성(Stationary)
AR 모델의 안정성은 계수 $\Phi_i$에 따라 결정된다
계수의 절대값이 1보다 작아야 안정적인 시계열 모델이 된다
3. 모델의 차수 결정
AR 모델의 차수 $p$를 결정하는 것이 매우 중요하다
차수가 너무 작으면 모델이 데이터를 출분히 잘 설명하지 못할 수 있다
차수가 너무 크면 Overfitting의 위험이 있다
AIC(Akaike Information Criterion) 또는 BIC(Bayesian Information Criterion) 같은 정보를
기준으로 사용해 죄적의 차수를 선택할 수 있다
4. 잔차 분석
모델의 잔차가 백색 잡음인지 확인하는 것이 중요하다
잔차가 백색잡음 이라면 모델이 데이터를 잘 설명했다고 볼 수 있다
그렇지 않으면 모델이 데이터를 충분히 설명하지 못한 것이다
장점
1. 간단한 구현과 해석
AR 모델은 상태적으로 간단한 모델이고 특히, 저차수 모델은 이해하기도 쉽고 해석도 명확하다
2. 적은 Parameter로 예측가능
AR 모델은 모델을 구성하는 파라미터가 상대적으로 적다
이로 인해 Overfitting 위험이 적고, 계산이 빠르면 효율적이다
3. 안정적(Stationary) 데이터에 적합
AR 모델은 데이터가 안정적(Stationary)일 때 효과적으로 작동한다
안정적이라는 것은 데이터의 평균과 분산이 시간에 따라 변하지 않으며, 자기 상관성이
시간이 지남에 따라 일정한 패턴을 따르는 것을 의미한다
한계
1. 비안정적 데이터에 대한 제한
데이터가 비안정적(Non - Stationary)인 경우 즉, 시간에 따라 평균이나 분산이 변하는 경우 적합하지 않다
이러한 경우 ARIMA 모델이나 차분(differencing)을 사용해 안정적으로 만든 후 사용
2. 비선형 데이터에 대한 한계
AR 모델은 선형 모델이기 때문에 데이터가 비선형 관계를 가질 경우 제대로 설명하지 못할 수 있다
3. 추가적인 외부 변수 처리의 어려움
AR 모델은 오직 과거 데이터만을 이용해 예측을 수행하므로, 외부 변수를 고려하지 않는다
외부 변수의 영향을 고려하려면 ARIMAX 또는 VAR 같은 다르 모델을 사용해야 한다
AR모델 예제 코드
## 예제 코드
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.ar_model import AutoReg
from sklearn.metrics import mean_squared_error
우선 필요한 라이브러리를 Import 한다
통계분석 라이브러리인 statsmodels에서 시계열 분석을 위한 tsa 모듈을 사용한다
# 예제 데이터 생성
data = np.random.randn(100).cumsum() + 100
# 데이터를 pandas Series로 변환
ts = pd.Series(data)
# 학습 데이터와 테스트 데이터로 분리
train, test = ts[:80], ts[80:]
임의로 100개의 시계열 데이터를 생성하고 8 : 2로 train dataset, test dataset으로 분리한다
# 자기회귀 모델 피팅
model = AutoReg(train, lags=20)
# model = ARIMA(train, order=(20, 0, 0))
model_fitted = model.fit()
# 예측
predictions = model_fitted.predict(start=len(train), end=len(train) + len(test)-1, dynamic=False)
AutoReg()를 통해 AR(p) 모델을 생성한다. lags=20을 주어 AR(20) 모델을 생성하였다
# 테스트 데이터와 예측 결과를 시각화
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('Auto Regressive Model')
plt.legend()
plt.show()
# 모델의 성능 평가
mse = mean_squared_error(test, predictions)
실제 데이터를 어느정도 따라가는 결과를 보여주기도 하는 반면, 아예 다른 방향으로 예측하는 경우도 발생하는 것을 볼 수 있다
이러한 현상을 해결하기 위한 방법으로는 아래의 방법들이 존재한다
- 차수의 조정 : 모델의 차수를 늘리거나 줄임으로써 예측의 정확도를 향상 시킬 수 있다
- 차수가 너무 낮으면 데이터의 중요한 패턴을 포착하지 못할 수 있고
- 차수가 너무 높으면 불필요한 노이즈를 모델에 포함시킬 위험이 있다
- 추가적인 특성 활용 : 기타 외부 변수나 시계열의 다른 특성을 모델에 포함
- 다른 시계열 모델과의 조합 : AR 모델 외에도 MA, ARMA, ARIMA 등 다른 시계열 모델과 결합하여 사용하면 더욱 정확한 예측 가능
- 실시간 데이터 업데이트 : 실시간 또는 가까운 과거 데이터를 사용하여 모델을 지속적으로 업데이트아면 에측의 지연을 줄일 수 있다
'ML > Time-Series Analysis' 카테고리의 다른 글
[ML][Time - Series Analysis] ARMA(Auto Regression Moving Average, 자기 회귀 이동 평균) 모델 (0) | 2024.08.25 |
---|---|
[ML][Time - Series Analysis] MA(Moving Aveage) 모델 (0) | 2024.08.25 |
[ML][Time Series Analysis] 시계열 분석 Introduce (0) | 2024.08.15 |