Quel modèle statistique dois-je utiliser pour analyser la probabilité qu'un seul événement influence les données longitudinales


19

J'essaie de trouver une formule, une méthode ou un modèle à utiliser pour analyser la probabilité qu'un événement spécifique ait influencé certaines données longitudinales. J'ai du mal à trouver quoi rechercher sur Google.

Voici un exemple de scénario:

Imaginez que vous possédez une entreprise qui compte en moyenne 100 clients sans rendez-vous chaque jour. Un jour, vous décidez que vous souhaitez augmenter le nombre de clients sans rendez-vous qui arrivent chaque jour dans votre magasin. Au cours de la semaine prochaine, vous voyez en moyenne 125 clients par jour.

Au cours des prochains mois, vous décidez à nouveau de vouloir augmenter votre chiffre d'affaires, et peut-être de le maintenir un peu plus longtemps, alors essayez d'autres choses aléatoires pour attirer plus de clients dans votre magasin. Malheureusement, vous n'êtes pas le meilleur marketeur, et certaines de vos tactiques ont peu ou pas d'effet, et d'autres ont même un impact négatif.

Quelle méthodologie pourrais-je utiliser pour déterminer la probabilité qu'un événement individuel ait un impact positif ou négatif sur le nombre de clients sans rendez-vous? Je suis pleinement conscient que la corrélation n'est pas nécessairement synonyme de causalité, mais quelles méthodes pourrais-je utiliser pour déterminer l'augmentation ou la diminution probable de la marche quotidienne de votre entreprise chez le client après un événement spécifique?

Je ne suis pas intéressé à analyser s'il existe ou non une corrélation entre vos tentatives d'augmenter le nombre de clients sans rendez-vous, mais plutôt si un seul événement, indépendant de tous les autres, a eu un impact.

Je me rends compte que cet exemple est plutôt artificiel et simpliste, je vais donc également vous donner une brève description des données réelles que j'utilise:

J'essaie de déterminer l'impact qu'une agence de marketing particulière a sur le site Web de son client lorsqu'elle publie un nouveau contenu, réalise des campagnes sur les réseaux sociaux, etc. Pour une agence en particulier, elle peut avoir de 1 à 500 clients. Chaque client possède des sites Web dont la taille varie de 5 pages à plus d'un million. Au cours des 5 dernières années, chaque agence a annoté tout son travail pour chaque client, y compris le type de travail effectué, le nombre de pages Web sur un site Web qui ont été influencées, le nombre d'heures passées, etc.

En utilisant les données ci-dessus, que j'ai assemblées dans un entrepôt de données (placé dans un tas de schémas en étoile / flocon de neige), je dois déterminer la probabilité qu'un élément (un événement dans le temps) ait un impact sur le trafic atteignant une / toutes les pages influencé par un travail spécifique. J'ai créé des modèles pour 40 types de contenu différents que l'on trouve sur un site Web qui décrit le modèle de trafic typique qu'une page avec ce type de contenu peut rencontrer de la date de lancement jusqu'à aujourd'hui. Normalisé par rapport au modèle approprié, je dois déterminer le nombre le plus élevé et le plus faible de visiteurs augmentés ou diminués qu'une page spécifique a reçus à la suite d'un travail spécifique.

Bien que j'ai de l'expérience avec l'analyse de données de base (régression linéaire et multiple, corrélation, etc.), je ne sais pas comment aborder la résolution de ce problème. Alors que dans le passé j'ai généralement analysé des données avec plusieurs mesures pour un axe donné (par exemple température vs soif vs animal et déterminé l'impact sur la soif que l'augmentation de la température a sur les animaux), je pense que ci-dessus, j'essaie d'analyser l'impact d'un événement unique à un moment donné pour un ensemble de données longitudinales non linéaire, mais prévisible (ou du moins modélisable). Je suis perplexe :(

Toute aide, conseils, pointeurs, recommandations ou instructions serait extrêmement utile et je vous en serais éternellement reconnaissant!


Il existe toute une classe d'analyse statistique consacrée à la modélisation de données longitudinales. Si vous avez répété des mesures sur les mêmes sujets, des modèles mixtes sont souvent utilisés comme état de l'art en sciences sociales pour déterminer s'il y a impact d'une intervention. Si vous avez une série chronologique, seul quelque chose comme un Arima peut être utilisé.
B_Miner

Une approche RDD pourrait également vous être utile: austinclemens.com/blog/2014/06/08/436
B_Miner

Réponses:


11

Pour mémoire, je pense que c'est le type de question qui est parfait pour la science des données Stack Exchange. J'espère que nous aurons un tas d'exemples réels de problèmes de données et plusieurs perspectives sur la meilleure façon de les résoudre.

Je vous encourage à ne pas utiliser de valeurs p car elles peuvent être assez trompeuses ( 1 , 2 ). Mon approche repose sur votre capacité à résumer le trafic sur une page donnée avant et après une intervention. Ce qui vous importe, c'est la différence de taux avant et après l'intervention. Autrement dit, comment le nombre de visites par jour change-t-il? Ci-dessous, j'explique une première approche stab avec quelques exemples de données simulées. Je vais ensuite expliquer un écueil potentiel (et ce que je ferais à ce sujet).

Pensons d'abord à une page avant et après une intervention. Imaginez que l'intervention augmente le nombre de visites par jour d'environ 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()

Répartition des hits par jour avant et après l'intervention

On voit bien que l'intervention a augmenté le nombre de visites par jour, en moyenne. Mais pour quantifier la différence de taux, nous devons utiliser l'intervention d'une entreprise pour plusieurs pages. Étant donné que le taux sous-jacent sera différent pour chaque page, nous devons calculer le pourcentage de variation du taux (encore une fois, le taux est ici les hits par jour).

Maintenant, supposons que nous avons des données pour les n = 100pages, chacune ayant reçu une intervention de la même entreprise. Pour obtenir la différence en pourcentage que nous prenons (moyenne (hits par jour avant) - moyenne (hits par jour après)) / moyenne (hits par jour avant):

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

Répartition du pourcentage de variation

Maintenant, nous avons la distribution de notre paramètre d'intérêt! Nous pouvons interroger ce résultat de différentes manières. Par exemple, nous pourrions vouloir connaître le mode, ou (approximation de) la valeur la plus probable pour ce changement de pourcentage:

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)

Quand j'ai couru cela, j'ai obtenu 0,126, ce qui n'est pas mal, compte tenu de notre véritable changement en pourcentage est de 15. Nous pouvons également voir le nombre de changements positifs, qui se rapproche de la probabilité que l'intervention d'une entreprise donnée améliore les hits par jour:

(pct_diff > 0).mean()

Ici, mon résultat est de 0,93, donc on pourrait dire qu'il y a de bonnes chances que cette entreprise soit efficace.

Enfin, un piège potentiel: chaque page a probablement une tendance sous-jacente que vous devriez probablement prendre en compte. Autrement dit, même sans l'intervention, les visites par jour peuvent augmenter. Pour tenir compte de cela, j'estimerais une régression linéaire simple où la variable de résultat est des coups par jour et la variable indépendante est le jour (commencer au jour = 0 et simplement augmenter pour tous les jours de votre échantillon). Ensuite, soustrayez l'estimation, y_hat, de chaque nombre de visites par jour pour dé-tendance vos données. Ensuite, vous pouvez effectuer la procédure ci-dessus et être sûr qu'une différence en pourcentage positive n'est pas due à la tendance sous-jacente. Bien sûr, la tendance peut ne pas être linéaire, alors faites preuve de discrétion! Bonne chance!


Merci beaucoup pour une explication aussi complète! J'apprécie vraiment cela. Entre vous et neone4373 j'ai pu résoudre le problème! Cette communauté est géniale! Merci!
Peter Kirby

10

À l'époque où j'étais analyste de données, ce type de problème était assez typique. Fondamentalement, tout le monde dans le marketing aurait une idée folle que la vente à des hauts comme l'événement unique qui augmenterait les KPI de 2000%. Les supérieurs les approuveraient et ensuite ils commenceraient leur "test". Les résultats reviendraient et la direction les déverserait sur les analystes de données pour déterminer ce qui a fonctionné et qui l'a fait.

La réponse courte est que vous ne pouvez pas vraiment savoir s'il n'a pas été exécuté comme un test de style A / B aléatoire sur des périodes de temps similaires. Mais je suis très conscient de la déficience de cette réponse, surtout si le fait qu'il n'existe pas de réponse pure n'est pas pertinent pour l'urgence des futures décisions commerciales. Voici quelques-unes des techniques que j'utiliserais pour sauver l'analyse dans cette situation, gardez à l'esprit qu'il s'agit plus d'un art que d'une science.

Poignées

Un handle est quelque chose qui existe dans les données que vous pouvez conserver. D'après ce que vous me dites dans votre situation, vous avez beaucoup d'informations sur qui est l'agence de marketing, quand elle a essayé une tactique et sur quel site elle l'a appliquée. Ce sont votre point de départ et des informations comme celle-ci vont être la pierre angulaire de votre analyse.

Méthodologie

La méthodologie aura probablement l'impact le plus fort sur les agences qui sont créditées pour tous les gains, vous devrez donc vous assurer qu'elle est clairement décrite et que toutes les parties prenantes conviennent que cela a du sens. Si vous ne pouvez pas faire cela, il sera difficile pour les gens de faire confiance à votre analyse.

Les conversions en sont un exemple. Supposons que le service marketing achète des prospects et qu'ils arrivent sur notre page de destination, nous les suivrons pendant 3 jours, s'ils effectuent un achat dans ce délai, nous les comptons comme ayant été convertis. Pourquoi 3 jours, pourquoi pas 5 ou 1? Ce n'est pas important tant que tout le monde est d'accord, vous avez maintenant une définition à partir de laquelle vous pouvez construire.

Comparaisons

Dans l'idéal, vous auriez un bon test A / B pour prouver une relation définitive, je vais supposer que vous êtes à court de ceux-là, vous pouvez toujours apprendre quelque chose d'une simple comparaison de données similaires. Lorsque les entreprises tentent de déterminer l'efficacité de la publicité radio, elles diffusent souvent des publicités sur des mois décalés sur le même marché ou pendant plusieurs mois sur un marché et les comparent avec les résultats sur un marché distinct mais similaire. Cela ne passe pas pour la science, mais même avec tout ce bruit, des résultats solides seront presque toujours perceptibles.

Je combinerais ces éléments dans votre cas pour déterminer la durée d'un événement pour enregistrer un effet. Une fois que vous avez les données de cette période, exécutez-les par rapport à vos prévisions de trafic modélisées, à la croissance d'une semaine à l'autre, d'un mois à l'autre, etc., ce qui peut alors permettre une comparaison significative entre les agences et entre les périodes.

Pragmatisme

L'aspiration est de pouvoir fournir une compréhension profonde des causes et des effets, mais ce n'est probablement pas réaliste. En raison de la façon dont les facteurs extérieurs compliquent votre analyse, vous allez constamment vous heurter à la question: cet événement a-t-il augmenté le volume / les ventes / les clics, ou est-ce que faire quelque chose aurait eu le même effet? Le meilleur conseil que je puisse vous donner est de fixer des objectifs très réalistes pour ce que vous cherchez à mesurer. Un bon point de départ est, dans la méthodologie que vous avez, quel événement a eu le plus grand impact. Une fois que vous les avez ouvertes, ouvrez votre ouverture à partir de là.

Sommaire

Une fois que vous avez raisonné tous ces aspects, vous pouvez commencer à construire une solution générale qui peut ensuite être automatisée. L'avantage de concevoir votre solution de cette manière est que la logique métier est déjà intégrée. Cela rendra vos résultats beaucoup plus accessibles et intuitifs pour les chefs d'entreprise non techniques.


@ 1 pour les fous du marketing. Travailler dans les études de marché et le tort apporté aux mauvaises statistiques me rend triste ...
Christian Sauer

2

Edit: Attention, je laisse mon message mais ma réponse semble fausse, merci de vérifier le commentaire ci-dessous!

Je ne suis pas un expert mais je suppose que le principal problème est de répondre à cette question:

Un / un événement a-t-il affecté le nombre de visites un certain jour?

Mais je ne sais pas comment traiter plusieurs événements, alors j'essaierais de répondre à cette question:

  • L'événement X a-t-il affecté le nombre de visites un certain jour?

À laquelle on peut répondre en utilisant des tests d'hypothèse avec des valeurs de p (ce que les scientifiques font pour évaluer, par exemple, si un médicament affecte une maladie ou non).

En utilisant des valeurs de p, vous pouvez déterminer si le nombre de visites dans un certain jour était purement aléatoire et acceptable dans des circonstances normales ou s'il doit correspondre à un changement dans votre modèle.

Vous pouvez en savoir plus sur les valeurs de p dans Open Intro to Statistics Book , j'ai en fait appris à leur sujet à partir de là.

Ensuite, les autres parties du problème sont de savoir comment identifier vos événements et calculer les paramètres nécessaires pour répondre à votre question (moyenne / médiane, variance, etc.) et aussi comment les garder à jour et fonctionner.


1

Il y a quelques années (2015), Google a publié un document de recherche sur l'effet d'un événement spécifique sur un modèle de série chronologique. Vous pouvez lire plus de détails ici Inférer l'impact causal en utilisant des modèles de séries chronologiques structurelles bayésiennes .

Dans cette page GitHub , vous pouvez trouver un exemple détaillé et une description de son fonctionnement. En bref,

Ce package R met en œuvre une approche pour estimer l'effet causal d'une intervention conçue sur une série chronologique. Par exemple, combien de clics quotidiens supplémentaires ont été générés par une campagne publicitaire? Répondre à une question comme celle-ci peut être difficile lorsqu'une expérience randomisée n'est pas disponible.

Vous entraînez votre modèle avec des données pré-événement et après-événement et vous obtenez un tracé comme celui-ci

entrez la description de l'image ici

Le premier panneau montre les données et une prévision contrefactuelle pour la période post-traitement. Le deuxième panneau montre la différence entre les données observées et les prédictions contrefactuelles. Il s'agit de l'effet causal ponctuel, estimé par le modèle. Le troisième panel additionne les contributions ponctuelles du deuxième panel, ce qui donne un graphique de l'effet cumulatif de l'intervention.

En exécutant ce qui suit summary(impact), vous obtenez un résumé et l'impact estimé de l'événement sur vos données de série chronologique.

La même bibliothèque a également été portée sur Python. Par exemple ici

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.