確率過程の弱定常性と強定常性

時系列データの分析において重要な定常性の定義のメモです。
用語は沖本先生の経済・ファイナンスデータの計量時系列分析の定義に従っています。

確率過程の定常性とは、その過程の同時分布や基本統計量の時間不変性に関するものです。
何を不変とするかによって、弱定常性 (weak stationarity)と強定常性(strict stationarity)に分類されます。

以下、$y_t$を確率過程とします。

弱定常性

弱定常性は、過程の期待値と自己共分散が一定であることです。

定義:
任意の$t$と$k$に対して、
$$
\begin{align}
E(y_t) & = \mu\\
Cov(y_t, y_{t-k}) & = E[(y_t-\mu)(y_{t-k}-\mu)] = \gamma_k
\end{align}
$$
が成立する場合、過程は弱定常(weak stationary)と言われます。

$y_t$の期待値は任意の$t$に対して一定で、$y_t$と$y_{t-k}$の共分散は$k$の値によってのみ決まります。
また、この二つが時点に依存しないので、自己相関も時点に依存しません。

経済・ファイナンスの分野では単に定常性というと、弱定常性をさすことが多いそうです。(沖本本 P10)

強定常性

強定常性は、同時分布が不変であることを要求します。

定義:
任意の$t$と$k$に対して、$(y_t,y_{t+1},\cdots,y_{t+k})$の同時分布が同一となる場合、
過程は強定常(strict stationary)と言われます。

弱定常は期待値と共分散だけに対する仮定だったので、強定常のほうが名前の通り強い仮定になります。

ただし、強定常ならば絶対に弱定常というわけではなく、
“過程の分散が有限であるならば、”強定常過程は弱定常過程である、
という風に一つ条件が必要です。

pandasで時系列データの自己相関係数算出

時系列データとそれをn時間分シフトさせたデータ間の相関係数を自己相関係数と呼びます。
データに周期性があるかどうかを確認するときなどに調査します。

単に配列をスライドさせてnumpyか何かで相関係数を出してもいいのですが、
pandasに専用の関数が定義されているのでそれを使って求めることもできます。

pandas.Series.autocorr

試しにやってみましょう。


import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 7点ごとに周期性のあるデータを準備
series = pd.Series([5, 4, 5, 6, 5, 3, 1]*10)
# 乱数追加
series += np.random.randn(70) * 0.5

# lag=0から29までの自己相関係数
auto_series = [series.autocorr(lag=i) for i in range(30)]

# 可視化
fig = plt.figure(figsize=(10, 10))
ax = fig.add_subplot(2, 1, 1, title="周期性のあるデータ")
ax.plot(series.index, series)
ax = fig.add_subplot(2, 1, 2, title="自己相関係数")
ax.bar(range(30), auto_series)
plt.show()

出力されるグラフがこちら。

7点間隔の周期が綺麗に現れているのがわかります。