다운로드
작성자: admin 작성일시: 2017-07-28 15:54:58 조회수: 2844 다운로드: 332
카테고리: 시계열 분석 태그목록:

Seasonal ARIMA 모형 추정

SARIMAX 클래스 이용하면 Multiplicated SARIMA(p,d,q)x(P,D,Q,s) 모형에 대한 추정 및 예측이 가능하다. 클래스 인스턴스를 생성하기 위해서는 order 인수에 (p,d,q) 튜플을, seasonal_order 인수에 (P,D,Q,s) 튜플을 넣는다. SARIMAXfit 메서드는 모수를 추정하여 그 결과를 SARIMAXResult 클래스 인스턴스로 반환한다.

In [1]:
def yearfraction2datetime(yearfraction, startyear=0):
    import datetime
    import dateutil
    year = int(yearfraction) + startyear
    month = int(round(12 * (yearfraction - year)))
    delta = dateutil.relativedelta.relativedelta(months=month)
    date = datetime.datetime(year, 1, 1) + delta
    return date

호흡기질환 사망자 수

In [2]:
data = sm.datasets.get_rdataset("deaths", "MASS")
df = data.data
df["datetime"] = df.time.map(yearfraction2datetime)
df["month"] = df.datetime.dt.month
df["y"] = np.log(df.value)
df.tail()
Out:
time value datetime month y
67 1979.583333 1354 1979-08-01 8 7.210818
68 1979.666667 1333 1979-09-01 9 7.195187
69 1979.750000 1492 1979-10-01 10 7.307873
70 1979.833333 1781 1979-11-01 11 7.484930
71 1979.916667 1915 1979-12-01 12 7.557473
In [3]:
df.plot(x="datetime", y="y")
plt.show()
In [4]:
sm.tsa.graphics.plot_acf(df.y)
plt.show()
In [5]:
m = sm.tsa.SARIMAX(df.y, order=(1, 0, 0), seasonal_order=(1, 1, 1, 12))
r = m.fit()
print(r.summary())
                                 Statespace Model Results                                 
==========================================================================================
Dep. Variable:                                  y   No. Observations:                   72
Model:             SARIMAX(1, 0, 0)x(1, 1, 1, 12)   Log Likelihood                  44.547
Date:                            Mon, 12 Nov 2018   AIC                            -81.094
Time:                                    22:16:09   BIC                            -72.716
Sample:                                         0   HQIC                           -77.817
                                             - 72                                         
Covariance Type:                              opg                                         
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
ar.L1          0.4127      0.172      2.393      0.017       0.075       0.751
ar.S.L12      -0.3393      0.252     -1.348      0.178      -0.833       0.154
ma.S.L12      -0.4780      0.313     -1.529      0.126      -1.091       0.135
sigma2         0.0115      0.002      6.110      0.000       0.008       0.015
===================================================================================
Ljung-Box (Q):                       31.13   Jarque-Bera (JB):                43.74
Prob(Q):                              0.84   Prob(JB):                         0.00
Heteroskedasticity (H):               0.55   Skew:                             0.57
Prob(H) (two-sided):                  0.19   Kurtosis:                         7.02
===================================================================================

Warnings:
[1] Covariance matrix calculated using the outer product of gradients (complex-step).

잔차의 정규성과 자기상관계수 함수는 SARIMAXResult 클래스의 plot_diagnostics 메서드로 살펴볼 수 있다.

In [6]:
r.plot_diagnostics()
plt.tight_layout()
plt.show()
In [7]:
np.random.seed(0)
for i in range(6):
    plt.plot(r.simulate(len(df.y), initial_state=r.filtered_state[:, -1]))
plt.plot(df.y, lw=3, alpha=0.5)
plt.show()