Welches statistische Modell sollte ich verwenden, um die Wahrscheinlichkeit zu analysieren, dass ein einzelnes Ereignis longitudinale Daten beeinflusst?


19

Ich versuche, eine Formel, eine Methode oder ein Modell zu finden, um die Wahrscheinlichkeit zu analysieren, dass ein bestimmtes Ereignis einige longitudinale Daten beeinflusst. Ich habe Schwierigkeiten herauszufinden, wonach ich bei Google suchen soll.

Hier ist ein Beispielszenario:

Stellen Sie sich vor, Sie besitzen ein Unternehmen mit durchschnittlich 100 begehbaren Kunden pro Tag. Eines Tages beschließen Sie, die Anzahl der Kunden, die täglich in Ihrem Geschäft eintreffen, zu erhöhen, um Aufmerksamkeit zu erregen. In der nächsten Woche werden durchschnittlich 125 Kunden pro Tag gezählt.

In den nächsten Monaten entscheiden Sie erneut, dass Sie ein bisschen mehr Geschäft machen und es vielleicht ein bisschen länger durchhalten möchten, also probieren Sie einige andere zufällige Dinge aus, um mehr Kunden in Ihrem Geschäft zu haben. Leider sind Sie nicht der beste Vermarkter, und einige Ihrer Taktiken haben nur geringe oder gar keine Auswirkungen, während andere sogar negative Auswirkungen haben.

Welche Methode könnte ich verwenden, um die Wahrscheinlichkeit zu bestimmen, dass sich ein einzelnes Ereignis positiv oder negativ auf die Anzahl der begehbaren Kunden auswirkt? Mir ist völlig bewusst, dass Korrelation nicht unbedingt gleichbedeutend mit Kausalität ist. Mit welchen Methoden kann ich jedoch die wahrscheinliche Zunahme oder Abnahme der täglichen Laufzeiten Ihres Kunden nach einem bestimmten Ereignis bestimmen?

Ich bin nicht daran interessiert zu analysieren, ob eine Korrelation zwischen Ihren Versuchen besteht, die Anzahl der begehbaren Kunden zu erhöhen, sondern ob ein einzelnes Ereignis, unabhängig von allen anderen, von Bedeutung war oder nicht.

Mir ist klar, dass dieses Beispiel sehr einfach ist, und ich werde Ihnen daher auch eine kurze Beschreibung der tatsächlichen Daten geben, die ich verwende:

Ich versuche herauszufinden, welche Auswirkungen eine bestimmte Marketingagentur auf die Website ihres Kunden hat, wenn sie neue Inhalte veröffentlicht, Social-Media-Kampagnen durchführt usw. Für eine bestimmte Agentur kann sie zwischen 1 und 500 Kunden haben. Jeder Kunde hat Websites mit einer Größe von 5 Seiten bis weit über 1 Million. Im Laufe der letzten 5 Jahre hat jede Agentur alle ihre Arbeiten für jeden Kunden kommentiert, einschließlich der Art der durchgeführten Arbeiten, der Anzahl der Webseiten auf einer Website, die beeinflusst wurden, der Anzahl der aufgewendeten Stunden usw.

Anhand der oben genannten Daten, die ich in einem Data Warehouse zusammengestellt habe (in einer Reihe von Stern- / Schneeflockenschemata), muss ermittelt werden, wie wahrscheinlich es ist, dass sich eine einzelne Arbeit (ein bestimmtes Ereignis zu gegebener Zeit) auf auswirkt Der Datenverkehr trifft auf alle Seiten, die von einer bestimmten Arbeit beeinflusst werden. Ich habe Modelle für 40 verschiedene Arten von Inhalten erstellt, die auf einer Website zu finden sind und die das typische Verkehrsmuster beschreiben, das eine Seite mit diesem Inhaltstyp vom Startdatum bis zur Gegenwart aufweisen kann. Normalisiert im Verhältnis zum entsprechenden Modell muss ich die höchste und niedrigste Anzahl von erhöhten oder verringerten Besuchern einer bestimmten Seite ermitteln, die als Ergebnis einer bestimmten Arbeit erhalten wurde.

Obwohl ich Erfahrung mit der Analyse grundlegender Daten (lineare und multiple Regression, Korrelation usw.) habe, weiß ich nicht, wie ich dieses Problem lösen soll. Während ich in der Vergangenheit normalerweise Daten mit mehreren Messungen für eine bestimmte Achse analysiert habe (z. B. Temperatur gegen Durst gegen Tier und den Einfluss auf den Durst, den eine erhöhte Temperatur bei Tieren hat), versuche ich, den Einfluss oben zu analysieren eines einzelnen Ereignisses zu einem bestimmten Zeitpunkt für einen nichtlinearen, aber vorhersagbaren (oder zumindest modellierbaren) longitudinalen Datensatz. Ich bin ratlos :(

Jede Hilfe, Tipps, Hinweise, Empfehlungen oder Anweisungen wäre äußerst hilfreich und ich wäre auf ewig dankbar!


Es gibt eine ganze Klasse statistischer Analysen, die sich mit der Modellierung von Längsschnittdaten befassen. Wenn Sie zu denselben Themen wiederholt Maßnahmen ergriffen haben, werden in den Sozialwissenschaften häufig gemischte Modelle als Stand der Technik verwendet, um festzustellen, ob eine Intervention Auswirkungen hat. Wenn Sie eine Zeitreihe haben, kann nur so etwas wie eine Arima verwendet werden.
B_Miner

Ein RDD-Ansatz könnte auch für Sie nützlich sein: austinclemens.com/blog/2014/06/08/436
B_Miner

Antworten:


11

Ich denke, dies ist die Art von Frage, die für den Data Science Stack Exchange perfekt ist. Ich hoffe, wir erhalten eine Reihe von Beispielen aus der Praxis für Datenprobleme und verschiedene Perspektiven, wie sie am besten gelöst werden können.

Ich würde Sie ermutigen, keine p-Werte zu verwenden, da diese ziemlich irreführend sein können ( 1 , 2 ). Mein Ansatz hängt davon ab, dass Sie den Verkehr auf einer bestimmten Seite vor und nach einem Eingriff zusammenfassen können. Was Sie interessiert, ist der Unterschied in der Rate vor und nach dem Eingriff. Wie ändert sich also die Anzahl der Treffer pro Tag? Im Folgenden erkläre ich einen ersten Stichansatz mit einigen simulierten Beispieldaten. Ich werde dann eine mögliche Falle erklären (und was ich dagegen tun würde).

Lassen Sie uns zunächst eine Seite vor und nach einem Eingriff betrachten. Stellen Sie sich vor, dass die Intervention die Treffer pro Tag um ungefähr 15% erhöht:

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

def simulate_data(true_diff=0):
    #First choose a number of days between [1, 1000] before the intervention
    num_before = np.random.randint(1, 1001)

    #Next choose a number of days between [1, 1000] after the intervention
    num_after = np.random.randint(1, 1001)

    #Next choose a rate for before the intervention. How many views per day on average?
    rate_before = np.random.randint(50, 151)

    #The intervention causes a `true_diff` increase on average (but is also random)
    rate_after = np.random.normal(1 + true_diff, .1) * rate_before

    #Simulate viewers per day:
    vpd_before = np.random.poisson(rate_before, size=num_before)
    vpd_after = np.random.poisson(rate_after, size=num_after)

    return vpd_before, vpd_after

vpd_before, vpd_after = simulate_data(.15)

plt.hist(vpd_before, histtype="step", bins=20, normed=True, lw=2)
plt.hist(vpd_after, histtype="step", bins=20, normed=True, lw=2)
plt.legend(("before", "after"))
plt.title("Views per day before and after intervention")
plt.xlabel("Views per day")
plt.ylabel("Frequency")
plt.show()

Verteilung der Treffer pro Tag vor und nach dem Eingriff

Wir können deutlich sehen, dass die Intervention die Anzahl der Treffer pro Tag im Durchschnitt erhöhte. Um den Unterschied in den Raten zu quantifizieren, sollten wir die Intervention eines Unternehmens für mehrere Seiten verwenden. Da die zugrunde liegende Rate für jede Seite unterschiedlich ist, sollten wir die prozentuale Änderung der Rate berechnen (auch hier ist die Rate Treffer pro Tag).

Stellen wir uns nun vor, wir hätten Daten für n = 100Seiten, von denen jede eine Intervention von derselben Firma erhalten hat. Um die prozentuale Differenz zu erhalten, die wir nehmen (Mittelwert (Treffer pro Tag zuvor) - Mittelwert (Treffer pro Tag danach)) / Mittelwert (Treffer pro Tag zuvor):

n = 100

pct_diff = np.zeros(n)

for i in xrange(n):
    vpd_before, vpd_after = simulate_data(.15)
    # % difference. Note: this is the thing we want to infer
    pct_diff[i] = (vpd_after.mean() - vpd_before.mean()) / vpd_before.mean()

plt.hist(pct_diff)
plt.title("Distribution of percent change")
plt.xlabel("Percent change")
plt.ylabel("Frequency")
plt.show()

Verteilung der prozentualen Veränderung

Jetzt haben wir die Verteilung unserer interessierenden Parameter! Wir können dieses Ergebnis auf verschiedene Arten abfragen. Zum Beispiel möchten wir vielleicht den Modus oder den (ungefähren) wahrscheinlichsten Wert für diese prozentuale Änderung kennen:

def mode_continuous(x, num_bins=None):
    if num_bins is None:
        counts, bins = np.histogram(x)
    else:
        counts, bins = np.histogram(x, bins=num_bins)

    ndx = np.argmax(counts)
    return bins[ndx:(ndx+1)].mean()

mode_continuous(pct_diff, 20)

Als ich dies ausführte, bekam ich 0,126, was nicht schlecht ist, wenn man bedenkt, dass unsere wahre prozentuale Veränderung 15 ist. Wir können auch die Anzahl der positiven Veränderungen sehen, die ungefähr der Wahrscheinlichkeit entspricht, dass die Intervention eines bestimmten Unternehmens die Treffer pro Tag verbessert:

(pct_diff > 0).mean()

Hier ist mein Ergebnis 0,93, wir könnten also sagen, dass es eine ziemlich gute Chance gibt, dass dieses Unternehmen effektiv ist.

Zum Schluss noch eine potenzielle Gefahr: Jede Seite weist wahrscheinlich einen zugrunde liegenden Trend auf, den Sie wahrscheinlich berücksichtigen sollten. Das heißt, auch ohne den Eingriff können die Treffer pro Tag zunehmen. Um dies zu berücksichtigen, würde ich eine einfache lineare Regression schätzen, bei der die Ergebnisvariable Treffer pro Tag und die unabhängige Variable Tag ist (beginnen Sie bei Tag = 0 und erhöhen Sie sie einfach für alle Tage in Ihrer Stichprobe). Subtrahieren Sie dann die Schätzung y_hat von jeder Anzahl von Treffern pro Tag, um die Tendenz Ihrer Daten zu verringern. Dann können Sie das oben beschriebene Verfahren ausführen und sicher sein, dass eine positive prozentuale Differenz nicht auf den zugrunde liegenden Trend zurückzuführen ist. Natürlich ist der Trend möglicherweise nicht linear, verwenden Sie also Diskretion! Viel Glück!


Vielen Dank für eine so gründliche Erklärung! Ich weiß das wirklich zu schätzen. Zwischen dir und neone4373 konnte ich das Problem lösen! Diese Community rockt! Vielen Dank!
Peter Kirby

10

In meinen Datenanalystentagen war diese Art von Problem ziemlich typisch. Grundsätzlich hatte jeder Marketingfachmann die verrückte Idee, dass der Verkauf an höhere Unternehmen als einziges Ereignis die KPIs um 2000% steigern würde. Die Höheren würden sie genehmigen und dann würden sie ihren "Test" beginnen. Die Ergebnisse würden zurückkommen, und das Management würde sie auf die Datenanalysten ausgeben, um festzustellen, was funktioniert hat und wer es getan hat.

Die kurze Antwort ist, Sie können nicht wirklich wissen, ob es nicht als zufälliger A / B-Stiltest in ähnlichen Zeiträumen durchgeführt wurde. Mir ist jedoch sehr bewusst, wie mangelhaft diese Antwort ist, insbesondere wenn die Tatsache, dass es keine reine Antwort gibt, für die Dringlichkeit künftiger Geschäftsentscheidungen unerheblich ist. Hier sind einige der Techniken, die ich verwenden würde, um die Analyse in dieser Situation zu retten. Denken Sie daran, dass dies eher eine Kunst als eine Wissenschaft ist.

Griffe

Ein Handle ist etwas, das in den Daten vorhanden ist, an die Sie sich halten können. Nach dem, was Sie mir in Ihrer Situation mitteilen, haben Sie viele Informationen darüber, wer die Marketingagentur ist, wann sie eine Taktik ausprobiert hat und auf welche Site sie sie angewendet hat. Dies ist Ihr Ausgangspunkt und Informationen wie diese bilden den Eckpfeiler Ihrer Analyse.

Methodik

Die Methode wird wahrscheinlich den größten Einfluss darauf haben, welchen Agenturen Gewinne gutgeschrieben werden. Sie müssen also sicherstellen, dass es sich um klare Umrisse handelt, und alle Beteiligten sind sich einig, dass dies sinnvoll ist. Wenn Sie dies nicht tun können, wird es für die Menschen schwierig sein, Ihrer Analyse zu vertrauen.

Ein Beispiel hierfür sind Konvertierungen. Angenommen, die Marketingabteilung kauft einige Leads ein und sie kommen auf unserer Zielseite an. Wenn sie innerhalb dieser Zeit einen Kauf tätigen, werden sie als konvertiert gewertet. Warum 3 Tage, warum nicht 5 oder 1? Das ist nicht wichtig, solange sich alle einig sind, Sie haben jetzt eine Definition, aus der Sie aufbauen können.

Vergleiche

Im Idealfall hätten Sie einen schönen A / B-Test, um eine endgültige Beziehung zu beweisen. Ich gehe davon aus, dass Ihnen die Daten ausgehen. Dennoch können Sie aus einem einfachen Vergleich ähnlicher Daten etwas lernen. Wenn Unternehmen versuchen, die Wirksamkeit von Rundfunkwerbung zu bestimmen, schalten sie Anzeigen häufig an versetzten Monaten auf demselben Markt oder über mehrere Monate auf einem Markt und vergleichen diese mit den Ergebnissen auf einem separaten, aber ähnlichen Markt. Es ist nicht wissenschaftlich, aber selbst bei all dem Lärm werden sich fast immer starke Ergebnisse bemerkbar machen.

Ich würde diese in Ihrem Fall kombinieren, um zu bestimmen, wie lange ein Ereignis gegeben wird, um einen Effekt zu registrieren. Sobald Sie die Daten aus diesem Zeitraum haben, werden sie mit Ihrer modellierten Verkehrsvorhersage, dem Wachstum von Woche zu Woche, Monat zu Monat usw. verglichen. Dies kann dann einen aussagekräftigen Vergleich zwischen Agenturen und über Zeiträume hinweg ermöglichen.

Pragmatismus

Das Bestreben besteht darin, ein tiefes Verständnis von Ursache und Wirkung zu vermitteln, was jedoch wahrscheinlich nicht realistisch ist. Aufgrund der unübersichtlichen äußeren Umstände, die Ihre Analyse beeinflussen, werden Sie immer wieder auf die Frage stoßen: Hat dieses Ereignis das Volumen / den Umsatz / die Klickraten erhöht oder hätte alles, was Sie getan haben, den gleichen Effekt gehabt? Der beste Rat, den ich dazu geben kann, sind sehr realistische Ziele für das, was Sie messen möchten. Ein guter Ausgangspunkt ist, innerhalb der von Ihnen verwendeten Methodik, welches Ereignis den größten Einfluss hatte. Sobald Sie diese haben, öffnen Sie Ihre Blende von dort.

Zusammenfassung

Wenn Sie alle diese Aspekte durchdacht haben, können Sie eine allgemeine Lösung erstellen, die dann automatisiert werden kann. Der Vorteil beim Entwerfen Ihrer Lösung auf diese Weise besteht darin, dass die Geschäftslogik bereits integriert ist. Auf diese Weise werden Ihre Ergebnisse für nichttechnische Führungskräfte viel zugänglicher und intuitiver.


@ 1 für verrückte Marketing-Leute. Die Arbeit in der Marktforschung und das Verdrehen schlechter Statistiken macht mich traurig ...
Christian Sauer

2

Bearbeiten: Warnung, ich hinterlasse meine Nachricht, aber meine Antwort scheint falsch zu sein, bitte beachten Sie den Kommentar unten!

Ich bin kein Experte, aber ich denke, das Hauptproblem ist die Beantwortung dieser Frage:

Hat ein Ereignis die Anzahl der Treffer an einem bestimmten Tag beeinflusst?

Da ich nicht weiß, wie ich mehrere Ereignisse behandeln soll, würde ich versuchen, diese Frage zu beantworten:

  • Hat Event X die Anzahl der Treffer an einem bestimmten Tag beeinflusst?

Dies kann mithilfe von Hypothesentests mit p-Werten beantwortet werden (was Wissenschaftler tun, um beispielsweise zu bewerten, ob ein Medikament eine Krankheit beeinflusst oder nicht).

Mithilfe von p-Werten können Sie feststellen, ob die Anzahl der Treffer an einem bestimmten Tag zufällig und unter normalen Umständen akzeptabel war oder dass sie einer Änderung Ihres Modells entsprechen müssen.

Sie können mehr über p-Werte in Open Intro to Statistics Book lesen. Ich habe von dort tatsächlich etwas über sie gelernt.

Die anderen Teile des Problems sind dann, wie Sie Ihre Ereignisse identifizieren und die notwendigen Parameter berechnen, um Ihre Frage zu beantworten (Durchschnitt / Median, Varianz usw.) und wie Sie diese auf dem neuesten Stand halten und funktionieren.


1

Vor einigen Jahren (2015) veröffentlichte Google eine Studie über die Auswirkung eines bestimmten Ereignisses auf ein Zeitreihenmodell. Weitere Informationen finden Sie hier. Rückschlüsse auf kausale Auswirkungen mithilfe von Bayes-Zeitreihenmodellen .

Auf dieser GitHub-Seite finden Sie ein detailliertes Beispiel und eine Beschreibung der Funktionsweise. Zusamenfassend,

Dieses R-Paket implementiert einen Ansatz zur Schätzung des Kausaleffekts einer geplanten Intervention auf eine Zeitreihe. Wie viele zusätzliche tägliche Klicks wurden beispielsweise durch eine Werbekampagne generiert? Die Beantwortung einer solchen Frage kann schwierig sein, wenn kein randomisiertes Experiment verfügbar ist.

Sie trainieren Ihr Modell mit Pre-Event-Daten und After-Event-Daten und erhalten einen Plot wie diesen

Bildbeschreibung hier eingeben

Das erste Feld zeigt die Daten und eine kontrafaktische Vorhersage für die Nachbehandlungsperiode. Das zweite Feld zeigt den Unterschied zwischen beobachteten Daten und kontrafaktischen Vorhersagen. Dies ist der vom Modell geschätzte punktweise kausale Effekt. Das dritte Panel addiert die punktuellen Beiträge des zweiten Panels und liefert eine grafische Darstellung der kumulativen Wirkung der Intervention.

Wenn Sie Folgendes ausführen summary(impact), erhalten Sie eine Zusammenfassung und die geschätzten Auswirkungen des Ereignisses auf Ihre Zeitreihendaten.

Dieselbe Bibliothek wurde auch nach Python portiert. Zum Beispiel hier

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.