Time Series 관련 정보

이지수·2023년 7월 31일
0

Demand Forecasting Task Process before Time Series Analysis

1. EDA(Exploration Data Analysis, 탐색적 데이터 분석)

  1. 데이터 정합성 확인

  2. 결측치 확인 및 처리(Mainly use interpolation)

    • Forward Fill : 누락된 값 이전의 값으로 채워넣는 것

    • Moving Average : Rolling Average 혹은 중앙값으로 데이터 대치

      • 무조건 산술평균일 필요는 없음. 아래와 같은 방법들도 사용 가능
      • exponentially weighted moving average : 최근 데이터에 더 많은 가중치
      • geometric mean : 일련의 데이터가 강한 상관관계 갖고 시간이 지나면서 복합적인 값을 가지는 시계열에 사용
    • Interpolation 보간법
      1) Linear Interploation 선형 보간법

      • 누락된 값을 대치할 떄 이미 알고있는 지식에 기반하여 선형적인 경향만 사용하게끔 제한

      • 데이터가 선형적인 모형으로 증가할 때 사용 가능

      • 강수량, 수면기록 이와 같은 데이터에서는 사용할 수 없음

        2) spline interpolation

사전관찰이 없는 Forward Fill과 Moving Average만이 사전관찰을 포함하지 않는 방법(사전관찰이 포함된 Moving Average 방법도 있음)

  1. 사용데이터 concat 및 column 정리

1-2. 업샘플링 & 다운샘플링

  1. 다운샘플링
    • 너무 frequently하게 데이터가 쌓일 때
    • 계절 주기의 특정 부분에 초점을 맞추고 싶을 때
    • 더 낮은 빈도의 데이터에 맞추는 경우

2. 상관관계 분석

  • feature간 상관관계 확인
  • 다른 분석을 위한 사전단계로 진행하는 것
  • 데이터 period 및 format 일치시키기
    • 시간대 통일
    • datetime, pytx, dateutil 라이브러리 사용
    • Pandas는 pytz나 dateutil 라이브러리 많이 사용
    • *비고 : 시간에 관련된 객체를 pickle로 저장하면 가끔 오류 발생
  • 필요하다면 feature 생성 (날짜에서 주말, 주중을 추출한다는 등의 task)
  • pearson, spearman, kendall Correlation

상관관계의 정도를 나타내는 상관계수(correlation coefficient)는 -1부터 1까지의 값을 가짐. 상관계수의 절대값의 크기는 직선 관계(선형 관계)에 가까운 정도이고, 부호는 직선 관계의 방향. 상관계수가 -1에 가까울수록 강한 음의 상관관계, 1에 가까울수록 강한 양의 상관관계라고. 상관계수가 0에 가까울수록 상관관계가 매우 약함을 뜻함.

3. 선형회귀 분석

  1. import statsmodels.api as sm 사용 : sm.OLS()

  2. p-value

    • 관측된 값이 통계값과 차이가 없거나 의미있는 차이가 없다는 H0(귀무가설)가 맞다는 가정하에, 통계값이 실제로 관측된 값 이상일 확률
    • 보통 0.05보다 작으면 기각
    • 기각되면 관측값이 통계값과 의미있는 차이가 있다는 것. 즉, 유의미하다.
  3. R2R^2(coefficient of determination, 결정계수, 설명력)

    • 회귀모형에서 설명변수가 반응변수를 설명하는 정도를 알려주는 지표
    • 0과 1사이의 값을 가짐
    • 1에 가까울 수록 설명변수가 반응변수를 많이 설명하는 것
  4. 설명변수들의 단위가 많이 차이나는 경우 변수 scaling 필요함

  5. 변수가 숫자가 아닐경우 df.get_dummies로 데이터를 수치화 & 관계성 배제화 시킴

  6. 4가지 특성을 보임
    1) 잔차의 독립성 : Durbin-Watson 검정으로 확인
    - 1.5 ~ 2.5: 잔차는 자기 상관을 갖지 않는다. (독립적)
    - 0.0 ~ 1.5: 잔차는 양의 자기 상관을 가진다.
    - 2.5 ~ 4.0: 잔차는 음의 자기 상관을 가진다.

    2) 잔차의 정규성 : Q-Q Plot | Shapiro-Wilk 검정으로 확인
    - QQ Plot
    : 잔차가 대각선 방향의 직선 모양인 경우 잔차가 정규분포 따른다는 의미
    : x축 : 데이터가 정규성을 따를 때 quantile 값
    : y축 : 실제 데이터의 quantile 값
    - Shapiro-Wilk
    : shapiro.test()
    : 잔차가 정규분포로부터 추출된 것인지 확인하는 방법
    : 잔차가 정규분포를 따른다는 HO(귀무가설)
    - Pearson Chi-Square Test(피어슨 카이 제곱 검정)
    - Anderson-Darling Test(앤더스 달링 검정)

    3) 잔차의 등분산성 : 산점도로 확인
    - 정상적인 잔차는 0을 기준으로 Y에 관계없이 특정한 패턴을 지니지 않음(특정한 패턴을 보이면 등분산성 만족 X)
    - 회귀모형을 통해 예측된 값은 모든 값들에 대하여 잔차의 분산이 동일하다는 의미

    4) 모형의 선형성 : 예측값과 잔차를 비교
    - 반응변수와 설명변수가 선형 관계를 가진다는 가정

  7. 진행 Process

    • _data: 설명변수 테이블, data: 상수항 포함된 설명변수 테이블, target_data: 예측 대상 테이블
    • sm.add_constant(_data, has_constant = '')
    • model = sm.OLS(target_data, data)
    • model_fit = model.fit()
    • model_fit.summary()
    • ols_pred = model_fit.fittedvalues 추정치
    • residual = model_fit.resid 잔차. 얘는 1) zscore 혹은 shapiro 로 정규성 갖는지. 2)등분산성 갖고 있는지 확인

4. 데이터 평활

  • 시계열 데이터의 무작위적 변화로 생기는 효과를 줄이는 기법
  • 측정의 오류, outlier를 제거하기위해 사용
  • 이동평균(Moving average)를 사용할 수 있지만 모든 시점의 데이터를 똑같이 취급하기 때문에 지수평활을 더 많이 사용함
  • exponential smoothing(지수평활)
    - 최근 데이터에 더 많은 가중치를 줘 시간의 특성을 더 잘 인식할 수 있는 방법
    - Pandas의 emwa() 함수를 사용함
    - pandas_data.emwa(alpha = ) 평활요인 alpha 값은 기존의 평균 정보를 유지하는 것에 비해 현재의 값을 얼마나 갱신해야 하는지에 대한 영향을 미침. alpha값이 클수록 값의 갱신은 현재값에 가깝도록 더 빨리 갱신됨
    - 그러나 장기적 추세의 데이터에서 단순 지수평활이 예측을 잘 수행하지 못함
    - 홀트의 방법 & 홀트 인터스의 평활 : 추세 혹은 추세 및 계절성을 가진 데이터에 적용가능한 지수평활 방법
  • Kalman Filter(칼만 필터 방법) : 변동성 및 측정 오차의 조합으로 시계열 과정을 모델링하여 데이터를 평활함
  • Loess(뢰스)
  • 칼만필터와 뢰스는 시간의 전후데이터를 모두 고려하여 과거로 정보가 유출될 수 있음

시계열 분석 초기에 사용될 가능성이 높은 시계열 탐색 그래프

  1. Rolling Window
  • 데이터를 압축(다운샘플링)하거나 평활화 할 때 사용하는 함수
  • 노이즈가 많은 데이터의 추세를 찾거나, 선형동작의 어떤 종류의 편차가 단순한 노이즈인지 확인할 수 있음
  1. Expanding Window 확장 윈도
  • Rolling window보다 사용성이 떨어짐
  • 시간에 따라 진화하거나 데이터가 크게 변동하기보다는 안정적인 요약 통계를 추정하는 경우에만 의미가 있음

-> deeper한 정보 검색이 필요로 됨

기타 설정

Local 한글 폰트 설정

import matplotlib as mpl
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm 

fontpath = '/Users/js8456/Library/Fonts/GowunDodum-Regular.ttf'
font = fm.FontProperties(fname = fontpath, size = 9)

plt.rc('font', family = 'GowunDodum-Regular')
# plt.rc('font', family='NanumBarunGothic') # LMS

mpl.font_manager._rebuild()

import warnings
warnings.filterwarnings('ignore')

Base 시계열 내용

시계열 자료

1. 구성 사항

  1. Trend
  2. Seasonality
  3. Outlier (Random | 불규칙)
  4. 계절 요인과는 무관한 장기 순환성(Long-run cycle or period)

2. Weak Stationarity(정상성) 가정 만족

  1. 평균이 모든 시점t에서 동일하다

    • E[Yt]=μE[Y_t] = \mu
    • 추세, 계절성, 순환성 등의 패턴이 보이지 않음
    • 평균이 일정하지 않은 것은 Trend나 Seasonality가 있는 데이터라는 의미 (-> 추세는 차분을 구하여 제거하는 것이 일반적 from Oreilly)
    • 평균이 일정하지 않을 때 차분(Difference)을 사용
    • 차분은 "현시점 데이터 - 전 시점 데이터"
    • 일반차분과 계절차분으로 나뉨
    • 일반차분은 바로 전 시점의 데이터를 빼는 것
    • 계절차분은 계절성 주기만큼 전의 자료를 빼는 것, 계절성을 갖는 데이터를 정상화할 때 사용
    • 그러나 차분을 너무 많이 사용하면(3회 이상) 차분을 통해 정상성 문제를 해결할 수 있는 가능성이 낮아짐 from Oreilly
  2. 분산이 모든 시점t에서 동일하다

    • Var[Yt]=σ2Var[Y_t] = \sigma^2
    • 자료변화의 폭이 일정함
    • y t,y thy~t, y~t-h간의 공분산이 모든 시점 t에서 동일
    • 시간에 따라 다른 자기상관적 패턴을 보이지 않음
    • 분산이 일정하지 않을 때 로그변환(Transformation) (혹은 제곱근 이용 from Oreilly)
  1. 자기공분산 또는 각 값들의 상관성(AutoCorrelation)이 시간이 아닌 시차에 의존해야함
    • Cov[Yt,Y(ts)]=γsCov[Y_t, Y_(t-s)] = \gamma_s (t가 아닌 s에 의존)
    • 즉, period를 정해놨을 시 그 기간마다의 평균과 분산은 일정하다 라는 것
    • 시차가 있는 그러나 같은 데이터 안에서의 공분산은 자기공분산(COV)이라 하며, 이를 각 시점의 표준편차의 곱으로 나눈것이 자기상관관계(Corr | ACF)

[TIP] 로그 및 제곱근 변환은 시간에 따른 분산을 줄이는데 사용됨

그러나 해당 작업은 가정사항이 존재함
1. 데이터가 언제나 positive하다는 것
2. 변환 전에 데이터의 이동을 결정했다면 그 결과로 편향이 추가되어도 상관없다는 것 (-> pg 124. 정확히 이해는 안감 from Oreilley)

또한 해당 작업은 큰 값과 다른 값들 사이의 차이를 축소시킴으로써 작은값들 간의 공간을 압축하지 않고 큰 값들 간의 공간을 효과적으로 압축하는 효과가 존재.
이 의미는 이상치 간의 차이를 줄여버린다는 것.
따라서 데이터에 따라 해당 조취가 적절할 수도, 적절하지 않을 수도 있음

3. 정상성(Stationary) 확인 | Augmented Dickey-Fuller Test(ADF)

  • 단위근의 존재유무를 확인하는 Unit Root(단위근) Test 중 하나
  • Unit Root는 non-stationary한 time series 특징임
  • ADF 테스트의 목적은 불안정 시계열에 존재하는 확률적 추세를 포착하는 것
  • 불안정 시계열은 안정시계열과 달리 확률적 추세를 갖고 있음
  • 시계열은 위와 같이 가정함 yt=μ+ρy(t1)+ϵty_t = \mu + \rho * y_(t-1) + \epsilon_t
  • 위 식에 ρ=1+δ\rho = 1 + \delta 대입하면 아래와 같이 됨
  • Δyt=μ+δy(t1)+ϵt\Delta y_t = \mu + \delta* y_(t-1) + \epsilon_t
  • 시계열이 단위근을 가지면 δ=0\delta = 0 이 됨. 이게 귀무가설
  • 시계열이 안정적이면 \delta <0 $이 대립가설로 되고 이 식을 MSE로 추정하고, $\delta = 0에 대한 t검정 통계량을 이용하여 귀무가설 기각 여부 확인
  • Unit Root가 존재한다는 것은 Y_t = \alpha Y_{t-1} + \beta X_e + \epsilon $ 에서 $\alpha = 1 이라는 것

  • YtY_t 는 t시점에서의 값, XeX_e는 외생변수

  • Unit Root의 수는 해당 시리즈를 stationary하게 만들 수 있는 차분의 수와 같음

  • Dickey-Fuller Test는 H0: α\alpha =1 이고, 알파는 Y의 첫번째 기간의 coefficient(계수)

  • H0: 위정상성이다, 즉 데이터에 자료근이 존재한다. H1: 정상성이다. 즉 데이터에 자료근이 존재하지 않는다.

  • 즉 p-value가 설정한 유의수준보다 낮으면 데이터 정상성이 존재한다는 의미

  • ADF는 DF에서 p lag의 차분을 더해놓아서 검정 능력을 더 높임

참고페이지
참고페이지2

[비고] 확률적 추세 & 확정적 추세
1. 확률적 추세
- yt=δy(t1)+ϵty_t = \delta * y_(t-1) + \epsilon_t
- δ\delta 가 1인 경우 단위근이 존재하는 것
- 단위근이 존재하면 분산이 점차 커져서 무한대가 됨
- t=0 인 현재 시점에서 y 값이 0이라 가정하면 y값은 오차항이 무한대로 커지는 계열이 됨
- y1=ϵ1y_1 = \epsilon_1
- y2=ϵ1+ϵ2y_2 = \epsilon_1 + \epsilon_2

  1. 확률적 추세에 확정적 추세가 포함된 혼합된 모형
    • yt=α+βt+δy(t1)+ϵty_t = \alpha + \beta * t + \delta * y_(t-1) + \epsilon_t

AIC, BIC, CpC_p

  • fit을 잘할수록 Likelihood는 커질수밖에 없어
  • 변수를 추가함에 따라 RSS는 감소 p 는 증가
  • AIC, BIC , CpC_p 의 결과가 다르게 나오는 경우는 거의 없다

데이터 정상화 방법

STL 분해 | 데이터 정상화 방법

  • STL(Seasonal and Trend decomposition using Loess)
  • X11, SEATS는 특히 monthly, quaterly에만 적용 가능하지만 얘는 모든 seasonality에 적용 가능
  • 비선형 데이터에 사용 가능
  • seasonal window & trend-cycle window 매개변수 조정 가능
  • 이상치가 trend-cycle & seasonality에 영향주지 않게 만들 수 있음
  • Additive Decomposition만 가능하기 때문에 Multiple Decomp하려면 로그를 취한 후 나중에 되돌림
  • statsmodels_참고페이지
  • outlier를 통해 Holiday Effect를 확인할 수 있음. outlier이기 때문에 interpolation으로 다른 값으로 대체한 뒤 모델링 할 수 있음.

[question]. 그런데 이렇게 되면 holiday effect의 변동성을 버리는 것 아닌가?

  • 이걸 처리를 하고 시계열 처리를 한 이후에 holiday에는 이정도 이상치가 있었지 하고 다시 계산하는건가?

정상성 말고도 정규성도 가정되어있음

  • 정상성이 실전에서 중요한 이유는 이미 전통적인 모델들이 정상성을 가정하에 진행하기 때문인데, 예측 모델은 입력변수 또는 예측된 변수의 분포에 대한 정규성(normality)도 가정함
  • 이럴 때는 다른 종류의 변환이 필요함
  • ex) Box-Cox transformation 박스 칵스 변환
  • scipy.stats 패키지에 구현되어 있음
  • 이는 비대칭 데이터를 정규적으로 만들어 줌
  • 무조건적으로 정규성 변환을 하는 것은 아니고, 원본 데이터 셋의 데이터 간 거리의 의미를 생각 한 후에 변환해야 함
  • 원본 데이터의 가장 중요한 정보가 변환 후에도 보존되는지 확인해야 함
    from Oreilly

시계열 분해 방법(Decomposition)

  1. Additive models(덧셈 분해, 가법 모형)
  • y t=S t+T t+R ty~t = S~t + T~t + R~t
  • Frequency와 Trend를 다른 것으로 인식함
  • 장기 분석에서 seasonal data 결과가 트렌드를 따라가지 못해서 사용에 적합하지 않음
  • 따라서 Seasonality나 Trend(&cycle)의 변동이 크지 않다면(Seasonal 패턴 크기가 데이터의 크기에 따라 달라지지 않는 경우) 해당 모델 사용
  1. Multiplicative Decomposition(곱셈 분해, )
  • y t=S tT tR ty~t = S~t * T~t * R~t
  • 데이터에 0이 존재하면 안됨. 있을 경우 분해하지 못함
  • 분해값들이 곱의 비율로 이뤄져있기 때문에 Trend에 맞게 Seasonal 데이터가 변화됨
  • Seasonality나 Trend(&cycle)변동이 시계열 수준에 비례하는 것(Seasonal 패턴 크기가 데이터의 크기에 따라 달라지는 경우)으로 나타날 때 사용
  • 곱셈분해를 사용하지만, 데이터가 Stationary해지기 이전까지 덧셈분해를 사용하기도 함
    : 데이터에 로그를 취해서 y t=S t+T t+R ty~t = S~t + T~t + R~tlogy t=logS t+logT t+logR tlogy~t = logS~t + logT~t + log R~t 의 형식으로 사용
  1. Moving Average Smoothing Method

  2. Exponential Smoothing Method

참고페이지1

참고페이지2

** 이거 EDA 부분에서 갖고 내려온건데 원래는 EDA에 있는게 맞는거 같아. 어찌보면 안정성 확인도 이전에 해야되는게 맞으니까

ACF (AutoCorrelation Function) 자기상관함수

  • 자기상관은 서로 다른 시점의 데이터간 선형적 연관성 정도
  • 다른 말로 하면, 동일한 데이터 셋 내에서 S라는 시차가 있는 XtX_tX(t+s)X_(t+s)가 얼마만큼의 상관관계를 갖고있는냐를 확인하기 위한 것

![이미지1](/Users/js8456/git_workplace/정리하기전 /Time_Series_Image/acf_1.png)

  • 시차가 0인 데이터(자기 자신)과의 상관계는 1, 시차가 1인 데이터와의 상관관계는 0.8, 2인 애와는 0.5 라는 의미
  • Residual(White noise 백색잡음)에 대한 0이 아닌 모든 시차에서의 자기 상관은 거의 0에 가까움
    • question. Residual과 white noise가 같다고 생각해서 Residual을 썼는데 이게 다를 수 있나? 어떤 게시글을 보았을 때 다르다고 설명한게 있던 것 같아서
    • 확인 필요
  • 0이 아닌 유효한 ACF 추정을 결정하는 통계적인 규칙은 +1.96sqrt(n)+-1.96 * sqrt(n)의 임계영역을 사용하는 것 (파란색 선)
  • 해당 규칙은 샘플 크기가 커야 하며 finite variance 조건 내에서 유효함
  • 정상데이터의 ACF는 0으로 빠르게 떨어져야 함
  • 비정상데이터일 경우 시차가 1일 때 ACF는 높은 값을 가짐
  • ACF는 XtX_tX(t+s)X_(t+s)간의 비교더라도, 그 중간값들과의 상관관계를 포함함 (PACF와의 차이점) -> question. Oreilly 133p에 이것과는 다른 정보가 기재되어있음. 확인필요
  • 노이즈가 없지만 계절성이 있는 데이터에서 특정시점 T에 대한 ACF값은 T, 2T, 3T... 에서 동일하게 나타남 -> question. Oreilly에서 오역이 있는거 같긴한데 이 말이 맞는거 같긴해
  • 이와 같이 ACF는 불필요한 중복관계를 제거하지 못함

PACF(Partial Autocorrelation Function) 편자기상관함수

  • XtX_tX(t+s)X_(t+s)간의 비교면 그 중간값들과의 상관관계는 다 제외하고 그 둘의 관계만 확인
  • 특정 시차에 대하여 정말로 유용한 정보인지를 밝혀냄
  • 임계영역은 +1.96sqrt(n)+-1.96 * sqrt(n) 으로 ACF와 동일함

ARIMA

ARIMA 내용

  • Auto-Regressive Integrated Moving Average의 약어
  • from statsmodels.tsa.arima_model import ARIMA, import pmdarima as pm
  • AR, MA, Differencing
  • 과거 데이터와 과거 예측오차를 통해 현재 데이터를 설명하는 모형
  • 시계열 데이터가 Stationary Series여야 함
  • p, d, q를 결정하는 절차는 Box-Jenkins Method를 따름
    • 모델확인, 파라미터 예측, 예측모델이 문제를 해결하는데 적합한지 확인
    • 적합하지 않으면 모델확인으로 Back
    • 적합하면 forecast를 위한 final model로 결정
  • ACF(자기상관함수)로 시계열의 특성을 파악
  • ACF는 자기공분산 함수를 scaling한 형태
  • AR은 시계열의 현재값 y ty~t를 p개 과거값들의 선형결합으로 예측을 수행
  • MA는 시계열 y ty~t를 현시점의 오차와 q개의 과거 오차들의 선형결합으로 예측을 수행
  • ARMA(p,q)모델은 AR(p)모형과 MA(q)모형을 결합. 시계열 y ty~t를 p개 과거값들과 현시점 오차, q개 과거 오차들의 선형결합으로 예측을 수행
  • ARIMA(p,d,q)모델은 원시계열 y ty~t의 d차 차분계열에 대해 ARMA(p,q) 모형을 적합한 것. 즉, 비정상성을 가지는 원시계열에 대해 적용할 수 있는 모형.
모델ACFPACF
AR(p)지수적으로(or 순환하며) 감소처음 p개의 값이 유의미하게 나타남
MA(q)처음 q개의 값이 유의미하게 나타남지수적으로(or 순환하며) 감소
ARMA(p,q)시차(q-p 이후에)지수적으로(or 순환하며) 감소시차(q-p 이후에) 지수적으로(or 순환하며) 감소
ARMA(p,q)(비고) p나 q 모두 2 이하에서 식별
  • ARIMA(p, q)도 주기에 비례하는 시차에서 ACF와 PACF값의 패턴을 보고 차수를 결정하면 됨
  • 그러나 ACF, PACF의 그림을 보고 차수를 결정하는 것은 분석자의 주관이 도입되기 때문에 AIC, Consistent AIC, BIC와 같은 모형을 이용한 경험적 선택이 필요한 경우가 많음
  • 즉, auto.arima 사용

모델진단

  • 적합된 모델로부터 얻어진 적합값과 실제값의 차이인 잔차(Resid)가 무상관인지 검토
  • 검토방법중 하나는, 추정된 모델로부터 얻어진 잔차의 ACF를 보고 잔차간 자기상관이 있는지 확인하는 것. 적합하게 식별된 ARIMA 모형의 잔차의 ACF는 모두 통계적으로 0인 자기상관계수 가질 것.
  • 혹은 모든시점에서 ACF가 0인지 검정(H0이 모든시점 ACF=0)하는 Portmanteau test(포트맨토 검정)을 이용하거나, 잔차의 ACF가 유의하게 0과 다른지 검정하는 T-test(H0이 ACF=0)을 사용
  • 잔차가 자기 상관관계가 있으면 무상관인 확률변수의 짒합(백색 잡음)이 아니므로 이에 부합하는 잔차를 가진 다른 모형을 찾아야 함.
  • 즉, ACF와 PACF를 다시 찾아야 한다는 것
  • ACF가 점진적으로 감소하면 불안정시계열이라는 의미

참고페이지_1

실제 데이터 처리 진행방식

데이터 전처리

STL 분해 | 데이터 정상화 방법

  • STL(Seasonal and Trend decomposition using Loess)
  • X11, SEATS는 특히 monthly, quaterly에만 적용 가능하지만 얘는 모든 seasonality에 적용 가능
  • 비선형 데이터에 사용 가능
  • seasonal window & trend-cycle window 매개변수 조정 가능
  • 이상치가 trend-cycpe & seasonality에 영향주지 않게 만들 수 있음
  • Additive Decomposition만 가능하기 때문에 Multiple Decomp하려면 로그를 취한 후 나중에 되돌림
  • statsmodels_참고페이지
  • outlier를 통해 Holiday Effect를 확인할 수 있음. outlier이기 때문에 interpolation으로 다른 값으로 대체한 뒤 모델링 할 수 있음.

[question]. 그런데 이렇게 되면 holiday effect의 변동성을 버리는 것 아닌가?

  • 이걸 처리를 하고 시계열 처리를 한 이후에 holiday에는 이정도 이상치가 있었지 하고 다시 계산하는건가?

ADF Test | Stationary 여부 확인

  • Augmented Dickey Fuller Test
  • Unit Root Test 중 하나
  • Unit Root는 non-stationary한 time series 특징임
  • Unit Root가 존재한다는 것은 Y_t = \alpha Y_{t-1} + \beta X_e + \epsilon $ 에서 $\alpha = 1 이라는 것
  • YtY_t 는 t시점에서의 값, XeX_e는 외생변수
  • 즉, Unit Root가 존재한다는 것은 non-stationary하다는 것
  • Unit Root의 수는 해당 시리즈를 stationary하게 만들 수 있는 차분의 수와 같음
  • Dickey-Fuller Test는 H0: α\alpha =1 이고, 알파는 Y의 첫번째 기간의 coefficient(계수)
  • H0: 위정상성이다, 즉 데이터에 자료근이 존재한다. H1: 정상성이다. 즉 데이터에 자료근이 존재하지 않는다.
  • 즉 p-value가 설정한 유의수준보다 낮으면 데이터 정상성이 존재한다는 의미
  • ADF는 DF에서 p lag의 차분을 더해놓아서 검정 능력을 더 높임

AIC, BIC, CpC_p

  • fit을 잘할수록 Likelihood는 커질수밖에 없어
  • 변수를 추가함에 따라 RSS는 감소 p 는 증가
  • AIC, BIC , CpC_p 의 결과가 다르게 나오는 경우는 거의 없다

SARIMA

아래와 같은 궁금증으로 인해 ARIMA(p,d,q)와 Seaonality(p,d,q,S)는 auto_arima 함수와 자체제작 함수 두가지 방법으로 우선 진행하고자 함

1. SARIMAX에서의 ARIMA, Seasonality parameter 7개는 SARIMA에서 선택된 동일한 param을 사용하는 것이 효율적인가
    - 아, SARIMA는 외생변수가 없이 Seasonality와 ARIMA모델을 섞은것이지. 그렇기 때문에 차분한 데이터를 이용했고. 그런데 SARIMAX의 데이터는 차분하지 않은 그냥 일반 데이터를 사용하기 때문에 아예 불가능한거구나. 
2. 혹은 외부변수가 새롭게 추가되었기 때문에 SARIMAX 내에서 따로 Grid Search를 진행한 후 새로운 param을 사용해야 할 것인가 
# 우선 SARIMA모델의 auto_arima를 이용하여 최적의 param을 찾고자 함 
model_auto_arima = pm.auto_arima(_x_data_train, start_p = 0, start_q = 0, max_p = 5, max_q = 5, seasonal = True, start_P = 0, start_Q = 0, max_P = 5, max_Q = 5, D = None, max_D = 2, m = 7)


model_auto_arima.summary()

0개의 댓글