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

MMMのためのデータ準備完全ガイド:収集・加工・品質管理

MMM分析の成否を決めるデータ準備のすべてを解説。広告費・売上・外部要因の収集方法、時系列フォーマット、欠損値処理、CSVテンプレートまで網羅します。

2026/1/156分で読める11

MMMのためのデータ準備完全ガイド

はじめに

マーケティングミックスモデリング(MMM)の精度は、投入するデータの品質で8割が決まると言われています。どれほど高度なベイズモデルを使っても、データに問題があれば正確なチャネル貢献度やROIは得られません。

「Garbage In, Garbage Out」はMMMにおいても鉄則です。データ準備に十分な時間を投資することが、分析成功への最短ルートです。

本記事では、MMMに必要なデータの収集・加工・品質管理について、実務で使えるCSVテンプレートや具体的なPythonコードとともに解説します。MMMの基本概念についてはMMMとは?初心者向け完全ガイドをご参照ください。


MMMに必要なデータの全体像

データの3つのカテゴリ

MMMでは大きく分けて3種類のデータが必要です:

カテゴリ説明具体例
メディア変数広告チャネルごとの投下量TV GRP、デジタル広告費、SNS広告費、OOH出稿量
目的変数(KPI)予測対象のビジネス指標売上金額、コンバージョン数、新規会員数
コントロール変数KPIに影響する外部要因気温、祝日フラグ、競合セール、自社プロモーション

推奨データ期間と粒度

項目最低要件推奨理想
期間52週(1年)104週(2年)156週(3年)
粒度週次週次日次(集約して週次に変換)
地域全国集計地域別(エリア×時系列)都道府県レベル

なぜ52週以上必要なのか? 季節性(年末商戦、GWなど)を正しく学習するには最低1年分のデータが必要です。また、広告費の「増減パターン」が複数回含まれていないと、広告効果とトレンドを分離できません。


Step 1: メディアデータの収集

チャネル別の収集方法

チャネルデータソース取得指標注意点
TV CMビデオリサーチ / Switch MediaGRP、到達率エリア別GRPが理想。費用よりGRPが精度高い
Google広告Google Ads API / レポート費用、imp、クリックキャンペーン単位→チャネル単位に集約
Meta広告Meta Ads Manager費用、リーチ、impiOS 14.5以降のCV計測精度低下に注意
YouTubeGoogle Ads(動画キャンペーン)費用、視聴回数TVとの重複リーチに注意
LINE広告LINE Ads Platform費用、imp友だち追加等のブランド効果も考慮
OOH媒体社レポート費用、掲出面数時系列が粗い場合は月次→週次に按分

Pythonでの集約処理

import pandas as pd

# 日次データを週次に集約
daily = pd.read_csv("daily_ad_spend.csv", parse_dates=["date"])
daily["week"] = daily["date"].dt.to_period("W").apply(lambda r: r.start_time)

weekly = daily.groupby("week").agg({
    "tv_grp": "sum",
    "google_spend": "sum",
    "meta_spend": "sum",
    "line_spend": "sum",
    "youtube_spend": "sum",
    "revenue": "sum",
}).reset_index()

print(f"期間: {weekly['week'].min()}{weekly['week'].max()}")
print(f"レコード数: {len(weekly)} 週")

Step 2: コントロール変数の収集

代表的なコントロール変数

変数データソース影響メカニズム
気温気象庁オープンデータアパレル・飲料・食品の需要変動
祝日・連休内閣府カレンダーEC購買パターンの変化
自社セール社内データ価格効果の分離に必須
競合活動SimilarWeb / 業界データ市場シェア変動の補正
為替レート日銀統計輸入商材のコスト変動
COVID等イベントダミー変数構造変化の補正
# 気象庁データの取得例
import pandas as pd

weather = pd.read_csv("weather_tokyo.csv", parse_dates=["date"])
weather["week"] = weather["date"].dt.to_period("W").apply(
    lambda r: r.start_time
)
weekly_temp = weather.groupby("week")["temperature"].mean().reset_index()

Step 3: CSVテンプレート構造

推奨フォーマット

date,revenue,tv_grp,google_spend,meta_spend,line_spend,temperature,holiday_flag,own_promotion
2024-01-01,5230000,120,800000,600000,300000,5.2,1,0
2024-01-08,4850000,100,750000,580000,280000,4.8,0,0
2024-01-15,5100000,110,820000,620000,310000,6.1,0,1

カラム命名規則

ルール良い例悪い例
スネークケースgoogle_spendGoogle Spend
単位を統一すべて円 or すべて千円混在
日付フォーマットYYYY-MM-DDMM/DD/YYYY
チャネル名を明確にmeta_spendchannel_3

Step 4: データ品質チェック

必須チェック項目

import pandas as pd
import numpy as np

df = pd.read_csv("mmm_data.csv", parse_dates=["date"])
channel_cols = ["tv_grp", "google_spend", "meta_spend", "line_spend"]

# 1. 欠損値チェック
print("=== 欠損値 ===")
print(df.isnull().sum())

# 2. 週次連続性チェック
date_diff = df["date"].diff().dt.days
gaps = date_diff[date_diff != 7].dropna()
if len(gaps) > 0:
    print(f"\n警告: {len(gaps)}箇所の日付ギャップを検出")
    print(gaps)

# 3. ゼロ値の割合
print("\n=== ゼロ値の割合 ===")
for col in channel_cols:
    zero_pct = (df[col] == 0).mean() * 100
    print(f"  {col}: {zero_pct:.1f}%")

# 4. 外れ値検出(IQR法)
print("\n=== 外れ値(IQR法) ===")
for col in channel_cols + ["revenue"]:
    Q1 = df[col].quantile(0.25)
    Q3 = df[col].quantile(0.75)
    IQR = Q3 - Q1
    outliers = ((df[col] < Q1 - 1.5 * IQR) | (df[col] > Q3 + 1.5 * IQR)).sum()
    print(f"  {col}: {outliers}件の外れ値")

# 5. 多重共線性チェック(VIF)
from statsmodels.stats.outliers_influence import variance_inflation_factor

X = df[channel_cols].values
vif = [variance_inflation_factor(X, i) for i in range(X.shape[1])]
print("\n=== VIF(10以上は要注意) ===")
for col, v in zip(channel_cols, vif):
    flag = " ⚠️" if v > 10 else ""
    print(f"  {col}: {v:.2f}{flag}")

よくある失敗パターンと対策

失敗パターン原因対策
モデルが収束しないデータ期間が短すぎる最低52週、推奨104週以上を確保
TV効果がゼロと推定TV出稿が常に一定額出稿量に変動がないとモデルは効果を推定できない
季節性と広告が混同年末に広告も売上も増加コントロール変数で季節性を分離
ROIが非現実的に高い多重共線性VIFチェック、チャネル統合を検討
欠損週があるデータ収集漏れ線形補間 or 前後の平均で補完(3週以上の欠損は要注意)

最も重要なポイント: 広告費に十分な変動があることです。毎週同じ金額を投下しているチャネルは、MMMで効果を推定できません。実験的に出稿量を変動させる「メディア実験」が理想です。


まとめ

  1. MMMの精度はデータ品質で8割決まる。準備に十分な時間を投資すべき
  2. 52週以上の週次データが最低要件。104週以上が推奨
  3. メディア変数・目的変数・コントロール変数の3カテゴリを網羅的に収集
  4. 品質チェック(欠損値、連続性、外れ値、VIF)は必須プロセス
  5. 広告費の変動パターンがなければ効果推定は不可能

次のステップとして、PyMC-Marketingステップバイステップで実際のモデル構築に進みましょう。

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

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

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

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

関連記事