1行で当てはめ、1つの表で読む
statsmodels は、回帰について「どれくらい確かか」に答えるためのライブラリです。scikit-learn が予測を返すのに対し、statsmodels は係数、標準誤差、t統計量、p値、信頼区間、いくつかの適合度指標を含む完全なレポートを返します。モデルは式の文字列で書きます。smf.ols('ex ~ mkt_rf + hml', data).fit() では、チルダの左が被説明変数、右が説明変数で、定数項は自動で加わります(外すには - 1 と書きます)。配列版の sm.OLS(y, X) は定数項を足さないので自分で sm.add_constant(X) を呼ぶ必要があり、これを忘れるのが最もよくあるミスです。
回帰変数が1つなら、計算は手でできるほど短いです。Sxx=∑(xi−xˉ)2、Sxy=∑(xi−xˉ)(yi−yˉ) とすると、傾きは β^=Sxy/Sxx、切片は α^=yˉ−β^xˉ です。残差は ei=yi−α^−β^xi で、その2乗和が SSE です。ノイズの大きさは s2=SSE/(n−k) で推定し、k は当てはめた係数の数(ここでは2)です。傾きの標準誤差は s2/Sxx、t統計量は β^ をそれで割ったもの、R2=1−SSE/SST で、SST=∑(yi−yˉ)2 は平均まわりの全変動です。
β^=SxxSxy,α^=yˉ−β^xˉ,s2=n−kSSE,t=s2/Sxxβ^,R2=1−SSTSSE(1) 5か月を手計算市場の超過リターン
x=−2,−1,0,1,2(%)と株式の超過リターン
y=−3,0,1,2,5 があるとします。
xˉ=0、
yˉ=1、
Sxx=10、
Sxy=8+1+0+1+8=18 なので
β^=1.8、
α^=1。当てはめ値は
−2.6,−0.8,1,2.8,4.6、残差は
−0.4,0.8,0,−0.8,0.4 で
SSE=1.6、一方
SST=16+1+0+1+16=34 です。よって
R2=1−1.6/34=0.953。
n−k=3 なのでノイズの推定は
s2=1.6/3=0.5333、標準誤差は
0.5333/10=0.2309、
t=1.8/0.2309=7.79 です。実データでは、2000年2月から2026年8月までの
319 か月で、アップルの月次超過リターンを市場の超過リターンに回帰すると
β^=1.31(標準誤差
0.112、
t=11.7)、切片は月
1.5%(
t=2.9)ですが、
R2 は
0.30 しかありません。
- まず式:
y ~ a + b は切片と2つの傾きを当てはめ、- 1 で切片を外し、sm.OLS には add_constant が必要。 - 表は順に読む:係数、標準誤差、t統計量、p値、区間、そして R2 とサンプル数。
ラボ:採点される内容
- 傾きの手計算15点
- 切片10点
- 決定係数15点
- t統計量20点
- 要約表を読む10点
- 回帰の作業手順10点
- 精密だが小さい20点