AIツール基礎

PythonとPyMCで学ぶベイズ重回帰分析の基本手順

PythonとPyMCで学ぶベイズ重回帰分析の基本手順のアイキャッチ画像

ベイズ重回帰分析をPythonで実装する

元記事は、企業の財務指標から翌年の株価上昇率を説明する例を通じて、ベイズ重回帰分析の準備とモデル定義を解説している。古典的な重回帰分析と基本的な流れは近いが、回帰係数などのパラメーターを確率分布として扱う点が特徴だ。

分析に使用するツール

Google Colaboratory

サンプルコードをブラウザ上で実行する環境として使用する。記事では、公開されたExcelファイルを読み込み、コードセルを実行してデータを確認している。

pandas

Excelデータの読み込み、数値変数の標準化、業種のダミー変数化、説明変数の結合に利用する。

  • read_excel:Excelの指定シートを読み込む
  • get_dummies:業種のようなカテゴリーデータを0と1の列へ変換する
  • concat:標準化した数値変数とダミー変数を結合する

PyMC

ベイズモデルの記述に使用する。定数項、数値変数の係数、業種ダミーの係数に事前分布を設定し、目的変数の期待値と標準偏差を定義する。

使用するデータ

サンプルは50社分の財務データで、目的変数は翌年の株価上昇率である。説明変数にはROE、EPS、B/Pと業種を使用する。業種はIT、電機、金融、商社、不動産の5種類で、記事ではITを基準として残りをダミー変数化している。

前処理の流れ

  1. pandasでExcelファイルを読み込む
  2. ROE、EPS、B/Pから平均を引き、標準偏差で割って標準化する
  3. 業種をダミー変数へ変換する
  4. 数値変数と業種ダミーを結合し、説明変数を作成する
  5. 翌年の株価上昇率を目的変数として分離する

財務指標は値の尺度が異なるため、記事ではモデルへ投入する前に標準化している。カテゴリーデータである業種は、そのまま数値として扱わず、pandasのget_dummiesで変換する。

PyMCによるモデル定義

回帰係数の事前分布

定数項には平均0、標準偏差10の正規分布を設定する。標準化した数値変数の係数と業種ダミーの係数には、それぞれ平均0、標準偏差1の正規分布を設定する。

目的変数の期待値

期待値は、定数項に、数値変数と対応する係数の内積、業種ダミーと対応する係数の内積を加えて定義する。サンプルが50社あるため、期待値は各社に対応する50要素の配列となる。

観測値のばらつき

目的変数の標準偏差には、正の値だけを取る半正規分布を設定する。記事の例では、広めの分布として尺度10を指定している。

記事から確認できる実装上の要点

  • PyMCのDataを使い、後から説明変数を変更できる形で定義する
  • 係数の要素数は、数値変数と業種ダミーの列数に合わせる
  • 内積を使って、全サンプルの期待値をまとめて表現する
  • 配列のスライスで数値変数と業種ダミーの列を分ける

以上は、提示された元記事の範囲に記載された事実の整理であり、モデルの妥当性や投資判断への有効性を評価するものではない。

出典

@IT「Pythonで学ぶデータ分析:ベイズ統計で重回帰分析」