выполнил: Григорий Михолап
дата: 20/01/2016
Задание: Было принято решение провести А/Б тестирование в игре, одной группе пользователей показывали рекламу как обычно, другой не показывали вообще, и после этого были получены результаты, представленные на вкладке «А/Б тестирование». Эксперимент длился 4 недели. Сделайте выводы и дайте рекомендации.
Выводы кратко: в рамках данного анализа мы рассчитали основные показатели воронки продаж для обоих вариантов и проверили статистическую значимость различий. По средней конверсии в первую продажу лучше отработал вариант с рекламой, но по среднему числу продаж на одного игрока лучше был вариант без рекламы. Подтвердить значимость различий по основному показателю, средней выручке с пользователя, на имеющихся данных не удалось.
Замечание по поводу программного кода: Программный код, который используется в отчете можно найти по ссылке
| group | Total New Users | Paying Users | Rate1 = Paying/Total |
|---|---|---|---|
| A:with ads | 18930 |
980 |
5.18% |
| B:without ads | 16180 |
420 |
2.6% |
Я добавил дополнительный столбец Rate1, в котором рассчитал долю игроков, которые произвели платеж (т.н. конверсию в платеж). Мы видим, что в группе с рекламой (далее группа “А”) конверсия в платящих игроков выше (см. столбец Rate1), чем в группе без рекламы (далее группа “В”).
Проверим является ли это различие статистически значимым, либо оно просто вызвано случайными колебаниями. Для начала мы предполагаем, что события “Пользователь оплатил” и “Пользователь не оплатил” подчиняются Биноминальному распределению. Для группы “A” мы имеем биноминальное распределение с параметром “вероятность успеха” равным 0.0518, а для группы “B” - 0.026
Теперь нам необходимо проверить, какая из гипотез верна:
* Нулевая гипотеза Н0 - конверсии равны.
* Альтернативная гипотеза - конверсии не равны.
Рассчитаем вероятность получить указанные в таблице результаты, при условии, что верна нулевая гипотеза.
test <- binom.test(x=420, n=16180, p = 0.0518, conf.level = 0.99)
test$p.value
## [1] 7.689859e-60
Мы видим, что эта вероятность практически равна нулю, что дает нам основание отвергнуть нулевую гипотезу о равенстве конверсий и заявить, что конверсии значимо различаются.
Рассчитаем 99%-доверительные интервалы для оценок наших конверсий.
A:with ads
binom.test(980, 18930, conf.level = 0.99)$conf.int
## [1] 0.04770846 0.05605811
## attr(,"conf.level")
## [1] 0.99
B:without ads
binom.test(420, 16180, conf.level = 0.99)$conf.int
## [1] 0.02284697 0.02935133
## attr(,"conf.level")
## [1] 0.99
Мы видим, что доверительные интервалы не пересекаются, что еще раз подтверждает правильность результатов теста. И мы можем сказать, что в среднем вариант “A” конвертирует в 2 (=5.18/2.6) раза лучше, чем вариант “B”, при этом доверительный интервал для данной оценки составляет (1.6-2.5).
Замечание по поводу объема выборки - для получения статистически значимых результатов для оценки уровня конверсии достаточно выборки гораздо меньшего размера - в 5-10 раз меньше.
| group | Total New Users | Paying Users | Count in App Purchases | Rate2 = Purchases/Paying | lambda |
|---|---|---|---|---|---|
| A:with ads | 18930 |
980 |
1200 |
1.22 | 0.0634 |
| B:without ads | 16180 |
420 |
1500 |
3.57 | 0.0927 |
Замечание: для анализа этого показателя лучше всего иметь полные данные наблюдений (а не только агрегированные показатели), чтобы понимать характер распределения, которому подчиняются эти данные.
В настоящих же услових, мы можем предположить, что количество покупок подчиняется закону распределения Пуассона с параметром lambda, рассчитанным в таблице выше по формуле Count in_App Purchases/Total New Users.
Замечанние 2: Распределение Пуассона является дискретным и принимает любые целые неотрицательные значения n= 0, 1, 2, 3,... с заданными вероятностями p(n)=lambda^n*exp^(-lambda)/n!. Для проверки насколько наше предположение о распределении Пуассона соответствует действительно мы можем рассчитать веротность p(0) и сравнить с долей пользователей, которые сделали 0 покупок. (данных для других проверок у нас нет)
теоретические вероятности:
lambda1^0*exp(-lambda1) # with ads
lambda2^0*exp(-lambda2) # without ads
## [1] 0.938568
## [1] 0.9114669
доли пользователей, которые сделали 0 покупок:
round((18930-980)/18930,4) # with ads
round((16180-420)/16180,4) # without ads
## [1] 0.9482
## [1] 0.974
Как видим для первого случая эти числа практически равны, для второго тоже достаточно близки. Это подтверждает правильность нашего выбора распределения.
Рассчитанные для обоих случаев параметры lambda кроме того указывают среднее число покупок, совершенных одним пользователем. Для удобства можем говорить о среднем числе покупок, совершенных 100 пользователями, и мы видим, что в случае “A” 100 пользователей сделают 6 покупок, а в случае “B” 100 пользователей сделаю 9 покупок, т.е. в полтора раза больше.
Далее, проверим, как в первом разделе отчета, является ли это различие статистически значимым либо оно просто вызвано случайными колебаниями.
test <- poisson.test(x = c(1500,1200), T = c(16180,18930))
test$p.value
## [1] 6.615057e-23
Как видим различия статистически значимы (т.к. p-value<<0.05) и можно говорить, что в случае “B” пользователи делают покупок в среднем в 1.45 раза (доверительный интервал для этого коэффициента (1.35, 1.58))
Рассчитаем доверительные интервалы для оценок среднего числа покупок.
A:with ads
## [1] 0.05985509 0.06708217
## attr(,"conf.level")
## [1] 0.95
B:without ads
## [1] 0.08807432 0.09752021
## attr(,"conf.level")
## [1] 0.95
Как видим доверительные интервалы не пересекаются, что также подтверждает вывод о статистической значимости различий.
| group | Total New Users | Count in App Purchases | in App Revenue | Rate1=Revenue/Purchases | Rate2=Revenue/Users |
|---|---|---|---|---|---|
| A:with ads | 18930 |
1200 |
4200 |
3.5 | 0.22 |
| B:without ads | 16180 |
1500 |
3800 |
2.53 | 0.23 |
Замечание: in App Revenue - один из важнейших показателей и для анализа этого показателя необходимо иметь полные данные наблюдений, т.е. данные о платежах каждого пользователя, а не только агрегированные показатели. Подобные показатели как правило имеют распределения похожие на нормальное распределение, которое задается 2-мя параметрами - матожиданием и дисперсией. На основании имеющихся данных мы не сможем оценить дисперсию этой случайной величины, что критически важно для сравнения средних. Поэтому сделаем поверхностный аналлиз без проверки статистической значимости.
Итак, средний чек (см. Rate1) в случае “B” был ниже, чем в случае “A” - 2.5 vs 3.5, но выше мы обнаружили, что в среднем пользователи “B” совершали больше покупок и как результат (см. Rate2) - в среднем на одного пользователя “B” выручка была выше - 0,23 у.е. против 0,22 у.е. с пользователя “A”. Но, как сказано выше, проверить значимость этих различий мы не можем.
| group | retention 1 | retention 7 | retention 30 |
|---|---|---|---|
| A:with ads | 16.23% |
5.30% |
2.5% |
| B:without ads | 20.05% |
3% |
2.5 |
Судя по динамике показателя retention пользователи в группе “А” достаточно быстро привыкают к рекламе и отток падает. В конечном итоге через 30 дней нет различий по этому показателю. Кроме того, на 7-й день отток в приложении с рекламой даже ниже чем без рекламы.
Интересно рассчитать такой показатель как общее количество игровых дней по всем игрокам. (человеко-дней в игре). Для сравнения этого показателя можно рассчитать площадь под каждым из графиков ниже (это кусочно-заданные функции, в которых имеющиеся точки были соединены отрезками прямой)
Рассчитаем как различаются площади под графиком
s1 <- (16.23+5.3)*(7-1)/2+(5.3+2.5)*(30-7)/2 # вариант с рекламой
s2 <- (20.05+3)*(7-1)/2+(3+2.5)*(30-7)/2 # вариант без рекламы
round((s1/s2-1)*100)
## [1] 17
Как видим, в приложении с рекламой в течение месяца было проведено на 17% больше игровых дней. что на мой взгляд достаточно неожиданный результат.
Результаты:
1. Первый показатель в воронке продаж это конверсия в покупки Paying Users/Total New Users По данному показателю значительно лидирует варианта с рекламой - конверсия в этом варианте составила 5.18% против 2.6% для варианта без рекламы. Доверительные интервалы для обеих оценок (4.8%-5.6%) и (2.3%-2.9%) соответственно. Т.о. наличие рекламы срабатывало как побуждающий к покупке триггер.
2. Следующий показатель в воронке продаж - Count in_App Purchases/Total New Users. По этому показателю лучше сработал вариант без рекламы. Наш анализ показал, что без рекламы пользователи совершали в 1.45 раз больше покупок, т.е. были больше вовлечены в игру. Как объяснить такое поведение? Есть два соображения:
а) пользователи играя без рекламы не имели дополнительного отвлекающего баннера и больше вовлекались в игру. Хотя анализ показателя retention говорит не в пользу данного предположения
б) как мы видели реклама в приложении лучше мотивировала к первой покупке, т.е. цепляла аудитории, но ненадолго, в отличие от приложения без рекламы, которое цепляло реже, но сильнее.
3. Один из основных показателей в воронке продаж - это доход на одного пользователя in_App Revenue/Total New Users, но нельзя сказать достоверно, какой вариант A или B лучше, т.к. недостаточно данных для статистической проверки различий.
4. Надо также упомянуть, про такой неучтенный в анализе показатель, как доход с рекламы, возможно пользователи с рекламой сделали немало переходов по рекламных баннерам (и принесли доход, если схема оплаты cpc), но при этом чаще отвлекались от игры чем и вызвано падение среднего числа покупок.