この銘柄は平均回帰していると言い切れますか?
前の章で、MSFT の週次リターンの自己相関が -0.16 であることを見ました。この自己相関は大きく見えますが、統計的に有意でしょうか?言い換えると、真の自己相関が本当に 0 だとして、これほど大きな負の自己相関が観測される確率が 5% 未満と言えるでしょうか?また、他のラグで 0 と有意に異なる自己相関はあるでしょうか?
たとえ全てのラグで真の自己相関が 0 であっても、有限標本のリターンでは推定された自己相関がちょうど 0 になることはありません。実際、標本自己相関の標準偏差は $\small 1/\sqrt{N}\((ここで \)\small N\( は観測数)なので、例えば \)\small N=100\( なら ACF の標準偏差は 0.1 です。正規分布の 95% は平均から ±1.96 標準偏差の範囲にあるため、95% 信頼区間は \)\small \pm 1.96/\sqrt{N}$ となります。この近似は、真の自己相関が「すべて」0 のときにのみ成り立ちます。
ここでは、ACF の実際の信頼区間と近似信頼区間を計算し、前章のラグ1の自己相関 -0.16 と比較します。Microsoft の週次リターンは returns という DataFrame に事前に読み込まれています。
この演習はコースの一部です
Pythonで学ぶ時系列解析
演習の手順
- DataFrame
returnsの Series'Adj Close'に対して、週次リターンの自己相関をもう一度計算します。 len()関数を使って、returnsDataFrame の観測数を求めます。- 推定された自己相関の 95% 信頼区間を近似します。数学関数
sqrt()はインポート済みなので使用できます。 - statsmodels からインポートした
plot_acfを使ってreturnsの自己相関関数をプロットします。信頼区間のためにalpha=0.05(デフォルト)を設定し、lags=20とします。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Import the plot_acf module from statsmodels and sqrt from math
from statsmodels.graphics.tsaplots import plot_acf
from math import sqrt
# Compute and print the autocorrelation of MSFT weekly returns
autocorrelation = returns['Adj Close'].___
print("The autocorrelation of weekly MSFT returns is %4.2f" %(autocorrelation))
# Find the number of observations by taking the length of the returns DataFrame
nobs = ___
# Compute the approximate confidence interval
conf = 1.96/___
print("The approximate confidence interval is +/- %4.2f" %(conf))
# Plot the autocorrelation function with 95% confidence intervals and 20 lags using plot_acf
plot_acf(___, alpha=0.05, ___)
plt.show()