PyMC-Marketingの使い方:PythonでベイズMMMを実行する方法
はじめに
PyMC-Marketingは、Pythonでベイズ統計ベースのMMM(マーケティングミックスモデリング)を実行するためのオープンソースライブラリです。PyMC(確率的プログラミングフレームワーク)をベースに、マーケティング特化の機能が組み込まれています。
この記事では、PyMC-Marketingを使ったMMMの実装手順を、コード例付きで解説します。
PyMC-Marketingとは
| 項目 | 詳細 |
|---|---|
| 開発元 | PyMC Labs |
| ライセンス | Apache 2.0(無料) |
| 言語 | Python |
| 統計フレームワーク | PyMC (PyTensor) |
| 主な機能 | MMM、CLV(顧客生涯価値)予測 |
| 最新バージョン | 0.18.x(2026年2月時点) |
特徴
- ベイズ推定:事前知識を活用した安定した推定
- アドストック自動推定:Geometric / Weibull Adstockをサポート
- 飽和曲線:Hill関数による収穫逓減のモデル化
- 予算最適化:最適な予算配分を算出する組み込み関数
- 可視化:ArviZとの連携で豊富なプロット
環境構築
インストール
pip install pymc-marketing
推奨環境
Python >= 3.10
pymc-marketing >= 0.18.0
pandas >= 2.0
matplotlib >= 3.7
注意: PyMC-MarketingはPyTensor(旧Theano)に依存しており、環境構築がやや複雑になる場合があります。Dockerの使用を推奨します。
データの準備
MMMに必要なデータ形式は以下の通りです:
import pandas as pd
# サンプルデータ
df = pd.read_csv("marketing_data.csv")
print(df.head())
date sales tv_spend digital_spend social_spend
2024-01-07 1200000 500000 300000 100000
2024-01-14 1350000 600000 280000 120000
2024-01-21 1100000 400000 320000 90000
...
データ要件
- 行: 週次データ(52行以上推奨)
- 列: 日付、目的変数(売上等)、チャネル別広告費
- 欠損値: なし(前処理で補完が必要)
モデルの構築
from pymc_marketing.mmm import MMM
# チャネル列を指定
channel_columns = ["tv_spend", "digital_spend", "social_spend"]
# MMMモデルを構築
mmm = MMM(
date_column="date",
channel_columns=channel_columns,
adstock="geometric", # アドストックモデル
saturation="hill", # 飽和曲線モデル
)
# データを渡してモデルをフィット
mmm.fit(
X=df[["date"] + channel_columns],
y=df["sales"],
target_accept=0.9,
chains=4,
draws=1000,
tune=1000,
)
パラメータの説明
| パラメータ | 説明 | 推奨値 |
|---|---|---|
adstock | アドストックモデル | "geometric" or "weibull" |
saturation | 飽和曲線モデル | "hill" or "logistic" |
chains | MCMCチェーン数 | 2〜4 |
draws | サンプル数 | 1000〜2000 |
tune | ウォームアップ | 1000 |
結果の確認
チャネル別貢献度
# チャネル別の貢献度を可視化
mmm.plot_channel_contribution()
アドストックパラメータ
# アドストックの減衰率を確認
mmm.plot_channel_parameter("adstock")
飽和曲線
# 各チャネルの飽和曲線を可視化
mmm.plot_channel_parameter("saturation")
モデル適合度
# 予測 vs 実績のプロット
mmm.plot_posterior_predictive()
# R²スコア
print(f"R²: {mmm.score:.3f}")
予算最適化
# 現在の予算配分
current_budget = {
"tv_spend": 500000,
"digital_spend": 300000,
"social_spend": 100000,
}
# 最適な予算配分を算出
optimal = mmm.optimize_budget(
total_budget=sum(current_budget.values()),
budget_bounds={
"tv_spend": (100000, 800000),
"digital_spend": (100000, 500000),
"social_spend": (50000, 300000),
},
)
print("最適配分:", optimal)
PyMC-Marketingの限界
| 課題 | 説明 |
|---|---|
| 学習コスト | Python、ベイズ統計、MCMCの知識が必要 |
| 環境構築 | PyTensor依存で環境構築がやや複雑 |
| 実行時間 | データ量によっては数十分〜数時間 |
| レポーティング | PDFレポート等は自前で構築が必要 |
| 日本語対応 | ドキュメントは英語のみ |
PyMC-Marketing vs MMM Lab
| 比較項目 | PyMC-Marketing | MMM Lab |
|---|---|---|
| 価格 | 無料 | ¥10,000/月〜 |
| 言語 | Python | GUI(日本語) |
| カスタマイズ性 | 非常に高い | 中程度 |
| セットアップ | 数時間〜数日 | 数分 |
| レポート | 自前構築 | 自動PDF生成 |
| サポート | コミュニティ | チャット+メール |
| 対象ユーザー | データサイエンティスト | マーケター全般 |
Pythonに精通したデータサイエンティストにはPyMC-Marketingが最適です。マーケティング部門で直接使いたい場合はMMM Labが適しています。
MMM Labは内部でPyMC-Marketingと同じベイズ推定エンジンを使用しています。
まとめ
PyMC-Marketingは、MMMを自社で内製化したいデータサイエンティストにとって強力なツールです。ただし、Pythonの知識やベイズ統計の理解が前提となります。
プログラミングなしでMMMを実行したい方は、MMM Labをお試しください。CSVアップロードだけで同等の分析が可能です。
MMM Labを無料で始める | PyMC-Marketing公式ドキュメント
この記事は定期的に更新しています。最終更新: 2026年2月