Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

biogeme

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:選択肢ごとの効用関数の辞書から、ロジットモデルの対数尤度を計算する関数

これらを使って選択肢ごとの効用関数VjV_jを数式として組み立て、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()で読み込める。

参考