広告予算配分の戦略:検索・SNS・ディスプレイにどう割り振る?
公開レポートでは、2024年時点の世界のデジタル広告費は検索が約4割、SNSが約3割、残りをディスプレイ等が占めるとされています[1]。また一般的な目安として、検索広告の平均CVR(コンバージョン率)はおおむね3〜5%台、SNSは1%前後、ディスプレイは0.5%未満と紹介されることが多い、という整理が見られます[2,3]。ただし、ラストクリック(最後の接点に成果をすべて帰属する方法)では検索が高効率に見えやすい一方、実際の増分効果(インクリメンタリティ)は文脈によって大きく変動します[4]。さらに、サードパーティクッキーの廃止やモバイル計測の制約により、直感や前例踏襲の配分は相対的にリスクが高まっています[5,6]。エンジニアリングとファイナンスの視点で予算配分を再設計し、限界費用と限界収益の均衡(最後の1円の投下で各チャネルの増分収益が等しくなる点)に基づいて配分を決める。これが、本稿で提示する実務的な原則です。
戦略の前提を固める:事業KPIと財務制約に接続する
配分の議論は、上位KPIと財務条件なしには空回りします。まず事業として達成したい新規売上や有料登録、パイプライン額を定義し、許容CAC(顧客獲得単価)、目標LTV/CAC、回収期間を明文化します。たとえばサブスクリプションであれば、平均ARPU(ユーザーあたり月次売上)、粗利率、チャーン率(解約率)からLTV(生涯価値)を推定し、回収期間を12カ月以内と定めれば、チャネルごとの入札や配分に明確なガードレールが生まれます。式としては、LTVは平均粗利×平均継続月数で表現し、CACはチャネル別支出を獲得数で割って求めます。LTV/CACが3以上、かつキャッシュフローの観点で回収期間が許容内であることを全体とチャネル別に確認します。ここで重要なのは、媒体のダッシュボード値ではなく、データウェアハウス上の基準でKPIを統一することです[6]。重複コンバージョンやセルフアトリビューションを除外し、グロスからネットの粗利ベースに正規化します。媒体間で計測仕様が異なるため、後段のモデルや配分判断の前提をDWHで一本化することが、誤差の蓄積を防ぎます。
# Python: LTV/CACと回収期間の算定例(ダミーデータ)
import pandas as pd
import numpy as np
# 例示データ
d = pd.DataFrame({
'channel': ['search','sns','display'],
'spend': [4000000, 3000000, 2000000],
'acq': [1200, 700, 300],
'arpu': [2000, 1900, 1800], # 月次売上の仮定値
'gross_margin': [0.7, 0.7, 0.7],
'monthly_churn': [0.06, 0.07, 0.08]
})
d['ltv'] = d['arpu'] * d['gross_margin'] / d['monthly_churn']
d['cac'] = d['spend'] / d['acq']
d['ltv_cac'] = d['ltv'] / d['cac']
d['payback_months'] = d['cac'] / (d['arpu'] * d['gross_margin'])
print(d[['channel','ltv','cac','ltv_cac','payback_months']])
データの整備:ラストクリックの罠を避ける
配分を誤らせる最大の要因は、計測バイアスです。ラストクリックは検索に有利に働き、ビュースルーはディスプレイに過剰な効果を帰属しがちです[4]。iOSのトラッキング制限やサードパーティクッキーの段階的廃止により、MTA(マルチタッチアトリビューション)の精度は低下しています[5,6]。したがって、媒体計測は参考値としつつ、ウェブ/アプリの一次データ、サーバーサイドイベント、CRMのリフト指標を軸に統合し、MMM(マーケティングミックスモデリング)や地域分割のインクリメンタリティテストで補完します[6,4]。日次でチャネル×キャンペーンの支出、インプレッション、クリック、コンバージョン、売上・粗利を集計し、後段でモデリングに使える形に正規化します。
-- SQL: チャネル日次の正規化集計例(スキーマ例)
WITH base AS (
SELECT
date_trunc('day', ts) AS dt,
channel,
SUM(spend) AS spend,
SUM(impressions) AS imp,
SUM(clicks) AS clk,
SUM(conversions) AS conv,
SUM(revenue) AS rev
FROM ad_events
WHERE ts >= CURRENT_DATE - INTERVAL '120 days'
GROUP BY 1,2
)
SELECT
dt, channel, spend, imp, clk, conv, rev,
CASE WHEN clk > 0 THEN conv::float/clk ELSE 0 END AS cvr, -- コンバージョン率
CASE WHEN imp > 0 THEN clk::float/imp ELSE 0 END AS ctr, -- クリック率
CASE WHEN conv > 0 THEN spend/conv ELSE NULL END AS cpa -- 1獲得あたりコスト
FROM base;
3チャネルの特性を数値化する:意図、到達、飽和の三点を見る
検索広告、SNS広告、ディスプレイ広告は、ユーザー意図の顕在度、到達可能な規模、そして飽和(投下予算に対する限界効果の低下)の曲線が異なります。検索は「捕捉」のメディアで、顕在意図ゆえにCVRも高く、同一キーワード内では入札や品質スコアの制約の中で早い段階から限界効果が低下します。SNSは意図を喚起するメディアで、広いリーチとクリエイティブの差分でスケールしますが、学習期間とクリエイティブ疲労(同一クリエイティブの見飽き)への対処が鍵です。ディスプレイはリマインドとカバレッジを担い、直接CVRは低いが頻度設計とプレースメントの精度で増分を積み上げられます。ここでの要諦は、各チャネルの反応曲線(Spend→Incremental Conversions)の形を推定し、限界CPAが目標に収斂する水準まで配分することです。一般に検索は小さなβで早く飽和し、SNSは中程度、ディスプレイは大きなβで緩やかに立ち上がる形になります(パラメータは事業や市場で異なります)。
# Python: 単純な反応曲線(Michaelis-Menten型)の推定(合成データ例)
import numpy as np
import pandas as pd
from scipy.optimize import curve_fit
# 反応曲線: y = alpha * x / (beta + x)
def resp(x, alpha, beta):
return alpha * x / (beta + x)
# 例示データ(チャネルごとの日次spend→増分コンバージョン)
np.random.seed(42)
spend = np.array([0.2,0.5,0.8,1.2,2.0,3.0,4.5,6.0]) * 1e6
conv_search = resp(spend, 1600, 0.8e6) + np.random.normal(0, 30, len(spend))
conv_sns = resp(spend, 2200, 2.2e6) + np.random.normal(0, 35, len(spend))
conv_disp = resp(spend, 900, 3.5e6) + np.random.normal(0, 25, len(spend))
p_s, _ = curve_fit(resp, spend, conv_search, p0=[1500, 1e6])
p_n, _ = curve_fit(resp, spend, conv_sns, p0=[2000, 2e6])
p_d, _ = curve_fit(resp, spend, conv_disp, p0=[800, 3e6])
print({'search':p_s, 'sns':p_n, 'display':p_d})
限界費用と限界収益で配分を決める:均衡条件を使う
反応曲線が推定できたら、単位支出あたりの増分収益(あるいは増分コンバージョン×平均粗利)を微分し、各チャネルで限界ROAS(最後の1円の投下に対する収益)を等しくする点へ配分します。理論的には、検索・SNS・ディスプレイの限界ROASが同一となると、どの1円をどこに入れても同効になる状態です。現実には入札下限や在庫、フリークエンシー上限などの制約があるため、上下限のバンドを課し、その範囲で最適化します。以下は総額予算、粗利、上下限制約のもとで、グリッド探索により目的関数を最大化する簡易例です(数値は仮定値)。
# Python: 予算配分の単純最適化(仮定パラメータ)
import numpy as np
alpha = {'search':1500,'sns':2100,'display':900}
beta = {'search':0.8e6,'sns':2.2e6,'display':3.5e6}
margin = 8000 # 1コンバージョンあたり粗利の例
B = 10_000_000
bounds = {'search':(0.3,0.6),'sns':(0.2,0.5),'display':(0.1,0.3)}
chs = ['search','sns','display']
def resp(x,a,b):
return a*x/(b+x)
def revenue(alloc):
rev = 0.0
for i,ch in enumerate(chs):
spend = alloc[i]*B
conv = resp(spend, alpha[ch], beta[ch])
rev += conv*margin
return rev
best = None
for s in np.linspace(bounds['search'][0], bounds['search'][1], 16):
for n in np.linspace(bounds['sns'][0], bounds['sns'][1], 16):
d = 1.0 - s - n
if d < bounds['display'][0] or d > bounds['display'][1]:
continue
val = revenue([s,n,d])
if not best or val > best[0]:
best = (val, [s,n,d])
print('best_rev=', best[0], 'alloc=', dict(zip(chs,best[1])))
この結果は、反応曲線のパラメータ次第で変わります。検索のβが小さければ早く飽和し、SNSに予算が流れる傾向になります。逆にブランド指名比率が高い領域では検索の限界ROASが高止まりしやすく、ディスプレイやSNSの役割はブランド保全とボリューム確保に寄ります。大切なのは、同じ総額でも配分を動かすだけで増分収益が大きく伸びる可能性があるという前提をチームで共有することです(伸び幅は事業や市場に依存します)。
実務運用の設計:四半期で回す配分サイクル
配分は一度決めて終わりではありません。四半期の始点で配分を仮決めし、月次の再最適化、週次のガードレール調整で回すと、学習と安定性のバランスを取りやすくなります。開始時には、検索広告に対して意図の強いキーワード群を核に配分の下限を置き、SNS広告はクリエイティブのバリエーションを十分に用意して探索リスクを許容し、ディスプレイ広告は頻度上限とブランドセーフティのルールを先に固定します。月次では新規顧客比率やオーガニックの変動を含むインクリメンタル指標で再配分し、週次では入札上限や学習ステータスの逸脱のみを是正します。既存顧客へのリマインドを担うディスプレイ比率が高すぎると、短期効率は上がっても新規比率が落ち、数カ月後のパイプラインに負債を残します。
配分を裏付ける実験は、全体に対して小さく、しかし十分に検出力のある設計が必要です。地域分割のリフトテストでは、テスト地域でSNSまたはディスプレイの増分支出を行い、コントロール地域との差分で増分売上を推定します。CUPED(共分散を使ったプレ実績調整)のような手法を使うと必要期間を短縮できます。以下は非常に単純化した差分の差分によるリフト推定の例です。
# Python: 地域分割の単純リフト計測(合成データ)
import pandas as pd
# 例示:日次売上データ(テスト/コントロール)
df = pd.DataFrame({
'day': list(range(14)),
'sales_test': [100,102,98,101,99,103,100, 110,115,117,119,118,120,121],
'sales_ctrl': [101,99,100,100,98,102,101, 103,104,105,105,106,106,107],
'period': ['pre']*7 + ['post']*7
})
pre = df[df['period']=='pre']
post = df[df['period']=='post']
diff_pre = (pre['sales_test'].mean() - pre['sales_ctrl'].mean())
diff_post = (post['sales_test'].mean() - post['sales_ctrl'].mean())
lift = diff_post - diff_pre
print({'incremental_daily_sales': lift})
このような短い実験を四半期に1〜2回仕込み、MMMの長期的な推定と併走させると頑健性が上がります[6]。なお、ガバナンス観点ではブランドセーフティ、広告詐欺対策、プライバシー制約順守を必ず明文化し、配分の上下限と同様に変更管理の対象にしてください。GA4のモデル化コンバージョン、サーバーサイド計測、Privacy Sandboxの活用は、媒体横断の一貫性確保に有効です[5,6]。
ケーススタディ:月1億円をどう割り振るか
仮に月間予算1億円のB2Cサブスクリプション事業を想定し、粗利ベースの1獲得あたりの価値を8,000円、現状は検索5,000万円、SNS3,000万円、ディスプレイ2,000万円の配分とします。過去120日から推定した反応曲線が「検索のβが小さく早く飽和、SNSは中程度、ディスプレイは緩やかに立ち上がる」形だったと仮定すると、単純最適化のシミュレーションでは、検索4,500万円、SNS3,500万円、ディスプレイ2,000万円という配分で、同一総額における増分粗利が約18%伸びる可能性が示唆される、という結果になり得ます。これはあくまで想定シナリオであり、実データではパラメータと結果が大きく変わります。検証のため、該当配分で2週間の地域分割テストを実施し、差分の差分で平均日次増分売上+X万円が観測できれば、本格移行の判断材料になります。
よくある落とし穴と対策:配分を歪める要因を先に潰す
媒体帰属の重複やブランド指名流入のカニバリゼーションは、検索広告の見かけの効率を過大評価します。ブランド指名は指名専用のキャンペーンに分離し、配分評価の母集団から一度外します。SNSとディスプレイはクリエイティブ疲労が起きやすく、配分判断がクリエイティブ資産の量と質に依存します。学習を途切れさせない入札と、週2〜3本の新規クリエイティブ追加を運用規範に据えると、配分の上下を変えても性能が安定します。季節性やプロモーションは反応曲線を移動させるため、モデルに季節性ダミーや価格変数を含めて推定し直してください。供給側の在庫制約やSLAも配分の上限を決める現実的な制約です。需要を伸ばしても供給が追いつかないなら、回収期間の上振れによってファイナンス目標を毀損します。
最後に、MMMと運用データの橋渡しをするための簡易スクリプトを残します。これにより、媒体ログの週次集計、季節性の調整、反応曲線の再推定までを自動化し、配分案をダッシュボードに出力できます。
# Python: 週次集計→季節性調整→再推定の雛形(概念実装)
import pandas as pd
import numpy as np
from scipy.optimize import curve_fit
raw = pd.read_parquet('ads_daily.parquet')
raw['week'] = pd.to_datetime(raw['date']).dt.to_period('W').apply(lambda r: r.start_time)
weekly = raw.groupby(['week','channel']).agg({'spend':'sum','conv':'sum'}).reset_index()
# 季節性ダミー(週番号)
weekly['w'] = pd.to_datetime(weekly['week']).dt.isocalendar().week.astype(int)
season = pd.get_dummies(weekly['w'], prefix='w', drop_first=True)
# チャネルごとのβ推定を季節性で補正(簡易)
params = {}
for ch in weekly['channel'].unique():
df = weekly[weekly['channel']==ch].copy()
X = df[['spend']].values.flatten()
y = df['conv'].values
p,_ = curve_fit(lambda x,a,b: a*x/(b+x), X, y, p0=[1000, 1e6], maxfev=10000)
params[ch] = p
print(params)
この一連の実装は、データエンジニアリングの手元で回せることが強みです。媒体APIの取り込み、DWHでの正規化、推定と最適化、ダッシュボードへの配分案出力までを小さなパイプラインにし、月初の配分会議に自動で材料を届ける。これが配分の政治性を和らげ、結果に集中するための最短ルートです。
まとめ:限界の均衡で配分を決め、実験で確かめる
検索広告、SNS広告、ディスプレイ広告の予算配分は、感覚ではなくデータで決められます。事業のKPIと財務制約を先に固定し、チャネルごとの反応曲線を推定して、限界ROASが均衡する点まで配分を動かす。月次で再最適化し、四半期に小さな実験で裏付ける。この反復を続ければ、同じ総額でも増分粗利が二桁パーセント伸びる可能性があります。次の四半期に向けて、まずはデータウェアハウス上でチャネル×日次の正規化を整え、簡易反応曲線の推定と配分シミュレーションを一本のノートブックに落とし込んでみてください。どの1円をどこに置くかという問いに、チームが同じ数直線で答えられるようになったとき、配分の議論はようやく生産的になります。
参考文献
- DataReportal. Digital 2025: Global Advertising Trends — Channel share highlights. https://datareportal.com/reports/digital-2025-sub-section-global-advertising-trends#:~:text=Search%20continues%20to%20attract%20the,spend%20to%20online%20search%20platforms
- Owned Media. リスティング広告の平均CVRは?目安と改善ポイントを解説(SNS/ディスプレイの目安含む). https://owned.co.jp/column/ads/listing-ads-cvr-average/#:~:text=%2A%20CVR%E3%81%AF%E5%85%A8%E5%BA%83%E5%91%8A%E5%BD%A2%E5%BC%8F%E3%81%AE%E4%B8%AD%E3%81%A7%E6%9C%80%E3%82%82%E9%AB%98%E3%81%8F%E3%81%AA%E3%82%8B%E5%82%BE%E5%90%91%EF%BC%88%E6%A5%AD%E7%95%8C%E5%B9%B3%E5%9D%87%EF%BC%9A3%E3%80%9C5
- Tectera. Google Ads Conversion Rates by Industry and How to Compare Them. https://tectera.com/google-ads-conversion-rates-by-industry-and-how-to-compare-them/#:~:text=The%20average%20conversion%20rate%20for,Google%20Ads%20tends%20to%20fluctuate
- Search Engine Land. Incrementality testing in advertising: winners and losers. https://searchengineland.com/incrementality-testing-advertising-winners-losers-442852#:~:text=,compared%20to%20other%20ad%20formats
- CMSWire. Third-party cookie deprecation: Preparing for marketing’s future. https://www.cmswire.com/digital-marketing/third-party-cookie-deprecation-preparing-for-marketings-future/#:~:text=For%20one%2C%20cookies%20let%20far,without%20knowing%20much%20at%20all
- EXPRE. Is MMM the key to cookieless attribution? https://www.expre.co.uk/is-mmm-the-key-to-cookieless-attribution/#:~:text=The%20tightening%20of%20privacy%20has,attributing%20the%20surge%20to%20advertisers