0
votes

Analyse de l'impact causal en Python (test A / B)

Je fais une analyse d'impact causal en Python. Ce type d'analyse aide à mesurer l'impact dans le groupe de traitement après l'intervention par rapport à un groupe témoin (test A / B). J'ai lu de la littérature ici: https://www.analytics-link.com/post/2017/11/03/causal-impact-analysis-in-r-and-now-python

Disons mon les données sont au format suivant:

 entrez la description de l'image ici

Le code suivant fonctionne parfaitement:

ConversionError: Failed to convert value(s) to axis units: '2020-06-29'

Cependant, si j'ajoute une colonne supplémentaire de Date et que j'essaie de diviser les groupes de traitement et de contrôle en fonction de la date, j'obtiens une erreur

Dis, je définis les périodes pré et post par date maintenant comme ceci:

pre_period = ['2020-04-27','2020-06-29']
post_period = ['2020-07-06','2020-07-27']
impact = CausalImpact(data, pre_period, post_period)
impact.run()
impact.plot()

J'obtiens une erreur:

from causalimpact import CausalImpact
cut_off_point = 12
pre_period = [0,cut_off_point-1]
post_period = [cut_off_point,data.shape[0]-1]
impact = CausalImpact(data, pre_period, post_period)
impact.run()
impact.plot()

J'ai converti la date en index mais j'obtiens toujours l'erreur .

Quelqu'un peut-il s'il vous plaît aider. Il semble y avoir une littérature limitée en ligne sur cette bibliothèque et son utilisation dans les tests A / B. Merci beaucoup pour votre aide!


0 commentaires

4 Réponses :


0
votes

Il semble que vos données soient une trame de données, mais vous fournissez des dates dans les objets pre_period et post_period , qui exigent que vos données soient plutôt un objet de série chronologique. Ceci est expliqué dans la documentation originale du package R ici .

Pour résumer: fournissez des indices pour les cadres de données, fournissez des dates pour les séries chronologiques.


0 commentaires

0
votes

Avant de passer des périodes à CausalImpact , définissez des périodes:

impact = CausalImpact(data, pre_period, post_period)
impact.run()
impact.plot()

Les périodes sont désormais des objets de série chronologique, par exemple pre_period : p>

[Timestamp('2014-01-01 00:00:00'), Timestamp('2014-03-12 00:00:00')]

est une liste de Timestamp . Après cela, essayez:

pre_period = [pd.to_datetime(date) for date in  ['2020-04-27','2020-06-29']]
post_period = [pd.to_datetime(date) for date in ['2020-07-06','2020-07-27']]


0 commentaires

0
votes

Cela n'a pas fonctionné pour moi, cela soulève TypeError: l'argument float () doit être une chaîne ou un nombre, pas 'datetime.date' dans un ensemble de données assez égal (une colonne de date et des colonnes de groupe de contrôle / test) une solution très générale


0 commentaires

0
votes

Pour ceux qui trouvent cette question, il est également possible d'utiliser la nouvelle bibliothèque tfcausalimpact pour exécuter l'impact causal en Python (il a été construit sur TensorFlow).

Voici un exemple pour résoudre ce problème sur le nouveau package:

dated_data = data.set_index(pd.date_range(start='20200101', periods=len(data)))

pre_period = ['20200101', '20200311']
post_period = ['20200312', '20200409']

ci = CausalImpact(dated_data, pre_period, post_period)

Notez que le package permet de spécifier les périodes d'intervalle sous forme de chaînes aussi longues car l'index des données d'entrée est de type pandas.index.datetime.


0 commentaires