Яку статистичну модель я повинен використовувати для аналізу ймовірності того, що одна подія вплинула на поздовжні дані


19

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

Ось приклад сценарію:

Image Ви є власником бізнесу, який щодня має в середньому 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,116, що непогано, враховуючи, що наша реальна зміна відсотків становить 15. Ми також можемо побачити кількість позитивних змін, що приблизна до ймовірності того, що втручання даної компанії покращує кількість показів за день:

(pct_diff > 0).mean()

Тут мій результат становить 0,93, тому можна сказати, що є досить хороший шанс, що ця компанія буде ефективною.

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


Дуже дякую за таке ретельне пояснення! Я дійсно ціную це. Між собою та neone4373 я зміг вирішити проблему! Ця громада гойдає! Спасибі!
Пітер Кірбі

10

Ще в дні моїх аналітиків даних ця проблема була досить типовою. В основному, кожен із маркетингу придумав би божевільну ідею, що продане на більш високі версії є єдиною подією, яка сприятиме підвищенню рівня KPI на 2000%. Вищі зразки схвалили б їх, і тоді вони розпочнуть свій "тест". Результати повернуться, і керівництво скине їх на аналітики даних, щоб визначити, що працювало та хто це робив.

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

Ручки

Ручка - це те, що існує в даних, які ви можете зберігати. З того, що ви мені говорите, у вашій ситуації ви маєте багато інформації про те, хто такий маркетинговий агентство, коли вони спробували тактику та до якого сайту вони застосували його. Це ваша відправна точка та така інформація, яка стане наріжним каменем вашого аналізу.

Методика

Методика, мабуть, матиме найсильніший вплив на те, яким агенціям надається кредит на будь-які та всі прибутки, тому вам потрібно буде переконатися, що вони чітко окреслені, і всі зацікавлені сторони погоджуються, що це має сенс. Якщо ви не можете цього зробити, людям буде важко довіритися вашому аналізу.

Прикладом цього є конверсії. Скажімо, відділ маркетингу купує кілька потенційних клієнтів, і вони потрапляють на нашу цільову сторінку, ми відстежуємо їх протягом 3 днів, якщо вони зробили покупку протягом цього часу, ми вважатимемо їх перетвореними. Чому 3 дні, чому не 5 чи 1? Це не важливо, доки всі згодні, тепер у вас є визначення, яке ви можете скласти.

Порівняння

В ідеалі, якби у вас був би хороший тест на випробування / доказ, щоб довести остаточний зв'язок, я припускаю, що вам не вистачає цих питань, все-таки ви можете дізнатися щось із простого порівняння подібних даних. Коли компанії намагаються визначити ефективність радіореклами, вони часто розміщуватимуть рекламу в офсетні місяці на одному ринку або протягом декількох місяців на одному ринку і порівнюють це з результатами на окремому, але схожому ринку. Це не передається науці, але навіть при всьому цьому шумі майже завжди будуть помітні сильні результати.

Я поєднав би їх у вашому випадку, щоб визначити, як довго подія проводиться для реєстрації ефекту. Після того, як у вас з’являться дані за цей часовий період, запускайте їх відповідно до модельованого прогнозування трафіку, зростання тижня за тиждень, місяць за місяцем тощо. Що може потім дозволити змістовне порівняння між агентствами та між періодами часу.

Прагматизм

Прагнення - дати можливість глибокого розуміння причини та наслідків, але це, мабуть, нереально. Через те, як безладні зовнішні фактори роблять ваш аналіз, ви постійно збираєтеся стикатися з питанням знову і знову: Чи збільшила ця подія обсяг / продажі / кліки, чи зробило б щось взагалі таке? Найкраща порада, яку я можу дати для цього, - це встановити дуже реалістичні цілі щодо того, що ви хочете виміряти. Хороша відправна точка - в рамках вашої методології, яка подія мала найбільший вплив. Після того, як ви відкриєте діафрагму звідти.

Підсумок

Після того, як ви зрозуміли всі ці аспекти, ви можете перейти до створення загального рішення, яке потім може бути автоматизовано. Перевага для розробки Вашого рішення таким чином полягає в тому, що бізнес-логіка вже вбудована. Це зробить ваші результати набагато більш доступними та інтуїтивними для нетехнічних лідерів бізнесу.


@ 1 для божевільних хлопців з маркетингу. Робота над дослідженнями ринку та скручування, зроблене з поганою статистикою, змушує мене сумувати ...
Крістіан Зауер

2

Редагувати: Попередження, я залишаю своє повідомлення, але моя відповідь здається неправильною, будь ласка, ознайомтеся з коментарем нижче!

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

Чи вплинула будь-яка подія на кількість звернень за певний день?

Але я не знаю, як лікувати кілька подій, тому спробую відповісти на це запитання:

  • Чи вплинула подія X на кількість звернень за певний день?

На які можна відповісти, використовуючи тестування гіпотез з р-значеннями (що робити вченим, щоб оцінити, наприклад, чи ліки впливає на захворювання чи ні).

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

Ви можете прочитати більше про p-значення у Відкритому вступі до статистичної книги , я фактично дізнаюся про них звідти.

Потім, інші частини проблеми полягають у тому, як визначити свої події та обчислити необхідні параметри, щоб відповісти на ваше запитання (середня / середня, дисперсія тощо), а також як підтримувати цю актуальність та працювати.


1

Кілька років тому (2015) Google опублікував науково-дослідний документ про вплив конкретної події на модель часових рядів. Більш детальну інформацію ви можете прочитати тут. Викликаючи причинний вплив за допомогою байєсівських структурних часових рядів .

На цій сторінці GitHub ви можете знайти докладний приклад та опис того, як це працює. Коротко,

Цей пакет R реалізує підхід до оцінки причинного ефекту розробленого втручання на часовий ряд. Наприклад, скільки додаткових щоденних кліків було створено рекламною кампанією? Відповісти на таке запитання може бути важко, коли рандомізований експеримент недоступний.

Ви тренуєте свою модель за допомогою даних перед подією та даними після події, і ви отримуєте такий сюжет

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

На першій панелі відображаються дані та контрфактичний прогноз на період після лікування. На другій панелі показана різниця між спостережуваними даними та контрфактичними прогнозами. Це точковий причинний ефект, як оцінюється моделлю. Третя панель додає точкові внески з другої панелі, що призводить до побудови сюжетного ефекту втручання.

Виконуючи наступне summary(impact), ви отримуєте підсумок та приблизний вплив події на ваші дані часових рядів.

Ця ж бібліотека була перенесена і на Python. Наприклад тут

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.