楽しんで学習するITエンジニアの備忘録ブログ

~日常生活の中にも楽しみを見出したい~

【第3弾】SARIMAで時系列分析に挑戦【差分を取った系列で再度ADF検定へ】

昨日と同様、SARIMAを利用して、時系列データ分析に挑戦中である。

 

今回は、差分を取った系列に対して、ADF検定を実行して、

 

時系列データが単位根を持つかどうかの帰無仮説を棄却したい。

 

さあ、今日も一歩でも前進していきたい。

 

■時系列データは、月別の牛乳生産量

 

1962年1月から1975年12月までの約14年間で、レコード数は168行。

データは前回と同じです。

 

f:id:takanarukodou2:20210706182147p:plain

          図1.月別牛乳生産量の推移(1カ月単位)
 

■再び、ADF検定へ

 時系列データが単位根を持つかどうかの仮説検定を指す。

 今回は、差分を取った系列に対して、ADF検定を実行することとする。

 「df_diff = df.diff().diff(12)」

 結果を抜粋すると、「1963-02-01 "-6.0"」となっているが、

 プログラムが存在するがこれはどのような計算になっているかを

 究明していきたい。究明するというと大げさだけど。。。

 

■「df.diff()」の調査

 まずは、「df.diff()」のみを見てみたい。 

 結果、「1963-01-01 Nan」、「1963-02-01 "-28.0"」となっている。

 ちなみに、1963-01-01の生産量は【589】、1963-02-01の生産量は【561】である。

 つまり、"-28.0"は、「1963-02-01の生産量」から「1963-01-01の生産量」

 を引いたものであることが分かる。

 ※こんな簡単なところを述べているブログは決してないと思われる

 このことから、「df.diff()」は、1か月分(1個分)ずらして差分を取ったもの

 だということが分かった。

 

■「df_diff = df.diff().diff(12)」の調査

 これは、「1か月分(1個分)ずらして差分を取った系列」を利用している。

 (12)はおそらく、12か月分(12個分)ずらすという意味だと解釈した。

 もう一度結果を見てみると、「1963-02-01 "-6.0"」だったので、

 "-6.0"は、「1963-02-01の生産量」から「1963-01-01の生産量」を引いたもの

 であることが分かった。やったぜ!

 >1962-02-01 -28.0
 >1962-03-01 79.0
 >・・・
 >1963-01-01 18.0
 >1963-02-01 -34.0
 

 もう一度、ADF検定をした結果、下記の通りとなった。

 >Test Statistic -5.038002
 >p-value 0.000019
 >#Lags Used 11.000000
 >Number of Observations Used 143.000000
 >Critical Value (1%) -3.476927
 >Critical Value (5%) -2.881973
 >Critical Value (10%) -2.577665

 

  p値が0.019%であり、閾値(5%または1%)より低い値のため、

 帰無仮説は棄却され、時系列は定常的と言える。やったぜ!!

 

 ※実行結果の出力は、Test StatisticとCritical Valueを比較して結果を確認する。

 ※Test Statistic(-5.04)は、Critical Value(1%)「-3.48」を下回っている。

 ※そのため、「非定常である」という帰無仮説を棄却できたと言える。

 

■「df_diff = df.diff().diff(12)」の疑問点

 なぜ、差分を取って、さらに差分を取るのだろうか?

 

 >「df.diff()」は、1か月分(1個分)ずらして差分を取ったもの

  ※1個前の値との差を取った後の系列を階差系列と呼ぶ。

  ※階差系列はトレンドを取り除いた状態にある。

  ※SARIMAは、ARIMAモデルをさらに季節周期を持つ時系列データ

   に対しても拡張が可能なモデル。

  【SARIMAで時系列データの分析】コンビニの売上を予測してみた! | と〜げのブログ (toge510.com)

 

 ちなみに、 p値が3.00%であり、閾値(5%)より低い値のため、

 帰無仮説は棄却され、時系列は定常的と言えると判断。

 >Test Statistic -3.054996
 >p-value 0.030068
 >#Lags Used 14.000000
 >Number of Observations Used 152.000000
 >Critical Value (1%) -3.474121
 >Critical Value (5%) -2.880750
 >Critical Value (10%) -2.577013

 

■次回

 SARIMAのモデル構築に入っていく。