biogeme は離散選択モデルの推定に特化したPythonパッケージ。EPFL(スイス連邦工科大学ローザンヌ校)のMichel Bierlaire氏が開発しており、交通需要分析の分野を中心に、実証産業組織論やマーケティングなど幅広い分野の離散選択分析で使われている。
statsmodelsのロジット/多項ロジットは効用関数の形が固定されている一方、biogemeは効用関数を数式として自由に組み立てて推定できるのが特徴。これにより、
価格感応度などのパラメータを選択肢間で共通にする conditional logit model(きのこ・たけのこの例で見たように、これは
statsmodelsではサポートされていない)選択肢間に相関構造を入れる nested logit model
パラメータが個人間でランダムに分布すると仮定する mixed logit model(ランダム係数ロジットモデル)
観測されない消費者セグメントを仮定する latent class model
といった、より柔軟なモデルを同じインターフェースで推定できる。
インストール¶
uv add biogeme
# または
pip install biogeme基本的な使い方¶
biogemeでは、次のようなオブジェクトを組み合わせてモデルを表現する。
biogeme.database.Database:推定に使うデータフレームをラップするオブジェクト(列はすべて数値型である必要がある)biogeme.expressions.Variable:データの列を指す変数biogeme.expressions.Beta:推定したいパラメータ(名前、初期値、下限、上限、固定するかどうかを指定する)biogeme.models.loglogit:選択肢ごとの効用関数の辞書から、ロジットモデルの対数尤度を計算する関数
これらを使って選択肢ごとの効用関数を数式として組み立て、biogeme.biogeme.BIOGEMEオブジェクトに対数尤度の式とデータベースを渡してestimate()を呼べば、勾配やヘシアンを自分で書かなくても最尤推定が実行される。
具体的なデータを使った推定例(conditional logit modelと、消費者属性を組み込んだモデル)はきのこ・たけのこの例を参照。
その他の機能¶
biogemeはこの例で使った条件付きロジットモデル以外にも、以下のような離散選択モデルの推定に対応している。
biogeme.models.nested:nested logit model(選択肢間の相関を木構造で表現する)MonteCarloと分布に従うBetaを組み合わせたmixed logit model(ランダム係数ロジットモデル)biogeme.models.piecewiseなどによる非線形な効用関数の指定パネルデータ(同一個人の複数回答)に対応した尤度関数
潜在変数・潜在クラスモデル(hybrid choice model)
また、biogeme.dataモジュールにはswissmetro(交通機関選択)などbiogemeの公式チュートリアルで使われるサンプルデータが同梱されており、biogeme.data.swissmetro.read_data()で読み込める。
参考¶
Biogeme website:公式ドキュメント。チュートリアルやサンプルコードが豊富
Bierlaire, M. (2023). A short introduction to Biogeme