Bevorzugtes Design konfigurieren

In diesem Dokument wird beschrieben, wie Sie Ihr Testdesign mit der Meridian GeoX-Bibliothek konfigurieren. Sie erfahren, wie Sie Ihre Daten vorbereiten, wichtige Testparameter festlegen, erweiterte Konfigurationen nutzen, die Machbarkeit des Designs bewerten und das ausgewählte Design visualisieren und exportieren.

Zusammenfassung und Datenvorbereitung

Importieren Sie zuerst die Meridian GeoX-Bibliothek und bereiten Sie den Datensatz für den Vorabtest vor. Wie unter Daten erfassen und vorbereiten beschrieben, ist dieser Datensatz die Voraussetzung für die Planung Ihrer GeoX-Studie.

Ihr Dataset muss ein Pandas-DataFrame sein. Die erforderlichen Spalten sind:

  • date: z. B. täglich
  • location: z. B. verschiedene Marktgebiete
  • conversions: Reaktionsdaten sind in der Regel Rohdaten zu Conversion-Zahlen oder Umsatzdaten, die normalerweise aus einem CRM-System der oder des Werbetreibenden stammen
  • spend: Ausgabendaten für Kampagnen, die in der Studie enthalten sind. Dies ist eine optionale Spalte. Verwenden Sie für Testkonfigurationen mit mehreren Zellen eindeutige Spaltenlabels wie spend_cell_1 oder spend_cell_2.

1. Entwurfstests

Dies ist die wichtigste Interaktion, bei der Sie die Parameter des bevorstehenden Tests definieren. Zur Veranschaulichung dieses Schritts kann ein Beispiel für ein 28-tägiges Heavy-up-Testdesign mit zeitbasierter Regression (TBR) und geschichteter Stichprobe verwendet werden.

  • DesignConfig: Wird verwendet, um die Grundlagen von Tests festzulegen:
    • experiment_duration: Die Dauer des Tests, ohne Cooldowns. Die Dauer umfasst in der Regel mindestens einen Kaufzyklus für das Produkt.
    • cell_count: Die Anzahl der Testgruppen im Test. Der Standardwert ist 1. Das bedeutet, dass im Test eine Testgruppe mit einer Kontrollgruppe kombiniert wird. Wenn der Wert größer als 1 ist, entwerfen Sie eine Studie mit mehreren Testgruppen.
    • experiment_types: Definiert die Art des Tests, zum Beispiel Holdback, Go-dark oder Heavy-up. Weitere Informationen finden Sie unter Testtypen. In Tests mit mehreren Testgruppen können Sie für verschiedene Testgruppen unterschiedliche Testtypen festlegen. Beispiel: {'cell_1': ExperimentType.GO_DARK, 'cell_2': ExperimentType.HEAVY_UP} gibt an, dass in einer Testgruppe ein Go-dark-Test und in einer anderen Testgruppe ein Heavy-up-Test ausgeführt wird. Das ist eine sehr gängige Konfiguration bei budgetneutralen Tests mit mehreren Zellen.
    • methodology: Die für die Designauswahl gewählte Analysemethode, zum Beispiel zeitbasierte Regression, synthetische Kontrollvariable, synthetische Difference-in-Differences.
    • geo_assignment_rule: Es werden sowohl zufällige als auch geschichtete Stichproben unterstützt.
    • design_output_count: Die Gesamtzahl der empfohlenen Designs, die in die Ausgabe aufgenommen werden sollen.

Weitere Informationen zu den Optionen für die Methodik und die Zuordnungsregeln finden Sie unter Methoden vergleichen.

import datetime
import meridian_geox as geox

# Example: Specify a 28-day 'heavy-up' (increased spend) experiment using TBR
# and stratified sampling.
design_config = geox.DesignConfig(
    experiment_duration=datetime.timedelta(days=28),
    experiment_types=geox.ExperimentType.HEAVY_UP,
    methodology=geox.Methodology.TBR,
    geo_assignment_rule=geox.GeoAssignmentRule.STRATIFIED_SAMPLING,
    design_output_count=5
)
  • constraints: Hier können Sie maximale Budgets und andere designbezogene Einschränkungen angeben. Komplexere Anwendungsfälle, zum Beispiel das Ein- oder Ausschließen bestimmter geografischer Regionen oder das Festlegen von Conversion-Grenzwerten. Eine einfache Einrichtung von Beschränkungen, die nur maximale Budgets umfasst, sieht so aus: Die komplexeren Einschränkungen werden im nächsten Abschnitt behandelt.
# Limit the max experiment budget to be 100000.
constraints = geox.Constraints(
    budget_constraint=geox.Budget(budget=100000)
)
  • geox.run_design(): Die Hauptfunktion, die den Vorabtest-Datensatz, die Konfigurationen und die Einschränkungen verwendet, um eine Reihe potenzieller Testdesigns zu generieren, die nach MDE sortiert sind.
# Generate Design
# 'design_data' should be your pre-test pandas dataframe.
design_set = geox.run_design(
    design_data,
    design_config,
    constraints
)

# Select the top-ranked design
selected_id = next(iter(design_set.designs))
selected_design = design_set.designs[selected_id]

DesignConfig enthält auch Parameter, die Sie für das Design optimieren können. Sie können sie aber auch leer lassen, da es Standardwerte für sie gibt:

  • alpha (optional): Das Signifikanzniveau für den Test. Der Standardwert ist 0,10 oder 10 %. Das bedeutet auch, dass die erwartete Abdeckungswahrscheinlichkeit des Konfidenzintervalls 1 − Alpha = 90 % beträgt.
  • power (optional): Die Wahrscheinlichkeit, einen tatsächlichen Effekt zu erkennen. Der Standardwert ist 80 %.
  • cost_per_incremental_conversion (CpIC, optional): Wird nur in Holdback-Tests verwendet. In Holdback-Tests wird der CpIC verwendet, um das Mindestbudget zu schätzen, also den Betrag, der für die neu aktivierten Kampagnen ausgegeben werden soll. Der Standardwert ist 1. Es ist jedoch praktischer, den CpIC als 1/iCPD (oder 1/iROAS) zu schätzen, wobei die iCPD- (oder iROAS-)Schätzung aus einem vorhandenen Meridian-MMM-Modell oder einer früheren Studie zur Steigerung der Conversions stammt, zum Beispiel GeoX oder die Conversion-Steigerung von Google. Da der CpIC nur in Holdback-Tests nützlich ist, wird er in Go-dark- und Heavy-up-Tests (oder -Zellen) ignoriert. In diesen Tests werden bestehende Live-Kampagnen gemessen und das Testbudget wird anhand von Verlaufsdaten zu Ausgaben prognostiziert.
  • min_r2 (optional): Der minimale Schwellenwert für den Out-of-Sample-R-Quadrat-Wert (Güte der Anpassung), der für Kandidatenentwürfe während der Entwurfsphase erforderlich ist. Der Standardwert ist auf 0,8 (80 %) festgelegt. Dadurch werden Testdesigns herausgefiltert, bei denen die Modellanpassung vor dem Test unter diesem Schwellenwert liegt.

2. Zusätzliche Designkonfigurationen durch Beschränkungen

In diesem Abschnitt erfahren Sie, wie Sie das Design flexibel konfigurieren können, indem Sie zusätzlich zur Angabe eines maximalen Budgets (wie im vorherigen Abschnitt gezeigt) weitere Designbeschränkungen festlegen. Alle diese Einschränkungen sind optional. Hier ist ein Beispiel für das Hinzufügen einiger Einschränkungen zum Design.

  • excluded_geos: Die geografischen Regionen, die vom Testdesign ausgeschlossen werden sollen. In der Regel handelt es sich dabei um große Ballungsräume, die Sie nicht in eine Meridian GeoX-Studie einbeziehen möchten, da dies zu erheblichen Media-Störungen führen kann.
  • excluded_dates: Daten, die vom Testdesign ausgeschlossen werden sollen.
  • budget_percent: Die maximale prozentuale Budgetänderung für das Testdesign. Diese Option kann nur verwendet werden, wenn die Ausgabendaten pro Zelle bereitgestellt werden.
  • budget_constraint: Die Budgetbeschränkung für das Testdesign (pro Zelle). Das kann ein Gesamtbudgetbetrag oder eine prozentuale Budgetänderung sein.
  • max_conversions_percent: Das maximale Conversion-Volumen für die Testgruppe. Der Standardwert ist auf 30 % festgelegt, da ein gewöhnlicher GeoX-Test nicht mehr als 30 % Ihrer Media betreffen sollte.
# 1. Define specific dates to exclude
dates_to_exclude = {
    pd.to_datetime('2024-12-31'),
    pd.to_datetime('2025-01-01'),
}

# 2. Add them to your Constraints object which specifies
# excluded geos, excluded dates, maximum conversion percentages
custom_constraints = geox.Constraints(
    excluded_geos={'loc1', 'loc2', 'loc3'},
    excluded_dates=dates_to_exclude,
    max_conversions_percent=0.2,
    budget_constraint=geox.Budget(budget=150000)
)

# 3. Use these constraints in a new design
custom_design_set = geox.run_design(
    design_data,
    design_config,
    custom_constraints
)

print("Design generated with date exclusions.")

3. Auswertung, Visualisierung und Export

Nach dem Ausführen von geox.run_design() enthält die Ausgabe eine Liste von Kandidatenentwürfen. Sie können diese Designs anhand wichtiger Messwerte in der Übersichtstabelle bewerten, zum Beispiel R-Quadrat (\( R^2 \)), MDE und p-Wert des A/A-Tests. Alle Designkandidaten in der Übersichtstabelle werden nach MDE in aufsteigender Reihenfolge sortiert.

design_id cell design_methodology r2 mde mde_abs p_value (AA) budget design_implied_cpic treatment_conversions_pct treatment_geo_count
52456ea8 cell_1 STRATIFIED_SAMPLING-TBR 0.913 0.013 7085.925 0.394 7085.925 1 30.073 27
d42f5f69 cell_1 STRATIFIED_SAMPLING-TBR 0.917 0.014 7610.810 0.920 7610.810 1 29.820 29
6f8dc0bc cell_1 STRATIFIED_SAMPLING-TBR 0.897 0.014 7610.809 0.371 7610.809 1 29.325 29
06c83b68 cell_1 STRATIFIED_SAMPLING-TBR 0.945 0.015 7873.250 0.497 7873.250 1 30.064 30
cb3f10cd cell_1 STRATIFIED_SAMPLING-TBR 0.915 0.015 7873.249 0.169 7873.249 1 30.039 30

Auswertung der Machbarkeit des Designs

Um ein geeignetes Design für Ihre Meridian GeoX-Analyse auszuwählen, bewerten Sie die Kandidaten anhand der folgenden Kriterien:

  1. R-Quadrat-Schwellenwert (\( R^2 \)): Es wird empfohlen, ein Design mit\( R^2 \ge 0.8 \) auszuwählen. Ein \( R^2 < 0.5 \) weist darauf hin, dass die Kontrollregionen schlechte Prädiktoren für die Testregionen sind. Das kann unter bestimmten Umständen dazu führen, dass die Analyse nach dem Test unzuverlässig ist.

  2. A/A-Testvalidierung: Das ausgewählte Design muss den A/A-Test bestehen. Der p-Wert Ihres A/A-Tests sollte größer als das von Ihnen gewählte Signifikanzniveau (\( \alpha \)) sein, um sicherzustellen, dass keine signifikante bereits vorhandene Verzerrung vorliegt. Wenn ein hoher Prozentsatz der Kandidatendesigns den A/A-Test nicht besteht, deutet das in der Regel auf eine schlechte Datenqualität vor dem Test hin, wie beispielsweise extreme Ausreißer, plötzliche geografische Verschiebungen, hohe Volatilität oder eine schlechte Modellanpassung. Wenn Sie einen Test mit solchen Daten durchführen, ist die Analyse nach dem Test aufgrund eines hohen Risikos von falsch positiven Ergebnissen (Erkennung einer nicht vorhandenen Steigerung) unzuverlässig.

R-Quadrat-Anpassung

Die Mindestanforderung an \( R^2 \) wird durch den Parameter min_r2 in geox.DesignConfig gesteuert. Der erforderliche Mindestwert für \( R^2 \) ist standardmäßig 0,8. Wenn die Designsuche bei 0,8 keine geeigneten Kandidaten zurückgibt, können Sie den Schwellenwert flexibel anpassen, beispielsweise auf 0,75 oder 0,70:

design_config = geox.DesignConfig(
    experiment_duration=datetime.timedelta(days=28),
    experiment_types=geox.ExperimentType.HEAVY_UP,
    methodology=geox.Methodology.TBR,
    min_r2=0.7,  # Adjust threshold if 0.8 yields no candidate designs
)

Fehlerbehebung bei A/A-Tests

  1. Auf Datenanomalien prüfen: Suchen Sie in Ihren Daten vor dem Test nach Dateneingabefehlern, fehlenden Tagen oder extremen einmaligen Spitzenwerten in bestimmten geografischen Einheiten. Schließen Sie diese anomalen Daten und geografischen Regionen mit Constraints(excluded_dates=...excluded_geos=...) aus.

  2. Längeren Verlauf vor dem Test bereitstellen: Stellen Sie einen längeren Verlauf vor dem Test bereit (zum Beispiel von \( 3N \) auf \( 6N \) oder mehr), damit das Modell mehr Daten hat, um stabile Beziehungen zu lernen.

  3. Machbarkeit des MDE: Vergleichen Sie den MDE des Designs mit Ihren geschäftlichen Erwartungen. Der MDE ist die minimale Steigerung, die der Test erkennen kann. Wenn Sie erwarten, dass Ihre Kampagne nur eine Steigerung von 5 % erzielt, Ihr ausgewähltes Design aber einen MDE von 12 % hat, ist die Studie nicht aussagekräftig genug. Sie sollten nicht fortfahren, ohne die Größe der Testgruppe oder die Dauer zu erhöhen.

Design visualisieren

Verwenden Sie geox.plot_design(), um visuelle Darstellungen der Testgruppe und der kontrafaktischen Gruppe zu generieren.

Beispiel für beobachtete im Vergleich zu kontrafaktischen Daten zu Conversions insgesamt

Design exportieren

Am Ende kann das ausgewählte Design mit .export_to_json() in JSON exportiert und später mit .load_from_json() neu geladen werden, um die Konsistenz zwischen der Design- und der Analysephase zu gewährleisten.

4. Mehrzellendesign

Meridian GeoX unterstützt nativ eine Vielzahl von Mehrzellen-Tests. Eine beliebte Option ist beispielsweise der budgetneutrale Test. Damit können Sie die Auswirkungen von Go-dark- (Budgetreduzierung) und Heavy-up-Effekten (Budgeterhöhung) im selben Markt gleichzeitig testen, während das Gesamtbudget über alle geografischen Regionen hinweg neutral bleibt. Wenn Sie einen budgetneutralen Test entwerfen möchten, können Sie den „cell_count“ auf 2 festlegen und dann die Testtypen der beiden Testzellen als GO_DARK und HEAVY_UP auswählen.

import datetime
import meridian_geox as geox

# Example design configuration for multi-cell budget neutral test.
multi_cell_design_config = geox.DesignConfig(
    cell_count=2,
    experiment_duration=datetime.timedelta(days=28),
    experiment_types={
        'cell_1': ExperimentType.GO_DARK,
        'cell_2': ExperimentType.HEAVY_UP,
    },
    methodology=geox.Methodology.TBR,
    geo_assignment_rule=geox.GeoAssignmentRule.STRATIFIED_SAMPLING,
    design_output_count=5,
)

Nachdem Sie die Einschränkungen für den Mehrzellentest eingerichtet haben, sollte die Funktion geox.run_design() die angeforderten Designs mit mehreren Zellen zurückgeben. Ähnlich wie beim Szenario mit einer einzelnen Zelle können die Kandidatendesigns entsprechend abgerufen werden.

# Constraints for multi-cell test.
multi_cell_constraints = geox.Constraints(
      budget_constraint={
        'cell_1': geox.Budget(budget_pct=-1.0),
        'cell_2': geox.Budget(budget_pct=1.0),
    },
)
multi_cell_design_set = geox.run_design(
    design_data,
    multi_cell_design_config,
    multi_cell_constraints,
)

# Generates the candidate multi-cell designs.
print(f'Experiment design generated:')
multi_cell_selected_design_id = next(iter(multi_cell_design_set.designs))
pprint(multi_cell_design_set.designs[multi_cell_selected_design_id])