본문 바로가기

시계열분석

ARIMA&SARIMA

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