Анализ причинно-следственных связей в Python (A / B-тестирование) - PullRequest
0 голосов
/ 07 августа 2020

Я делаю анализ причинно-следственных связей в Python. Этот вид анализа помогает измерить воздействие в группе лечения после вмешательства по сравнению с контрольной группой (A / B-тестирование). Я читал отсюда литературу: https://www.analytics-link.com/post/2017/11/03/causal-impact-analysis-in-r-and-now-python

Допустим, мои данные имеют следующий формат:

введите описание изображения здесь

Следующий код работает отлично:

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

Однако, если я добавлю дополнительный столбец Date и попытаюсь разделить группы обработки и управления по дате, я получаю error

Скажем, теперь я определяю периоды до и после по дате следующим образом:

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

Я получаю сообщение об ошибке:

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

Я преобразовал дату для индексации, но по-прежнему появляется ошибка.

Кто-нибудь может помочь. Похоже, что в Интернете имеется ограниченная литература по этой библиотеке и ее использованию в A / B-тестировании. Большое спасибо за вашу помощь!

Ответы [ 3 ]

0 голосов
/ 07 августа 2020

Перед передачей периодов в CausalImpact определите периоды:

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']]

Теперь периоды являются объектами временных рядов, например pre_period:

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

- это список Timestamp. После этого попробуйте:

impact = CausalImpact(data, pre_period, post_period)
impact.run()
impact.plot()
0 голосов
/ 12 августа 2020

Не сработало для меня, это вызывает TypeError: аргумент float () должен быть строкой или числом, а не datetime.date в довольно равном наборе данных (один столбец даты и столбцы контрольной / тестовой группы) Не похоже очень общее решение

0 голосов
/ 07 августа 2020

Похоже, что ваши данные - это фрейм данных, но вы предоставляете даты в объектах pre_period и post_period, которые требуют, чтобы ваши данные были объектом временного ряда. Это объясняется в исходной документации пакета R здесь .

Подводя итог: укажите индексы для фреймов данных, укажите даты для временных рядов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...