Какую статистическую модель я должен использовать, чтобы проанализировать вероятность того, что одно событие повлияло на продольные данные

19

Я пытаюсь найти формулу, метод или модель, которые можно использовать для анализа вероятности того, что конкретное событие повлияло на некоторые продольные данные. Мне трудно понять, что искать в Google.

Вот пример сценария:

Представьте, что вы владеете бизнесом, в котором ежедневно посещают в среднем 100 клиентов. Однажды вы решаете, что хотите увеличить количество посетителей, приходящих в ваш магазин каждый день, поэтому вы тянете сумасшедший трюк за пределы магазина, чтобы привлечь внимание. В течение следующей недели вы видите в среднем 125 клиентов в день.

В течение следующих нескольких месяцев вы снова решите, что хотите получить больше бизнеса и, возможно, поддерживать его немного дольше, поэтому вы пробуете другие случайные вещи, чтобы привлечь больше покупателей в ваш магазин. К сожалению, вы не самый лучший маркетолог, и некоторые из ваших тактик мало или вообще не дают эффекта, а другие даже оказывают негативное влияние.

Какую методологию я мог бы использовать, чтобы определить вероятность того, что какое-либо отдельное событие положительно или отрицательно повлияло на количество привлеченных клиентов? Я полностью осознаю, что корреляция не обязательно равна причинно-следственной связи, но какие методы я мог бы использовать, чтобы определить вероятное увеличение или уменьшение ежедневной прогулки вашего бизнеса по клиенту после определенного события?

Мне не интересно анализировать, существует ли корреляция между вашими попытками увеличить количество посетителей, а скорее, было ли какое-то одно событие, независимое от всех других, эффективным.

Я понимаю, что этот пример довольно надуманный и упрощенный, поэтому я также дам вам краткое описание реальных данных, которые я использую:

Я пытаюсь определить влияние, которое конкретное маркетинговое агентство оказывает на веб-сайт своего клиента, когда они публикуют новый контент, проводят кампании в социальных сетях и т. Д. Для любого конкретного агентства у них может быть от 1 до 500 клиентов. Каждый клиент имеет веб-сайты размером от 5 страниц до более 1 миллиона. В течение последних 5 лет каждое агентство аннотировало всю свою работу для каждого клиента, включая тип работы, которая была выполнена, количество веб-страниц на веб-сайте, которые были затронуты, количество потраченных часов и т. Д.

Используя вышеупомянутые данные, которые я собрал в хранилище данных (помещенное в набор схем звездочка / снежинка), мне нужно определить, насколько вероятно, что какой-то один фрагмент работы (любое одно событие во времени) оказал влияние на трафик, попадающий на любую / все страницы под влиянием определенной части работы. Я создал модели для 40 различных типов контента, которые можно найти на веб-сайте и который описывает типичную структуру трафика, которая может возникнуть на странице с указанным типом контента с даты запуска до настоящего времени. Нормализовано относительно соответствующей модели, мне нужно определить наибольшее и наименьшее количество увеличенных или уменьшенных посетителей конкретной страницы, полученной в результате определенной части работы.

Хотя у меня есть опыт базового анализа данных (линейная и множественная регрессия, корреляция и т. Д.), Я не знаю, как подойти к решению этой проблемы. В то время как в прошлом я обычно анализировал данные с несколькими измерениями для данной оси (например, температура по сравнению с жаждой и животное и определял влияние на жажду, которая имеет повышенную умеренную температуру у животных), я чувствую, что выше я пытаюсь проанализировать воздействие одного события в некоторый момент времени для нелинейного, но предсказуемого (или, по крайней мере, модельного), продольного набора данных. Я в тупик :(

Любая помощь, советы, указатели, рекомендации или указания были бы чрезвычайно полезны, и я был бы бесконечно благодарен!

Питер Кирби
источник
Существует целый класс статистической аналитики, посвященной моделированию продольных данных. Если у вас были повторные измерения по одним и тем же предметам, то смешанные модели часто используются как современные в социальных науках, чтобы определить, есть ли влияние вмешательства. Если у вас есть временной ряд, можно использовать только что-то вроде Arima.
B_Miner
Подход RDD также может быть полезен для вас: austinclemens.com/blog/2014/06/08/436
B_Miner

Ответы:

11

Для справки, я думаю, что этот тип вопросов идеально подходит для стека обмена данными науки. Я надеюсь, что мы получим кучу реальных примеров проблем с данными и несколько способов их решения.

Я бы посоветовал вам не использовать p-значения, поскольку они могут вводить в заблуждение ( 1 , 2 ). Мой подход зависит от того, сможете ли вы суммировать трафик на данной странице до и после некоторого вмешательства. Что вас волнует, так это разница в ставке до и после вмешательства. То есть как меняется количество посещений в день? Ниже я объясняю первый метод удара с помощью некоторых смоделированных примеров данных. Затем я объясню одну потенциальную ловушку (и что я буду с этим делать).

Сначала давайте подумаем об одной странице до и после вмешательства. Представьте, что вмешательство увеличивает количество обращений в день примерно на 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()

Распределение хитов за день до и после вмешательства

Мы можем ясно видеть, что вмешательство увеличило количество обращений в день в среднем. Но для того, чтобы количественно оценить разницу в ставках, мы должны использовать вмешательство одной компании для нескольких страниц. Поскольку базовая ставка будет отличаться для каждой страницы, мы должны рассчитать процентное изменение ставки (опять же, здесь скорость равна ударам в день).

Теперь давайте представим, что у нас есть данные для n = 100страниц, каждая из которых получила вмешательство от одной и той же компании. Чтобы получить разницу в процентах, которую мы берем (среднее значение (число посещений за день до этого) - среднее значение (число обращений за день после)) / среднее (число обращений за день до этого):

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

Распределение процентного изменения

Теперь у нас есть распределение нашего параметра интереса! Мы можем запросить этот результат по-разному. Например, нам может потребоваться узнать режим или (приблизительное значение) наиболее вероятное значение для этого процентного изменения:

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)

Когда я запустил это, я получил 0.126, что неплохо, учитывая, что наше истинное процентное изменение равно 15. Мы также можем увидеть количество положительных изменений, которые приблизительно соответствуют вероятности того, что вмешательство данной компании улучшает попадания в день:

(pct_diff > 0).mean()

Здесь мой результат 0,93, поэтому мы можем сказать, что есть неплохие шансы, что эта компания будет эффективной.

Наконец, потенциальная ловушка: у каждой страницы, вероятно, есть какая-то основная тенденция, которую вы, вероятно, должны учитывать. То есть даже без вмешательства количество попаданий в день может увеличиться. Чтобы учесть это, я бы оценил простую линейную регрессию, где итоговая переменная - это хиты в день, а независимая переменная - день (начните с дня = 0 и просто увеличивайте для всех дней в вашей выборке). Затем вычтите оценку y_hat из каждого числа посещений в день, чтобы лишить трендовых данных. Затем вы можете выполнить описанную выше процедуру и быть уверенным, что положительная разница в процентах не связана с базовой тенденцией. Конечно, тенденция не может быть линейной, поэтому используйте усмотрение! Удачи!

Бен
источник
Большое спасибо за такое подробное объяснение! Я очень ценю это. Между вами и neone4373 я смог решить проблему! Это сообщество рулит! Благодарность!
Питер Кирби
10

В те дни, когда я занимался анализом данных, подобные проблемы были довольно типичными. По сути, все, кто занимается маркетингом, придут к сумасшедшей идее о том, что продажа в более высокие взлеты является единственным событием, которое повысит KPI на 2000%. Более высокие взлеты одобрили бы их, и тогда они начали бы свое "испытание". Результаты будут возвращаться, и руководство будет отправлять их аналитикам данных, чтобы определить, что сработало и кто это сделал.

Короткий ответ: вы не можете точно знать, не запускался ли он в качестве случайного теста в стиле A / B в такие же периоды времени. Но я очень хорошо понимаю, насколько неполноценен этот ответ, особенно если тот факт, что чистого ответа не существует, не имеет отношения к срочности будущих деловых решений. Вот некоторые из методов, которые я бы использовал, чтобы спасти анализ в этой ситуации, имейте в виду, что это больше искусство, чем наука.

рукоятки

Дескриптор - это то, что существует в данных, которые вы можете хранить. Из того, что вы говорите мне в своей ситуации, у вас есть много информации о том, кто является маркетинговым агентством, когда они пробовали тактику, и к какому сайту они применяли ее. Это ваша отправная точка, и такая информация станет краеугольным камнем вашего анализа.

методология

Эта методология, вероятно, окажет самое сильное влияние на то, какие агентства получают кредит за любую прибыль, поэтому вам необходимо убедиться, что она четко обозначена, и все заинтересованные стороны согласны с тем, что это имеет смысл. Если вы не можете этого сделать, людям будет трудно доверять вашему анализу.

Примером этого являются преобразования. Скажем, отдел маркетинга покупает некоторых клиентов, и они попадают на нашу целевую страницу, мы будем отслеживать их в течение 3 дней, если они совершат покупку в течение этого времени, мы посчитаем их конвертированными. Почему 3 дня, а не 5 или 1? Это не важно, если все с этим согласны, теперь у вас есть определение, из которого вы можете построить.

Сравнения

В идеале, если бы у вас был хороший A / B-тест, чтобы доказать окончательные отношения, я собираюсь предположить, что вам не хватает этих данных, но вы можете извлечь что-то из простого сравнения подобных данных. Когда компании пытаются определить эффективность радиорекламы, они часто размещают рекламу в смещенные месяцы на одном и том же рынке или в течение нескольких месяцев на одном рынке и сравнивают это с результатами на отдельном, но похожем рынке. Это не подходит для науки, но даже при всем этом шуме сильные результаты почти всегда будут заметны.

Я бы объединил их в вашем случае, чтобы определить, как долго дается событие для регистрации эффекта. Как только у вас есть данные за этот период времени, запустите их в соответствии с вашим смоделированным прогнозом трафика, ростом неделя за неделей, месяц за месяцем и т. Д. Что может позволить провести значимое сравнение между агентствами и за разные периоды времени.

Прагматизм

Стремление должно быть в состоянии обеспечить глубокое понимание причины и следствия, но это, вероятно, нереально. Из-за того, как беспорядочные внешние факторы влияют на ваш анализ, вы постоянно будете сталкиваться с вопросом снова и снова: повлияло ли это событие на увеличение объема / продаж / переходов по кликам, или выполнение каких-либо действий имело бы такой же эффект? Лучший совет, который я могу дать для этого, это установить очень реалистичные цели для того, что вы хотите измерить. Хорошей отправной точкой является то, что в рамках вашей методологии какое событие оказало наибольшее влияние. Как только вы откроете диафрагму оттуда.

Резюме

Разобравшись со всеми этими аспектами, вы можете приступить к созданию общего решения, которое затем можно автоматизировать. Преимущество разработки вашего решения таким образом заключается в том, что бизнес-логика уже встроена. Это сделает ваши результаты более доступными и интуитивно понятными для нетехнических бизнес-лидеров.

neone4373
источник
@ 1 для сумасшедших маркетологов. Работа в исследованиях рынка и скручивание, сделанное из-за плохой статистики, огорчает меня ...
Кристиан Зауэр
2

Изменить: Предупреждение, я оставляю свое сообщение, но мой ответ кажется неправильным, пожалуйста, проверьте комментарий ниже!

Я не эксперт, но, думаю, главная проблема - ответить на этот вопрос:

Повлияло ли какое-либо событие на количество посещений в определенный день?

Но я не знаю, как обрабатывать несколько событий, поэтому я постараюсь ответить на этот вопрос:

  • Повлияло ли событие X на количество посещений в определенный день?

На что можно ответить, используя тестирование гипотез с p-значениями (что ученый делает, например, для оценки, влияет лекарство на болезнь или нет).

Используя p-значения, вы можете определить, было ли количество попаданий в определенный день случайным и приемлемым при нормальных обстоятельствах или что они должны соответствовать изменению в вашей модели.

Вы можете прочитать больше о p-значениях в Open Intro to Statistics Book , я на самом деле узнал о них оттуда.

Затем, другие части проблемы - как определить ваши события и рассчитать необходимые параметры для ответа на ваш вопрос (среднее / медиана, дисперсия и т. Д.), А также как поддерживать их актуальность и работоспособность.

mlespiau
источник
1

Несколько лет назад (2015 г.) Google опубликовал исследовательскую работу о влиянии конкретного события на модель временного ряда. Вы можете прочитать более подробную информацию здесь. Определение причинно-следственных связей с использованием байесовских структурных моделей временных рядов .

На этой странице GitHub вы можете найти подробный пример и описание того, как это работает. Короче говоря,

Этот пакет R реализует подход к оценке причинного эффекта разработанного вмешательства на временные ряды. Например, сколько дополнительных ежедневных кликов было создано рекламной кампанией? Ответ на такой вопрос может быть трудным, если рандомизированный эксперимент недоступен.

Вы тренируете свою модель с данными до события и данными после события, и вы получаете график, подобный этому

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

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

Запустив следующее summary(impact), вы получите сводную информацию и предполагаемое влияние события на данные временных рядов.

Та же библиотека была портирована и на Python. Например здесь

Тасос
источник