ARIMA와 SARIMA 수식
ARIMA 모델은 AR차수와 difference 그리고 MA차수 총 3개의 parameter 만 포함하는 반면,
SARIMA 모델은 AR차수, seasonal AR차수, difference, seasonal difference, MA차수, seasonal MA 차수, Seasonality 총 7개의 parameter를 포함하고 있습니다.
저의 가장 큰 고민은 SARIMA 모델을 사용할 때, 어떻게 parameter를 정하는지였습니다.
이에 대해 간단하게 알아보겠습니다.
먼저 계절 주기(S)를 구합니다.
간단하게 seasonal_decompose(df, period)..plot()을 사용해 계절성과 추세를 분리해서 살펴봅니다.
이 때 계절성이 없다면 굳이 SARIMA모델을 사용할 필요가 없을 것입니다.
만약 계절성이 있다고 나온다면, 그 계절주기를 찾아줘야합니다.
diff()로 추세를 제거한다음 plot_acf를 그려봐도 되지만, data - data.rolling(N).mean 을 사용해서 추세를 제거 할 수 있습니다. 이때 N은 충분히 크기만 하다면 어떤 수여도 됩니다. 그 다음 plot_acf를 그렸을 때 튀어나온 부분이 있다면, 그 부분이 나타내는 값이 계절주기입니다.
그 다음 AR, MA차수를 구하는 것은 이전과 동일하게 plot_acf, plot_pacf를 그려보면 됩니다.
Seasonal AR, MA 차수는 lag를 계절성의 배수로 해서 plot을 그려보면 명확하게 알 수 있습니다.
만약 S=12라면 lags=[12,24,36,48,60] 이렇게 그린 뒤 일반 MA, AR모델의 차수를 구하는 것과 동일하게 구해주시면 됩니다. 물론, 그래프를 보는 것 외에도, BIC를 확인해서 추후에 파라미터를 다시 조정할 수 있으니. 일단 초기값을 어떤 식으로 설정하면 되는지에 대한 것이라고 생각합니다.
difference는 만약, 추세를 제거했으면, d=1, 추세가 없으면 d = 0으로 두고, 계절성을 얼마나 처분했는지에 따라 D가 결정됩니다. 일반적으로 d는 0이나, 1정도가 사용되는 것 같습니다. (아닐 수도 있습니다..)
이 후 더 좋은 파라미터를 찾기 위해 보정을 해야 되는데 이 때는
pmdarima를 사용하면 손 쉽게 구할 수 있습니다.
pm.autoarima(data, seasonal , m , d , D, start_p, start_q, max_p, max_q, start_P, start_Q
trace, error_action=‘ignore’, stepwise =True ,trend , suppress_warnings = true)
이런식으로 위 식에 구하고자 하는 데이터 seasonal 이 있으면 True, 계절 주기인 m 과 처분인 d, D 를 고정해주시고, 어디서 부터 어느 범위 까지의 p,q,P,Q를 둘러볼것인지 설정을 해주면, 가장 적합한 파라미터를 반환해 줍니다.
* Stepwise는 모든 주문을 검색하지 않는 지능형 검색 방법입니다.
물론 이 함수를 쓰지 않고도 bic, aic로 표를 만들어 확인하는 것도 가능하지만 파라미터의 개수가 많이 늘었기 때문에 이 방법이 더 좋을 것 같습니다!
감사합니다!
'시계열분석' 카테고리의 다른 글
prophet (0) | 2021.11.14 |
---|---|
Fitting the ARMA model (0) | 2021.10.10 |
시계열분석 _ ARMA모델 개념정리 (0) | 2021.10.03 |
시계열분석 _ 자기상관과 ACF (0) | 2021.09.25 |
시계열분석 기초(1) (1) | 2021.09.24 |