Quale modello statistico dovrei usare per analizzare la probabilità che un singolo evento abbia influenzato i dati longitudinali


19

Sto cercando di trovare una formula, un metodo o un modello da utilizzare per analizzare la probabilità che un evento specifico abbia influenzato alcuni dati longitudinali. Sto avendo difficoltà a capire cosa cercare su Google.

Ecco uno scenario di esempio:

Immagina di possedere un'azienda che ha una media di 100 clienti walk-in ogni giorno. Un giorno, decidi di voler aumentare il numero di clienti walk-in che arrivano al tuo negozio ogni giorno, quindi fai una acrobazia fuori dal tuo negozio per attirare l'attenzione. Durante la settimana successiva, vedrai in media 125 clienti al giorno.

Nel corso dei prossimi mesi, deciderai ancora di voler guadagnare un po 'più di affari e forse di sostenerlo un po' più a lungo, quindi provi alcune altre cose casuali per ottenere più clienti nel tuo negozio. Sfortunatamente, non sei il miglior marketer e alcune delle tue tattiche hanno poco o nessun effetto e altre hanno anche un impatto negativo.

Quale metodologia posso usare per determinare la probabilità che un singolo evento abbia un impatto positivo o negativo sul numero di clienti walk-in? Sono pienamente consapevole del fatto che la correlazione non equivale necessariamente alla causalità, ma quali metodi posso utilizzare per determinare il probabile aumento o diminuzione nella camminata quotidiana della tua azienda nel seguire un evento specifico?

Non mi interessa analizzare se esiste una correlazione tra i tuoi tentativi di aumentare il numero di clienti walk-in, ma piuttosto se un singolo evento, indipendentemente da tutti gli altri, abbia avuto un impatto.

Mi rendo conto che questo esempio è piuttosto inventato e semplicistico, quindi ti darò anche una breve descrizione dei dati reali che sto usando:

Sto tentando di determinare l'impatto che una particolare agenzia di marketing ha sul sito Web dei loro clienti quando pubblicano nuovi contenuti, eseguono campagne sui social media, ecc. Per qualsiasi agenzia specifica, possono avere da 1 a 500 clienti. Ogni cliente ha siti Web di dimensioni che vanno da 5 pagine a oltre 1 milione. Nel corso degli ultimi 5 anni, ogni agenzia ha annotato tutto il proprio lavoro per ciascun cliente, incluso il tipo di lavoro svolto, il numero di pagine Web su un sito Web che sono state influenzate, il numero di ore trascorse, ecc.

Utilizzando i dati di cui sopra, che ho assemblato in un data warehouse (inserito in un gruppo di schemi a stella / fiocco di neve), devo determinare con quale probabilità un singolo pezzo di lavoro (un evento nel tempo) ha avuto un impatto su il traffico che colpisce qualsiasi / tutte le pagine influenzato da un lavoro specifico. Ho creato modelli per 40 diversi tipi di contenuti che si trovano su un sito Web che descrivono lo schema di traffico tipico che una pagina con tale tipo di contenuto potrebbe sperimentare dalla data di lancio fino ad oggi. Normalmente rispetto al modello appropriato, devo determinare il numero più alto e più basso di visitatori aumentati o diminuiti di una pagina specifica ricevuta a seguito di un lavoro specifico.

Mentre ho esperienza con l'analisi dei dati di base (regressione lineare e multipla, correlazione, ecc.), Non riesco a capire come affrontare questo problema. Mentre in passato ho analizzato in genere dati con più misurazioni per un dato asse (ad esempio temperatura vs sete vs animale e determinato l'impatto sulla sete che un aumento del temperato ha sugli animali), ritengo che sopra, sto provando ad analizzare l'impatto di un singolo evento ad un certo punto nel tempo per un set di dati longitudinale non lineare, ma prevedibile (o almeno in grado di modellare). Sono sconcertato :(

Qualsiasi aiuto, consigli, suggerimenti, consigli o indicazioni sarebbe estremamente utile e sarei eternamente grato!


Esiste un'intera classe di analisi statistiche dedicate alla modellazione di dati longitudinali. Se avevi ripetute misure sulle stesse materie, i modelli misti vengono spesso usati come lo stato dell'arte nelle scienze sociali per determinare se vi è impatto di un intervento. Se hai una serie temporale, puoi usare solo qualcosa come un Arima.
B_Miner,

Un approccio RDD potrebbe anche essere utile per te: austinclemens.com/blog/2014/06/08/436
B_Miner

Risposte:


11

Per la cronaca, penso che questo sia il tipo di domanda che è perfetta per la scienza dei dati Stack Exchange. Spero che avremo un mucchio di esempi reali di problemi relativi ai dati e diverse prospettive su come risolverli al meglio.

Ti incoraggio a non usare i valori p in quanto possono essere piuttosto fuorvianti ( 1 , 2 ). Il mio approccio dipende dal fatto che tu sia in grado di riassumere il traffico su una determinata pagina prima e dopo qualche intervento. Ciò che ti interessa è la differenza nella tariffa prima e dopo l'intervento. Cioè, come cambia il numero di hit al giorno? Di seguito, spiego un primo approccio di stab con alcuni dati di esempio simulati. Spiegherò quindi una potenziale trappola (e cosa farei al riguardo).

Innanzitutto, pensiamo a una pagina prima e dopo un intervento. Fai finta che l'intervento aumenti i colpi al giorno di circa il 15%:

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()

Distribuzione degli hit al giorno prima e dopo l'intervento

Possiamo vedere chiaramente che l'intervento ha aumentato in media il numero di hit al giorno. Ma per quantificare la differenza nelle tariffe, dovremmo usare l'intervento di una società per più pagine. Poiché il tasso sottostante sarà diverso per ogni pagina, dovremmo calcolare la variazione percentuale del tasso (di nuovo, il tasso qui è hit al giorno).

Ora, facciamo finta di avere dati per le n = 100pagine, ognuna delle quali ha ricevuto un intervento dalla stessa azienda. Per ottenere la differenza percentuale che prendiamo (media (hit al giorno prima) - media (hit al giorno dopo)) / media (hit al giorno prima):

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()

Distribuzione della variazione percentuale

Ora abbiamo la distribuzione del nostro parametro di interesse! Possiamo interrogare questo risultato in diversi modi. Ad esempio, potremmo voler conoscere la modalità o (approssimazione di) il valore più probabile per questa variazione percentuale:

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)

Quando ho eseguito questo ho ottenuto 0,126, il che non è male, considerando che la nostra variazione percentuale reale è 15. Possiamo anche vedere il numero di modifiche positive, che approssima la probabilità che l'intervento di una determinata azienda migliori gli hit al giorno:

(pct_diff > 0).mean()

Qui, il mio risultato è 0.93, quindi potremmo dire che c'è una buona possibilità che questa azienda sia efficace.

Infine, un potenziale trabocchetto: ogni pagina ha probabilmente una tendenza di fondo che dovresti probabilmente tenere in considerazione. Cioè, anche senza l'intervento, i colpi al giorno possono aumentare. Per tenere conto di ciò, stimerei una semplice regressione lineare in cui la variabile di risultato è hit al giorno e la variabile indipendente è day (inizia dal giorno = 0 e semplicemente incrementa per tutti i giorni nel tuo campione). Quindi sottrai la stima, y_hat, da ogni numero di hit al giorno per declassare i tuoi dati. Quindi puoi eseguire la procedura sopra descritta ed essere sicuro che una differenza percentuale positiva non è dovuta alla tendenza sottostante. Certo, la tendenza potrebbe non essere lineare, quindi usa la discrezione! In bocca al lupo!


Grazie mille per una spiegazione così approfondita! Lo apprezzo molto. Tra te e neone4373 sono stato in grado di risolvere il problema! Questa comunità oscilla! Grazie!
Peter Kirby,

10

Ai miei tempi da analista di dati questo tipo di problema era piuttosto tipico. Fondamentalmente, tutti nel marketing avrebbero avuto un'idea folle che il venduto a alti come l'unico evento che avrebbe aumentato i KPI del 2000%. Gli alti li approverebbero e poi inizierebbero il loro "test". I risultati tornerebbero e il management lo scaricherà sugli analisti di dati per determinare cosa ha funzionato e chi l'ha fatto.

La risposta breve è che non puoi davvero sapere se non è stato eseguito come test casuale di stile A / B in periodi di tempo simili. Ma sono molto consapevole di quanto sia carente quella risposta, soprattutto se il fatto che non esiste una risposta pura è irrilevante per l'urgenza delle future decisioni commerciali. Ecco alcune delle tecniche che vorrei utilizzare per salvare l'analisi in questa situazione, tenere presente che si tratta più di un'arte che di una scienza.

maniglie

Una maniglia è qualcosa che esiste nei dati a cui puoi aggrapparti. Da quello che mi stai dicendo nella tua situazione, hai molte informazioni su chi è l'agenzia di marketing, quando hanno provato una tattica e su quale sito l'hanno applicata. Questi sono il tuo punto di partenza e informazioni come questa saranno la pietra angolare della tua analisi.

Metodologia

La metodologia probabilmente avrà il maggiore impatto su quali agenzie ricevono credito per tutti i guadagni, quindi dovrai assicurarti che siano contorni chiari e tutti gli stakeholder concordano sul fatto che abbia senso. Se non riesci a farlo, sarà difficile per le persone fidarsi della tua analisi.

Un esempio di questo sono le conversioni. Supponiamo che il reparto marketing acquisti alcuni lead e che arrivino alla nostra pagina di destinazione, li seguiremmo per 3 giorni, se avessero effettuato un acquisto entro quel tempo li considereremmo come convertiti. Perché 3 giorni, perché non 5 o 1? Non è importante finché tutti sono d'accordo, ora hai una definizione da cui puoi costruire.

confronti

In un ideale avresti un bel test A / B per dimostrare una relazione definitiva, suppongo che stai esaurendo quelli, tuttavia, puoi imparare qualcosa da un semplice confronto di dati simili. Quando le aziende stanno provando a determinare l'efficacia della pubblicità radiofonica, spesso pubblicheranno annunci con mesi offset nello stesso mercato, o per diversi mesi in un mercato e lo confronteranno con i risultati in un mercato separato ma simile. Non passa per la scienza, ma anche con tutto quel rumore un risultato forte sarà quasi sempre evidente.

Vorrei combinare questi nel tuo caso per determinare per quanto tempo viene dato un evento per registrare un effetto. Una volta che hai i dati di quel periodo di tempo, eseguili sulla base della previsione del traffico modellata, della crescita di settimana in settimana, di mese in mese, ecc. Che, quindi, possono consentire un confronto significativo tra le agenzie e attraverso periodi di tempo.

pragmatica

L'aspirazione è quella di essere in grado di fornire una profonda comprensione di causa ed effetto, ma probabilmente non è realistico. A causa di quanto fattori esterni disordinati rendono la tua analisi, ti imbatterai continuamente nella domanda più e più volte: questo evento ha aumentato il volume / le vendite / i click-through o fare qualcosa avrebbe avuto lo stesso effetto? Il miglior consiglio che posso dare per questo è fissare obiettivi molto realistici per ciò che stai cercando di misurare. Un buon punto di partenza è, all'interno della metodologia che hai, quale evento ha avuto il maggiore impatto. Una volta che hai aperto quelli da lì.

Sommario

Dopo aver chiarito tutti questi aspetti, puoi creare una soluzione generale che può quindi essere automatizzata. Il vantaggio di progettare la tua soluzione in questo modo è che la logica di business è già integrata. Ciò renderà i tuoi risultati molto più accessibili e intuitivi per i leader non tecnici.


@ 1 per pazzi ragazzi del marketing. Lavorare nelle ricerche di mercato e attorcigliare le statistiche povere mi rende triste ...
Christian Sauer,

2

Modifica: Attenzione, lascio il mio messaggio ma la mia risposta sembra sbagliata, per favore controlla il commento qui sotto!

Non sono un esperto ma credo che il problema principale sia rispondere a questa domanda:

Un / qualche evento ha influenzato il numero di hit in un determinato giorno?

Ma non so come trattare più eventi, quindi proverei a rispondere a questa domanda:

  • L'evento X ha influenzato il numero di hit in un determinato giorno?

A cui si può rispondere usando il test di ipotesi con valori p (cosa fa lo scienziato per valutare, ad esempio, se un medicinale influenza o meno una malattia).

Utilizzando i valori p, è possibile determinare se il numero di hit in un determinato giorno è stato semplicemente casuale e accettabile in circostanze normali o se devono corrispondere a un cambiamento nel modello.

Puoi leggere di più sui valori-p in Open Intro to Statistics Book , in realtà ho imparato da loro.

Quindi, le altre parti del problema sono come identificare i tuoi eventi e calcolare i parametri necessari per rispondere alla tua domanda (media / mediana, varianza, ecc.) E anche come mantenerlo aggiornato e funzionante.


1

Alcuni anni fa (2015), Google ha pubblicato un documento di ricerca sugli effetti di un evento specifico in un modello di serie storiche. Puoi leggere maggiori dettagli qui Inferire l'impatto causale usando i modelli strutturali delle serie temporali bayesiane .

In questa pagina GitHub , puoi trovare un esempio dettagliato e una descrizione di come funziona. In breve,

Questo pacchetto R implementa un approccio per stimare l'effetto causale di un intervento progettato su una serie temporale. Ad esempio, quanti clic giornalieri aggiuntivi sono stati generati da una campagna pubblicitaria? Rispondere a una domanda come questa può essere difficile quando un esperimento randomizzato non è disponibile.

Addestra il tuo modello con dati pre-evento e post-evento e ottieni una trama come questa

inserisci qui la descrizione dell'immagine

Il primo pannello mostra i dati e una previsione controfattuale per il periodo post-trattamento. Il secondo pannello mostra la differenza tra i dati osservati e le previsioni controfattuali. Questo è l'effetto causale puntuale, come stimato dal modello. Il terzo pannello somma i contributi puntuali del secondo pannello, risultando in un diagramma dell'effetto cumulativo dell'intervento.

Eseguendo quanto segue summary(impact), si ottiene un riepilogo e l'impatto stimato dell'evento sui dati delle serie temporali.

La stessa libreria è stata trasferita anche su Python. Per esempio qui

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.