広告会社が媒体ごとの過去の出稿と広告主の売上から、Python(Meridian)で翌月の予算の配分の案を作り、Claude で配分の理由を広告主向けに説明する
媒体別の週ごとの出稿と、広告主の地域別・週ごとの売上から、媒体ごとの効き方を見込みます。翌月の予算の総額の中で配分の案を出し、案の数字だけを使って、広告主に渡す配分の理由の説明文を下書きします。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Python
- 対象業界
- 小売/広告
- 対象部門
- マーケティング/営業
- 対象業務
- 書類作成/集計・分析
- 主な課題
- データ分析に時間がかかる/判断に時間がかかる/属人化している
- AIで行う処理
- 予測
- 主な効果
- 判断支援/属人化解消/工数削減
- 導入難易度
- ★★★★★
- 実装レベル
- 本格構成
- 費用感
- 個別開発(大)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 担当者が、前年の同じ月の媒体ごとの配分の表を開く
- ネット広告の管理画面から、前月の媒体ごとの成果(申し込み・来店の見込み)を書き出す
- テレビ・ラジオ・折込・交通広告の前月の出稿と、広告主の売上の推移を表計算で並べる
- 前月に増やした媒体の週と、売上の伸びた週を見比べ、効いた媒体の見当を付ける
- 前年の配分を下敷きに、増やす媒体と減らす媒体を決める
- 配分の理由を、媒体ごとに文章で書き、提案資料にまとめる
- 自動毎月の第1月曜、広告主ごとに、前週までの媒体別の出稿と、地域別・週ごとの売上をそろえる
- 自動Python が、Meridian のモデルに渡す形(地域 × 週 × 媒体)に並べ、欠けや合計の食い違いを確かめる
- 自動Meridian でモデルを学ばせ直し、媒体ごとの ROI の見込みと幅、効き方の曲線を出す
- 自動翌月の予算の総額と、媒体ごとの増減の上限と下限を入れて、配分の案を出す
- 自動案の表と ROI の幅を Claude API に渡し、媒体ごとの理由と注意書きの下書きを、決まった形の JSON で受け取る
- 自動下書きの文中の数字が、すべて案の表にあるかを Python で照らす
- 人担当者が案と下書きを見て、媒体社との枠の契約と広告主の事情を確かめ、配分と説明を決める
- 人月末の打ち合わせで、広告主に説明する
- 自動翌月が過ぎたら、案と決めた配分と、実際の売上を記録する
各工程の詳しい説明を読む
- 担当者が、前年の同じ月の媒体ごとの配分の表を開く
- ネット広告の管理画面から、前月の媒体ごとの成果(申し込み・来店の見込み)を書き出す
- テレビ・ラジオ・折込・交通広告の前月の出稿と、広告主の売上の推移を表計算で並べる
- 前月に増やした媒体の週と、売上の伸びた週を見比べ、効いた媒体の見当を付ける
- 前年の配分を下敷きに、増やす媒体と減らす媒体を決める
- 配分の理由を、媒体ごとに文章で書き、提案資料にまとめる
(a)媒体を同じ物差しで比べていない。 2番目の管理画面の成果はネット広告だけのもので、テレビと折込は4番目の見比べでしか効き目を見ていません。 同じ週にテレビと折込を両方増やしていると、どちらが効いたのか分かりません。
(b)管理画面の成果が重なっている。 検索連動広告とSNS広告の管理画面は、同じ客の1回の申し込みを、それぞれの成果に数えることがあります。 足し合わせると、広告主の実際の申し込みより多くなります。
(c)効き目の持ち越しと頭打ちが見えない。 テレビのスポットは、流した週より後の週にも売上を押し上げることがあります。前月の週ごとの見比べだけでは、持ち越した分を見落とします。 増やし続けた媒体がどこで頭打ちになるかも、表を並べただけでは分かりません。
(d)理由の説明に時間がかかる。 6番目の文章は、担当者がゼロから書いています。根拠の数字を表から拾い、言い回しを整えるだけで1社に1時間近くかかり、 担当者ごとに説明の厚さが違います。
- 【自動】 毎月の第1月曜、広告主ごとに、前週までの媒体別の出稿と、地域別・週ごとの売上をそろえる
- 【自動】 Python が、Meridian のモデルに渡す形(地域 × 週 × 媒体)に並べ、欠けや合計の食い違いを確かめる
- 【自動】 Meridian でモデルを学ばせ直し、媒体ごとの ROI の見込みと幅、効き方の曲線を出す
- 【自動】 翌月の予算の総額と、媒体ごとの増減の上限と下限を入れて、配分の案を出す
- 【自動】 案の表と ROI の幅を Claude API に渡し、媒体ごとの理由と注意書きの下書きを、決まった形の JSON で受け取る
- 【自動】 下書きの文中の数字が、すべて案の表にあるかを Python で照らす
- 【人】 担当者が案と下書きを見て、媒体社との枠の契約と広告主の事情を確かめ、配分と説明を決める
- 【人】 月末の打ち合わせで、広告主に説明する
- 【自動】 翌月が過ぎたら、案と決めた配分と、実際の売上を記録する
7番目が、この設計の分かれ目です。 案は出しますが、配分を決めるのは担当者です。 テレビの枠は数か月前に押さえていて動かせないことがあり、広告主には新店の開業や改装の予定があります。どちらもモデルの外の事情です。
6番目を Python に任せるのも、意図してのことです。 生成AIの説明文が読みやすいほど、中の数字が正しいかを人が読み落とします。 数字の照らし合わせは、機械で全部行います。
02今回想定するシステム構成
媒体別の出稿の記録(テレビ・ラジオ・折込・交通・ネット広告)/広告主の店舗別の週の売上 │ 毎月の第1月曜に、前週までをそろえる ▼【トリガー】定時実行 Python(pandas) ├──▶ 地域 × 週 × 媒体の形に並べる/欠けと合計の確認 ▼ Meridian(ベイズのマーケティング・ミックス・モデル) │ 媒体ごとの ROI の見込みと信用区間、効き方の曲線 ▼ Meridian の BudgetOptimizer ── 翌月の予算の総額と、媒体ごとの上限・下限で配分の案 ▼ Claude API ── 案の表と ROI の幅だけを使って、媒体ごとの理由と注意書きの下書き(JSON) ▼ Python ── 下書きの中の数字が案の表にあるかを照らす ▼ 【担当者が確かめて配分と説明を決め、広告主に説明】
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Python(Meridian:ベイズのマーケティング・ミックス・モデル) | PyMC-Marketing、Robyn(R) |
| 生成AI | Claude API(配分の理由と注意書きの下書き) | OpenAI API、Gemini API |
| データの取得元 | 媒体ごとの出稿の記録と、広告主から届く売上の表 | ネット広告の管理画面のAPI |
| 計算の環境 | GPU のあるクラウドの計算の環境 | 社内の GPU のあるサーバー |
| 案の出力先 | 共有フォルダの広告主ごとの資料 | 社内のダッシュボード |
Meridian は、Python 3.11〜3.13 で動き、GPU を1つ以上使うことが勧められています。 公式の説明では、モデルは NUTS という MCMC の手法でまとめて学ばせるため計算が重く、GPU で動かすと学ばせる時間が大きく縮むとされています。T4 の GPU と 16GB のメモリで試験されているとも書かれています。広告主20社を毎月学ばせ直すので、計算の環境は最初に用意します。
広告主の売上は、媒体社にもネット広告の媒体にも渡しません。 モデルは自社の計算の環境の中で動かし、Claude API に渡すのは案の表と ROI の幅という、集計された数字だけです。店舗ごとの売上は渡しません。
ネット広告の管理画面の成果は、物差しには使いません。 出稿の量(表示の回数と費用)だけを使います。管理画面の成果は、担当者が案を確かめるときの参考に並べるだけです。
03どうやって実装するのか
処理の起点を決める
毎月の第1月曜の定時実行を起点にします。 広告主から前週分の売上の表が届くのが月曜の朝で、月末の打ち合わせまでに3週間ある時期です。担当者が案を確かめ、媒体社と枠の相談をする時間を残します。
学ばせ直しは広告主ごとに毎月行います。 新しい4〜5週分の記録を足して学ばせ、前月のモデルと ROI の見込みが大きく変わった媒体があれば、一覧の先頭に出します。 大きく変わった理由が、記録の誤りか本当の変化かを、担当者が先に確かめるためです。
翌月の予算の総額が決まっていない広告主は、案を出しません。 総額の決まる前月の中ごろに、担当者が総額を入力した時点で配分の計算だけをやり直せるようにします。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 売上 | 地域(8つの商圏)× 週の売上の合計 | 広告主から届く店舗別の売上の表 |
| 媒体の出稿 | 媒体 × 地域 × 週の、出稿の量(テレビは GRP、折込は部数、交通は掲出の面数、ネット広告は表示の回数)と費用 | 媒体ごとの出稿の記録、ネット広告の管理画面の書き出し |
| 調整の列 | 地域 × 週の、特売の有無、店舗の数、祝日の数、気温 | 広告主の販促の予定、暦、気象情報の提供元 |
| 地域の人口 | 商圏ごとの人口 | 公的な統計の表 |
| 翌月の条件 | 予算の総額、媒体ごとの増減の上限と下限、動かせない枠 | 担当者が入力 |
質を決めるのは、売上の列の意味です。 公式の説明では、モデルの答え(KPI)は地域と時間の両方で足し合わせられるものである必要があるとされています。店舗の売上の合計は足し合わせられますが、客単価や来店率のような率は使えません。 媒体の列も同じで、表示の回数や費用は足せますが、クリック率や広告費用の回収率(ROAS)は使えません。
調整の列を省かないでください。 公式の説明では、交絡(広告と売上の両方に効くもの)を扱うために、調整の列(control variables)が必要とされています。特売の週にテレビも増やしている広告主では、特売の列が無いと、特売の売上がテレビの効き目に見えます。
記録の長さを確かめます。 公式の説明では、週ごとの記録を集めることが勧められ、地域別のモデルなら少なくとも2年分、全国でまとめるモデルなら3年分が要るとされています。月ごとの記録しか無いと、学ばせても収まらないか、幅が広くなるおそれがあるとされています。
データの取得方法を決める
媒体ごとの出稿の記録を、地域 × 週の形にそろえます。 形は媒体ごとに違うので、媒体ごとの読み替えの表を作って固定します。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 地域 × 週の売上 | 広告主の売上の表 | モデルの答え |
| テレビ・ラジオの GRP と費用 | 媒体社の放送の確認の記録 | 媒体の列 |
| 折込の部数と費用 | 折込の手配の記録 | 媒体の列 |
| 交通広告の面数と費用 | 掲出の記録 | 媒体の列 |
| ネット広告の表示の回数と費用 | 管理画面の書き出し(地域の配信の設定ごと) | 媒体の列 |
| 特売・店舗の数 | 広告主の販促の予定 | 調整の列 |
県ごとにしか分からないテレビとラジオは、地域に割り振ります。 公式の説明では、全国(ここでは県)の単位の媒体を地域別のモデルに入れるときは、地域の単位に割り振るよう勧められています。県の GRP を、商圏ごとの人口の比で8つの地域に割ります。
欠けた週の扱いを決めます。 公式の説明では、モデルには欠けの無い記録が要り、媒体の欠けは0で埋めてよいが、売上と調整の列は0で埋めてはいけないとされています。売上の表が届かなかった週は、広告主に確かめて埋めてもらうまで、その月の学ばせ直しを止めます。
AIへ渡す前に整形する
- 地域 × 週 × 媒体の形にそろえる … 週は月曜から日曜にそろえます。媒体社の放送の確認の週の区切りが違う場合は、日ごとに割ってから週にまとめ直します
- 合計を照らす … 媒体ごとの費用の合計が、請求の合計と合うかを確かめます
- 出稿の少ない媒体を束ねる … 公式の説明では、費用の少ない媒体は他とまとめるよう勧められています。ROI の見込みが不安定になるからです。 動画広告とSNS広告の費用が少ない広告主は、「SNS・動画」にまとめます
- キャンペーンの重なりを確かめる … 公式の説明では、キャンペーンを足し合わせるのは互いに重ならないことが前提とされています。同じ枠を2つのキャンペーンに数えていないかを見ます
- 費用だけの媒体に印を付ける … 表示の回数や GRP が無く、費用しか分からない媒体は、費用を出稿の量の代わりに使い、印を付けます。単価が月によって大きく動く媒体では、効き目の見込みがずれるおそれがあるからです
- ROI の事前の見当を入れる … 過去に地域を分けて出稿を止めた試し(地域の実験)の結果があれば、その媒体の ROI の事前の見当として入れます
モデルに渡す1行は、次のような形にします。1行が「ある広告主の、ある地域の、ある週」です。
{
"advertiser_id": "A-012",
"geo": "area_3",
"week_start": "2026-09-07",
"kpi_sales_yen": 48200000,
"population": 210000,
"media": {
"tv_spot": { "grp": 62.0, "spend_yen": 1800000 },
"radio": { "grp": 0.0, "spend_yen": 0 },
"insert": { "copies": 38000, "spend_yen": 420000 },
"transit": { "panels": 12, "spend_yen": 300000 },
"search": { "impressions": 51000, "spend_yen": 260000 },
"social_video": { "impressions": 180000, "spend_yen": 150000 }
},
"controls": { "promo_flag": true, "store_count": 4, "holidays": 1, "temp_c": 27.5 },
"spend_only_flags": []
}
6番目の地域の実験は、あれば強い手がかりになります。 公式の説明では、実験の結果で媒体の見込みを調整(キャリブレーション)できるとされています。広告主と相談して、ある地域で折込を1か月止める、といった試しを年に1回入れると、見込みの幅が狭まります。
AIに処理させる
2つの役に分けます。 Meridian には、媒体ごとの効き方の見込みと配分の案をさせます。Claude API には、その案の数字を使った理由の文の下書きだけをさせます。
| 役 | させること | させないこと |
|---|---|---|
| Meridian | 媒体ごとの ROI の見込みと信用区間、効き方の曲線、翌月の配分の案 | 予算の総額を決める |
| BudgetOptimizer | 総額の中で、媒体ごとの上限と下限を守って配分を決める | 動かせない枠を動かす |
| Claude API | 案の表と ROI の幅だけを使い、媒体ごとの理由と注意書きを書く | 表に無い数字を書く、効き目を言い切る |
配分の案は、BudgetOptimizer で出します。 公式の説明では、optimize() の fixed_budget を True にすると総額を固定した配分になり、budget を省くと過去の総額になるとされています。翌月の総額は必ず budget に入れます。 媒体ごとの増減の幅は spend_constraint_lower と spend_constraint_upper で決め、総額を固定した配分ではどちらも既定が0.3とされています。
この0.3をそのまま使わないでください。 媒体ごとに動かせる幅は違います。テレビの枠を押さえてある月は、テレビの上限と下限を0にして動かさないようにし、ネット広告は幅を広く、折込は部数の手配の締切の関係で幅を狭くします。媒体ごとの幅は、担当者が翌月の条件として入力します。
Claude API には、構造化出力で決まった形の JSON を返させます。 公式の説明では、output_config.format に type: "json_schema" とスキーマを入れて指定し、オブジェクトでは additionalProperties を false にする必要があり、minimum・maximum のような数値の制約や、minLength・maxLength のような文字の長さの制約は使えないとされています。金額の範囲や文の長さは、受け取った後に Python で確かめます。
説明文の数字は、照らし合わせで守ります。 下書きの reason と caveat の中の数字(金額、割合、ROI)をすべて抜き出し、渡した案の表と ROI の幅の値と一致するかを照らします。 1つでも表に無い数字があれば、その媒体の下書きを差し戻して書き直させ、2回目も外れたら担当者に「下書きなし」で渡します。
指示内容を固定する
あなたは広告会社のマーケティング担当として、広告主に翌月の媒体の予算の配分の案を説明する文の下書きを作ります。
下の【配分の案】【ROI の見込み】だけを使って書いてください。表に無い数字を書かないでください。
【書くこと】
媒体ごとに次を書いてください。
- reason: 案で予算を増やす・減らす・据え置く理由。効き方の曲線の位置(頭打ちに近いか、まだ伸びる余地があるか)と、ROI の見込みの幅を使って説明する
- caveat: その媒体の見込みについて広告主に伝えるべき注意。幅が広い、費用しか分からない媒体である、地域の実験の結果が入っていない、など
- evidence_keys: 理由に使った表の項目名
【厳守事項】
- 数字は表の値をそのまま書いてください。四捨五入して別の数字にしないでください。
- 「必ず売上が増える」「確実に」など、効き目を言い切る書き方をしないでください。
「モデルの見込みでは」と前置きし、幅があることを書いてください。
- ROI の見込みの幅(信用区間)が 1 をまたぐ媒体は、「効き目がはっきりしない」と書いてください。
- 予算の総額を増やす・減らす提案をしないでください。総額は決まっています。
- locked が true の媒体は、「枠を押さえてあるため据え置き」とだけ書いてください。
- spend_only が true の媒体は、caveat に「出稿の量が費用でしか分からないため、単価の変動で見込みがずれるおそれがある」と書いてください。
- 他の広告主、競合の会社、媒体社の名前を書かないでください。
- 媒体ごとの管理画面の成果(申し込みの件数など)には触れないでください。
【配分の案】{allocation_table}
【ROI の見込み】{roi_table}
【広告主の表記】{advertiser_display_name}
「表に無い数字を書かない」を冒頭と厳守事項の2か所に書くのが大事です。 読みやすい文を書かせると、「売上が約1割伸びる見込みです」のような、表の値を言い換えた数字を作ります。言い換えは照らし合わせで外れるので、表の値をそのまま書かせます。
「幅が1をまたぐ媒体は、はっきりしないと書く」も大事です。 ROI の見込みの中心が1を超えていても、幅の下側が1を下回るなら、出稿した費用を売上で取り戻せていない可能性があります。 そこを言い切らずに書かせることで、広告主の期待をモデルの確かさに合わせます。
出力形式を固定する
Meridian の案と Claude API の下書きを、広告主ごとに1つの JSON にまとめます。
{
"advertiser_id": "A-012",
"target_month": "2026-11",
"total_budget_yen": 0,
"allocation": [
{
"channel": "tv_spot",
"current_spend_yen": 0,
"proposed_spend_yen": 0,
"change_ratio": 0.0,
"roi_median": 0.0,
"roi_ci_low": 0.0,
"roi_ci_high": 0.0,
"locked": false,
"spend_only": false
}
],
"explanations": [
{ "channel": "tv_spot", "reason": "", "caveat": "", "evidence_keys": [] }
],
"number_check": { "passed": true, "unmatched": [] },
"model_version": "",
"decided_allocation": null,
"decided_by": "",
"note": ""
}
1つ目の理由は、案と説明を同じ単位で並べられることです。 allocation は Meridian が埋め、explanations は Claude API が埋めます。媒体ごとに、数字と文が隣り合います。
2つ目は、number_check で照らし合わせの結果が残ることです。 unmatched に表に無い数字が入っていれば、担当者はその媒体の文を使わずに書き直します。
| 列 | 担当者が見ること |
|---|---|
roi_ci_low と roi_ci_high | 幅が広い媒体は、配分を大きく動かさない |
locked | 枠を押さえた媒体が動いていないか |
spend_only | 費用でしか量が分からない媒体の見込みは、割り引いて読む |
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 媒体ごとの出稿の記録 | 読み取りのみ | 地域 × 週の出稿の量と費用 |
| 広告主の売上の表 | 読み取りのみ(取り決めに基づく受け取り) | 店舗別の週の売上 |
| GPU のある計算の環境 | 社内のジョブとして実行 | Meridian の学ばせ直しと配分の案 |
| Claude API | API呼び出し | 案の表と ROI の幅を渡し、下書きを受け取る |
| 共有フォルダ | 資料の書き出し | 広告主ごとの案と下書き |
ネット広告の管理画面には書き込みません。 予算の変更を自動で入れると、広告主と合意する前に配信の量が変わります。 配分が決まった後に、担当者がいまと同じ手順で設定します。
提案資料への貼り込みは、担当者が手で行います。 確かめる前の文が資料に残る経路を作らないためです。
人が確認する
- 前月から大きく変わった媒体を見る … ROI の見込みが大きく動いた媒体は、記録の誤り(費用の入れ忘れ、週の区切りのずれ)を先に疑います
- 幅の広い媒体を見る … 幅が広い媒体に大きな増減が出ていれば、増減の上限と下限を狭めて計算し直します
- モデルの外の事情を足す … 新店の開業、改装、競合の出店、媒体社の枠の空きを見て、配分を直します
- 下書きを読む …
number_checkが通っていても、言い切りや、広告主に伝わりにくい言い回しが無いかを読みます - 決めた配分を記録する …
decided_allocationとnoteを埋めます
1番目を省かないでください。 モデルは記録の誤りも「効き目の変化」として読みます。テレビの費用を1週分入れ忘れただけで、テレビの ROI が跳ね上がることがあります。
目標は、20件をならして1件90分です。 前月と大きく変わらない広告主は案と下書きを確かめて30分ほどで終わり、大きく変わった媒体のある広告主や、新店のある広告主は、計算のやり直しと媒体社との相談で数時間かかります。 その配分でならすと90分です。
例外に対処する
| 起きること | 対応 |
|---|---|
| 売上の表が届かない週がある | 0で埋めず、その月の学ばせ直しを止めて広告主に確かめる |
| 媒体の費用の合計が請求と合わない | 合うまで学ばせ直さず、担当者に知らせる |
| 学ばせても収まらない(収束しない) | 前月のモデルで配分を出し、「前月のモデル」と書く。媒体の束ね方を見直す |
| ROI の幅がすべての媒体で広い | 配分を前月から大きく動かさない案にし、地域の実験を広告主に相談する |
| 下書きに表に無い数字が入る | その媒体を書き直させ、2回目も外れたら「下書きなし」で渡す |
| 新しい媒体を使い始めた | 記録が1年分たまるまで、その媒体を案の対象から外して据え置く |
| 翌月の総額が決まっていない | 案を出さず、総額の入力を待つ |
| 計算の環境が使えない | 前月の案を「古い」と印を付けて残し、担当者に知らせる |
3行目で前月のモデルを使うのは、誤りの向きを決めるためです。 収まっていないモデルの配分は、学ばせるたびに大きく変わり、どれも信用できません。 前月の配分を下敷きに担当者が決めるほうが、広告主への説明として一貫します。
記録を残す
- 毎月の学ばせる記録(地域 × 週 × 媒体)と、その時点の売上の表の版
- モデルの版と、媒体ごとの ROI の見込みと幅、効き方の曲線
- 翌月の条件(総額、媒体ごとの上限と下限、動かせない枠)と配分の案
- Claude API に渡した表、受け取った下書き、照らし合わせの結果
- 担当者が決めた配分と理由、広告主に説明した日
- 翌月の実際の出稿と売上
4つ目を残すのは、説明文の出どころを後から示せるようにするためです。 広告主から「この数字はどこから」と聞かれたとき、渡した表と受け取った下書きを並べて見せられます。
04実装レベルの3段階
最小構成では、毎月の配分に使えません。 1社を全国でまとめたモデルで、確かめるための段階です。 半自動化で、1件240分が140分程度になります。 記録をそろえる作業と配分の見当は無くなりますが、媒体ごとの理由の文と資料づくりが担当者に残ります。本格構成で90分になり、この段階が本記事の想定です。 差が大きいのは、理由の文を数字を拾いながら書いていた時間が無くなるからです。 段階を飛ばさないでください。 半自動化の案を3か月見ると、ROI の見込みが毎月大きく動く広告主と、記録の誤りの多い媒体が先に分かります。
05工数削減シミュレーション
導入後 20件 × 90分 ÷ 60 = 30 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- テレビ・ラジオ・新聞折込・交通広告などのクリック数の取れない媒体と、検索連動広告・SNS広告などのネット広告を、同じ広告主のために組み合わせて出稿している広告会社。広告主から、店舗の売上や来店・資料請求の件数を地域別・週ごとにもらえる取り決めがあり、2年以上の記録がそろっている場合。毎月の予算の配分を、前年の配分と媒体ごとの管理画面の成果で決めていて、媒体をまたいだ比べ方の根拠を広告主に聞かれている場合。
- ネット広告だけを出稿していて、媒体の管理画面の成果で配分を決められる広告主(その場合は管理画面の成果をもとにした配分の構成が向きます)。広告主の売上の記録を地域別・週ごとにもらえない場合。出稿の記録が1年分しかない場合。なお、翌月の予算の総額、媒体社との枠の契約、配分を広告主に約束するかどうかの判断は、この構成では代替できません。
07最小構成で試す方法
- 媒体を組み合わせている広告主から1社を選び、2年分の週ごとの売上の表を地域でまとめる
- 同じ期間の媒体ごとの週の費用を表計算に並べる
- Meridian の公式の Getting Started のノートブックを、公式の見本のデータで一度動かして手順をつかむ
- 1社の記録を同じ形に直して、全国(地域を分けない)のモデルで学ばせる
- 出てきた媒体ごとの ROI の幅と、担当者が経験で持っている「効いている媒体」の見当を比べる
1社は必ずやってください。 広告主20社に広げる前に、「広告主の売上を物差しにすると、媒体の効き方の見当が担当者の経験と合うのか、ずれるのか」を確かめます。売上の表は、広告主との取り決めの範囲で使ってください。
| 出てきた内容 | 判断 |
|---|---|
| 幅が狭く、担当者の見当と大筋で合う | 地域別のモデルと配分の案に進む |
| 幅が狭く、担当者の見当とずれる媒体がある | ずれた媒体の記録を確かめ、広告主に地域の実験を相談する |
| どの媒体も幅が広い | 記録が足りない。 調整の列(特売)を足すか、記録の期間を延ばす |
3行目が出ることは珍しくありません。 失敗ではなく、媒体を同じ時期にまとめて増減していて、記録から効き目を分けられないことが分かったということです。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 管理画面の成果を足して物差しにする | 広告主の売上を物差しにする。 管理画面の成果は重なる |
| 率(客単価・クリック率・ROAS)を列に入れる | 足し合わせられる量(売上、表示の回数、費用)だけを使う |
| 特売の週にテレビも増やしていて効き目が混ざる | 特売を調整の列に入れる |
| 売上の欠けを0で埋める | 埋めずに広告主に確かめる。0で埋めてよいのは媒体の欠けだけ |
| 費用の少ない媒体の ROI が極端に出る | 他の媒体と束ねる |
budget を省いて過去の総額で配分する | 翌月の総額を必ず入れる |
| 既定の増減の幅0.3のまま、押さえた枠を動かす | 媒体ごとに上限と下限を入れ、押さえた枠は0にする |
| 説明文が表の値を言い換えた数字を作る | 表の値をそのまま書かせ、数字を機械で照らす |
| 説明文が効き目を言い切る | 「モデルの見込みでは」と幅を書かせ、幅が1をまたぐ媒体は「はっきりしない」とする |
| 下書きがそのまま提案資料に入る | 担当者が読んでから手で貼る |
上の3行が、この構成の失敗のほとんどです。 どれも、物差しと列の意味がずれているという同じところから出ています。
下の2行は、広告主との関係に直結します。 言い切った説明で配分を決め、翌月の売上が伸びなければ、モデルではなく広告会社の信頼が落ちます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 広告主の店舗別の週の売上、販促の予定、媒体ごとの出稿の量と費用、媒体社との取引の条件です。どれも広告主と媒体社との取り決めで扱いが決まる情報です。
- 広告主の売上を取り決めの範囲で使う … 売上の表は、その広告主の配分のためだけに使います。他の広告主のモデルに混ぜない、媒体社に渡さないを書面で決めます
- 生成AIに渡すのは集計された表だけにする … Claude API に渡すのは、媒体ごとの配分の案と ROI の幅です。店舗ごとの売上、販促の予定、媒体社との取引の単価は渡しません
- 説明文の数字を機械で照らす … 表に無い数字が入った文は使いません
- 効き目を言い切らない … ROI は幅のある見込みです。提案資料にも「モデル条件による見込み」と書きます
- 配分は人が決める … この構成は案を出すだけです。翌月の総額と配分の約束は、担当者と広告主が決めます
- ネット広告の管理画面に自動で書き込まない … 合意の前に配信の量が変わる経路を作りません
- 計算の環境を見られる人を限る … 広告主20社の売上がそろう場所です。広告主ごとに保存の場所を分け、担当者だけが開けるようにします
誤りが起きた場合のリスクは、記録の誤りや言い切った説明で配分を大きく動かすことと、広告主の売上が取り決めの外に出ることの2つです。 前者は広告主の売上と信頼にひびき、後者は取引そのものにひびきます。だから案は幅を付けて出し、生成AIには集計された表だけを渡しています。
10まず何から始めるか
1週目:1社と取り決める
媒体を組み合わせている広告主から1社を選び、店舗別の週の売上の表の形と、使い方の範囲を書面で決めます。2年分の記録がそろうかを確かめます。
2週目:公式のノートブックで手順をつかむ
Meridian の Getting Started のノートブックを、公式の見本のデータで動かします。GPU のある環境で動かし、学ばせる時間の見当を付けます。
3週目:1社の記録をそろえる
媒体ごとの出稿の記録を地域 × 週の形にそろえ、特売の列を足します。県ごとのテレビとラジオを、人口の比で地域に割り振ります。 費用の合計が請求と合うかを確かめます。
4週目:1社で学ばせる
全国でまとめたモデルで学ばせ、媒体ごとの ROI の幅を担当者の見当と比べます。ずれた媒体の記録を確かめます。
2か月目: 地域別のモデルと BudgetOptimizer の配分の案を足し、担当者は従来どおり決めながら案と並べます。3か月目以降: Claude API の説明文の下書きと数字の照らし合わせを足し、広告主を5社、10社と広げます。案と決めた配分と翌月の売上を3か月分並べ、担当者が案を下敷きに説明できるようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| Meridian が、広告主が自社でモデルを作って動かせるマーケティング・ミックス・モデルの仕組みで、ベイズの因果の推論にもとづき、地域別の記録を扱えること。実験の結果などで調整できること。Python 3.11〜3.13 が要り、GPU を1つ以上使うことが勧められ、T4 の GPU と 16GB のメモリで試験されていること。NUTS という MCMC の手法を使い計算が重いこと(README の引用の版は 2.1.0、2026年) | GitHub: google/meridian | 2026-10-15 |
| Meridian の中心がベイズのモデルで、広告の効き目の持ち越しと頭打ちを前提に組み込み、ROI の見込みと信用区間、効き方の曲線、予算の配分の案を出すこと。地域別の記録を使えること | Google for Developers: Meridian の紹介 | 2026-10-15 |
| 週ごとの記録が勧められ、地域別のモデルでは少なくとも2年分、全国のモデルでは3年分が要ること。KPI が地域と時間で足し合わせられる必要があること。調整の列が交絡を扱うために要ること。媒体の欠けは0で埋めてよいが KPI と調整の列は0で埋めないこと。率(CTR、ROAS)は使えないこと。費用の少ない媒体はまとめること。キャンペーンを足すのは重ならない前提であること。全国の単位の媒体は地域に割り振ること | Google for Developers: Meridian のデータの集め方 | 2026-10-15 |
BudgetOptimizer.optimize() の fixed_budget(既定 True)、budget(省くと過去の総額)、spend_constraint_lower・spend_constraint_upper(総額を固定した配分では既定0.3、総額を変える配分では1)、target_roi・target_mroi(総額を変える配分だけで使う) | Google for Developers: BudgetOptimizer | 2026-10-15 |
Claude API の構造化出力を output_config.format に type: "json_schema" で指定すること。オブジェクトの additionalProperties を false にする必要があること。minimum・maximum などの数値の制約、minLength・maxLength などの文字の制約は使えないこと | Claude API Docs: Structured outputs | 2026-10-15 |
翌月の予算の総額、媒体社との枠の契約、広告主の売上の使い方の範囲は、自社と広告主の取り決めで決めてください。 本記事は上記の公式情報で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1669)についてのご相談はこちらから。
