Explorative Datenanalyse durchführen

Nachdem Sie Ihre Daten erhoben haben, sollten Sie eine explorative Datenanalyse durchführen, um Probleme mit der Datenqualität zu ermitteln und zu beheben. Dies ist ein entscheidender Schritt beim Marketing Mix Modeling (MMM), da Sie die Daten so bewerten und bestätigen können, dass sie Werbemaßnahmen, Kundenreaktionen und andere relevante Messwerte genau darstellen. Wenn Sie Probleme beheben, die im Rahmen der explorativen Datenanalyse ermittelt werden, können Sie die Zuverlässigkeit der Modellausgabe weiter verbessern.

Die grundlegenden Schritte für die Durchführung einer explorativen Datenanalyse:

  1. Prüfen Sie die Daten, um zu ermitteln, ob Daten fehlen oder unvollständig sind.
  2. Beheben Sie Probleme mit fehlenden Werten in Ihren Roheingabedateien.
  3. Prüfen Sie die Richtigkeit der Daten.
  4. Beheben Sie alle Anomalien, Ausreißer oder Ungenauigkeiten in den Daten.
  5. Analysieren Sie die Korrelation zwischen KPI-, Media- und Kontrollvariablen.

EDA-Paket von Meridian

Das EDA-Paket von Meridian unterstützt Sie bei diesem Prozess, indem es einen HTML-Bericht zur explorativen Datenanalyse (EDA) generiert, den Sie in Google Drive exportieren können. Dieser HTML-Bericht enthält Visualisierungen und Datenprüfungen, mit denen Sie häufige potenzielle Datenprobleme erkennen können. Jede Prüfung oder Visualisierung enthält eine Beschreibung des Datenproblems sowie entsprechende Handlungsempfehlungen.

Die Ergebnisse werden einem von drei Schweregraden zugewiesen:

  • ERROR (FEHLER): Kennzeichnet extrem schwerwiegende Datenprobleme, die sehr wahrscheinlich die Modellkonvergenz verhindern. Für den ERROR-Status werden strenge Standardschwellenwerte verwendet, damit nur die schwerwiegendsten Fehler, die in der Regel auf Dateneingabefehler zurückzuführen sind, gekennzeichnet werden. Die Posterior-Stichprobenziehung ist blockiert, bis Sie diese Probleme behoben haben.
  • ATTENTION (ACHTUNG): Kennzeichnet potenzielle erhebliche Datenprobleme. Diese Probleme verhindern zwar nicht zwingend die Modellkonvergenz, weisen aber stark auf Bereiche hin, die Sie untersuchen und möglicherweise korrigieren sollten. Da bestimmte Anwendungsfälle die Ausführung des Modells dennoch rechtfertigen können, lässt Meridian Posterior-Stichprobenziehungen weiterhin zu. Sie sollten jedoch Ihren geschäftlichen Kontext berücksichtigen, um zu entscheiden, ob es angemessen ist, Ihre aktuellen Daten weiter zu verwenden.
  • INFO: Gibt an, dass keine ERROR- oder ATTENTION-Status ausgelöst wurden, oder hebt Prüfungen hervor, für die keine Schwellenwerte definiert sind. Unter diesen Bedingungen können Sie zwar davon ausgehen, dass Sie ein nützliches Modell anpassen können, sollten aber trotzdem die Messwerte und Visualisierungen auf INFO-Ebene prüfen, um zugrunde liegende Datenanomalien oder Inkonsistenzen zu erkennen.

In der HTML-Ausgabe der explorativen Datenanalyse werden Datenprobleme in fünf Kategorien unterteilt:

  1. Ausgaben und Media-Einheit: Hier wird der Anteil der Ausgaben auf Channelebene analysiert und mit den Media-Einheiten abgeglichen.
  2. Einzelne erklärende oder Antwortvariablen: Hier wird die Variabilität einzelner Variablen untersucht und es werden Probleme wie eine Standardabweichung von null (keine Variation) oder extreme Ausreißer gekennzeichnet.
  3. Skalierung der Grundgesamtheit erklärender Variablen: Hier wird die Beziehung zwischen Grundgesamtheit und erklärenden Variablen bewertet.
  4. Beziehungen zwischen den Variablen: Hier werden Korrelationen zwischen Variablen sowie Beziehungen zwischen erklärenden Variablen und Zeit- oder geografischen Haupteffekten untersucht.
  5. Prior-Spezifikationen: Hier werden die Prior-Spezifikationen bewertet, insbesondere im Hinblick auf die Prior-Wahrscheinlichkeit einer negativen Baseline.

Einrichtung und Berichterstellung

Gehen Sie so vor, um den EDA-HTML-Bericht zu generieren oder die einzelnen in diesem Dokument beschriebenen Datenprüfungen auszuführen:

  1. Instanziieren Sie zuerst das Meridian-Modell und das MeridianEDA-Objekt. Führen Sie den folgenden Einrichtungscode einmal aus:

    from meridian.model import model
    from meridian.model.eda import meridian_eda
    
    mmm = model.Meridian(...)
    mmm_eda = meridian_eda.MeridianEDA(mmm)
    

    Hinweis: In den nachfolgenden Code-Snippets auf dieser Seite wird diese Einrichtung ausgelassen und es werden nur die spezifischen Methodenaufrufe mit dem mmm_eda-Objekt angezeigt.

  2. Nachdem Sie die Einrichtung abgeschlossen haben, führen Sie den folgenden Code aus, um den vollständigen EDA-HTML-Bericht zu generieren und zu speichern:

    import IPython
    
    mmm_eda.generate_and_save_report(
        filename=your_filename, filepath=your_filepath
    )
    IPython.display.HTML(filename=f'{your_filepath}{your_filename}')
    

Kategorie 1: Ausgaben und Media-Einheit

In dieser Kategorie wird der Ausgabenanteil auf Channelebene analysiert und mit Media-Einheiten abgeglichen.

Ausgabenanteil

Beispielergebnis:

Relativer Ausgabenanteil

Das Balkendiagramm im HTML-Bericht zeigt den Prozentsatz der Ausgaben auf Länderebene (aggregiert über alle geografischen Einheiten bei Modellen auf geografischer Ebene) für die fünf Media-Channels und Channels für Reichweite und Häufigkeit mit den geringsten Ausgaben.

Sehen Sie sich den Anteil der einzelnen Channels an den Gesamtausgaben an. Channels mit einem sehr geringen Ausgabenanteil sind oft schwer zu schätzen. Daher ist es sinnvoll, sie mit anderen Channels zu kombinieren.

Sie können den Ausgabenanteil auch für bestimmte geografische Einheiten und eine festgelegte Anzahl von Channels mit dem geringsten Anteil visualisieren:

mmm_eda.plot_relative_spend_share_barchart(
    geos=<list_of_geos>, n_channels=<your_integer_choice>
)

Verhältnis von Daten zu Parametern

Bewerten Sie nach der Aufschlüsselung des Ausgabenanteils das Verhältnis von Datenpunkten zu Modellparametern. Dieses Verhältnis dient als grobe Richtlinie für die Menge an Daten, die erforderlich ist, um die Modellparameter zuverlässig zu schätzen. Die genaueste Methode, dieses Verhältnis zu beurteilen, besteht darin, das Modell auszuführen und die Breite der glaubwürdigen Intervalle zu bewerten.

Das Verhältnis wird als n_data_points ÷ n_parameters definiert, wobei:

  • n_data_points = n_geos × n_times
  • n_parameters = n_geos – 1 + n_knots + n_controls + n_treatments

Die Komponenten dieser Berechnung sind:

  • n_geos: Die Anzahl der geografischen Einheiten im Dataset. Wir subtrahieren 1 für die geografische Baseline.
  • n_times: Die Anzahl der Zeiträume.
  • n_knots: Die Anzahl der Knoten, die mit dem Argument knots in ModelSpec angegeben werden.
  • n_controls: Die Anzahl der Kontrollvariablen.
  • n_treatments: Die Gesamtzahl der Testvariablen, einschließlich bezahlter Medien, organischer Medien, bezahlter Reichweite und Häufigkeit, organischer Reichweite und Häufigkeit sowie nicht medienbezogener Testgruppen.

Bei dieser Berechnung werden separate Parameter auf geografischer Ebene für n_treatments und n_controls ausgeschlossen. Im hierarchischen Modell von Meridian sind die Effekte auf geografischer Ebene nicht unabhängig. Durch den Informationsaustausch zwischen geografischen Einheiten wird die effektive Anzahl der Parameter erheblich reduziert. Die Anzahl auf Länderebene dient als praktische, weniger restriktive Grundlage. Einen Vergleich mit einer restriktiven Ansicht, bei der kein Pooling angenommen wird, finden Sie im Abschnitt Erforderliche Datenmenge.

Ein sehr kleines Verhältnis kann auf unzureichende Daten für die Schätzung hinweisen, was zu einer hohen Varianz und unzuverlässigen Schätzungen führt. Wenn dies der Fall ist, sollten Sie Channels entfernen oder kombinieren oder die Anzahl der Knoten mit dem Argument knots in ModelSpec reduzieren. Nutzen Sie bei der Entscheidung, welche Channels angepasst werden sollen, die Erkenntnisse aus dem Abschnitt Ausgabenanteil, um die Channels mit den geringsten Ausgaben zu identifizieren.

Weitere Informationen zu den Datenanforderungen und den Besonderheiten der geografischen hierarchischen Modellierung finden Sie unter Erforderliche Datenmenge.

Ausgaben, Media-Einheit und Kosten pro Media-Einheit

Bei Media-Channels und Channels für Reichweite und Häufigkeit werden die Ausgaben, Media-Einheiten und Kosten pro Media-Einheit abgeglichen. Die hier analysierten Media-Einheiten sind Rohdaten (unskaliert). Bei Channels für Reichweite und Häufigkeit sind Media-Einheiten Impressionen für Reichweite und Häufigkeit, die als unskalierte Reichweite multipliziert mit der Häufigkeit berechnet werden.

Durch diese Abgleiche werden Unstimmigkeiten zwischen Daten für Ausgaben und Media-Einheiten erkannt, z. B. Ausgaben von null bei positiven Media-Einheiten oder positive Ausgaben bei null Media-Einheiten. Wenn Unstimmigkeiten gefunden werden, wird der Status ATTENTION ausgelöst. Prüfen Sie die Dateneingabe für die entsprechenden bezahlten Media-Channels und ihre Ausgaben.

Bei dieser Prüfung wird auch der Status ATTENTION ausgelöst, wenn es Ausreißer bei den Kosten pro Media-Einheit gibt (berechnet als Ausgaben geteilt durch Media-Einheiten). Im EDA-Paket von Meridian wird ein Ausreißer anhand der IQR-Faustregel (Interquartile Range, Interquartilsabstand) definiert: Werte, die kleiner als Q1 – 1,5 × IQR oder größer als Q3 + 1,5 × IQR sind. In der HTML-Tabelle werden die absoluten Werte der Kosten pro Media-Einheit für die fünf extremsten Ausreißer in absteigender Reihenfolge angezeigt. Prüfen Sie diese Channels auf mögliche Fehler bei der Dateneingabe.

Mit dem folgenden Code können Sie die berechneten Kosten pro Media-Einheit aller Media-Channels und Channels für Reichweite und Häufigkeit für jeden Zeitraum abrufen (und für jede geografische Einheit in Geo-Modellen):

# For geo models
[geo_cpm] = mmm_eda.geo_cost_per_media_unit_check_outcome.get_geo_artifacts()
geo_cpm.cost_per_media_unit_da

# For national models
[national_cpm] = (
    mmm_eda.national_cost_per_media_unit_check_outcome
    .get_national_artifacts()
)
national_cpm.cost_per_media_unit_da

Der HTML-Bericht enthält auch zwei Zeitreihendiagramme für Channels, die mit dem Status ATTENTION gekennzeichnet sind (entweder wegen Unstimmigkeiten oder Ausreißern). Im ersten Diagramm wird die Zeitreihe der Ausgaben auf Channelebene mit der Zeitreihe der Media-Einheiten überlagert. Das zweite Diagramm zeigt die Zeitreihe der Kosten pro Media-Einheit auf Channelebene. Jedes Zeitreihendiagramm bezieht sich auf einen Channel.

Diese HTML-Zeitreihendiagramme basieren auf Mengen auf Länderebene. Bei Datasets auf geografischer Ebene werden die Kosten und Media-Einheiten für jeden Channel auf Länderebene aggregiert, bevor das Verhältnis der Kosten pro Media-Einheit berechnet wird. Wenn keine ATTENTION-Status ausgelöst werden, werden diese Diagramme nicht im EDA-HTML-Bericht angezeigt.

Beispielergebnis:

Zeitreihen für Ausgaben, Media-Einheiten und Kosten pro Media-Einheit

Sie können die Zeitreihen für Ausgaben, Media-Einheiten und Kosten pro Media-Einheit für bestimmte Channels und geografische Einheiten visualisieren, um sich auf eine Teilmenge Ihrer Daten zu konzentrieren:

mmm_eda.plot_cost_per_media_unit_time_series(  
    geos=<list_of_geos>, channels=<list_of_channels>
)

Hinweis: Wenn die Ausgabendaten keine Zeit- oder geografischen Dimensionen enthalten, werden sie automatisch proportional zu den Media-Einheiten auf diese Dimensionen verteilt. Das führt zu konstanten Kosten pro Media-Einheit und es treten keine Unstimmigkeiten zwischen Ausgaben und Media-Einheiten auf. Daher sind diese spezifischen Datenprüfungen immer erfolgreich.

Kategorie 2: Einzelne erklärende oder Antwortvariablen

Die Variation der einzelnen Variablen wird mit Boxplots veranschaulicht.

In den Diagrammen werden die Variablen so gruppiert:

  • Bezahlte und organische skalierte Impressionen: Sie werden zusammen in einem Diagramm dargestellt, da sie denselben Transformationen unterzogen werden, die in der Dokumentation zu Eingabedaten beschrieben sind. Dazu gehören skalierte Impressionen für Channels für (organische) Reichweite und Häufigkeit. Sie werden als skalierte Reichweite multipliziert mit der Häufigkeit berechnet.
  • Skalierte Kontrollvariablen und nicht mediabezogene Testvariablen: Diese Variablen werden zusammen in einem separaten Diagramm dargestellt, da sie auf ähnliche Weise transformiert werden.
  • Skalierter KPI: Wird in einem eigenen Boxplot dargestellt.

Bei Datasets auf geografischer Ebene werden die Rohvariablen (unskaliert) im EDA-Paket von Meridian zuerst auf Länderebene aggregiert, dann gemäß der Dokumentation zu Eingabedaten transformiert und schließlich in Boxplots visualisiert.

Sehen Sie sich die Variabilität der erklärenden und Antwortvariablen in den Boxplots an. Erklärende Variablen mit sehr geringer Variabilität lassen sich nur schwer schätzen und können die Modellkonvergenz behindern. Sie können sie zusammenführen oder ersetzen, vernachlässigbar kleine Variablen ausschließen oder einen benutzerdefinierten Prior verwenden, falls Ihnen relevante Informationen vorliegen. Wenn Ausreißer vorhanden sind, prüfen Sie die Dateneingabe, um sicherzustellen, dass sie echt und nicht fehlerhaft sind.

Beispielergebnis:

Boxplots von Variablen für bezahlte und organische Media

Boxplots von nicht mediabezogenen Testvariablen und Kontrollvariablen

Boxplots von KPIs

Sie können Boxplots für bestimmte geografische Einheiten erstellen:

# For paid and organic scaled impressions
mmm_eda.plot_treatments_without_non_media_boxplot(geos=<list_of_geos>)

# For controls and non-media treatments
mmm_eda.plot_controls_and_non_media_boxplot(geos=<list_of_geos>)

# For KPI
mmm_eda.plot_kpi_boxplot(geos=<list_of_geos>)

Kritischer Mangel an Variation

Die Standardabweichung des transformierten KPI wird über alle geografischen Einheiten und Zeiträume hinweg für ein Geo-Modell bzw. über alle Zeiträume hinweg für ein Modell auf Länderebene berechnet. Ein ERROR wird ausgelöst, wenn der transformierte KPI nahezu konstant ist, d. h. wenn die Standardabweichung kleiner als 1e-4 ist. In diesem Fall gibt es kein Signal in der Antwortvariablen. Sie sollten nach Dateneingabefehlern suchen oder die Machbarkeit der statistischen Modellierung mit diesem Dataset überdenken.

Für die erklärenden Variablen berechnet Meridian zuerst die Standardabweichung der skalierten Kontroll- und Testvariablen – einschließlich der skalierten Reichweite für Channels für (organische) Reichweite und Häufigkeit – separat entlang der Zeit- und geografischen Dimension (falls zutreffend).

  • Variation über geografische Einheiten hinweg: Die Standardabweichung der skalierten Variablen entlang der geografischen Dimension wird nur für Datasets auf geografischer Ebene bewertet, da ein Modell auf Länderebene nur eine geografische Einheit umfasst. Der Status ERROR wird ausgelöst, wenn Sie knots = n_times festgelegt haben und eine Variable nicht zwischen den geografischen Einheiten variiert (z. B. eine Variable auf Länderebene in einem Dataset auf geografischer Ebene). Bei knots = n_times hat jeder Zeitraum einen eigenen Knotenparameter. Da eine Variable auf Länderebene nur zeitlich und nicht geografisch variiert, ist sie perfekt kollinear mit der Zeit und redundant in einem Modell mit allen Knoten. Um diese Redundanz zu beheben, haben Sie zwei Möglichkeiten: (1) Sie behalten die Variable auf Länderebene bei und legen knots < n_times fest oder (2) Sie entfernen die Variablen, die über geografische Einheiten hinweg nicht variieren. Die Entscheidung hängt von Ihren spezifischen Interpretationszielen ab.
  • Variation im Zeitverlauf: Bei einem Geo-Modell wird der Status ERROR ausgelöst, wenn eine Variable im Zeitverlauf nicht variiert, da sie perfekt kollinear mit dem geografischen Haupteffekt $\tau_g$ ist. Da diese redundante Variable zu einer schlechten Modellkonvergenz führt, sollten Sie alle Variablen entfernen, die im Zeitverlauf nicht variieren. Bei einem Modell auf Länderebene ist eine Variable, die im Zeitverlauf nicht variiert, ein konstanter Term ohne Signal und beeinträchtigt die Modellkonvergenz. Es wird ein ERROR-Status ausgelöst und Sie sollten diese konstante Variable aus dem Modell ausschließen.

Ausreißer und potenziell geringe Datendichte

Im EDA-Paket von Meridian wird auch nach Ausreißern in jeder skalierten Testvariable, jeder skalierten Kontrollvariable und dem skalierten KPI gesucht. Bei Datasets auf geografischer Ebene erfolgt diese Prüfung auf Ebene der geografischen Einheiten. Dabei wird die Standard-IQR-Faustregel verwendet.

Wenn Ausreißer vorhanden sind, wird bei dieser Prüfung der Status ATTENTION ausgelöst und die fünf extremsten Ausreißer (basierend auf dem Absolutwert) werden im EDA-HTML-Bericht angezeigt. Sie sollten Ihre Dateneingabe überprüfen, um sicherzustellen, dass diese Werte echt und nicht fehlerhaft sind.

Unabhängig vom Kennzeichnen der Ausreißer wird bei dieser Prüfung auch die potenziell geringe Datendichte bewertet. Dazu wird die Standardabweichung jeder Variablen sowohl mit als auch ohne diese Ausreißer berechnet. Wenn die Standardabweichung nach dem Entfernen der Ausreißer auf null sinkt, die Variable also nur aufgrund der Ausreißer eine Variation aufweist, wird bei dieser Prüfung ein zusätzlicher Status ATTENTION ausgelöst.

  • Wenn Test- oder Kontrollvariablen nach dem Entfernen von Ausreißern eine Standardabweichung von null aufweisen, kann dies ein Hinweis auf eine geringe Datendichte sein. Dies mag zwar beabsichtigt sein (z. B. eine geringe Datendichte aufgrund von „Go-dark“-Zeiträumen), kann jedoch die Konvergenz und Identifizierbarkeit des Modells beeinträchtigen. Prüfen Sie, ob dies beabsichtigt ist. Falls nicht, sollten Sie diese Variablen zusammenfassen, um die Modellstabilität zu verbessern.
  • Wenn der KPI in bestimmten geografischen Einheiten nach dem Entfernen von Ausreißern eine Standardabweichung von null aufweist, deutet dies auf ein schwaches oder nicht vorhandenes Signal in der Antwortvariablen für diese Standorte hin. Überprüfen Sie die Eingabedaten oder ziehen Sie in Betracht, diese geografischen Einheiten zusammenzufassen.

Mit dem folgenden Code können Sie die Standardabweichungen für jede Variable abrufen (die bei Geo-Modellen für einzelne geografische Einheiten berechnet werden) und diese für einen einfacheren Zugriff in ein Dictionary überführen:

# For geo models
geo_std = mmm_eda.geo_stdev_check_outcome.analysis_artifacts
geo_std_dict = {a.variable: a.std_ds for a in geo_std}

# For national models
national_std = mmm_eda.national_stdev_check_outcome.analysis_artifacts
national_std_dict = {a.variable: a.std_ds for a in national_std}

Kategorie 3: Skalierung der Grundgesamtheit erklärender Variablen

Diese Kategorie gilt nur für Datasets auf geografischer Ebene. Bei Datasets auf Länderebene wird die einzelne (nationale) geografische Einheit so behandelt, als hätte sie eine nominale Grundgesamtheit von 1,0. Die Werte für die Grundgesamtheit haben keine Auswirkungen auf das Modell, da die interne Skalierung von Meridian (Median-Skalierung oder Standardisierung) den Effekt der nationalen Grundgesamtheit aufhebt.

Korrelation zwischen Grundgesamtheit und Rohvariablen für bezahlte oder organische Media

Bei dieser Prüfung wird die Spearman-Korrelation zwischen der Grundgesamtheit der geografischen Einheit und den Rohvariablen für bezahlte oder organische Media bewertet. Dazu gehören Rohdaten für Media-Einheiten und Reichweite (für Channels für Reichweite und Häufigkeit) sowie für organische Media-Einheiten und organische Reichweite (für Channels für organische Reichweite und Häufigkeit). Hier wird die Spearman-Korrelation bewertet, um die loglineare Beziehung zwischen der Grundgesamtheit und diesen Variablen zu beurteilen.

Für diese Variablen sind positive Spearman-Korrelationswerte zu erwarten. Wenn Sie eine niedrige oder negative Korrelation beobachten, prüfen Sie Ihre Dateneingabe. Im EDA-Paket von Meridian werden diese Prüfungen nur als INFO gekennzeichnet, ohne dass die Status ERROR oder ATTENTION ausgelöst werden. Es wird jedoch dringend empfohlen, die Werte zu prüfen.

Beispielergebnis:

Korrelation zwischen Grundgesamtheit und Media-Rohvariablen

Mit dem folgenden Code können Sie die Korrelationswerte für jede der oben genannten Variablen abrufen:

[pop_corr_raw] = (
    mmm_eda.eda_engine.check_population_corr_raw_media()
    .get_overall_artifacts()
)
pop_corr_raw.correlation_ds

Korrelation zwischen Grundgesamtheit und skalierten Test- und Kontrollvariablen

Die skalierten Test- und Kontrollvariablen beziehen sich hier auf die transformierten Größen gemäß der Dokumentation zu Eingabedaten. Für die nicht mediabezogenen Test- und Kontrollvariablen hängen diese auch jeweils von den Argumenten non_media_population_scaling_id und control_population_scaling_id in ModelSpec ab. Sehen Sie sich die Spearman-Korrelation zwischen Grundgesamtheit und skalierten Test- oder Kontrollvariablen an.

  • Kontrollvariablen und nicht mediabezogene Channels: In Meridian werden diese Variablen standardmäßig nicht nach der Grundgesamtheit skaliert. Eine hohe Korrelation weist darauf hin, dass Sie wahrscheinlich die Skalierung der Grundgesamtheit über die Argumente control_population_scaling_id oder non_media_population_scaling_id in ModelSpec anwenden sollten. Weitere Informationen finden Sie unter Bevölkerungsgewichtete Kontrollvariablen.
  • Bezahlte und organische Media-Channels: In Meridian werden diese Channels standardmäßig automatisch nach der Grundgesamtheit skaliert. Eine hohe Korrelation deutet darauf hin, dass die Variable möglicherweise bereits nach der Grundgesamtheit skaliert wurde, bevor sie an Meridian übergeben wurde. Dateneingabe-Pipeline überprüfen

Wie bei der vorherigen Prüfung wird auch diese nur als INFO gekennzeichnet. Sie sollten sich die Werte jedoch ansehen.

Beispielergebnis:

Korrelation zwischen Grundgesamtheit und skalierten Variablen

Sie können die Korrelationswerte mit dem folgenden Code abrufen:

[pop_corr_scaled] = (
    mmm_eda.eda_engine.check_population_corr_scaled_treatment_control()
    .get_overall_artifacts()
)
pop_corr_scaled.correlation_ds

Kategorie 4: Beziehung zwischen den Variablen

In dieser Kategorie werden Korrelationen zwischen Variablen sowie Beziehungen zwischen erklärenden Variablen und Zeit- oder geografischen Haupteffekten untersucht.

Heatmap für Korrelationen

Eine hohe paarweise Korrelation zwischen Variablen kann zu Problemen bei der Identifizierbarkeit und Konvergenz des Modells führen. Wenn Sie eine hohe Korrelation feststellen, sollten Sie die betroffenen Variablen kombinieren.

Beispielergebnis:

Heatmap für Korrelationen

Die Heatmap veranschaulicht die Pearson-Korrelation zwischen skalierten Test- und Kontrollvariablen. Zu den skalierten Testvariablen gehören skalierte Impressionen für Channels für (organische) Reichweite und Häufigkeit. Die skalierten Test- und Kontrollvariablen beziehen sich hier auf die transformierten Größen gemäß der Dokumentation zu Eingabedaten. Die HTML-Heatmap zeigt Korrelationen basierend auf skalierten Variablen auf Länderebene. Bei Datasets auf geografischer Ebene werden die Rohvariablen (unskaliert) auf Länderebene aggregiert, dann transformiert und anschließend wird ihre paarweise Korrelation ermittelt.

Mit dem folgenden Code können Sie die Heatmap für Korrelationen für eine bestimmte geografische Einheit visualisieren:

mmm_eda.plot_pairwise_correlation(geos=<list_of_geos>)

Multikollinearität mithilfe des Varianzinflationsfaktors (VIF) prüfen

Zur weiteren Bewertung der Multikollinearität wird der Varianzinflationsfaktor (VIF) für alle skalierten Test- und Kontrollvariablen berechnet. Der VIF schätzt, inwieweit die Varianz einer Test- oder Kontrollvariablen aufgrund von Kollinearität mit anderen Test- oder Kontrollvariablen aufgebläht wird. Ein VIF von 1 weist auf keine Kollinearität hin, während höhere Werte auf zunehmende Multikollinearität hindeuten. Eine perfekte paarweise Korrelation ist eine häufige Ursache für Multikollinearität. Eine hohe Multikollinearität führt zu breiteren Glaubwürdigkeitsintervallen der Koeffizienten, was die Posterior-Inferenz weniger zuverlässig macht.

Je nach Modelltyp werden die Daten bei der VIF-Prüfung ausgewertet und die folgenden Status ausgelöst:

  • Status des Geo-Modells ERROR: Bei Geo-Modellen wird der VIF über alle geografischen Einheiten und Zeiträume hinweg berechnet. Konkret werden die Werte für jede Variable über alle geografischen Einheiten und Zeiträume hinweg in einem einzelnen Array zusammengeführt. Anschließend wird der VIF für jedes dieser Arrays berechnet. Der Status ERROR wird ausgelöst, wenn eine Variable nahezu perfekt als Linearkombination anderer Variablen ausgedrückt werden kann. Das ist der Fall, wenn der VIF-Wert den standardmäßigen Gesamtschwellenwert von 1.000 überschreitet. Um dieses Problem zu beheben, sollten Sie Variablen, die Linearkombinationen anderer Variablen darstellen, entfernen oder zusammenfassen.

    Mit dem folgenden Code können Sie die Gesamt-VIFs des Geo-Modells (berechnet über alle geografischen Einheiten und Zeiträume hinweg) abrufen:

    [overall_vif] = mmm_eda.eda_engine.check_geo_vif().get_overall_artifacts()
    overall_vif.vif_da
    
  • Status des Modells auf Länderebene ERROR: Bei Modellen auf Länderebene wird der VIF über alle Zeiträume hinweg berechnet, da es nur eine geografische Einheit gibt. Der Status ERROR wird ausgelöst, wenn der VIF einer Variablen den standardmäßigen Schwellenwert auf Länderebene von 1.000 überschreitet. Um dieses Problem zu beheben, sollten Sie Variablen, die Linearkombinationen anderer Variablen darstellen, entfernen oder zusammenfassen.

    Mit dem folgenden Code können Sie die berechneten VIFs für das Modell auf Länderebene abrufen:

    [national_vif] = mmm_eda.eda_engine.check_national_vif().get_national_artifacts()
    national_vif.vif_da
    
  • Status des Geo-Modells ATTENTION: Bei Geo-Modellen wird der VIF-Wert auch für jede geografische Einheit über alle Zeiträume hinweg berechnet. Der Status ATTENTION wird ausgelöst, wenn Variablen den standardmäßigen Geo-Schwellenwert von 1.000 in einzelnen geografischen Einheiten überschreiten. Um dieses Problem zu beheben, sollten Sie die Daten überprüfen oder diese Variablen zusammenfassen, insbesondere wenn sie über mehrere geografische Einheiten hinweg einen hohen VIF aufweisen.

    Sie können die VIFs des Geo-Modells für einzelne geografische Einheiten mit dem folgenden Code abrufen:

    [geo_vif] = mmm_eda.eda_engine.check_geo_vif().get_geo_artifacts()
    geo_vif.vif_da
    

Sie können diese extremen Schwellenwerte bei Bedarf anpassen. Weitere Informationen zum Festlegen dieser Schwellenwerte finden Sie unter Benutzerdefinierter VIF-Schwellenwert.

Wenn einer dieser ERROR- oder ATTENTION-Status ausgelöst wird, werden im HTML-Bericht die fünf Variablen mit dem größten VIF-Wert tabellarisch dargestellt, zusammen mit den anderen Variablen, mit denen sie stark korrelieren.

Kollinearität mit dem geografischen Haupteffekt $\tau_g$

Bei dieser Prüfung wird eine Regression jeder Variable auf die geografische Einheit (als kategorische Variable) durchgeführt. In diesem Fall deutet ein hoher R-Quadrat-Wert auf eine geringe zeitliche Variation einer Variablen hin. Dies kann aufgrund geografischer Haupteffekte zu einem Modell mit schwacher Identifizierbarkeit und mangelnder Konvergenz führen. Es kann sinnvoll sein, die Variable mit einem sehr hohen R-Quadrat-Wert zu entfernen. Im HTML-Bericht werden die fünf Variablen mit den größten R-Quadrat-Werten in Tabellenform dargestellt. Diese Prüfung erfolgt auf INFO-Ebene ohne Schwellenwerte zum Auslösen von ERROR oder ATTENTION. Wir empfehlen Ihnen jedoch, sich die Tabelle anzusehen.

Kollinearität mit dem zeitlichen Haupteffekt $\mu_t$

Bei dieser Prüfung wird eine Regression jeder Variable auf die Zeit (als kategorische Variable) durchgeführt. Ein hoher R-Quadrat-Wert weist auf eine geringe geografische Variation einer Variablen hin. Wenn eine große Anzahl von Knoten verwendet wird, kann dies zu einem Modell mit schwacher Identifizierbarkeit und mangelnder Konvergenz führen. Es kann sinnvoll sein, die Variable mit einem sehr hohen R-Quadrat-Wert zu entfernen oder das knots-Argument in ModelSpec zu verringern. Im HTML-Bericht werden die fünf Variablen mit den größten R-Quadrat-Werten in Tabellenform dargestellt. Diese Prüfung erfolgt auf INFO-Ebene (keine Schwellenwerte zum Auslösen von ERROR oder ATTENTION). Wir empfehlen Ihnen jedoch, sich die Tabelle anzusehen.

Mit dem folgenden Code können Sie die berechneten R-Quadrat-Werte für alle Variablen (bezogen auf geografische Einheit und Zeitraum) abrufen:

[mmm_geo_time_collinearity] = (
    mmm_eda.eda_engine.check_variable_geo_time_collinearity()
    .get_overall_artifacts()
)
mmm_geo_time_collinearity.rsquared_ds

Kategorie 5: Prior-Spezifikationen

In dieser Kategorie werden die Prior-Spezifikationen bewertet, insbesondere die Prior-Wahrscheinlichkeit einer negativen Baseline. Eine negative Baseline bedeutet, dass den Effekten der Testvariablen zu viel Gewicht beigemessen wird. Sehen Sie sich die Prior-Wahrscheinlichkeit der negativen Baseline zusammen mit dem Balkendiagramm für den Prior-Mittelwert des Beitrags auf Channelebene an. Wenn die Prior-Wahrscheinlichkeit für eine negative Baseline hoch ist, sollten Sie benutzerdefinierte Prior-Verteilungen für die Testvariablen in Betracht ziehen. Insbesondere kann ein benutzerdefinierter contribution-Prior-Typ sinnvoll sein.

Beispielergebnis:

Prior-Mittelwert des Beitrags

Im Diagramm werden nur die 15 wichtigsten Channels angezeigt. Mit dem folgenden Code können Sie die Prior-Wahrscheinlichkeit einer negativen Baseline und den Prior-Mittelwert des Beitrags auf Channelebene abrufen:

[prior_check] = mmm_eda.eda_engine.check_prior_probability().get_overall_artifacts()

# This returns the prior probability of negative baseline
prior_check.prior_negative_baseline_prob

# This returns the channel-level prior mean of contribution
prior_check.mean_prior_contribution_da

Zusätzliche Prüfungen, Visualisierungen und Anpassungen

Neben dem HTML-Bericht können Sie zusätzliche Datendiagnosen und benutzerdefinierte Konfigurationen verwenden, um den EDA-Prozess individuell anzupassen.

KPI-Zeitreihe mit Knoten

Sie können die KPI-Zeitreihen auf Länderebene visualisieren, überlagert mit den in ModelSpec angegebenen Knoten:

mmm_eda.plot_national_kpi_with_knots_time_series()

Beispielergebnis:

KPI-Zeitreihe mit Knoten

Die angezeigten Knoten hängen von der Konfiguration des knots-Arguments in ModelSpec ab:

  • Standardeinstellung: In Meridian werden für Datasets auf geografischer Ebene vollständige Knoten verwendet. Für Modelle auf Länderebene ist ein einzelner Knoten die Standardeinstellung (Diagramm wird nicht angezeigt, wenn nur ein einzelner Knoten vorhanden ist).
  • AKS-Algorithmus: Wenn enable_aks = True, werden mit dieser Funktion die Knoten visualisiert, die mit der Methode zur automatischen Auswahl von Knoten (Automatic Knot Selection, AKS) ermittelt wurden.
  • Manuelle Festlegung: Hier werden die manuell definierten Knotenpositionen visualisiert.

Dieses Zeitreihendiagramm für KPIs mit Knoten ist eine nützliche Visualisierung, mit der Sie die Knotenplatzierung bewerten und feststellen können, ob Sie Knoten manuell hinzufügen oder entfernen müssen. Weitere Informationen finden Sie unter Anzahl der Knoten für Zeiteffekte im Modell auswählen.

Paarweise Korrelation prüfen

Im EDA-Paket von Meridian wird die paarweise Pearson-Korrelation zwischen allen skalierten Test- und Kontrollvariablen berechnet.

  • Status des Geo-Modells ERROR: Bei Geo-Modellen wird die paarweise Korrelation zuerst über alle geografischen Einheiten und Zeiträume hinweg berechnet. Konkret werden die Werte für jede Variable über alle geografischen Einheiten und Zeiträume hinweg in einem einzelnen Array zusammengeführt. Anschließend wird die paarweise Korrelation zwischen diesen zusammengeführten Arrays berechnet. Der Status ERROR wird ausgelöst, wenn ein Variablenpaar über alle geografischen Einheiten und Zeiträume hinweg eine nahezu perfekte Korrelation aufweist. Das ist der Fall, wenn der Absolutwert der paarweisen Korrelation den Standardschwellenwert von 0,999 überschreitet. Um dieses Problem zu beheben, schließen Sie eine der redundanten Variablen aus den Eingabedaten aus.

    Mit dem folgenden Code können Sie die paarweise Gesamtkorrelation des Geo-Modells abrufen, die über alle geografischen Einheiten und Zeiträume hinweg berechnet wird:

    [overall_corr] = mmm_eda.eda_engine.check_geo_pairwise_corr().get_overall_artifacts()
    overall_corr.corr_matrix
    
  • Status des Modells auf Länderebene ERROR: Bei Modellen auf Länderebene wird die paarweise Korrelation über alle Zeiträume hinweg berechnet, da es nur eine geografische Einheit gibt. Der Status ERROR wird ausgelöst, wenn der Absolutwert der paarweisen Korrelation zwischen einem Variablenpaar den Standardschwellenwert von 0,999 überschreitet. Um dieses Problem zu beheben, schließen Sie eine der redundanten Variablen aus den Eingabedaten aus.

    Mit dem folgenden Code können Sie die berechnete paarweise Korrelation für das Modell auf Länderebene abrufen:

    [national_corr] = mmm_eda.eda_engine.check_national_pairwise_corr().get_national_artifacts()
    national_corr.corr_matrix
    
  • Status des Geo-Modells ATTENTION: Bei Geo-Modellen wird die paarweise Korrelation auch über alle Zeiträume hinweg für jede spezifische geografische Einheit berechnet. Der Status ATTENTION wird ausgelöst, wenn ein Variablenpaar innerhalb einzelner geografischer Einheiten eine nahezu perfekte Korrelation aufweist und den Standardschwellenwert von 0,999 überschreitet. Um dieses Problem zu beheben, sollten Sie die Daten überprüfen oder diese Variablen zusammenfassen, insbesondere wenn sie auch über mehrere geografische Einheiten hinweg eine hohe paarweise Korrelation aufweisen.

    Mit dem folgenden Code können Sie die paarweisen Korrelationen des Geo-Modells für einzelne geografische Einheiten abrufen:

    [geo_corr] = mmm_eda.eda_engine.check_geo_pairwise_corr().get_geo_artifacts()
    geo_corr.corr_matrix
    

Sie können diese extremen Schwellenwerte bei Bedarf anpassen. Weitere Informationen zum Festlegen dieser Schwellenwerte finden Sie unter Benutzerdefinierter Schwellenwert für die paarweise Korrelation.

Individuell konfigurierbare Anpassungen

Das EDA-Paket von Meridian bietet mehrere Konfigurationsoptionen, um den EDA-Prozess individuell an Ihr spezifisches Dataset und Ihre Modellierungsanforderungen anzupassen.

Benutzerdefinierte Aggregationsmethode von geografischer auf Länderebene

Wenn Sie eine EDA auf Länderebene für ein Dataset auf geografischer Ebene durchführen möchten, aggregiert Meridian die unskalierten Geo-Rohdaten intern auf Länderebene, bevor Transformationen angewendet werden. So wird sichergestellt, dass dies dem Fall entspricht, in dem Sie Ihr Dataset auf geografischer Ebene zuerst manuell auf Länderebene aggregieren, die Daten dann an Meridian übergeben und eine EDA durchführen.

Standardmäßig werden alle Rohdaten für (organische) Media-Einheiten, Reichweite und KPI über alle geografischen Einheiten hinweg summiert. Um die Häufigkeit zu aggregieren, berechnet das EDA-Paket von Meridian die Rohimpressionen für Reichweite und Häufigkeit (Reichweite multipliziert mit Häufigkeit) für jede geografische Einheit. Anschließend werden die Impressionen für Reichweite und Häufigkeit und die Reichweite über alle geografischen Einheiten hinweg summiert und die gesamten Impressionen für Reichweite und Häufigkeit auf Länderebene durch die Gesamtreichweite auf Länderebene geteilt. Ähnliche Berechnungen werden beim Aggregieren der organischen Häufigkeit angewendet.

Die standardmäßige Summenaggregation ist für die meisten Variablen geeignet. Sie können jedoch eine benutzerdefinierte Aggregationsmethode für bestimmte Kontrollvariablen oder nicht mediabezogene Testvariablen definieren. Das ist besonders nützlich für binäre Variablen oder Variablen, die Raten oder Prozentsätze darstellen.

Wenn Sie beispielsweise den Durchschnitt einer Kontrollvariablen mit dem Namen rating über alle geografischen Einheiten hinweg berechnen möchten, gehen Sie so vor:

from meridian.model import model
from meridian.model.eda import eda_spec
import numpy as np

mmm_agg_config = eda_spec.AggregationConfig(
    control_variables={'rating': np.mean}
)
mmm_eda_spec = eda_spec.EDASpec(aggregation_config=mmm_agg_config)
mmm = model.Meridian(..., eda_spec=mmm_eda_spec)

Benutzerdefinierter VIF-Schwellenwert

Das EDA-Paket von Meridian löst bei extremen Datenproblemen, z. B. bei nahezu perfekter Multikollinearität, den Status ERROR oder ATTENTION aus. Um numerische Instabilität zu vermeiden und gleichzeitig Flexibilität zu wahren, wird im Paket standardmäßig ein extremer VIF-Schwellenwert von 1.000 anstelle von Unendlich verwendet. Sie können diese Schwellenwerte je nach geschäftlichem Kontext und nach eigener Einschätzung anpassen:

  • geo_threshold: Für Datasets auf geografischer Ebene. Wenn der VIF einer Variablen in einer bestimmten geografischen Einheit diesen Wert überschreitet, wird der Status ATTENTION ausgelöst. Die Posterior-Stichprobenziehung kann fortgesetzt werden.
  • overall_threshold: Für Datasets auf geografischer Ebene. Wenn der VIF einer Variablen (berechnet über alle geografischen Einheiten und Zeiträume hinweg) diesen Wert überschreitet, wird der Status ERROR ausgelöst. Die Posterior-Stichprobenziehung ist blockiert.
  • national_threshold: Für Datasets auf Länderebene. Wenn der VIF einer Variablen diesen Wert überschreitet, wird der Status ERROR ausgelöst. Die Posterior-Stichprobenziehung ist blockiert.

So senken Sie beispielsweise den overall_threshold für Multikollinearität von 1.000 auf 50:

from meridian.model import model
from meridian.model.eda import eda_spec

mmm_custom_vif = eda_spec.VIFSpec(overall_threshold=50)
mmm_eda_spec = eda_spec.EDASpec(vif_spec=mmm_custom_vif)
mmm = model.Meridian(..., eda_spec=mmm_eda_spec)

Benutzerdefinierter Schwellenwert für paarweise Korrelation

Der Status ERROR oder ATTENTION wird auch bei extremer paarweiser Korrelation ausgelöst. Der standardmäßige extreme Korrelationsschwellenwert beträgt 0,999. Sie können diese Schwellenwerte anhand Ihres spezifischen Datasets und Ihrer Einschätzung anpassen:

  • geo_threshold: Für Datasets auf geografischer Ebene. Wenn der Absolutwert der paarweisen Korrelation zwischen zwei Variablen in einer bestimmten geografischen Einheit diesen Wert überschreitet, wird der Status ATTENTION ausgelöst. Die Posterior-Stichprobenziehung kann weiterhin durchgeführt werden.
  • overall_threshold: Für Datasets auf geografischer Ebene. Wenn der Absolutwert der paarweisen Korrelation (berechnet über alle geografischen Einheiten und Zeiträume hinweg) diesen Wert überschreitet, wird der Status ERROR ausgelöst. Die Posterior-Stichprobenziehung ist blockiert.
  • national_threshold: Für Datasets auf Länderebene. Wenn der Absolutwert der paarweisen Korrelation diesen Wert überschreitet, wird der Status ERROR ausgelöst. Die Posterior-Stichprobenziehung ist blockiert.

Wenn Sie beispielsweise den Wert von overall_threshold für die paarweise Korrelation eines Geo-Modells von 0,999 auf 0,95 senken möchten, gehen Sie so vor:

from meridian.model import model
from meridian.model.eda import eda_spec

mmm_custom_corr = eda_spec.PairwiseCorrSpec(overall_threshold=0.95)
mmm_eda_spec = eda_spec.EDASpec(pairwise_corr_spec=mmm_custom_corr)
mmm = model.Meridian(..., eda_spec=mmm_eda_spec)

Weitere Anpassungen

Das EDA-Paket von Meridian ermöglicht die Verwendung anderer anpassbarer Grenzwerte in EDASpec. Diese Standardwerte dienen als interne Richtlinien dafür, was vom Paket als konstante Variablen betrachtet wird. In den meisten Fällen müssen Sie diese Standardwerte nicht anpassen. Sie stehen Ihnen aber für Ihre eigenen spezifischen Grenzfälle zur Verfügung.

  • KpiInvariabilitySpec anpassen: Wie unter Kritischer Mangel an Variation beschrieben, löst das EDA-Paket von Meridian einen ERROR aus und blockiert die Posterior-Stichprobenerhebung, wenn die Standardabweichung des transformierten KPI kleiner als der Standardgrenzwert von 1e-4 ist. Mit KpiInvariabilitySpec können Sie den Wert von std_threshold anpassen, der bestimmt, wann ein KPI mit geringer Variabilität diesen ERROR auslöst.

    So senken Sie beispielsweise den Wert von std_threshold in KpiInvariabilitySpec auf 1e-5:

    from meridian.model import model
    from meridian.model.eda import eda_spec
    
    custom_kpi_spec = eda_spec.KpiInvariabilitySpec(std_threshold=1e-5)
    mmm_eda_spec = eda_spec.EDASpec(kpi_invariability_spec=custom_kpi_spec)
    mmm = model.Meridian(..., eda_spec=mmm_eda_spec)
    
  • StandardDeviationSpec anpassen: Wie unter Ausreißer und potenziell geringe Datendichte beschrieben, weisen Variablen mit einer extrem niedrigen Standardabweichung, die nach dem Entfernen von Ausreißern berechnet wird, auf eine potenziell geringe Datendichte oder einen Signalmangel hin. Mit StandardDeviationSpec können Sie die Grenzwerte anpassen, die bestimmen, wann für diese Variablen mit geringer Variabilität eine ATTENTION-Benachrichtigung ausgelöst wird.

    Wenn Sie beispielsweise den Grenzwert für die Standardabweichung für ein geografisches Modell auf 1e-5 senken möchten, passen Sie geo_std_threshold an:

    from meridian.model import model
    from meridian.model.eda import eda_spec
    
    custom_std_spec = eda_spec.StandardDeviationSpec(geo_std_threshold=1e-5)
    mmm_eda_spec = eda_spec.EDASpec(std_spec=custom_std_spec)
    mmm = model.Meridian(..., eda_spec=mmm_eda_spec)
    

    Passen Sie bei einem Modell auf Länderebene stattdessen national_std_threshold an.

  • Konstante Variablen aus VIF-Berechnungen herausfiltern: Nahezu konstante Variablen können bei der Berechnung des Varianzinflationsfaktors (VIF) zu Fehlern führen. Standardmäßig wird jede Variable mit einer Standardabweichung von weniger als 1e-4 aus den VIF-Berechnungen ausgeschlossen. Sie können dieses Limit mit dem Parameter std_threshold in VIFSpec anpassen. So erhöhen Sie diesen Grenzwert beispielsweise auf 1e-3:

    from meridian.model import model
    from meridian.model.eda import eda_spec
    
    custom_vif_std = eda_spec.VIFSpec(std_threshold=1e-3)
    mmm_eda_spec = eda_spec.EDASpec(vif_spec=custom_vif_std)
    mmm = model.Meridian(..., eda_spec=mmm_eda_spec)