jiku log

JTCのデータサイエンス中間管理職の学び

「Pythonではじめる時系列分析入門」を読む ~第1部 時系列分析の基本~

はじめに

製造業におけるデータ分析において,時系列分析は重要かつ頻出課題の1つである。たとえば,センサデータを用いた異常診断・劣化予測や,在庫データを用いた需要予測などが挙げられる。

時系列分析には,時系列データ特有の問題点や分析手法があるが,これまで本格的に取り組んできたことが無かった。
理論とPythonによる実装の両方の話題に触れており,かつ最近注目を集めている馬場真哉 著 「Pythonではじめる時系列分析入門」を読むことにした。


本記事は,第1部「時系列分析の基本 」の読書メモである。

  • 本書の紹介ページ

www.kspub.co.jp

  • 本書のサポートページ

logics-of-blue.com

第1章 時系列分析をはじめよう

本章では,時系列データの基本事項について説明している。基本的な性質を説明するうえで,「時系列でないデータ」との比較を行なっている。

時系列データの特徴として,初等的な統計学の入門書で出てくる「独立で同一な確率分布(Independent and Identically Distributed; i.i.d)に従う確率変数」ではないことが挙げられる。
i.i.dは,単一の母集団から単純ランダムサンプリングをモデル化したものと言えるが,時系列データの場合,ある時点のサンプルは単純ランダムサンプリングから抽出されたとはみなせないためである。

したがって時系列データは,「母集団からの単純ランダムサンプリングから得られたデータ」ではなく,「時間に従って変化する確率分布(データ生成過程または確率過程)に従う確率変数の実現値として得られたデータ」と捉えることが重要になる。

第2章 時系列データの構造

時系列解析を行なううえで,時系列モデルを作ることになるが,本章ではその構造,すなわち時系列モデルを構成する構成要素について説明している。

時系列モデルの構成要素として,代表的なものは以下の通りである。

  • 自己相関
  • トレンド
  • 季節性
  • 外因性
  • ノイズ

自己相関

自己相関は,相関係数を「過去の自分」と「現在の自分」の関係に当てはめたものである。
「昨日と今日」のように1時点前との関係を「1次の自己相関」, k時点前との関係を「 k次の自己相関」のように表現する。

偏自己相関

1次の自己相関がある場合,たとえば「今日と昨日」の自己相関と,「昨日と一昨日」の自己相関が存在数溜め,「今日と一昨日の自己相関」が発生することになる。
一方で,純粋に2時点前の自己相関(2次の自己相関)を調べたいときは,1次の自己相関の影響を排除した「偏自己相関」を用いる。

コレログラム

k次の自己相関を,次数を変えながら計算し,横軸に次数,縦軸に自己相関係数の値をとったグラフをコレログラムと呼ぶ。

トレンド

「増加している」といった時系列データの傾向のことをトレンドと呼ぶ。

季節性

季節性あるいは周期性とは,季節的・周期的に変化する性質を指す。
他書においては,1年単位の周期性を「季節性」と表現することがあるが,本書では周期一定であることを「季節性」と表現する。
なお,季節性は長期の自己相関で表現できることもあるが,一般論として季節性は個別にモデル導入したほうが解釈はしやすい。

外因性

安売りセールの実施など,外部の要因から影響を受ける性質を外因性と呼ぶ。

ノイズ

自己相関・トレンド・季節性・外因性などの要因では説明できない,またはどうしても残ってしまう変動のことを「ノイズ」や「誤差項」と呼ぶ。

第3章 データ生成過程の基本

本章ではデータ生成過程(時間的に変化する確率分布)が説明されている。

時系列の困難さとデータ生成過程の必要性

標本がi.i.dに従うのであれば,標本平均を期待値の推定量として利用することが出来る。一方で時系列データの場合,繰り返しが発生しないので,このようなことが出来ない。

一方で,期待値 \mu_tの推定くらいは簡単にできるようになりたい,という要望に応えるために,「期待値や自己相関の推定くらいは簡単にできるデータ生成過程」を考える。
なおこのような性質を「定常性」と呼ぶ。

定常性を仮定したときの推定

定常性を仮定すると,下式で定義される標本平均・標本自己共分散・標本自己相関係数を推定量として利用できる。


 \begin{align}
\hat{\mu} &= \frac{1}{T} \sum_{t=1}^{T}y_t \\
\widehat{Cov}_k &= \frac{1}{T} \sum_{t=1+k}^{T} (y_t - \hat{\mu})(y_{t-k} - \hat{\mu}) \\
\hat{\rho}_k &= \frac{\widehat{Cov}_k }{\widehat{Cov}_0}
\end{align}

自己共分散と自己相関

自己共分散は,ある時点 t k時点前の値の共分散である。時点 tにおける k次の自己共分散は以下で定義される。


 \begin{align}
Cov(y_t, y_{t-k}) = E[ (y_t - \mu_t)(y_{t-k} - \mu_{t-k}) ]
\end{align}


自己相関は,共分散を-1から1の値に標準化したもので,以下で定義される。


 \begin{align}
\rho_{tk} = Corr(y_t, y_{t-k}) = \frac{Cov(y_t, y_{t-k})}  { \sqrt{V(y_t)  V(y_{t-k})}   }
\end{align}

定常過程

「分析が楽なデータ生成過程」として定常過程を導入する。定常過程には,強定常過程と弱定常過程がある。

強定常過程

ある期間の時系列 y_t, y_{t+1}, \cdots, y_{t+k}と,その期間を hだけシフトした y_{t+h,} y_{t+1+h}, \cdots, y_{t+k+h}の同時分布が常に等しくなるようなデータ生成過程を,強定常過程という。
強い仮定であるため,しばしば非現実的であったり,また手持ちの時系列データが強定常過程であるかどうかが判断しづらい。

弱定常過程

弱定常過程は,期待値と自己共分散が時間的に変化しない性質を持つ。


 \begin{align}
E(y_t) &= \mu \\
Cov(y_t, y_{t-k}) &= E[ (y_t - \mu)(y_{t-k} - \mu) ] = Cov_k  \\
V(y_t) &= \sigma^2  \\
Corr(y_t, y_{t-k}) &= \frac{ Cov(y_t, y_{t-k}) }{ \sqrt{V(y_t)  V(y_{t-k})}  } = \rho _k

\end{align}


強定常過程よりも制約が弱く,扱いやすくなる。

ホワイトノイズと正規ホワイトノイズ

ホワイトノイズ系列 \varepsilon _tは,期待値が0で,分散が一定(同時点ならば \sigma^2,それ以外は 0)となる系列のことである。

正規ホワイトノイズ系列は,ホワイトノイズが従う確率分布として正規分布を仮定したものであり,以下のように表記する。


 \begin{align}
y_t \sim N(0, \sigma^2)
\end{align}

ランダムウォーク

代表的な非定常家庭の例として,ランダムウォーク系列が挙げられる。ランダムウォーク系列は以下のような系列である。


 \begin{align}
y_t = y_{t-1} + \varepsilon_t, \quad \varepsilon_t \sim N(0, \sigma^2)
\end{align}


ランダムウォーク系列は, tが増えると \varepsilon_tが累積していくことが分かる。


平均と分散は以下のようになる。


 \begin{align}
E(y_t) &= 0  \\
V(y_t) &= t\sigma^2
\end{align}


さらに,自己共分散と自己相関は以下のようになる。


 \begin{align}
Cov(y_t, y_{t-k}) &= (t-k)\sigma^2  \\
\rho_{tk} &= \frac{ (t-k)\sigma^2 }{ \sqrt{t\sigma^2 \cdot (t-k)\sigma^2} } = \sqrt{  \frac{t-k}{t}  }
\tag{1}
\end{align}


つまりランダムウォーク系列は正の相関を持つ,ということがわかる。

(補足)ランダムウォーク系列の自己共分散

(1)式において,ランダムウォーク系列の自己共分散が Cov(y_t, y_{t-k}) = (t-k)\sigma^2とあったが,このようになる理由を確認してみた。

ランダムウォーク系列を,時間をずらしながら書くと以下のようになる。


 \begin{align}
y_t &= y_{t-1} + \varepsilon_t, \quad \varepsilon_t \sim N(0, \sigma^2) \\
y_{t-1} &= y_{t-2} + \varepsilon_{t-1}, \quad \varepsilon_{t-1} \sim N(0, \sigma^2) \\
&\cdots \\
y_2 &= y_1 + \varepsilon_1, \quad \varepsilon_1 \sim N(0, \sigma^2)  \\
\end{align}


行列形式で書くと以下のようになる。


 \begin{align}

\begin{bmatrix}
y_t \\ y_{t-1} \\ \vdots \\ \vdots \\ y_1 \\
\end{bmatrix}

= 

\begin{bmatrix}
0 & 1 &    &    &    \\
   & 0 & 1 &    &    \\
   &    & \ddots & \ddots &    \\
   &    &    & \ddots &  1 \\
   &    &    &    &  0 
\end{bmatrix}

\begin{bmatrix}
y_t \\ y_{t-1} \\ \vdots \\ \vdots \\ y_1 
\end{bmatrix}

 + 

\begin{bmatrix}
\varepsilon_t \\ \varepsilon_{t-1} \\ \vdots \\ \vdots \\ \varepsilon_1 
\end{bmatrix}

\end{align}


これを行列とベクトルで,以下のように書く。


 \begin{align}
\boldsymbol{y} = \textbf{A} \boldsymbol{y} + \boldsymbol{\varepsilon}, \quad \boldsymbol{\varepsilon} \sim N(\boldsymbol{0}_n, \sigma^2  I_n)
\tag{2}
\end{align}


(2)式を変形すると,


 \begin{align}
(I_n - \textbf{A} ) \boldsymbol{y} &= \boldsymbol{\varepsilon} \\ 
\therefore \boldsymbol{y} = (I_n - \textbf{A} )^{-1}  \boldsymbol{\varepsilon} &\equiv \textbf{B} \boldsymbol{\varepsilon}
\end{align}


となる。ここで,


 \begin{align}
(I_n - \textbf{A} )^{-1}  = I_n + \textbf{A} + \textbf{A}^2 + \cdots
\end{align}


だが,


 \begin{align}

\textbf{A}^2 = 

\begin{bmatrix}
0 & 1 &    &    &    \\
   & 0 & 1 &    &    \\
   &    & \ddots & \ddots &    \\
   &    &    & \ddots &  1 \\
   &    &    &    &  0 
\end{bmatrix}

\begin{bmatrix}
0 & 1 &    &    &    \\
   & 0 & 1 &    &    \\
   &    & \ddots & \ddots &    \\
   &    &    & \ddots &  1 \\
   &    &    &    &  0 
\end{bmatrix}

= 

\begin{bmatrix}
0 & 0 & 1 &    &    &    \\
   & 0 & 0 & 1 &    &    \\
   &   &   \ddots & \ddots & \ddots &    \\
   &   &    &  0  & 0 &  1 \\
   &   &    &    &  0  &  0 \\
   &   &    &    &      &  0 \\
\end{bmatrix}

\end{align}


のように \textbf{A}を累乗していくと, 1の位置が1つずつ右にずれていくことが分かる。
これを繰り返すと, \textbf{A}^{t} = \textbf{O}となるので,


 \begin{align}

\textbf{B}  &=  (I_n - \textbf{A} )^{-1}  = I_n + \textbf{A} + \cdots  + \textbf{A}^{t-1}  \\

&= 

\begin{bmatrix}
1 & 1 & 1  & \cdots  & 1  \\
   & 1 & 1 &  \cdots  &  1  \\
   &    & \ddots & \ddots &  \vdots  \\
   &    &    & 1 &  1 \\
   &    &    &    &  1 
\end{bmatrix}

\end{align}


となる。


 \boldsymbol{\varepsilon}正規分布に従うので,これを行列をかけただけの \boldsymbol{y} = \textbf{B} \boldsymbol{\varepsilon}正規分布に従う。


 \begin{align}

E[ \boldsymbol{y}  ] &= \boldsymbol{0}_n  \\
V[ \boldsymbol{y}  ] &= \textbf{B} V[ \boldsymbol{\varepsilon}  ] \textbf{B}^T = \sigma^2 \textbf{B} \textbf{B}^T  \\

&= 
\sigma^2

\begin{bmatrix}
t & t-1 &  \cdots  & 1  \\
t-1 & t-1 &  \cdots  &  1  \\
\vdots & \vdots & \ddots &  \vdots  \\
1   & 1 & \cdots  & 1 \\
\end{bmatrix}

\end{align}


よって,ランダムウォーク系列の自己共分散が Cov(y_t, y_{t-k}) = (t-k)\sigma^2となる。

まとめと感想

時系列データの特徴である,i.i.dが成り立たないことや,代表的なデータ生成過程である弱定常過程について理解した。
このあたりの性質は,時系列分析を行なううえでの基本になりそうなので,しっかり覚えていきたい。

弱定常過程における自己共分散は,行列形式を使ってみたが,時系列でも行列形式での考え方は威力を発揮するかもしれない。



本記事を最後まで読んでくださり,どうもありがとうございました。