본 포스팅은 DMQA 김성범 교수님의 ARIMA 모델-Part 2과 '실전 시계열 분석'의 6장 시계열의 통계 모델, POSTECH 전치혁 교수님의 Week 4. 비정상적 시계열을 바탕으로 작성되었습니다.
시계열 분석 스터디 3주차에서는 ARIMA에 대한 스터디를 진행하였습니다.
특히, 비정상성 교정 / ARIMA 모형 / SARIMA 모형 에 대하여 학습했습니다.
S&P 500 Stock Price 데이터를 이용한 모델 구현은 https://github.com/loiswoo/Time-Series/blob/main/TS_study_w3.ipyn에서 확인 가능합니다.
ARMA 모델에서 추세를 제거하고 시계열을 정상화하는 차분까지 고려하는 모델이다.
ARIMA는 정상성을 만족하는 데이터를 위하여 Differencing을 진행한다.
ARIMA 모델은 (p, d, q) parameter로 구성된다.
AR(p): independent variable의 개수
I(d): differencing을 횟수
MA(q): 파라미터의 개수
<ARIMA 유의점>
• 차분의 차수가 너무 크지 않아야 한다.
• ARIMA의 parameter 값은 부적절한 복잡성과 샘플 데이터에 대한 과적합을 피하기 위해 가능한 작게 유지되어야 한다.
• p > 5, d > 2, q > 5인 경우는 회의적인 자세를 취하는 것이 좋다
• p나 q 항 중 하나만 크게 설정하고, 나머지는 상대적으로 작은 값을 설정하는 것이 좋다
<ARIMA 모델의 일부>
• ARIMA(0,0,0)은 백색잡음 모델
• ARIMA(0,1,0)은 확률보행
• ARIMA(0,1,1)은 지수평활모델
• ARIMA(0,2,2)은 지수평활을 추세로 가진 데이터로 확장시킨 Holt's linear method
차분(Differencing): nonstationary한 데이터를 stationary하게 바꿔주는 것
현 시점 데이터에서 d시점 이전 데이터를 뺀 것
1차 차분: t차원의 데이터와 t-1차원의 데이터
→차분을 통해 stationary한 데이터가 생길 수 있다
- constant average trend가 있다면 1차 차분으로 충분하다
- time varying trend가 있다면 2차 차분을 진행한다
대부분의 데이터는 2차 차분으로 충분하다
만약 3차 차분을 해야한다면, ARIMA 모델 자체가 적절하지 않은 것이다.
<ARIMA 모델의 Parameter 추정하는 방법>
1. 수동적으로 모델을 적합시키는 방법 - Box-Jenkins ARIMA Procedure
1. Data Preprocessing(transformation, differencing)
Nonstationary한 데이터는 ACF 그래프에서 천천히 감소하는 형태를 보인다.
따라서 Differencing을 통해 stationary하게 바꿔줄 수 있다.
Stationary하다면, ACF 그래프에서 lag2에서 확 떨어지거나, 일정한 패턴이 보이지 않을 것이다.
2. Identify Model to be Tentatibely Entertained
Graphical Method를 사용한다.
Model | ACF | Partial ACF |
MA(q) | Cut off after lag q | Die out(지수적으로 감소, 소멸하는 sine함수 형태) |
AR(p) | Die out(지수적으로 감소, 소멸하는 sine함수 형태) | Cut off after lag p(p시차 이후 0으로 절단) |
ARMA(p,q) | Die out(시차 q-p이후부터 소멸) | Die out(시차 q-p이후부터 소멸) |
3. Estimate Parameters
ARIMA(p,d,q)에서 parameter를 추정하는 과정이다.
보통 d =1 또는 2 중에서 결정이 된다.
그리고 p: 1~20, q: 1~20 으로 설정한 다음에, for loop을 돌려보아
AIC나 Testing Accuracy가 가장 좋은 때로 설정하면 된다.
4. Diagnosis Check (2번으로 돌아갈 수 있음)
Model should be checked for adequacy.
1) 잔차를 구하고 2) 잔차들의 ACF plot를 확인해야한다.
→ 40개 중에서 2~3개 정도만 bound 밖으로 벗어나야한다.
ACF(residual) 그래프를 그려서 잔차(오차항)들 간의 자체상관 패턴이 보이면 안된다. 만약 어떤 패턴이 드러난다면, 잔차의 자체상관을 다룰 수 있도록 모델에 추가로 항을 포함해 복잡성을 늘리는 것을 고려해야한다.
모델의 예측과 실젯값 사이의 상관관계를 분석하여 모델을 빠르게 비교/선택할 수 있다. 예측값과 실젯값 사이의 상관계수가 상당히 커졌다면 이는 모델의 성능이 우수하다는 것을 의미한다. 그러나 상관계수가 이전모델과 비교했을 때 비슷한 수치라면 굳이 더 복잡한 모델을 선택할 필요가 없다.
5. Use Model to Predict
2. 자동으로 모델을 적합시키는 방법 - forecast 패키지의 auto.arima()
auto.arima()는 grid search를 통한 AIC 최소화 작업을 진행한다.
Seasonal ARIMA 모델은 기존 ARIMA 모델에 계절 변동을 반영한 모델이다.
- SARIMA 모형은 각 계절에 따른 독립적인 ARIMA 모델이 합쳐져 있는 모형이다.
- SARIMA 모형은 multiplicative 계절성을 가정한다.
- 기존 ARIMA(p,d,q) 모형에 계절성 주기를 나타내는 차수 s가 추가적으로 필요하기 때문에
ARIMA(p,d,q)(P,D,Q)s로 표기한다 - 소문자는 비계절 요인, 대문자는 계절 요인
- s의 중요한 점은 모델이 시간상 인접한 데이터가 동일한 계절 또는 서로 다른 계절에 있어도 시간적으로 근접한 일반적인 방법으로 서로의영향을 인식한다는 점이다.
- s의 값은 월별 계절성을 나타낼 때는 s = 12가 되고, 분기별 계절성을 나타낼 때는 s=4가 된다
시계열의 비정상성: 시계열에 추세 또는 계절성이 포함되는 경우
<판단 방법>
1) 시계열의 시간에 대한 그래프를 보고 시각적으로 판단
2) ACF가 시차에 대하여 서서치 감소하는 패턴
3) 단위근 설정(기각하면 단위근이 없는것으로 정상적인 것)
<대응 방법>
1) 차분을 통한 정상적 시계열로 변환
- 1차 차분: t시점과 (t-1)시점의 차이를 산출
→ 정상적인 시계열을 보인다면, 1차 차분으로 끝. 그렇지 않다면 2차 차분 과정.
2) 함수변환을 통하여 분산 안정화
3) 분해법으로 추세 및 계절성 제거
-차수 d 누적 시계열: d차 차분 후 시계열이 처음으로 정상적일 때, 원 시계열을 차수 d 누적시계열이라고 하고 I(d)로 표기
일반적 시계열에서는 추세와 계절성이 동시에 존재하는 경우가 많다.
추세는 차분으로 제거될 수 있으나 계절성은 여전히 남을 수 있다.
ARIMA모형은 비계절성에 대한 것이며 계절성은 별도로 처리해야한다
일반적 시계열은 비계절성 ARIMA 모형과 계절성 ARIMA 모형이 복합된 형태이다.
계절성 차분(seasonal differencing)
-계절성 주기 s(월별: s=12, 분기: s = 4)
-계절성이 있는 경우 단순 (비계절성) 차분으로는 정상화가 되지 않음
-1차 계절성 차분: 인근한 두 계절 값의 차이를 산출
1. 시계열도를 그려보고 추세 및 계절성 존재 여부 판단
2. 적절한 차분 실시
-추세는 없고 계절성이 있는 경우: 해당 주기에 계절성 차분
-추세가 있고 뚜렷한 계절성이 없는 경우: 선형추세가 있는 경우 1차 차분, 곡선형태의 추세가 있는 경우 차분 전에 함수 변환 시도
-추세와 계절성이 있는 경우: 우선 계절성 차분을 실시하고 추세를 다시 검토. 추세가 여전히 남아있는 경우 1차 차분 추가 실시
3. 차분 시계열에 대한 ACF와 PACF를 바탕으로 p,q,P,Q를 결정
-비계절성 계수인 p,q는 ARMA 모형의 경우와 동일한 요령으로 결정
-계절성 계수인 P,Q는 주기의 배수에서 나타나는 ACF와 PACF의 패턴을 보고 결정
4. 모형 파라미터 추정
5. 잔차 검정 실시
단위근 검정은 통계적 검정을 통하여 시계열의 정상성 여부를 판정
-대표적인 단위근 검정은 ADF 검정
-Dickey and Fuller가 AR(1)모형에 대해 제안
-모든 정상적 시계열은 고차원의 AR모형으로 근사될 수 있다고 가정.
DACON의 삼성전자 주가 예측 게시물을 참고하여 정리하였습니다.
https://dacon.io/en/codeshare/2570
[Python] 삼성전자 주가 예측 입니다
dacon.io
AR: 자기 자신의 과거를 정보로 사용하는 개념 / '현재의 상태는 이전의 상태를 참고해서 계산된다'
MA: '이번 항에서의 오차를 이용하여 현재 항의 상태를 추론하자'
ARIMA: 추세 변동의 경향성까지 반영한 방법
ARIMA의 클래스 order = (2,1,2)
p: "AR이 몇번째 과거까지를 바라보는지에 대한 파라미터'
d: 차분에 대한 파라미터 (차분: 현재 상태의 변수에서 바로 전 상태의 변수를 빼주는 것, 시계열의 불규칙성을 보정해주는 역할)
q: MA가 몇번째 과거까지를 바라보는지에 대한 파라미터
<ARIMA 파라미터 가이드라인>
1. p와 q의 합이 2 미만인 경우
2. p와 q의 곱이 짝수인 경우 (0도 포함)
불규칙적 시계열 예측의 경우에는 먼 미래를 예측하는 것의 큰 의미가 없기 때문에 '앞으로 N일동안 어느 정도로 상승/하락할 것이다' 정도의 대략적인 경향 예측만을 수행하는 것이 일반적
모델의 평가 과정
- model_fit.forecast(steps=5)로 향후 5일의 가격을 예측하여 pred_y로 정의한다
-bitcoin_df.iloc[361:]로 해주어 bitcoin_df의 마지막 5일을 test_y로 정의한다
-모델의 예측한 상한값, 하한값을 pred_y_uppper, pred_y_lower로 정의한다
-정의한 모든 값을 비교하여 5일동안의 상승 경향 예측이 얼마나 맞는지 평가해본다
MODEL 2: Facebook Prophet
Prophet: Additive 모델이라는 모델링 방법에 기반한 시계열 예측 모델, 시계열 데이터의 트렌드성(연간/월간/일간)을 예측하는 것에 초점에 맞추어져 있다
+) Additive 모델: 선형회귀 분석의 단점을 극복하기 위해 개량된 분석 방법 -> 각 피쳐마다 비선형적인 적합을 가능하게 하는 일련의 방법
fbprophet 라이브러리 - 데이터 프레임의 피쳐를 'ds'와 'y'로 변경 / Prophet 클래스 선언 / fit()함수로 모델 학습
파라미터
1) seasonality_mode: 연간, 월간, 주간, 일간 등의 트렌드성을 반영하는 것을 의미 -> 각 순서에 따른 트렌드 확인 가능
2) changepoint_prior_scale: 트렌드가 변경되는 문맥을 반영하는 파라미터. 수치가 높을수록 모델은 과적합에 가까워짐
모델의 성능을 높이는 방법
1) 상한값 혹은 하한값을 지정해주는 것
바닥과 천장이 없는 주가 데이터의 경우 의미가 없을 수 있지만 시계열 데이터에서는 상한값 혹은 하한값을 설정해주는 것이 모델의 성능을 높여줄 수 있는 방법 중 하나이다.
ex) Prophet 모델 : future_data['cap'] = 96000 으로 상한선 설정 / 모델 안에 파라미터 growth = 'logistic' 설정
2) 이상치 제거
이상치를 설정해준 후, 이상치에 해당하는 데이터 = None으로 설정
시계열 스터디 4주차(김태영) : VAR / ARCH / GARCH (0) | 2023.03.30 |
---|---|
시계열 분석 스터디 3주차(김희준) ARIMA, SARIMA (0) | 2023.03.23 |
시계열 분석 스터디 2주차(우명진) - 전통 시계열 (0) | 2023.03.23 |
시계열 스터디 3주차(신윤): 비정상성 판단, ARIMA, SARIMA, VAR (0) | 2023.03.23 |
시계열 스터디 3주차(조성윤): 비정상성, ARIMA, SARIMA (0) | 2023.03.23 |
댓글 영역