ベイズ重回帰分析をPythonで実装する
元記事は、企業の財務指標から翌年の株価上昇率を説明する例を通じて、ベイズ重回帰分析の準備とモデル定義を解説している。古典的な重回帰分析と基本的な流れは近いが、回帰係数などのパラメーターを確率分布として扱う点が特徴だ。
分析に使用するツール
Google Colaboratory
サンプルコードをブラウザ上で実行する環境として使用する。記事では、公開されたExcelファイルを読み込み、コードセルを実行してデータを確認している。
pandas
Excelデータの読み込み、数値変数の標準化、業種のダミー変数化、説明変数の結合に利用する。
- read_excel:Excelの指定シートを読み込む
- get_dummies:業種のようなカテゴリーデータを0と1の列へ変換する
- concat:標準化した数値変数とダミー変数を結合する
PyMC
ベイズモデルの記述に使用する。定数項、数値変数の係数、業種ダミーの係数に事前分布を設定し、目的変数の期待値と標準偏差を定義する。
使用するデータ
サンプルは50社分の財務データで、目的変数は翌年の株価上昇率である。説明変数にはROE、EPS、B/Pと業種を使用する。業種はIT、電機、金融、商社、不動産の5種類で、記事ではITを基準として残りをダミー変数化している。
前処理の流れ
- pandasでExcelファイルを読み込む
- ROE、EPS、B/Pから平均を引き、標準偏差で割って標準化する
- 業種をダミー変数へ変換する
- 数値変数と業種ダミーを結合し、説明変数を作成する
- 翌年の株価上昇率を目的変数として分離する
財務指標は値の尺度が異なるため、記事ではモデルへ投入する前に標準化している。カテゴリーデータである業種は、そのまま数値として扱わず、pandasのget_dummiesで変換する。
PyMCによるモデル定義
回帰係数の事前分布
定数項には平均0、標準偏差10の正規分布を設定する。標準化した数値変数の係数と業種ダミーの係数には、それぞれ平均0、標準偏差1の正規分布を設定する。
目的変数の期待値
期待値は、定数項に、数値変数と対応する係数の内積、業種ダミーと対応する係数の内積を加えて定義する。サンプルが50社あるため、期待値は各社に対応する50要素の配列となる。
観測値のばらつき
目的変数の標準偏差には、正の値だけを取る半正規分布を設定する。記事の例では、広めの分布として尺度10を指定している。
記事から確認できる実装上の要点
- PyMCのDataを使い、後から説明変数を変更できる形で定義する
- 係数の要素数は、数値変数と業種ダミーの列数に合わせる
- 内積を使って、全サンプルの期待値をまとめて表現する
- 配列のスライスで数値変数と業種ダミーの列を分ける
以上は、提示された元記事の範囲に記載された事実の整理であり、モデルの妥当性や投資判断への有効性を評価するものではない。



