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:
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!
4 Réponses :
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.
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']]
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
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
.