Meridian bietet eine automatisierte Prior-Kalibrierung anhand früherer Tests mit CalibrationBuilder, um die Ergebnisse aus Tests zur Inkrementalität automatisch in ROI-Priors für bezahlte Media-Channels und Channels für Reichweite und Häufigkeit zu überführen. Der Builder akzeptiert Ergebnisse aus beliebigen Testquellen und bietet eine direkte Anbindung an Meridian GeoX, um den Workflow zu optimieren.
Für die Kalibrierung muss ein Meridian-Prior definiert werden. Die Ergebnisse von Tests zur Inkrementalität sind eine gute Möglichkeit, diese Annahmen zu stützen. MMMs und Tests unterscheiden sich jedoch in wichtigen Punkten, insbesondere in Bezug auf Umfang, Zeitpunkt und Dauer. Um diese Lücke zu schließen, ist CalibrationBuilder so konzipiert, dass diese Unterschiede automatisch berücksichtigt und Ihre Testergebnisse in robuste Priors übertragen werden.
CalibrationBuilder gleicht diese Unterschiede aus. Dazu werden automatisch Anpassungen an den Testergebnissen vorgenommen, bevor sie zu einer einzigen kalibrierten Prior-Verteilung pro Channel zusammengeführt werden.
Der Workflow besteht aus folgenden Schritten:
- Tests registrieren: Einem Channel werden generische oder Meridian GeoX-Testergebnisse hinzugefügt.
- Anpassungen anwenden:
CalibrationBuilderberechnet Anpassungen für Ausgaben, Recency und Dauer und wendet diese an. - Verteilungen zusammenführen:
CalibrationBuilderkombiniert die angepassten Verteilungen aus allen registrierten Tests mithilfe der bayesschen Aktualisierung. - Parametrische Verteilungen anpassen:
CalibrationBuilderpasst eine parametrische Verteilungsfamilie (LogNormal, Gamma oder Normal) an die Posterior-Verteilung an, um die endgültigen Prior-Verteilungenroi_mundroi_rfzu generieren.
Schritt 1: Tests registrieren
Sie können Tests mit der CalibrationBuilder Python API registrieren. Der Builder unterstützt zwei Arten von Testquellen:
- Meridian GeoX-Tests: Registriert mit
with_meridian_geox_experiment_result. Akzeptiert dasAnalysisResult-Objekt direkt aus dem GeoX-Tool von Google.CalibrationBuilderextrahiert automatisch die Punktschätzung, den Standardfehler, die Ausgaben und die Testzeiträume ausAnalysisResult, um Anpassungen zu berechnen. - Generische Tests: Registriert mit
with_incrementality_experiment_result. Nützlich für Tests, die nicht auf GeoX basieren und bei denen Sie die Punktschätzung, den Standardfehler, die Ausgaben und die Zeiträume manuell angeben.
Eine vollständige interaktive Schritt-für-Schritt-Anleitung finden Sie in der Demo zur Prior-Kalibrierung.
Schritt 2: Kalibrierungsanpassungen anwenden
Tests und MMMs haben unterschiedliche Messziele und Bedingungen. Um diese Lücke zu schließen, passt Meridian die Punktschätzung des Tests an (Skalierung um den Faktor \(\gamma\)) und erhöht den Standardfehler (Anpassung der Varianz um den Faktor \(\tau\)), um die zusätzliche Unsicherheit bei der Übertragung des Tests auf das MMM zu berücksichtigen.
Der angepasste Mittelwert (\(\mu_{adj}\)) und die Standardabweichung (\(\sigma_{adj}\)) für einen einzelnen Test werden so berechnet:
Dabei gilt:
- \(\mu_{exp}\) ist die Punktschätzung des Tests.
- \(\sigma_{exp}\) ist der Standardfehler des Tests.
- \(\gamma_{duration}\) ist der Skalierungsfaktor für die Dauer (automatisch berechnet; die Baseline ist \(1.0\) , wenn im Test 100 % des Adstock-Effekts erfasst werden).
- \(\gamma_{user}\) ist eine optionale, benutzerdefinierte Anpassung der Punktschätzung (Standardwert ist \(0\)).
- \(\tau_{spend}\), \(\tau_{recency}\)und \(\tau_{duration}\) sind die Varianzanpassungen für Ausgaben, Recency und Dauer (jeweils automatisch berechnet; die Baseline ist \(0.0\) , wenn keine Anpassung erforderlich ist).
- \(\tau_{user}\) ist eine optionale, benutzerdefinierte Anpassung des Standardfehlers (Standardwert ist \(0\)).
Automatisierung und Standardwerte
Während \(\gamma_{user}\) und \(\tau_{user}\) eine manuelle Feinabstimmung ermöglichen und standardmäßig auf \(0\)gesetzt sind, werden die anderen Anpassungen (\(\tau_{spend}\), \(\tau_{recency}\),\(\tau_{duration}\)und \(\gamma_{duration}\)) automatisch von CalibrationBuilder berechnet:
- Meridian GeoX-Tests: Die Anpassungsberechnung erfolgt vollständig automatisiert.
CalibrationBuilderextrahiert \(\mu_{exp}\) und\(\sigma_{exp}\) direkt aus den GeoX-icpd-Messwerten (metrics.icpd.point_estimateundmetrics.icpd.standard_deviation), die Testausgaben ausestimated_bau_spend(metrics.descriptive_metrics.estimated_bau_spend) und die Start- und Endtermine ausanalysis_config(analysis_config.analysis_start_dateundanalysis_config.analysis_end_date). Tests mit nicht umsatzbezogenen KPIs werden automatisch mithilfe desrevenue_per_kpides Modells in die Umsatzskala konvertiert. Sie müssen die Parameter für Ausgaben, Dauer oder Zeiträume nicht manuell angeben. - Generische Tests:
CalibrationBuilderberechnet die Anpassungen mit denselben Formeln auf Basis der von Ihnen inwith_incrementality_experiment_resultangegebenen Argumente für Ausgaben, Startdatum und Enddatum. - Modellstandardwerte: Für die Berechnungen der Dauer werden die
CalibrationBuilder-Abklingparameter verwendet. Die Standardwerte sindadstock_decay_spec='geometric',alpha=0.5undmax_lag=8(entsprechen denModelSpec-Standardwerten). Für die Berechnungen der Recency wird eine feste Halbwertszeit von 52 Wochen (1 Jahr) verwendet.
Anpassung der Ausgaben
Die Anpassung der Ausgaben (\(\tau_{spend}\)) berücksichtigt die Unterschiede bei Höhe und Intensität der Ausgaben. Ein Test deckt in der Regel nur einen Bruchteil der Gesamtausgaben ab, die im MMM-Zeitraum beobachtet werden. Um das Ausgabenniveau unabhängig von der Testdauer zu bewerten, vergleicht Meridian die durchschnittlichen Ausgaben pro Tag des Tests mit den durchschnittlichen Ausgaben pro Tag des Channels im modellierten Zeitraum.
Bei Meridian GeoX-Tests werden die Testausgaben automatisch aus estimated_bau_spend in GeoX-AnalysisResult (unter metrics.descriptive_metrics.estimated_bau_spend) extrahiert.
Die Anpassung der Ausgaben wird so berechnet:
Dabei ist \(r\) das Ausgabenverhältnis, das die durchschnittlichen Ausgaben pro Tag vergleicht:
Dabei gilt:
- \[\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}}\]
Wenn die Ausgaben pro Tag für den Test mit den Ausgaben pro Tag für den Channel (\(r = 1.0\)) übereinstimmen, gilt \(\tau_{spend} = 0.0\) (keine zusätzliche Unsicherheit).
Wenn die Ausgaben pro Tag für den Test einen kleineren (oder größeren) Anteil der Ausgaben pro Tag für den Channel (\(r \rightarrow 0\)) ausmachen, steigt \(\tau_{spend}\) , wodurch die Prior-Verteilung breiter wird.
Das Ausgabenverhältnis \(r\) berücksichtigt auch Unterschiede beim Media-Detaillierungsgrad. Wenn Sie beispielsweise einen Test auf Kampagnenebene durchführen, aber im MMM auf Channelebene modellieren, werden die Ausgaben pro Tag des Tests mit den gesamten Ausgaben pro Tag des Channels verglichen. Wenn die Kampagne einen großen Teil der Aktivität des Channels ausmacht, ist sie repräsentativer für den Channel und die Ergebnisse lassen sich mit weniger Unsicherheit übertragen. Bei einer kleinen Kampagne ist die Anpassung dagegen größer, um die Unsicherheit bei der Skalierung des Kampagnen-Lifts auf den gesamten Channel zu berücksichtigen.
Anpassung der Recency
Durch die Anpassung der Recency werden neuere Tests stärker gewichtet, da sie möglicherweise genauer sind, um aktuelle inkrementelle Ergebnisse zu modellieren. Je weiter der Test im Verhältnis zum Ende des MMM-Modellierungszeitraums zurückliegt, desto unwahrscheinlicher ist es, dass die Ergebnisse die aktuelle Geschäftssituation widerspiegeln.
Bei Meridian GeoX-Tests wird das Enddatum des Tests automatisch aus analysis_config.analysis_end_date in GeoX-AnalysisResult extrahiert.
Die Anpassung der Recency wird mithilfe eines exponentiellen Abklingens mit einer Halbwertszeit von 52 Wochen (1 Jahr) berechnet:
Dabei ist \(w\) die Anzahl der Wochen, die zwischen dem Enddatum des Tests und dem letzten modellierten Datum im MMM vergangen sind.
- Wenn der Test am letzten modellierten Datum (\(w = 0\)) beendet wurde, gilt \(\lambda = 1.0\) und \(\tau_{recency} = 0.0\).
- Bei älteren Tests nimmt \(\lambda\) ab, was dazu führt, dass \(\tau_{recency}\) steigt und sich die Unsicherheit erhöht.
- Wenn das letzte modellierte Datum vor dem Test liegt, wird keine Anpassung vorgenommen (\(\tau_{recency} = 0.0\)).
Anpassung der Dauer
Die Anpassung der Dauer (\(\gamma_{duration}\) und \(\tau_{duration}\)) berücksichtigt die Differenz zwischen der Dauer des Tests (\(D\), in Wochen) und dem maximalen Verzögerungsfenster des Modells (\(L\), in Wochen).
Bei Meridian GeoX-Tests wird die Testdauer (\(D\)) automatisch aus analysis_config.analysis_start_date und analysis_config.analysis_end_date in GeoX-AnalysisResult berechnet.
Da Marketingeffekte nachwirken (modelliert durch Adstock-Decay), wird bei einem kurzen Test möglicherweise nicht die vollständige, langfristige Wirkung der Media-Ausgaben erfasst. Wenn der Test hingegen sehr lang ist, werden möglicherweise Effekte erfasst, die über das gekürzte Verzögerungsfenster des Modells hinausgehen.
Meridian berechnet den Erfassungsanteil (\(p\)), also den Anteil der gesamten Adstock-Abklinggewichtungen, der während der aktiven Wochen des Tests erfasst wird.
Seien \(w_s\) die Abklinggewichtungen, die mit der Adstock-Abklingfunktion (geometrisch oder binomisch) mit der Abklingrate \(\alpha\) über das Modellfenster \(L +
1\) berechnet werden (konfiguriert in CalibrationBuilder, standardmäßig adstock_decay_spec='geometric', alpha=0.5 und max_lag=8):
- Wenn die Testdauer kleiner oder gleich dem Modellfenster (\(D
\le L + 1\)) ist:
- Binomisches und geometrisches Abklingen: Der Erfassungsanteil \(p\) ist die Summe der normalisierten Abklinggewichtungen bis \(D\):
- Wenn die Testdauer länger als das Modellfenster (\(D > L + 1\)) ist:
- Binomisches Abklingen: Die binomischen Gewichtungen klingen innerhalb des Lookback-Windows auf null ab, sodass im Test alle möglichen Effekte erfasst werden: \(p = 1.0\)
- Geometrisches Abklingen: Geometrische Gewichtungen klingen unendlich ab, sodass der Zähler den Endbereich der geometrischen Reihe bis \(D - 1\)enthält:
Der Erfassungsanteil \(p\) ist auf einen Mindestwert von \(10^{-6}\) und einen Höchstwert von \(1.0\) (für das binomische Abklingen) beschränkt.
Bei Verwendung von \(p\)sind die Daueranpassungen:
- Skalierungsfaktor für Punktschätzung:
Wenn der Test kürzer als das Modellfenster (\(p < 1.0\)) ist, wird die Punktschätzung hochskaliert (\(\gamma_{duration} > 1.0\)), um den gesamten langfristigen Effekt zu schätzen. Dauert der Test länger (\(p > 1.0\) für geometrisches Abklingen), wird die Punktschätzung herunterskaliert (\(\gamma_{duration} < 1.0\)).
- Standardfehleranpassung:
Wenn der Test kürzer ist (\(p < 1.0\)), wird Unsicherheit (\(\tau_{duration} > 0.0\)) hinzugefügt, da der nicht beobachtete Teil des Effekts extrapoliert wird. Ist der Test länger oder gleich lang (\(p \ge 1.0\)), wird keine zusätzliche Unsicherheit hinzugefügt (\(\tau_{duration} = 0.0\)).
Schritt 3: Tests zusammenführen
Wenn Sie mehrere Tests für einen einzelnen Channel registrieren, kombiniert Meridian sie (zusammen mit einem optionalen baseline_prior) mithilfe der bayesschen Aktualisierung.
Nach dem Satz von Bayes ist die Posterior-Dichte des Channel-ROI proportional zum Produkt aus dem Baseline-Prior und den Likelihoods aller unabhängigen Tests:
Die Likelihood-Funktion für jeden Test \(i\) lautet:
Beachten Sie, dass diese Produktdefinition als eigenes bayessches Modell betrachtet werden kann. Mathematisch gesehen wird jeder angepasste Test als verrauschte Beobachtung des tatsächlichen Channel-ROI behandelt. Das Modell wird so formuliert:
Dabei gilt:
- \(\mu_{adj,i}\) ist die angepasste Punktschätzung für Test \(i\).
- \(\sigma_{adj,i}\) ist der angepasste Standardfehler für Test \(i\).
- \(\text{ROI}\) ist der tatsächliche, unbekannte ROI-Parameter, der für den Channel geschätzt werden soll.
- \(\pi(\cdot)\) ist die
baseline_prior-Verteilung. Wenn kein Baseline-Prior angegeben ist, wird ein uneigentlicher flacher gleichmäßiger Prior über positive reelle Zahlen verwendet (\(\pi(\text{ROI}) \propto 1\) für \(\text{ROI} > 0\)). - \(N\) ist die Anzahl der registrierten Tests.
Der Builder wertet diese Posterior-Dichte numerisch auf einem adaptiven Parametergitter aus, um die kombinierte Verteilung zu ermitteln. Weitere Informationen finden Sie im technischen Anhang.
Schritt 4: Kalibrierten Prior anpassen und erstellen
Schließlich passt Meridian eine standardmäßige parametrische Verteilungsfamilie (LogNormal, Gamma oder Normal) an die in Schritt 3 berechnete numerische Posterior-Verteilung an.
Die Kandidatenverteilungsfamilien werden anhand des baseline_prior ausgewählt: LogNormal und Gamma werden immer berücksichtigt, während die Normalverteilung ausgewertet wird, wenn der Baseline-Prior einen negativen Träger zulässt. Die am besten geeignete Verteilungsform wird durch Minimierung des Kreuzentropieverlusts (entspricht der Minimierung der Kullback-Leibler-Divergenz) gegenüber dem numerischen Posterior ausgewählt.
Sobald die optimalen Prior-Verteilungen für jeden kalibrierten Channel gefunden wurden, werden diese von CalibrationBuilder gekapselt. Für alle Channels, die nicht kalibriert wurden, weist CalibrationBuilder den benutzerdefinierten Prior zu, der in custom_prior angegeben ist. Der Standard-ROI-Prior von \(\text{LogNormal}(0.2, 0.9)\) wird nur verwendet, wenn für diesen Channel kein benutzerdefinierter Prior angegeben ist.
Die endgültige Ausgabe von build() ist eine CalibratedPriors-Dataclass, die Folgendes enthält:
priors.roi_m: EineCalibratedDistribution(Unterklasse vonIndependentMultivariateDistribution), die den kalibrierten Prior für kostenpflichtige Media-Channels darstellt.priors.roi_rf: EineCalibratedDistribution(Unterklasse vonIndependentMultivariateDistribution), die den kalibrierten Prior für Channels für Reichweite und Häufigkeit darstellt.
Diese kalibrierten Verteilungen werden an PriorDistribution und dann an ModelSpec übergeben, um das Meridian-Modell zu initialisieren.
Technischer Anhang
In diesem Abschnitt finden Sie die mathematischen Formeln und algorithmischen Details, die der numerischen Posterior-Berechnung und der Verteilungsanpassung in CalibrationBuilder zugrunde liegen.
Formulierung der Posterior-Verteilung
Für einen bestimmten Channel sei \(\theta\) der tatsächliche Channel-ROI. Es werden\(N\) unabhängige, angepasste Testergebnisse beobachtet. Für jeden Test \(i \in \{1, \ldots, N\}\)gibt es eine angepasste Punktschätzung \(\mu_{adj,i}\) und einen angepassten Standardfehler \(\sigma_{adj,i}\).
Angenommen, jede angepasste Punktschätzung ist eine normalverteilte Beobachtung um den wahren ROI:
Die Likelihood-Funktion für den \(i\)-ten Test ist:
Wenn ein baseline_prior angegeben wird, wird die Wahrscheinlichkeitsdichtefunktion als\(\pi(\theta)\)bezeichnet. Wenn kein Baseline-Prior angegeben ist, wird ein uneigentlicher, flacher, gleichmäßiger Prior über positive Werte verwendet, \(\pi(\theta) \propto I_{\{\theta > 0\}}\), wobei\(I\) die Indikatorfunktion ist.
Nach dem Satz von Bayes ist die Posterior-Dichte des Channel-ROI, \(p(\theta \mid \{\mu_{adj,i}, \sigma_{adj,i}\})\), proportional zum Produkt aus dem Prior und den Likelihoods aller unabhängigen Tests:
Rasterbasierte numerische Integration
Da die Posterior-Verteilung \(p(\theta \mid \{\mu_{adj,i}, \sigma_{adj,i}\})\) möglicherweise keine standardmäßige analytische Form hat (z. B. bei Verwendung von nicht normalverteilten Baseline-Priors wie LogNormal oder Gamma), wertet Meridian sie numerisch auf einem Raster aus.
- Scouting-Schritt: Meridian führt zuerst einen Scouting-Schritt durch, um die Region mit hoher Wahrscheinlichkeitskonzentration zu finden. Es wird ein breites Raster definiert, das um den empirischen Mittelwert der Verteilungen zentriert ist, und der Bereich ermittelt, der\(99.8\%\) der kumulativen Wahrscheinlichkeit enthält (vom \(0.1\)-ten Perzentil bis zum \(99.9\)-ten Perzentil).
- Auswertung auf feinem Raster: Anschließend wird ein feines Raster mit 10.000 gleichmäßig verteilten Punkten für diesen ermittelten Bereich \([\theta_{\text{min}}, \theta_{\text{max}}]\) erstellt und die nicht normalisierte Posterior-Dichte an jedem Punkt ausgewertet.
Normalisierung: Die Dichte wird mithilfe der Riemann-Summen-Integration normalisiert:
$$ p(\theta_j \mid \{\mu_{adj,i}, \sigma_{adj,i}\}) = \frac{u(\theta_j)}{\sum_k u(\theta_k)\Delta\theta} $$Dabei ist \(u(\theta)\) die nicht normalisierte Posterior-Dichte, \(\theta_j\) der \(j\)-te Rasterpunkt und \(\Delta\theta\) die Schrittgröße.
Verteilungsanpassung
Nachdem die numerische Posterior-PDF auf dem Raster berechnet wurde, passt Meridian eine parametrische Verteilung \(q(\theta; \phi)\) an, wobei \(\phi\) die Verteilungsparameter darstellt, um die Posterior-Verteilung zu approximieren.
Meridian bestimmt die infrage kommenden Verteilungsfamilien anhand des Trägers des Baseline-Priors:
- Nicht negativer Träger (Standard): Wenn kein Baseline-Prior angegeben ist (was standardmäßig einem nicht-negativen Träger entspricht) oder wenn der Baseline-Prior den Träger auf nicht-negative Werte beschränkt (z. B.
LogNormaloderGamma), berücksichtigt Meridian die Verteilungsfamilien LogNormal (\((0, \infty)\)) und Gamma (\((0, \infty)\)) und nicht die Normalverteilung. - Negativer Träger: Wenn der Baseline-Prior negativen Werten (z. B.
Normal) eine endliche Wahrscheinlichkeitsdichte zuweist, berücksichtigt Meridian die Normalverteilung Normal (definiert auf \((-\infty, \infty)\)) und auch LogNormal und Gamma.
Für jede Kandidatenfamilie ermittelt Meridian die Parameter \(\phi\) , die den Kreuzentropieverlust zwischen der numerischen Posterior-Verteilung \(p(\theta)\) und der Kandidatenverteilung \(q(\theta; \phi)\)minimieren:
Die Minimierung dieses Verlusts entspricht mathematisch der Minimierung der Kullback-Leibler-Divergenz \(D_{KL}(p \parallel q)\) zwischen der Näherung\(q\) und dem wahren numerischen Posterior \(p\).
Meridian verwendet den L-BFGS-B-Optimierungsalgorithmus, um die optimalen Parameter zu finden. Die Verteilungsfamilie, die den niedrigsten Verlust erzielt, wird als endgültiger kalibrierter Prior für den Channel ausgewählt.