Negative Baseline verhindern

In Meridian stellt die Baseline das erwartete Ergebnis im kontrafaktischen Szenario dar, in dem alle Testvariablen auf ihre Baseline-Werte festgelegt sind (null für kostenpflichtige und organische Media; der konfigurierte Baseline-Wert für nicht mediabezogene Testvariablen). Da das Ergebnis nicht negativ sein darf, weist eine negative Baseline auf einen statistischen Fehler bei der kausalen Inferenz der Effekte der Testvariablen hin. Das bedeutet in der Regel, dass das Modell die Auswirkungen der Testvariablen überschätzt. Mit einer gewissen Menge statistischer Fehler ist in jedem Modell zu rechnen. Ein gelegentlicher, kleiner Rückgang unter null ist also kein Grund zur Sorge. Eine stark negative Baseline (oder eine hohe Posterior-Wahrscheinlichkeit, dass die aggregierte Baseline für das gesamte Zeitfenster negativ ist) ist jedoch ein klares Signal, dass das Modell angepasst werden muss.

Wenn Sie allows_negative_aggregate_baseline=False in ModelSpec festlegen, ergibt sich eine Wahrscheinlichkeit für eine negative Baseline von 0.0, wie durch die Modellsystemdiagnose Negative Baseline ermittelt. Damit wird die Baseline für das Gesamtergebnis bei jeder Prior- und Posterior-Ziehung auf einen nicht negativen Wert beschränkt. Gesamt- bedeutet hier, dass die Werte über alle geografischen Einheiten und Zeiträume hinweg summiert werden. Die Baseline-Werte für einzelne geografische Einheiten oder Zeiträume können jedoch weiterhin negativ sein.

Standard: allows_negative_aggregate_baseline=True. Legen Sie allows_negative_aggregate_baseline=False fest, um die Beschränkung zu aktivieren:

from meridian.model import model
from meridian.model import spec

model_spec = spec.ModelSpec(allows_negative_aggregate_baseline=False)
mmm = model.Meridian(input_data=data, model_spec=model_spec)

Funktionsweise der Beschränkung

Die erwartete Baseline ist die Summe mehrerer Modellkomponenten: Zeiteffekte (knot_values; siehe Knoten festlegen), geografische Haupteffekte (tau_g_excl_baseline), Kontrollvariablen und nicht mediabezogene Testvariablen, die mit ihren Baseline-Werten bewertet werden.

Wenn allows_negative_aggregate_baseline=False festgelegt ist, wird knot_values in Meridian mithilfe eines orthogonalen Basiswechsels (Householder-Spiegelung) neu parametrisiert, sodass die aggregierte Baseline über alle geografischen Einheiten und Zeiträume hinweg durch einen einzelnen Parameter gesteuert wird, während die verbleibenden \(K - 1\) Komponenten uneingeschränkt bleiben, um Zeiteffekte zu erfassen.

Bei der Prior- und Posterior-Stichprobenerhebung werden in Meridian zuerst die Parameter für geografische Einheiten, Kontrollvariablen und nicht mediabezogene Testvariablen erhoben. Anschließend wird ein TruncatedNormal-Prior auf diesen einzelnen Knotenparameter angewendet, wobei eine dynamische Untergrenze gilt, die von diesen erhobenen Komponenten abhängt. So wird sichergestellt, dass bei jeder Ziehung eine nicht negative Baseline für das Gesamtergebnis vorliegt. Die Baseline-Werte für einzelne geografische Einheiten oder Zeiträume können weiterhin negativ sein, wenn die Daten dies rechtfertigen.

Ausführliche technische Details finden Sie im mathematischen Anhang.

Haupteigenschaften

Durch die Beschränkung der aggregierten Baseline auf nicht negative Werte ergeben sich mehrere wünschenswerte statistische und rechnerische Eigenschaften:

  • Wahrscheinlichkeit von null für eine negative aggregierte Baseline: Jede Prior- und Posterior-Ziehung erfüllt die Nichtnegativitätsbedingung für die Baseline für das Gesamtergebnis. Das bedeutet, dass Analyzer.negative_baseline_probability() bei der Auswertung über alle geografischen Einheiten und Zeiträume hinweg gleich 0.0 ist und die Komponente Negative Baseline im ModelReviewer den Wert PASS (Wahrscheinlichkeit von 0.0) zurückgibt. Die Auswertung einer Teilmenge von geografischen Einheiten oder Zeiträumen (selected_geos, selected_times) oder der KPI-Baseline (use_kpi=True), wenn revenue_per_kpi je nach geografischer Einheit oder Zeitraum variiert, ist nicht beschränkt und kann eine Wahrscheinlichkeit ungleich null zurückgeben.
  • Kausale Bereinigung von Störfaktoren wird berücksichtigt: Parameter, die dazu dienen, Verzerrungen bei Effekten von Testvariablen zu reduzieren, einschließlich geografischer Haupteffekte, Koeffizienten von Kontrollvariablen und der verbleibenden \(K - 1\) Komponenten von knot_values, werden nicht abgeschnitten oder beschränkt.
  • Kompatibel mit allen Modellstrukturen ohne Abstimmung: Die Funktion wird mit einem einzigen booleschen Schalter (allows_negative_aggregate_baseline=False) aktiviert, ohne dass eine Bestrafungsabstimmung oder Änderungen an den Standard-Priors von Meridian erforderlich sind. Sie funktioniert nahtlos sowohl bei Modellen auf geografischer als auch auf Länderebene, mit jeder Knotenspezifikation (ein einzelner konstanter Intercept \(K = 1\), manuelle Knotenlisten, vollständige Zeiteffekte \(K = T\)oder automatische Knotenauswahl), Kontrollvariablen, nicht mediabezogenen Testvariablen, organischen Media und Channels für Reichweite und Häufigkeit.
  • Keine Verlangsamung der MCMC-Stichprobenerhebung: Da die orthogonale Basiswechselmatrix in geschlossener Form vorausberechnet wird und nur ein einzelner Parameter abgeschnitten wird, bleibt die Posterior-Geometrie für den No-U-Turn Sampler (NUTS) glatt, mit vernachlässigbarem Rechenaufwand.
  • Minimale Auswirkungen, wenn die Baseline bereits positiv ist: Das Kürzen eines einzelnen transformierten Knotenparameters ist eine minimal ausreichende Prior-Anpassung. Wenn die Daten und Priors bereits eine positive aggregierte Baseline unterstützen, liegt der Schwellenwert für die Kürzung weit im linken Bereich der Verteilung. Daher ändern sich die Posterior-Schätzungen im Vergleich zum unbeschränkten Modell nur geringfügig. Da sich durch die Einstellung der Prior ändert, unterscheiden sich die Ergebnisse je nach Modell und derselbe zufällige Seed führt bei den beiden Einstellungen zu unterschiedlichen Ziehungen.

Interaktion mit Priors und Modellintegrität

Durch die Beschränkung der aggregierten Baseline auf nicht negative Werte ergibt sich eine Interaktion mit den Priors Ihres Modells, was bei der Diagnose der Modellintegrität zu Konflikten zwischen Priors und Daten führen kann.

Testvariablen-Priors und Diagnose der Modellintegrität

Wenn die Beschränkung für eine nicht negative Baseline aktiviert ist, können gelegentlich andere Komponenten der Modellintegrität beeinträchtigt werden, wenn Ihre Testvariablen-Priors mit einer nicht negativen aggregierten Baseline in Konflikt stehen.

Eine negative Baseline in einem nicht beschränkten Modell kann auf zu optimistische Testvariablen-Priors zurückzuführen sein. Wenn Priors für ROI, Grenz-ROI oder Beitrag einen Gesamtbeitrag der Testvariablen implizieren, der das beobachtete Gesamtergebnis übersteigt, führt die Beschränkung auf eine nicht negative aggregierte Baseline zu einem Konflikt zwischen den Priors und den Daten. Das kann dazu führen, dass das Posterior-Vorhersage-Gesamtergebnis das beobachtete Gesamtergebnis übersteigt.

Wenn dieser Konflikt entsteht, verhindert die Beschränkung, dass das Modell überschüssige inkrementelle Ergebnisse in einer negativen Baseline verbirgt. Stattdessen kann der Konflikt in der ModelReviewer-Diagnose auftauchen:

  • Konvergenz: Erhöhte R-hat-Werte (max_r_hat >= 1.2), wenn starke Testvariablen-Priors den Stichprobennehmer gegen die nicht negative Baseline-Grenze drücken.
  • Bayesscher PPP-Wert (Posterior Predictive P): Ein FAIL-Ergebnis (p-Wert < 0.05), wenn das prognostizierte Posterior-Gesamtergebnis das beobachtete Gesamtergebnis übersteigt.
  • Güte der Anpassung: Ein Rückgang von R-Quadrat.

Wenn Sie nach dem Aktivieren der Beschränkung Konvergenzprobleme, einen Fehler beim bayesschen PPP-Wert oder einen niedrigeren R-Quadrat-Wert feststellen, prüfen Sie die Testvariablen-Priors und kalibrieren Sie sie neu, anstatt eine negative Baseline zuzulassen. Eine detaillierte Anleitung finden Sie unter Negative oder niedrige Baseline anpassen.

Auswirkungen auf die Anforderungen für den knot_values-Prior und den benutzerdefinierten Prior

Gemäß der Beschränkung ist der induzierte Prior für knot_values nicht mehr unabhängig und identisch verteilt (independent and identically distributed, i.i.d.). Normal. Da die erste transformierte Knotenkoordinate bei einer Untergrenze abgeschnitten wird, die von den Parametern für geografische Einheiten, Kontrollvariablen und nicht mediabezogene Testvariablen abhängt, sind die rekonstruierten knot_values korreliert, insgesamt nach oben verschoben und von diesen Parametern abhängig. Die marginalen Priors für die Parameter für geografische Einheiten, Kontrollvariablen und nicht mediabezogene Testvariablen werden nicht geändert, da sie vor der abgeschnittenen Knotenkoordinate erhoben werden.

Benutzerdefinierte Priors für alle anderen Modellparameter wie roi_m, mroi_m, contribution_m, tau_g_excl_baseline, gamma_c und gamma_n für Media sind nicht eingeschränkt und werden direkt aus den angegebenen Verteilungen entnommen.

Sie können den resultierenden Prior mit sample_prior prüfen. Die Prior-Ziehungen enthalten die rekonstruierten knot_values. Die internen Parameter rotated_knot_0 und rotated_knot_rest werden nicht gespeichert.

from meridian.analysis import analyzer
from meridian.model import model
from meridian.model import spec

model_spec = spec.ModelSpec(allows_negative_aggregate_baseline=False)
mmm = model.Meridian(input_data=data, model_spec=model_spec)
mmm.sample_prior(500)

# Prior draws of knot_values with dimensions (chain, draw, knots).
knot_values_prior = mmm.inference_data.prior.knot_values

# Prior probability of a negative aggregate baseline; 0.0 under the constraint.
analyzer.Analyzer(mmm).negative_baseline_probability(use_posterior=False)

Ein Vergleich dieser Ziehungen mit denen aus einem Modell ohne Beschränkungen (allows_negative_aggregate_baseline=True) zeigt, wie sich die Beschränkung auf den knot_values-Prior auswirkt. Nach dem Ausführen von sample_posterior können Sie mit ModelDiagnostics.plot_prior_and_posterior_distribution(parameter='knot_values') auch die Prior- und Posterior-Verteilung von knot_values darstellen.

Mathematischer Anhang

In diesem Abschnitt wird die mathematische Formulierung der Beschränkung für die nicht negativen aggregierten Baseline beschrieben. Weitere Informationen zur in diesem Abschnitt verwendeten mathematischen Notation finden Sie im Artikel zur mathematischen Notation und im Artikel zu den Eingabedaten.

1. Bedingung für aggregierte Baseline auf der transformierten KPI-Skala

\(y_{g,t} = (\ddot{y}_{g,t}/p_g - m^{[Y]}) / s^{[Y]}\) bezeichnet den zentrierten und an die Grundgesamtheit angepassten KPI. Im kontrafaktischen Baseline-Szenario, in dem alle Variablen für kostenpflichtige und organische Media auf null und nicht mediabezogene Testvariablen auf ihre Baseline-Werte \(x^{[N](0)}_{g,t,i}\)gesetzt sind, ist der erwartete transformierte KPI für die geografische Einheit \(g\) und den Zeitraum \(t\) :

\[ \hat{y}^{\text{base}}_{g,t} := E\left(Y_{g,t} \;\middle|\; \left\{x^{(0)}_{g,t,i}\right\}, \left\{z_{g,t,i}\right\}\right) = \mu_t + \tau_g + \sum\limits_{i=1}^{N_C} \gamma^{[C]}_{g,i} z_{g,t,i} + \sum\limits_{i=1}^{N_N} \gamma^{[N]}_{g,i} x^{[N](0)}_{g,t,i} \]

wobei:

  • \(\mu_t = \sum_{k=1}^{K} W_{t,k} b_k\) ist der zeitvariable Intercept, der durch die \(T \times K\) Knotengewichtsmatrix \(W\) und die Knotenparameter \(b = (b_1, \dots, b_K)^\top\) bestimmt wird (siehe Funktionsweise des Arguments knots).
  • \(\tau_g\) ist der geografische Haupteffekt.
  • \(\gamma^{[C]}_{g,i} z_{g,t,i}\) ist der Beitrag der Kontrollvariablen\(i\).
  • \(\gamma^{[N]}_{g,i} x^{[N](0)}_{g,t,i}\) ist der Beitrag der nicht mediabezogenen Testvariablen \(i\) , ausgewertet am kontrafaktischen Baseline-Wert\(x^{[N](0)}_{g,t,i}\).

\(u^{[Y]}_{g,t}\) steht für revenue_per_kpi (mit \(u^{[Y]}_{g,t} = 1\), wenn revenue_per_kpi gleich None ist). Die normalisierten Ergebnisgewichtungen\(w_{g,t}\)werden definiert:

\[ w_{g,t} = \frac{T \cdot p_g u^{[Y]}_{g,t}}{\sum\limits_{g'=1}^{G} \sum\limits_{t'=1}^{T} p_{g'} u^{[Y]}_{g',t'}} \]

sodass \(\sum_{g=1}^{G} \sum_{t=1}^{T} w_{g,t} = T\). Das Umkehren der KPI-Skalierungstransformation zeigt, dass das Ergebnis für die aggregierte Baseline, das über alle geografischen Einheiten und Zeiträume summiert wird, nur dann nicht negativ ist, wenn:

\[ \sum\limits_{k=1}^{K} W^*_k b_k + \text{offset}\left(\tau, \gamma^{[C]}, \gamma^{[N]}\right) \ge -\frac{T \cdot m^{[Y]}}{s^{[Y]}} \]

wobei \(W^*_k = \sum_{t=1}^{T} W_{t,k} \left(\sum_{g=1}^{G} w_{g,t}\right)\)der gesamte ergebnisgewichtete Beitrag des Knotens \(k\)ist und\(\text{offset}(\tau, \gamma^{[C]}, \gamma^{[N]})\) die ergebnisgewichteten Terme für geografische Einheiten, Kontrollvariablen und nicht mediabezogene Testvariablen aggregiert:

\[ \text{offset}\left(\tau, \gamma^{[C]}, \gamma^{[N]}\right) = \sum\limits_{g=1}^{G} \sum\limits_{t=1}^{T} w_{g,t} \left( \tau_g + \sum\limits_{i=1}^{N_C} \gamma^{[C]}_{g,i} z_{g,t,i} + \sum\limits_{i=1}^{N_N} \gamma^{[N]}_{g,i} x^{[N](0)}_{g,t,i} \right) \]

2. Orthogonaler Basiswechsel für knot_values

Um die Linearkombination \((W^*)^\top b = \sum_{k=1}^{K} W^*_k b_k\)in eine einzelne Koordinate zu isolieren, ohne die Prior-Geometrie zu ändern, erstellt Meridian eine \(K \times K\) symmetrische orthogonale Matrix \(Q\)(\(Q Q^\top = I_K\)) als Householder-Spiegelung in geschlossener Form, deren erste Zeile der Einheitsvektor \(u = W^* / \|W^*\|_2\)ist.

Die Definition der transformierten Knotenparameter\(\tilde{b} = (\tilde{b}_1, \tilde{b}_2, \dots, \tilde{b}_K)^\top = Q b\)(sodass \(b = Q^\top \tilde{b}\); im Modellberechnungsdiagramm heißt\(\tilde{b}_1\) rotated_knot_0 und\((\tilde{b}_2, \dots, \tilde{b}_K)\) rotated_knot_rest):

  • Der aggregierte Knotenbeitrag hängt ausschließlich von der ersten transformierten Koordinate \(\tilde{b}_1\)ab:

    \[ (W^*)^\top b = (W^*)^\top Q^\top \tilde{b} = \|W^*\|_2 \, \tilde{b}_1 \]

  • Da \(Q\) orthogonal ist, ist der isotrope Normal-Prior mit Mittelwert 0\(b_k \stackrel{\text{i.i.d.}}{\sim} \text{Normal}(0, \sigma_b)\) invariant unter orthogonalen Transformationen und induziert voneinander unabhängige\(\text{Normal}(0, \sigma_b)\) -Priors auf den transformierten Koordinaten\(\tilde{b}_1, \tilde{b}_2, \dots, \tilde{b}_K\):

    \[ b_k \stackrel{\text{i.i.d.}}{\sim} \text{Normal}(0, \sigma_b) \quad \text{for } k = 1, \dots, K \quad \Longleftrightarrow \quad \tilde{b}_k \stackrel{\text{i.i.d.}}{\sim} \text{Normal}(0, \sigma_b) \quad \text{for } k = 1, \dots, K \]

3. Dynamische Kürzung an \(\tilde{b}_1\)

Bei der Prior- und Posterior-Stichprobenerhebung erhebt Meridian zuerst \(\tau_g\),\(\gamma^{[C]}_{g,i}\)und \(\gamma^{[N]}_{g,i}\) , wertet die dynamische Untergrenze aus:

\[ \tilde{b}_{1,\text{low}}\left(\tau, \gamma^{[C]}, \gamma^{[N]}\right) = \frac{-\frac{T \cdot m^{[Y]}}{s^{[Y]}} - \text{offset}\left(\tau, \gamma^{[C]}, \gamma^{[N]}\right)}{\|W^*\|_2} \]

und legt einen TruncatedNormal-Prior für den einzelnen Parameter \(\tilde{b}_1\)fest:

\[ \tilde{b}_1 \sim \text{TruncatedNormal}\left(\text{loc}=0, \text{scale}=\sigma_b, \text{low}=\tilde{b}_{1,\text{low}}, \text{high}=\tilde{b}_{1,\text{high}}\right) \]

wobei die obere Kürzungsgrenze festgelegt ist auf:

\[ \tilde{b}_{1,\text{high}} = \max\left(\tilde{b}_{1,\text{low}} + 50\sigma_b, \; 50\sigma_b\right) \]

Die Obergrenze ist eine numerische Anforderung, keine Modellierungsbeschränkung. Der NUTS nimmt Stichproben von \(\tilde{b}_1\) auf einer unbeschränkten Skala über die Sigmoid-Transformation, die von TruncatedNormal von TensorFlow Probability verwendet wird. Dafür sind endliche Grenzen erforderlich. Wenn die Obergrenze mindestens \(50\sigma_b\) größer als null und\(\tilde{b}_{1,\text{low}}\) festgelegt wird, bleibt im oberen Bereich eine vernachlässigbare Prior-Wahrscheinlichkeit, sodass sich die Verteilung in der Praxis wie \(+\infty\) verhält.

Die verbleibenden \(K - 1\) transformierten Knotenparameter \(\tilde{b}_2, \dots, \tilde{b}_K \stackrel{\text{i.i.d.}}{\sim} \text{Normal}(0, \sigma_b)\) bleiben unbeschränkte Normalvariablen und Meridian rekonstruiert die ursprünglichen Knotenparameter als \(b = Q^\top \tilde{b}\).