こんにちは。TVerで広告周りのデータサイエンティストをしている土田です。
テレビCMやストリーミング広告の効果を予測する際、「グロスリーチ(延べ接触人数)」と「ユニークリーチ(実接触人数)」の関係を理解することは非常に重要です。今回は、書籍「ビジネス課題を解決する技術 〜 数理モデルの力を引き出す3ステップフレームワーク」で紹介されている負の二項分布モデルによるリーチカーブ予測を実際のTVer広告データに適用してうまくいかなかった話と、理論通りにいかなかった原因を突き止め、劇的な改善に至った経緯をご紹介します。
背景:リーチカーブとは?
広告配信において、「何人のユーザーに広告を届けられるか」を予測することは、予算最適化の観点から極めて重要です。
ここで重要な概念がリーチカーブです。リーチカーブとは、以下の関係を表す曲線です。
例えば、100人の母集団に対して、
- 広告を200回配信(グロスリーチ200% = 平均2回)
- 実際に届いたのは58人(ユニークリーチ58%)
この「グロスリーチ200% → ユニークリーチ58%」という点をプロットしていくと、曲線が描けます。

上図は、100人の母集団に対して広告を配信した場合のリーチカーブの例です。グロスリーチ200%(平均2回接触)のとき、ユニークリーチは58%になります。このように、リーチカーブは右肩上がりの曲線を描きますが、接触回数が増えるほど新規ユーザーへのリーチ効率は低下します。
なぜリーチカーブが重要なのか
リーチカーブが分かれば、以下のような予算最適化が可能になります。
- 「目標ユニークリーチ50%を達成するには、グロスリーチ何%必要か?」
- 「予算100万円でどれだけのユーザーに届けられるか?」
- 「追加予算を投入した場合の効果は?」
実務での課題と負の二項分布モデル
しかし、実務では以下のような課題があります。
- キャンペーン途中のデータが取得できないケースが多い
- 少ないデータポイントから全体のリーチカーブを推定する必要がある
- 単純な機械学習モデルでは汎化性能が低い
このような課題に対し、書籍では「負の二項分布」という確率モデルを用いることで、データ生成メカニズムに基づいた推定を行う手法が紹介されています。
負の二項分布モデルの理論(書籍の内容の簡単な紹介)
書籍では、Metheringham (1964)の負の二項分布モデルが紹介されています。このモデルは、広告接触の確率的な性質を以下のように捉えます。
ステップ1: 個々のユーザーの接触回数はPoisson分布に従う
各ユーザーが広告に接触する回数
は、Poisson分布でモデル化できます。
なぜPoisson分布か
広告接触は「ランダムで独立な事象が一定期間に何回起こるか」を表すため、Poisson分布が自然なモデルと考えられます。他にも、
- 店舗への来客数
- Webサイトへのアクセス数
- コールセンターへの着信数
などはPoisson分布でモデル化することができます。
ステップ2: ユーザー間の異質性をGamma分布でモデル化
しかし、すべてのユーザーが同じ接触率を持つわけではありません。TVをよく見る人はTVCMに接触しやすく(
が大きい)、TVをあまり見ない人はTVCMに接触しにくい(
が小さい)です。
そこで、接触率自体がGamma分布に従うと仮定します。
: 形状パラメータ(ユーザー異質性の程度)
: スケールパラメータ
なぜGamma分布か
Gamma分布は正の値のみをとり、様々な形状を表現できる柔軟な分布です。重要なのは、Poisson分布の共役事前分布であることです。
ステップ3: Poisson + Gamma = 負の二項分布
ここが数学的に美しい部分です。Poisson分布のパラメータがGamma分布に従う場合、観測される接触回数は負の二項分布に従います:
詳しい計算過程については省略しますが、これを周辺化すると
となります。ここで は各ユーザーの広告接触回数(0回、1回、2回...)を表す確率変数を、
は分布の期待値(=グロスリーチ
)を表します。
この性質により、ユーザー異質性を考慮したリーチカーブの式が導出されます。
ここで、
重要なポイント:
このモデルの利点は、データ生成メカニズムに基づいた理論的根拠があることです。単なる経験式ではなく、ユーザー行動の確率モデルから導出されています。
今回はかなり簡略化して説明しましたが、書籍ではこのリーチカーブ式を用いて少ないデータポイントからパラメータを推定し、全体のリーチカーブを予測する方法が詳細に紹介されているので、気になる方はぜひご一読ください。
実データでの検証:予想外の結果
書籍の手法を実際のとあるTVer広告キャンペーンデータに適用してみました。
データの概要
期待を裏切る結果
書籍通りの単一点(今回はキャンペーン最終地点としました)で負の二項分布モデルでパラメータ を推定したところ、
推定されたα = 0.221 リーチカーブのMAPE = 12.79%
MAPE(Mean Absolute Percentage Error:平均絶対パーセント誤差)は12.79%となりました。 MAPE 12.79%は決して悪い値ではありませんが、試しに理論的根拠の薄い「対数変換モデル」を適用したところ、
対数変換モデルのMAPE = 8.39%
理論モデルが、理論的根拠のないモデルに負けてしまったのです。
TVerならではの優位性:全時点データの活用
実は、ここまでの分析では書籍と同じく最終地点(17日目)の1点のみでパラメータ推定を行っていました。しかし、デジタルサービスであるTVerにはTVCMにはない大きな優位性があります。
TVer:
- すべての広告接触がログに記録される
- キャンペーン期間中の日次データが取得可能
- 今回のケースでは17日間の全時点データが利用可能
TVCM:
- アンケートや視聴率調査に依存
- キャンペーン終了後の1点のデータのみが一般的
- 途中経過のデータ取得は困難でコストも高い
そこで、全17日間のデータすべてを使ってパラメータ推定を行い、1点のみの推定と比較してみました。

上図は、4つのアプローチを比較したものです。
- 負の二項分布(1点): MAPE 18.27% - 書籍と同じ最終地点のみで推定
- 負の二項分布(全点): MAPE 12.77% - 全17日間のデータで推定(5.5%改善)
- 対数変換(1点): MAPE 8.39% - 最終地点のみで線形回帰
- 対数変換(全点): MAPE 6.68% - 全17日間で線形回帰(1.7%改善)
全時点データを活用することで精度が向上しましたが、それでも負の二項分布モデル(12.77%)は対数変換(6.68%)に及びません。単にデータ数を増やすだけでは根本的な解決にならないことが分かります。
理論モデルの前提条件そのものに問題があるのでしょうか?
原因究明の旅
試行1: ユーザー異質性が複雑すぎる?
最初の仮説は「ユーザーが2極化(ライト/ヘビー)しているのでは?」でした。 TVerでは、視聴習慣や広告接触行動が多様であり、単一のガンマ分布では異質性を捉えきれない可能性があります。
そこで、負の二項分布を2つ用いた混合モデルを実装しました。
結果:
- MAPE = 9.75%(23%改善)
- ライト層65%(
0.14)、ヘビー層35%(
2.88)
改善はしましたが、まだ対数変換モデル(8.39%)には及びません。
試行2: 高頻度域をパレート分布でモデル化
書籍のデータではユーザー1人あたりの最大接触回数がせいぜい100回程度でした。しかし、TVerデータでは最大接触回数が200回を超えるユーザーが存在しました。
「非常に高頻度で接触するユーザーが外れ値としての推定を歪めているのでは?」と考え、高頻度域(
)をパレート分布(べき乗則)でモデル化する混合モデルを試みました。これはヘビーユーザーの行動はロングテール分布に従うという仮定に基づいています。
結果:
- MAPE = 13.22%(12.77%からわずかに悪化)
高頻度域のフィッティングは改善したものの、リーチ予測精度には寄与しませんでした。なぜなら:
- リーチカーブは低頻度域で決まる:
は非接触者(
)の割合が支配的
- 高頻度ユーザーは少数: 全体の1-2%程度のため、リーチ予測への影響は限定的
高頻度域のノイズは本質的な原因ではありませんでした。
フリークエンシー分布から見える課題
そもそも負の二項分布モデルは、実際のフリークエンシー分布(広告接触回数の分布)をどれくらい再現できているのでしょうか?

上図は、全点データで推定した負の二項分布()のフリークエンシー分布予測です。注目すべきは
〜
の低頻度域です。
リーチカーブは で定義されるため、
の4%の誤差が直接リーチ予測の誤差になります。負の二項分布モデルは非接触者を過大評価し、結果としてリーチ(接触者の割合)を過小評価してしまっていることが分かります。
なぜこのような乖離が生じるのでしょうか?
決定的な気づき: 測定単位の違い
グロスリーチ
の計算:TVCMとTVerの違い
ここで重要なのは、時間的な独立性の違いによっての意味が異なる点です。
スポットCM(書籍のモデル):
書籍で扱うデータのgは、スポットCMの視聴率の合計(GRP)です。
同じユーザーが複数回のスポットを視聴しても、各スポットは独立した事象としてカウントされます。したがって、そのものが独立した接触機会の合計を表し、直接Poisson分布のパラメータとして使用できます。
TVer広告(impressionベース測定):
TVerの広告データでは、は総impression数を母集団で割った値です。
Poisson分布の重要な前提条件として、「事象が互いに独立していること」があります。これは、ある事象の発生が他の事象の発生に影響を与えないという性質です。しかしながら、ターゲティング条件に合致する限り広告が継続的に配信されるTVerにおいて、あるユーザーの同日の複数回にわたる広告impressionは同じ視聴行動に基づいているため、独立ではありません。 したがって、同じ日の複数impressionは1つの接触機会としてカウントする必要があると考えました。
ブレークスルー: 時間的独立性を考慮したkパラメータの導入
理論の修正
TVer広告の特性を考慮した修正モデルを構築しました。
通常モデル:
修正モデル(1日のTVer利用における複数回広告接触を考慮):
ここで は「1日あたりの対象広告の平均impression数」です。
リーチカーブの式は、
検証結果:劇的な改善
〜
の各ケースで検証したところ、
| k | α | MAPE | 解釈 |
|---|---|---|---|
| |
0.220 | 12.77% | 通常モデル |
| |
0.389 | 2.69% | 最良 |
| |
0.701 | 5.03% | やや過大評価 |
| |
1.632 | 11.26% | 過大評価 |
| |
10.000 | 16.74% | 大幅に過大評価 |
のとき、MAPE 2.69%を達成!
これは、
- 通常の負の二項分布(12.77%)から10%以上の改善
- 対数変換モデル(8.39%)より3倍以上精度が高い
- しかも理論的根拠がある

上図は、値を変化させたときのMAPEの変化です。左グラフでは、
で劇的にMAPEが低下し(2.69%)、
以降は再び悪化することが分かります。右グラフは、
が大きくなるにつれて
(ユーザー異質性パラメータ)も増加する傾向を示しています。
なぜ
が最適なのか
TVerでは平均して1日あたり2回の広告impressionが発生していることを意味していると考えます。
このという値は、以下の要因の複合的な結果と考えられます。
- 1日に視聴する番組数
- 各番組内のCM枠の数
- 各CM枠で対象広告がターゲティングされる確率
- ユーザーの視聴行動(途中離脱・早送りなど)
重要なことは、このパラメータによって、TVer広告の特性を正確に反映したリーチカーブ予測が可能になったことです。
モデルの実用性検証
リーチカーブの予測精度
各時点での予測誤差を確認したところ、モデルは全時点で非常に高い精度を示しました。

上図は、主要なモデルのリーチカーブ予測を比較したものです。
(書籍のモデル): MAPE 12.77% - 青破線、実測値を下回る
(提案モデル): MAPE 2.69% - 赤実線、実測値に最もフィット
: MAPE 5.03% - 水色点線、実測値をやや上回る
- 対数変換: MAPE 8.39% - 緑線、中盤で乖離
- 混合NB: MAPE 9.75% - 薄緑点線、
より改善するが不十分
モデル(赤線)が全時点で実測値(黒丸)に最もよくフィットしていることが視覚的に確認できます。特にグロスリーチ100-400%の範囲で、他のモデルと比べて圧倒的な精度を示しています。
フリークエンシー分布:低頻度域での改善
リーチカーブは「ユーザーに届いたか()」という二値問題ですが、より詳細な「何回届いたか」の分布(フリークエンシー分布)も確認しました。

上図は、低頻度域(〜16)のフリークエンシー分布を、
(書籍のモデル)と
(提案モデル)で比較したものです。特に重要なのは
〜2の低頻度域です。
(非接触者)の予測精度:
- 実測値: 46.9%
モデル: 51.4%(過大評価、4.5%の誤差)
モデル: 47.2%(ほぼ一致、0.3%の誤差)
(1回接触)の予測精度:
- 実測値: 15.0%
モデル: 11.0%
モデル: 15.5%
(2回接触)の予測精度:
- 実測値: 7.0%
モデル: 6.0%
モデル: 7.5%
リーチカーブは数学的に で定義されるため、
の予測精度が直接リーチカーブの精度に影響します。
モデルが
を正確に予測できている(誤差0.3%)ことが、リーチカーブの劇的な改善(MAPE 12.77% → 2.69%)につながっています。
また、 や
といった低頻度域全体でも、
モデル(赤線)が
モデル(青線)よりも実測値(グレーのヒストグラム)によくフィットしており、実務で重要な領域をカバーできています。
実務への適用
モデルの実装は非常にシンプルです。
def predict_reach_k2(g, alpha): """ k=2を考慮した負の二項分布によるリーチ予測 Args: g: グロスリーチ(%表記なら100で割る) alpha: 異質性パラメータ Returns: 予測ユニークリーチ """ k = 2 return 1 - (k * alpha / (g + k * alpha)) ** alpha # 類似する過去キャンペーンのデータでαを推定 # 例: α = 0.389 # 目標リーチ50%を達成するために必要なグロスリーチを逆算 target_reach = 0.50 # → 必要なg ≈ 3.5 (350%)
実際のキャンペーンでは例えば、
- 配信したいキャンペーンに類似する過去案件のデータでαを推定
- 目標ユニークリーチから必要なグロスリーチを算出
- 予算配分を最適化
という流れで活用できます。
さらなる精度向上:連続値kの最適化
ここまで,
,
,
,
という整数値で検証してきましたが、こちらも書籍と同じく
を連続値として最適化すればさらに精度が向上するのでは?という疑問が生まれます。
そこで、scipy.optimizeを用いてkとαを同時に最適化しました。
from scipy.optimize import minimize def objective(params): k, alpha = params r_pred = 1 - (k * alpha / (g + k * alpha)) ** alpha mape = np.mean(np.abs((r - r_pred) / r)) * 100 return mape result = minimize(objective, [2.0, 0.4], method='L-BFGS-B', bounds=[(0.5, 10.0), (0.01, 10.0)])
結果:
最適化されたk = 2.2703 最適化されたα = 0.4437 MAPE = 0.9814%
なんとMAPE 0.98%を達成しました。の2.69%からさらに1.71%の改善です。
また最後に確認として、検証に使用したデータで対象広告の接触者について1日あたりの平均impression数を計算したところ、2.58回となり、最適化されたと非常に近い値が得られました。
(2.58 よりも若干少ない値が最適とされた理由として、1日に複数回TVerに来訪するユーザーが一部存在する場合、例えば「朝の来訪」と「夜の来訪」など、同日内でも時間的に離れた来訪は部分的な独立性を持つ可能性が考えられます。今回は割愛しますが、さらなる分析の余地があります。)
学びと今後の展望
今回の分析を通じて得られた主な学びは以下の通りです。
1. 理論モデルの盲目的適用は危険
書籍の理論は素晴らしく最初に読んだ時には感動を覚えました。しかしながら、実務に応用するためには前提条件の検証が不可欠です。TVCMとストリーミング広告では、グロスリーチの算出方法が根本的に異なっていました。
2. ドメイン知識の重要性
「1番組で複数回広告接触がある」という単純な事実の適用が、モデルの精度を飛躍的に改善させました。書籍でも度々触れられておりましたが、統計モデリングとビジネス理解の両輪が非常に重要であることを今回の検証が物語っています。
3. シンプルな拡張の威力
複雑な混合モデルより、単純なkパラメータ1つの追加で最良の結果が得られました。オッカムの剃刀(シンプルな解が最良)の好例です。
まとめ
負の二項分布モデルは、限られたデータからリーチカーブを推定する強力な手法です。しかし、ビジネスの実態に合わせた修正が必要な場合があります。今回の分析では
- 書籍の理論モデル(MAPE 12.79%)が対数変換(8.39%)に負けた原因を究明
- TVerの広告の特性「1日の複数impressionの非独立性」を発見
- 同一番組内の複数回広告接触効果を考慮した
モデルでMAPE 2.69%を達成、さらに連続値最適化でMAPE 0.98%を達成
- 理論的妥当性と最高精度を両立
データサイエンスの醍醐味は、理論を学び、実データで検証し、ギャップを埋めるプロセスにあります。なぜ理論通りにいかないのか?という疑問を深掘りすることで、より実用的で洞察に富んだモデルを構築できました。
今回の知見が、同様の課題に取り組む方々の参考になれば幸いです。
TVerでは、データドリブンな意思決定を支援するデータサイエンティストを募集しています。興味のある方は、TVer採用サイトをご確認ください。