過去のテストを基にカスタムの ROI 事前分布を設定する

メリディアンでは、CalibrationBuilder を使用して過去のテストを基に事前分布の調整を自動化し、インクリメンタリティ テストの結果を有料メディアとリーチおよびフリークエンシー チャネルの ROI 事前分布に自動的に変換します。このビルダーは、あらゆるテストソースからの結果を受け入れ、Meridian GeoX との直接統合によりワークフローを効率化します。

調整を行うには、メリディアンの事前分布を定義する必要があります。インクリメンタリティ テストの結果は、その洞察を深めるための有力な方法です。ただし、MMM とテストでは、特にスコープ、タイミング、期間において重要な違いがあります。このギャップを埋めるため、CalibrationBuilder はこれらの違いを自動的に考慮し、テスト結果を頑健性の高い事前分布に変換するように設計されています。

CalibrationBuilder は、テスト結果に調整を自動的に適用してから、チャネルごとに 1 つの調整済み事前分布に統合することで、これらの違いを解決します。

このワークフローは次から構成されています。

  1. テストの登録: ユーザーが一般的なテスト結果または Meridian GeoX のテスト結果をチャネルに追加します。
  2. 調整の適用: CalibrationBuilder が、費用、最新性、期間の調整を計算して適用します。
  3. 分布の統合: CalibrationBuilder が、ベイズ更新を使用して、登録されたすべてのテストの調整済み分布を統合します。
  4. パラメトリック分布の適合: CalibrationBuilder が、パラメトリック分布族(対数正規分布、ガンマ分布、正規分布)を事後分布に適合させ、最終的な roi_m 事前分布と roi_rf 事前分布を生成します。

ステップ 1: テストの登録

CalibrationBuilder Python API を使用して、テストを登録できます。ビルダーは、次の 2 種類のテストソースをサポートしています。

  • Meridian GeoX テスト: with_meridian_geox_experiment_result を使用して登録されます。Google の GeoX ツールから AnalysisResult オブジェクトを直接受け入れます。CalibrationBuilder は、AnalysisResult から点推定値、標準誤差、費用、テストの日付を自動的に抽出して、調整を計算します。
  • 汎用テスト: with_incrementality_experiment_result を使用して登録されます。点推定値、標準誤差、費用、日付を手動で指定する GeoX 以外のテストに役立ちます。

インタラクティブなコードのチュートリアル全体については、事前調整のデモをご覧ください。

ステップ 2: 調整の適用

テストと MMM では、測定目標と条件が異なります。このギャップを埋めるため、メリディアンはテストの点推定値を調整し(係数 \(\gamma\)でスケーリング)、標準誤差を増やして(係数 \(\tau\)で分散を調整)、テストを MMM に変換する際の追加の不確実性を反映します。

1 つのテストの調整済み平均(\(\mu_{adj}\))と標準偏差(\(\sigma_{adj}\))は、次のように計算されます。

$$ \mu_{adj} = (\gamma_{duration} + \gamma_{user}) \cdot \mu_{exp} $$
$$ \sigma_{adj} = \sigma_{exp} \cdot \sqrt{1.0 + \tau_{spend} + \tau_{recency} + \tau_{duration} + \tau_{user} } $$

ここで

  • \(\mu_{exp}\) は、テストの点推定値です。
  • \(\sigma_{exp}\) は、テストの標準誤差です。
  • \(\gamma_{duration}\) は、期間スケーリング ファクタです(自動的に計算されます。テストで Adstock 効果が 100% 捕捉された場合、ベースラインは \(1.0\) になります)。
  • \(\gamma_{user}\) は、ユーザーが指定する点推定値の調整です(省略可、デフォルトは \(0\))。
  • \(\tau_{spend}\)、 \(\tau_{recency}\)、 \(\tau_{duration}\) は、それぞれ費用、最新性、期間の分散調整です(自動的に計算されます。調整が不要な場合、ベースラインは \(0.0\) になります)。
  • \(\tau_{user}\) は、ユーザーが指定する標準誤差調整です(省略可、デフォルトは \(0\))。

自動化とデフォルト

\(\gamma_{user}\) と \(\tau_{user}\) では手動での微調整が可能で、デフォルトは \(0\)ですが、その他の調整(\(\tau_{spend}\)、 \(\tau_{recency}\)、\(\tau_{duration}\)、 \(\gamma_{duration}\))は CalibrationBuilder によって自動的に計算されます。

  • Meridian GeoX テスト: 調整の計算は完全に自動化されています。CalibrationBuilder は、GeoX icpd 指標(metrics.icpd.point_estimatemetrics.icpd.standard_deviation)から \(\mu_{exp}\) と\(\sigma_{exp}\) を、estimated_bau_spendmetrics.descriptive_metrics.estimated_bau_spend)からテスト費用を、analysis_configanalysis_config.analysis_start_dateanalysis_config.analysis_end_date)から開始日と終了日を直接抽出します。収益以外の KPI テストは、モデルの revenue_per_kpi を使用して自動的に収益スケールに変換されます。費用、期間、日付のパラメータを手動で指定する必要はありません。
  • 一般的なテスト: CalibrationBuilder は、with_incrementality_experiment_result で指定した費用、開始日、終了日の引数から、同じ数式を使用して調整を計算します。
  • モデルのデフォルト: 期間の計算では、CalibrationBuilder 減衰パラメータが使用されます。デフォルトは adstock_decay_spec='geometric'alpha=0.5max_lag=8 です(ModelSpec のデフォルトと一致)。最新性の計算では、52 週間(1 年)の固定半減期が使用されます。

費用の調整

費用の調整(\(\tau_{spend}\))では、費用の規模と強度の違いを考慮します。通常、テストでカバーされるのは、MMM 期間中に発生した総費用のごく一部です。テスト期間とは無関係に費用の規模を比較するため、メリディアンでは、テストの 1 日の平均費用と、モデル化された期間におけるチャネルの 1 日の平均費用を比較します。

Meridian GeoX テストの場合、テスト費用は GeoX AnalysisResultmetrics.descriptive_metrics.estimated_bau_spend の下)の estimated_bau_spend から自動的に抽出されます。

費用調整は次のように計算されます。

$$ \tau_{spend} = \frac{1.0 - r}{r} $$

ここで、 \(r\) は、1 日の平均費用率を比較した費用比率です。

$$ r = \frac{ \min(\text{experiment_avg_daily_spend}, \text{channel_avg_daily_spend}) }{ \max(\text{experiment_avg_daily_spend}, \text{channel_avg_daily_spend}) } $$

ここで

  • \[\text{experiment_avg_daily_spend} = \frac{\text{experiment_total_spend}}{\text{experiment_duration_days}}\]
  • \[\text{channel_avg_daily_spend} = \frac{\text{total_channel_spend}}{\text{model_duration_days}}\]

  • テストの 1 日の費用率がチャネルの 1 日の費用率(\(r = 1.0\))と一致する場合、 \(\tau_{spend} = 0.0\) となります(追加の不確実性なし)。

  • テストの費用率がチャネルの費用率(\(r \rightarrow 0\))の小さい(または大きい)割合を占めると、 \(\tau_{spend}\) が増加し、事前分布が広がります。

  • 費用比率 \(r\) では、メディアの粒度の違いも考慮されます。たとえば、キャンペーン単位のテストを実施し、MMM でチャネル単位でモデル化する場合、テストの費用率はチャネルの合計費用率と比較されます。キャンペーンがチャネルのアクティビティの大部分を占める場合、キャンペーンはよりチャネルを代表するものとなり、結果を変換する際の不確実性が低くなります。逆に、キャンペーンの規模が小さい場合は、キャンペーンのリフトをチャネル全体に拡大することの不確実性を反映して、調整が大きくなります。

最新性の調整

最新性の調整では、最新の増分結果をモデル化する際の精度を高めるため、より新しいテストに大きな重みが割り当てられます。MMM のモデリング期間の終了日を基準として、テストの実施時期が過去にさかのぼるほど、その結果が現在のビジネスの現実を反映している可能性は低くなります。

Meridian GeoX テストの場合、テストの終了日は GeoX AnalysisResultanalysis_config.analysis_end_date から自動的に抽出されます。

最新性の調整は、半減期が 52 週間(1 年)の指数関数的減衰を使用して計算されます。

$$ \lambda = 0.5^{w / 52.0} $$
$$ \tau_{recency} = \frac{1.0 - \lambda}{\lambda} $$

\(w\) は、テストの終了日から MMM の最後のモデル化日までの経過週数です。

  • テストが最後のモデル化日(\(w = 0\))に終了した場合、 \(\lambda = 1.0\) および \(\tau_{recency} = 0.0\)となります。
  • 古いテストでは、 \(\lambda\) が減少して \(\tau_{recency}\) が増加するため、不確実性が高まります。
  • 最後のモデル化日がテストより前の場合、調整は適用されません(\(\tau_{recency} = 0.0\))。

期間の調整

期間の調整(\(\gamma_{duration}\) と \(\tau_{duration}\))では、テスト期間(\(D\)、週単位)とモデルの最大ラグウィンドウ(\(L\)、週単位)の差を考慮します。

Meridian GeoX テストの場合、テスト期間(\(D\))は、GeoX AnalysisResultanalysis_config.analysis_start_dateanalysis_config.analysis_end_date から自動的に計算されます。

マーケティング効果は時間の経過とともに持ち越されるため(Adstock 減衰によってモデル化)、短いテストではメディア費用の長期的な効果を完全に把握できない可能性があります。逆に、テスト期間が非常に長い場合は、モデルの切り捨てられたラグウィンドウを超える効果が捕捉される可能性があります。

メリディアンは、捕捉率(\(p\))を計算します。これは、テストの実施期間中に捕捉された Adstock 減衰の重みの合計の割合です。

\(w_s\) を、モデル ウィンドウ \(L + 1\) (CalibrationBuilder で構成、デフォルトは adstock_decay_spec='geometric'alpha=0.5max_lag=8)において減衰率 \(\alpha\) を使用して Adstock 減衰関数(幾何級数的減衰または二項減衰)により算出された減衰重みとします。

  • テスト期間がモデル ウィンドウ以下の場合(\(D \le L + 1\)):
    • 二項減衰と幾何級数的減衰: 補足率 \(p\) は、 \(D\)までの正規化された減衰重みの合計です。
$$ p = \frac{\sum_{s=0}^{D-1} w_s}{\sum_{s=0}^{L} w_s} $$
  • テスト期間がモデル ウィンドウより長い場合(\(D > L + 1\)):
    • 二項減衰: 二項重みはルックバック ウィンドウ内でゼロに減衰するため、テストでは考えられるすべての効果が捕捉されます( \(p = 1.0\))。
    • 幾何級数的減衰: 幾何級数的な重みは無限に減衰するため、分子には \(D - 1\)までの幾何級数の末尾が含まれます。
$$ p = \frac{\sum_{s=0}^{L} w_s + \sum_{s=L+1}^{D-1} \alpha^s}{\sum_{s=0}^{L} w_s} $$

捕捉率 \(p\) は、最小値 \(10^{-6}\) と最大値 \(1.0\) (二項減衰の場合)に制限されます。

\(p\)を使用すると、期間の調整は次のようになります。

  • 点推定のスケーリング ファクタ:
$$ \gamma_{duration} = \frac{1.0}{p} $$

テスト期間がモデル ウィンドウより短い場合(\(p < 1.0\))、点推定値がスケールアップされ(\(\gamma_{duration} > 1.0\))、長期的な効果全体が推定されます。テスト期間が長い場合(幾何級数的減衰の場合は\(p > 1.0\) )、点推定値はスケールダウンされます(\(\gamma_{duration} < 1.0\))。

  • 標準誤差の調整:
$$ \tau_{duration} = \max\left(\frac{1.0 - p}{p}, 0.0\right) $$

テスト期間が短い場合(\(p < 1.0\))、効果の観測されていないテールが外挿されるため、不確実性(\(\tau_{duration} > 0.0\))が追加されます。テスト期間がそれより長い、または等しい場合(\(p \ge 1.0\))、不確実性は追加されません(\(\tau_{duration} = 0.0\))。


ステップ 3: テストの統合

1 つのチャネルに複数のテストを登録すると、メリディアンはベイズ更新を使用してそれらを(オプションの baseline_prior とともに)結合します。

ベイズの定理により、チャネルの ROI の事後分布密度は、ベースラインの事前分布とすべての独立したテストの尤度の積に比例します。

$$ p(\text{ROI} \mid \{\mu_{adj,i}, \sigma_{adj,i}\}) \propto \pi(\text{ROI}) \prod_{i=1}^N L_i(\text{ROI}; \mu_{adj,i}, \sigma_{adj,i}) $$

各テスト \(i\) の尤度関数は次のとおりです。

$$ L_i(\text{ROI}; \mu_{adj,i}, \sigma_{adj,i}) = \frac{1}{\sqrt{2\pi}\sigma_{adj,i}} \exp\left(-\frac{(\mu_{adj,i} - \text{ROI})^2}{2\sigma_{adj,i}^2} \right) $$

この積の定義は、独自のベイズモデルと考えることができます。数学的には、調整された各テストは、真のチャネル ROI のノイズの多い観測値として扱われます。このモデルは次のように定式化されます。

$$ \begin{align*} \mu_{adj,i} &\sim \text{Normal}(\text{ROI}, \sigma_{adj,i}^2) \quad \text{for each experiment } i \\ \text{ROI} &\sim \pi(\cdot) \end{align*} $$

ここで

  • \(\mu_{adj,i}\) は、テスト \(i\)の調整後の点推定値です。
  • \(\sigma_{adj,i}\) は、テスト \(i\)の調整済み標準誤差です。
  • \(\text{ROI}\) は、チャネルに対して推定される、不明な真の ROI パラメータです。
  • \(\pi(\cdot)\) は、baseline_prior 分布です。ベースライン事前分布が指定されていない場合は、正の実数に対して不適切な平坦一様事前分布が使用されます( \(\text{ROI} > 0\)の場合は\(\pi(\text{ROI}) \propto 1\) )。
  • \(N\) は、登録されているテストの数です。

ビルダーは、適応型パラメータ グリッドでこの事後分布密度を数値的に評価して、結合分布を見つけます。詳しくは、手法に関する追加情報をご覧ください。

ステップ 4: 調整済み事前分布の適合と構築

最後に、メリディアンは、ステップ 3 で計算された数値事後分布に標準のパラメトリック分布族(対数正規分布、ガンマ分布、正規分布)を適合させます。候補となる分布族は、baseline_prior に基づいて選択されます。対数正規分布とガンマ分布は常に考慮されますが、正規分布はベースライン事前分布で負のサポートが許可されている場合に評価されます。最適な分布形状は、数値事後分布に対する交差エントロピー損失を最小化(KL ダイバージェンスの最小化と同等)することで選択されます。

調整された各チャネルに最適な事前分布が見つかると、CalibrationBuilder がそれらをラップします。調整が行われなかったチャネルについては、CalibrationBuildercustom_prior で指定されたカスタム事前分布を割り当てます。デフォルトの ROI 事前分布 \(\text{LogNormal}(0.2, 0.9)\) は、そのチャネルにカスタム事前分布が指定されていない場合にのみ使用されます。

build() の最終出力は、以下を含む CalibratedPriors データクラスです。

  • priors.roi_m: 有料メディア チャネルの調整済み事前分布を表す CalibratedDistributionIndependentMultivariateDistribution のサブクラス)。
  • priors.roi_rf: リーチとフリークエンシーのチャネルの調整済み事前分布を表す CalibratedDistributionIndependentMultivariateDistribution のサブクラス)。

これらの調整済み分布は PriorDistribution に渡され、その後 ModelSpec に渡されてメリディアン モデルが初期化されます。


付録: 手法に関する追加情報

このセクションでは、CalibrationBuilder による数値事後計算と分布適合の基礎となる数学的な定式化とアルゴリズムの詳細について説明します。

事後分布の定式化

特定のチャネルについて、 \(\theta\) を真のチャネル ROI とします。\(N\) の独立した調整済みテスト結果を確認します。各テスト \(i \in \{1, \ldots, N\}\)には、調整済みの点推定値 \(\mu_{adj,i}\) と調整済みの標準誤差 \(\sigma_{adj,i}\)があります。

調整済みの各点推定値が、真の ROI を中心とする正規分布の観測値であると仮定します。

$$ \mu_{adj,i} \mid \theta \sim \text{Normal}(\theta, \sigma_{adj,i}^2) $$

\(i\)回目のテストの尤度関数は次のとおりです。

$$ L_i(\theta; \mu_{adj,i}, \sigma_{adj,i}) = \frac{1}{\sqrt{2\pi}\sigma_{adj,i}} \exp\left(-\frac{(\mu_{adj,i} - \theta)^2}{2\sigma_{adj,i}^2} \right) $$

baseline_prior が指定されている場合、その確率密度関数を\(\pi(\theta)\)とします。ベースライン事前分布が指定されていない場合は、正の値に対して不適切な平坦一様事前分布 \(\pi(\theta) \propto I_{\{\theta > 0\}}\)を使用します。ここで、\(I\) はインジケーター関数です。

ベイズの定理により、チャネルの ROI の事後密度 \(p(\theta \mid \{\mu_{adj,i}, \sigma_{adj,i}\})\)は、事前分布とすべての独立したテストの尤度の積に比例します。

$$ p(\theta \mid \{\mu_{adj,i}, \sigma_{adj,i}\}) \propto \pi(\theta) \prod_{i=1}^N L_i(\theta; \mu_{adj,i}, \sigma_{adj,i}) $$

グリッドベースの数値積分

事後分布 \(p(\theta \mid \{\mu_{adj,i}, \sigma_{adj,i}\})\) には標準的な分析形式がない場合があるため(対数正規分布やガンマ分布などの正規分布以外のベースライン事前分布を使用する場合など)、メリディアンはグリッド上で事後分布を数値的に評価します。

  1. スカウトパス: メリディアンはまず「スカウト」パスを実行して、確率質量が高い領域を特定します。分布の経験的平均を中心とする広範なグリッドを定義し、累積確率の\(99.8\%\) を含む範囲( \(0.1\)パーセンタイルから \(99.9\)パーセンタイルまで)を見つけます。
  2. ファイン グリッド評価: 次に、この解決された範囲 \([\theta_{\text{min}}, \theta_{\text{max}}]\) に 10,000 個の等間隔点からなるファイン グリッドを構築し、各点で正規化されていない事後分布密度を評価します。
  3. 正規化: 密度は、リーマン和積分を使用して正規化されます。

    $$ p(\theta_j \mid \{\mu_{adj,i}, \sigma_{adj,i}\}) = \frac{u(\theta_j)}{\sum_k u(\theta_k)\Delta\theta} $$

    ここで、 \(u(\theta)\) は正規化されていない事後分布密度、 \(\theta_j\) は \(j\)番目のグリッド点、 \(\Delta\theta\) はステップサイズです。

分布の適合

グリッド上で数値事後分布 PDF が計算されると、メリディアンはパラメトリック分布 \(q(\theta; \phi)\) ( \(\phi\) は分布パラメータを表します)を適合させて事後分布を近似します。

メリディアンは、ベースラインの事前分布のサポートに基づいて、候補となる分布族を決定します。

  • 非負のサポート(デフォルト): ベースライン事前分布が指定されていない場合(デフォルトは非負のサポート)、またはベースライン事前分布がサポートを非負の値(LogNormalGamma など)に制限している場合、メリディアンは対数正規(\((0, \infty)\))分布族とガンマ(\((0, \infty)\))分布族を考慮し、正規分布は考慮しません
  • 負のサポート: ベースライン事前分布が負の値(Normal など)に有限の確率密度を割り当てる場合、メリディアンは正規分布( \((-\infty, \infty)\)で定義)を考慮し、さらに対数正規分布とガンマ分布も考慮します。

メリディアンは、候補族ごとに、数値事後分布 \(p(\theta)\) と候補分布 \(q(\theta; \phi)\)の間の交差エントロピー損失を最小化するパラメータ \(\phi\) を見つけます。

$$ \text{Loss}(\phi) = -\sum_j p(\theta_j) \log q(\theta_j; \phi) \cdot \Delta\theta $$

この損失を最小化することは、近似\(q\) から真の数値事後分布 \(p\)へのカルバック ライブラー ダイバージェンス \(D_{KL}(p \parallel q)\) を最小化することと数学的に同等です。

メリディアンでは、L-BFGS-B 最適化アルゴリズムを使用して最適なパラメータを見つけます。損失が最も少ない分布族が、チャネルの最終的な調整済み事前分布として選択されます。