メインコンテンツへスキップ
実践ガイド

PythonでMMM入門:環境構築からGoogle Colabでの初回実行まで

Pythonを使ったマーケティング・ミックス・モデリング(MMM)の始め方を、環境構築からGoogle Colabでの初回実行まで、コード付きで丁寧に解説します。プログラミング未経験のマーケターでも安心して取り組めるステップバイステップガイドです。

MMM Lab 編集部2026/3/18分で読める15

はじめに:なぜマーケターにPythonが必要なのか

マーケティング・ミックス・モデリング(MMM)を実務で活用するには、データの前処理・モデリング・可視化といった一連の作業をプログラムで行う必要があります。Excelでは限界がある大規模データの処理や、ベイズ統計モデルの推定には、Pythonが最適なツールです。

本記事では、プログラミング経験がないマーケターでもMMMを実行できるよう、環境構築から初回のモデル実行までを一歩一歩解説します。


Pythonとは?マーケターに必要な最低限の知識

Pythonは、データ分析・機械学習分野で世界的に最も広く使われているプログラミング言語です。MMMの文脈では、以下の理由からPythonが選ばれます。

  • 豊富なライブラリ:統計分析、データ操作、可視化のためのツールが充実
  • 無料で利用可能:オープンソースのため、ライセンス費用がかからない
  • コミュニティが大きい:困ったときに日本語の情報も見つかりやすい
  • GoogleやMetaが公式ツールを提供:PyMC-Marketing、Lightweight MMM、Meridianなどが全てPython製

マーケターが知っておくべきPythonの基本概念

概念説明MMM での用途
変数データを格納する箱ad_spend = 1000000
リスト複数の値をまとめるchannels = ["TV", "Digital", "OOH"]
DataFrame表形式のデータ構造CSV読み込み後のデータ操作
関数処理をまとめたものmodel.fit() でモデル推定
ライブラリ再利用可能なコード集import pandas as pd

環境構築の3つの選択肢

Pythonの実行環境を構築する方法は主に3つあります。初学者には Google Colab を強く推奨します。

選択肢の比較

項目Google Colabローカル(Anaconda)Docker
難易度★☆☆☆☆★★★☆☆★★★★☆
セットアップ時間1分30分〜1時間1〜2時間
必要な知識Googleアカウントのみコマンドラインの基礎コンテナの知識
GPU利用無料枠あり別途GPU必要設定が必要
データの永続性Googleドライブ連携ローカルに保存ボリュームマウント
推奨対象初学者・PoC本格運用チーム開発

Google Colabで始める手順

ステップ1:Google Colabにアクセス

ブラウザで https://colab.research.google.com にアクセスし、Googleアカウントでログインします。

ステップ2:新しいノートブックを作成

「ファイル」→「ノートブックを新規作成」をクリックします。ノートブック名を MMM_Introduction.ipynb に変更しましょう。

ステップ3:ランタイムの確認

「ランタイム」→「ランタイムのタイプを変更」で、Pythonのバージョンを確認します。Python 3 が選択されていればOKです。MMMの計算を高速化したい場合は、ハードウェアアクセラレータを「GPU」に変更することもできます(T4 GPUが無料で利用可能)。

ステップ4:最初のセルを実行

以下のコードをセルに入力し、Shift + Enter で実行してみましょう。

import sys
print(f"Python version: {sys.version}")
print("Google Colab でPythonが実行できました!")

Python version: 3.10.x のような出力が表示されれば成功です。


必要なライブラリのインストール

MMMに必要な主要ライブラリを以下に整理します。

ライブラリ一覧と役割

ライブラリ役割バージョン目安
pandasデータの読み込み・操作2.0+
numpy数値計算の基盤1.24+
matplotlibグラフ・可視化3.7+
seaborn統計的可視化0.12+
scikit-learn前処理・評価指標1.3+
pymcベイズ推論エンジン5.10+
pymc-marketingMMM専用ライブラリ0.9+
arvizベイズモデルの結果可視化0.17+

インストール手順

Google Colabのセルで以下を実行します。

# 基本ライブラリ(Colabにはプリインストール済み)
!pip install --quiet pandas numpy matplotlib seaborn scikit-learn

# MMMに必要な追加ライブラリ
!pip install --quiet pymc pymc-marketing arviz

print("全てのライブラリがインストールされました。")

注意: pymc-marketing のインストールには数分かかることがあります。「Restart Runtime」を求められた場合は、指示に従ってランタイムを再起動してください。

インストール確認

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import pymc as pm
import pymc_marketing as pmm

print(f"pandas: {pd.__version__}")
print(f"numpy: {np.__version__}")
print(f"PyMC: {pm.__version__}")
print(f"PyMC-Marketing: {pmm.__version__}")

最初のデータ読み込み:CSVからpandas DataFrame

MMMの入力データは、通常CSVファイルとして準備します。ここでは、サンプルデータを作成して読み込む手順を示します。

サンプルデータの作成

import pandas as pd
import numpy as np

# 再現性のための乱数シード
np.random.seed(42)

# 52週分のサンプルデータを生成
n_weeks = 52
dates = pd.date_range(start="2024-01-01", periods=n_weeks, freq="W-MON")

data = pd.DataFrame({
    "date": dates,
    "tv_spend": np.random.uniform(500000, 2000000, n_weeks).round(0),
    "digital_spend": np.random.uniform(200000, 800000, n_weeks).round(0),
    "search_spend": np.random.uniform(100000, 500000, n_weeks).round(0),
    "sales": np.random.uniform(5000000, 15000000, n_weeks).round(0),
})

# 広告効果を模擬的に追加(実際のデータではこの手順は不要)
data["sales"] = (
    3000000  # ベース売上
    + data["tv_spend"] * 2.5  # テレビの効果
    + data["digital_spend"] * 1.8  # デジタルの効果
    + data["search_spend"] * 3.0  # 検索広告の効果
    + np.random.normal(0, 500000, n_weeks)  # ノイズ
).round(0)

# CSVとして保存
data.to_csv("mmm_sample_data.csv", index=False)
print("データを保存しました。")
print(data.head(10))

CSVの読み込みと基本的な確認

# CSVファイルを読み込む
df = pd.read_csv("mmm_sample_data.csv", parse_dates=["date"])

# 基本情報の確認
print(f"データの形状: {df.shape[0]}行 x {df.shape[1]}列")
print(f"期間: {df['date'].min()}{df['date'].max()}")
print("\n基本統計量:")
print(df.describe())

簡単なMMM実行デモ:PyMC-Marketingの最小コード例

いよいよPyMC-Marketingを使ってMMMを実行します。以下は、最小限のコードでベイズMMMを実行する例です。

import pandas as pd
import numpy as np
import pymc_marketing.mmm as mmm
from pymc_marketing.mmm import (
    GeometricAdstock,
    LogisticSaturation,
    MMM,
)

# データの準備
df = pd.read_csv("mmm_sample_data.csv", parse_dates=["date"])

# チャネルの定義
channel_columns = ["tv_spend", "digital_spend", "search_spend"]

# MMMモデルの構築
my_mmm = MMM(
    adstock=GeometricAdstock(l_max=8),      # アドストック:最大8週間の残存効果
    saturation=LogisticSaturation(),          # 飽和曲線:ロジスティック関数
    date_column="date",                      # 日付列
    channel_columns=channel_columns,         # 広告チャネル列
    target_column="sales",                   # 目的変数(売上)
)

# モデルの学習(サンプリング)
# tune: バーンイン期間, draws: サンプル数, chains: チェーン数
my_mmm.fit(
    X=df,
    y=df["sales"],
    target_accept=0.85,
    tune=500,
    draws=1000,
    chains=2,
)

print("モデルの学習が完了しました!")

実行時間の目安: Google Colab(CPU)で約5〜15分程度かかります。GPUランタイムを使うと高速化される場合があります。

モデルの要約を確認

# モデルパラメータの要約
my_mmm.fit_result.summary()

結果の可視化:matplotlib基礎

MMMの結果を解釈するには、可視化が不可欠です。PyMC-Marketingには便利な可視化メソッドが用意されています。

チャネル別の貢献度分解

# チャネル別貢献度の可視化
fig = my_mmm.plot_channel_contributions()
plt.title("チャネル別売上貢献度")
plt.tight_layout()
plt.savefig("channel_contributions.png", dpi=150, bbox_inches="tight")
plt.show()

アドストック効果の可視化

# アドストック(残存効果)の可視化
fig = my_mmm.plot_channel_parameter("adstock_alpha")
plt.suptitle("各チャネルのアドストック減衰率")
plt.tight_layout()
plt.show()

予測値 vs 実績値のプロット

import matplotlib.pyplot as plt
import matplotlib

# 日本語フォントの設定(Colabの場合)
matplotlib.rcParams["font.family"] = "DejaVu Sans"

# 予測値の取得
posterior_pred = my_mmm.predict(df)

# 実績 vs 予測のプロット
fig, ax = plt.subplots(figsize=(12, 5))
ax.plot(df["date"], df["sales"], label="Actual Sales", color="black", linewidth=2)
ax.plot(df["date"], posterior_pred.mean(axis=0), 
        label="Predicted (Mean)", color="blue", linestyle="--")
ax.fill_between(
    df["date"],
    np.percentile(posterior_pred, 5, axis=0),
    np.percentile(posterior_pred, 95, axis=0),
    alpha=0.2, color="blue", label="90% CI"
)
ax.set_xlabel("Date")
ax.set_ylabel("Sales (JPY)")
ax.set_title("MMM: Actual vs Predicted Sales")
ax.legend()
plt.tight_layout()
plt.show()

トラブルシューティング

初回実行時によくあるエラーとその対処法を紹介します。

エラー原因対処法
ModuleNotFoundErrorライブラリ未インストール!pip install ライブラリ名 を実行
Theano/Aesara compilation errorC++コンパイラの問題ランタイムを再起動し再実行
Divergences during samplingモデルの収束不良target_accept を0.9以上に引き上げ
MemoryErrorデータが大きすぎるchains=2, draws=500 に減らす
ValueError: shape mismatchデータ形状の不一致欠損値の確認と列名の確認

次のステップ

本記事でMMMの初回実行ができたら、以下のステップに進みましょう。

  1. 実際のデータで試す: 自社の広告費データと売上データをCSVで準備する
  2. データ収集を体系化する: 広告プラットフォーム別のデータ収集チェックリストを活用する
  3. モデルを改善する: アドストックや飽和曲線のパラメータを調整する
  4. 結果を解釈する: チャネル別ROI・ROASを算出し、予算配分の最適化に活用する

MMMは一度モデルを構築して終わりではなく、定期的にデータを更新しながらモデルを改善していく継続的なプロセスです。まずは本記事の手順で「動くMMM」を体験し、そこから実務への応用を進めてください。

MMMをもっと深く学びませんか?

理論から実践まで体系的に学べるコース・記事を多数ご用意。 無料プランでも基礎コンテンツにアクセスできます。

MMMの最新情報をお届けします

新着記事・コース更新をメールでお知らせ

関連記事