Я твой продукт анализировал – Telegram
Я твой продукт анализировал
1.69K subscribers
103 photos
9 videos
2 files
51 links
Про продуктовую аналитику в IT, мысли, методы анализа и алгоритмы. Всё, что ты хотел знать, но стеснялся спросить.

ЛС тут: @de_kn
Download Telegram
📌 7. T-тест

Вот мы и добрались до самого теста

Он довольно простой. Нулевая гипотеза в обоих вариантах одинаковая: средние значения в двух группах равны. Т.е. нам бы хотелось эту гипотезу отклонить (p-value < 0.05) и показать всем что наш тестовый вариант статистически значимо отличается от контрольного.

# Расчет t-теста Стьюдента
t.test(metric ~ var, data = df, var.equal = T)

# чтобы переключиться на Уэлча, замени в var.equal T на F


from scipy.stats import ttest_ind

# Расчет t-теста Стьюдента
group1 = df[df['var'] == 'A']['metric']
group2 = df[df['var'] == 'B']['metric']

t_stat, p_value = ttest_ind(group1, group2, equal_var = True)

# чтобы переключиться на Уэлча, замени в equal_var True на False


Чтобы сделать твой отчёт более важным и профессиональным, можно добавить визуализации и дельты.

Дельты это разницы метрик по итогам теста. Например ты тестировал вырос ли средний чек. Посчитай его на варианте A и на B, разница тут и будет дельтой. А лучше в проценты переведи, продактам такое нравится 🙂

Главное самому не обмануться — дельты, полученные по итогам теста вообще ничего не прогнозируют. Если ты получаешь стат. значимый рост метрики в +30%, это не значит что раскатив вариант, у вас бизнес вырастет на 30%. Это просто саммари по итогам конкретного теста, в конкретный период, на конкретных юзерах.


А то потом придёт продакт через месяц и будет спрашивать, как так, 30% же было, где они?

Для визуализаций вариантов подходят чарты, которые хорошо показывают разбросы данных, например:

Боксплоты
Диаграмма плотностей
Наложенная гистограмма
График доверительных интервалов

Что они из себя представляют можно посмотреть в картинках к посту.

#ABtest
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥1
📌 8. T-тест. Интерпретация теста

Вдогонку к предыдущему посту, будет не лишним немного рассказать как интерпретировать T-тест.

Пост для любителей разобраться чуть глубже.

Базово его результат выглядит как-то так:

Two Sample t-test

data: money by var
t = -14.679, df = 998, p-value < 2.2e-16
alternative hypothesis: true difference in means between group A and group B is not equal to 0
95 percent confidence interval:
-10.869281 -8.305884
sample estimates:
mean in group A mean in group B
15.49617 25.08376


🧐 Что тут происходит?

t. Это значение t-критерия, по которому вычисляется p-value. То, что значение отрицательное, означает что среднее группы A меньше среднего B.

df: Степени свободы. Они нужны для расчёта t-критерия.

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

95% доверительный интервал: Доверительный интервал для различия средних значений находится между -10.8 и -8.3, со знаком минус. Т.е. с 95% уверенностью можно сказать, что среднее значение группы B выше среднего значения группы A на величину от 8.3 до 10.8.

Оценки выборочных средних: Среднее значение для группы A составляет 15, а для группы B - 25. Та самая средняя дельта.

#ABtest
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥3
t_test_sample_data.csv
2 KB
📌 9. T-тест. Задача

T-тест, наверное, один из самых популярных методов расчёта АБ-тестов. Его используют почти все команды, где работа над экспериментами не вынесена в отдельное подразделение.

У этих, конечно, всё серьезнее 🙂

Умение правильно считать T-тест это хороший базовый скилл, которым должны обладать все аналитики, продуктовые в особенности.


Для закрепления и тренировки, вот вам выгрузка данных по тесту с ёлками.

Можете сами посчитать и попробовать сделать свои выводы.

Если будут возникать вопросы, пишите в комменты или напрямую мне, разберёмся 🙂

#ABtest
🔥7👍1
📌 Как запускают тесты

На прошлой неделе было много технической базы, на этой будет поменьше 🙂

А пока прервёмся на что-то попроще. Давай порассуждаем как вообще происходит запуск теста в команде. Рассмотрим пример компании, где тесты плюс-минус поставлены на поток.

Всё начинается с идеи. Как я уже говорил, идеи приходят от команды или рождаются в процессе исследования продукта и поведения юзеров.

Чтобы идея превратилась в аналитический артефакт, с которым можно работать, её нужно задокументировать. Так она становится гипотезой. Для ведения документации, я обычно создаю отдельную ветку в confluence (скорее всего у тебя в команде он тоже есть).

Далее, если нужно, ты идёшь к продакту и вы выдаёте задачу дизайнеру на разработку тестового варианта.

Когда у тебя появляются картинки, ты идёшь в свою сплит-систему и создаёшь тест. В любой системе, кастомной или сторонней, обычно нужно завести ID теста/вариантов и описания вариантов.

После этого нужно поставить задачу на разработку. В задаче нужно оставить ID теста и вариантов, продублировать описание вариантов, приложить картинки. Чем более полно ты опишешь задачу, тем больше вероятность получить то что заказывал.

Когда тест запустят на стороне разработки, обязательно сверься с базой и убедись что всё летит как надо (скорее всего у тебя в БД есть таблица типа ab_test, где хранятся данные по юзерам, тестам и вариантам).

Для проверки, построй небольшой дашборд, в котором будут графики с распределением юзеров по вариантам, убедись что сплитовалка раскидывает юзеров равномерно (если это не Байесовские бандиты, конечно).

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


Но т.к. АБ — это твоя территория, тебе и менеджерить весь процесс 🙂
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥1
В Белграде Coca-Cola вчера раздавала новогоднее настроение и бургеры деда Мороза) 🎄
🎉7🔥1
📌 10. Биномиальные тесты и тесты пропорций

Продолжаем обсуждать методы расчёта АБ-тестов, менее популярные, но для общего развития — полезные.

Иногда данные для теста не агрегированы вокруг какого-нибудь периода, а подчиняются биномиальному распределению (сэмпл данных выглядит так: 0, 0, 1, 0, 1, 1 и тд, где 0 - не было события, 1 - было).

Такие данные бывают при расчётах, например, конверсий.

Для расчёта биномиальных тестов используют 2 популярных подхода:

Z-тест. Сравнивает доли успехов в биномиальных данных. На малых выборках критично нормальное распределение.

Критерий Хи-квадрат. На биномиальных данных сравнивает частоты выпадения категорий.

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


Оба теста можно считать как напрямую из данных (рассчитав пропорции и стандартные ошибки), так и сгруппировав их в таблицу сопряженности:
# создание таблицы сопряженности
table <- table(df$var, df$metric)

n <- colSums(table) # вычисляем суммы по каждому варианту
x <- table[, 2] # вычисляем количество единиц в каждой группе

# z-тест
prop.test(x, n)

# хи-квадрат
chisq.test(table)


import pandas as pd
from scipy import stats
from statsmodels.stats.proportion import proportions_ztest

# создание таблицы сопряженности
table = pd.crosstab(df['var'], df['metric'])
n = table.sum(axis=1).values # вычисляем суммы по каждому варианту
x = table[1].values # вычисляем количество единиц в каждой группе

# z-тест
z_test = proportions_ztest(x, n)

# хи-квадрат
chi2_test = stats.chi2_contingency(table)


#ABtest
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥2
📌 11. Bootstrap 🔥

Однажды на собесе меня спросили “если бы ты выбирал только один метод расчёта АБ-тестов, что бы это было?” — не сомневаясь ни секунды я ответил — бутстрэп.


По теории некоторых классических расчётов АБ мы пробежали, а теперь посмотрим на короля среди методов рассчётов.

Это не самый популярный метод — и очень зря.

Главный плюс бутстрэпа — отсутствие ограничений. Ему абсолютно всё равно какое там у тебя распределение или дисперсия. Он прекрасно справляется с любой задачей, а его точности позавидуют классические методы.

Единственный минус — он требует просит больших выборок. Оценить твоих 100 человек он, конечно, сможет, но здесь это не лучший подход. Но и не слишком огромных, сэмпл из миллиона строк тут тоже не лучший вариант. Скоро поймёшь почему.

🧐 Бутстрэп — это статистический метод, который используют для оценки свойств параметров и распределений. Его часто применяют для оценки стандартных ошибок и доверительных интервалов различных статистик (среднее, медиана, доля и тд).

Метод основан на идее повторного использования существующих данных для генерации большого числа псевдовыборок:

1️⃣ Из исходной выборки создается большое количество новых выборок заданного размера. Каждая выборка формируется путем случайного извлечения элементов из исходной выборки с возвращением.

2️⃣ Для каждой псевдовыборки вычисляется интересующая статистика (например, среднее значение или дисперсия). Это дает распределение статистик, которую мы уже используем как нам нужно.

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

‼️ Я накидал тебе shiny-приложение по бутсрэпированию разницы метрик. Оно генерит сэмплы на варианты и считает разницу средних, и так много раз. А потом вычисляет p-value для проверки стат. значимости. Подойдёт для стандартных АБ.

Эксклюзивно для подписчиков канала 😀

Можешь проверить на задаче по T-тесту (сэмпл данных можно скачать прям в приложении), а потом использовать в работе 😉

#ABtest #инструменты
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥2
А хотите разбавим ленту лонгридом как я вкатывался 300 лет тому назад? Покекать с тогдашних реалий, погрустить с реалий нынешних.

Ставь 👍 если да и 😐 если понимаешь, что я всё равно выложу
👍24😐7😁1
📌 Как я "вкатился"

Кулстори как я врывался в этот ваш ИТ.

Присаживайтесь поудобнее, мы тут надолго 😅

Мой карьерный путь начался после ухода со специальности “Электростанции” Энергетического факультета, в качестве электрика в 2010-м. В электрике я задержался недолго, и по какому-то стечению обстоятельств меня занесло в монтаж оптоволокна к одному подрядчику Ростелекома. Там меня определили спайщиком. Работа была интересная, Fujikura в сердечке ❤️

Но как-то, сидя зимой на какой-то крыше и распаивая кросс, за 15к рублей в месяц, я подумал о работе в офисе. А чё, сидишь там, кофе пьёшь в тепле. Кайф. Погуглил что там доступно у нас в городе, и принял решение попробовать этот ваш ИТ. В то время диковинный.

В коммерческую аналитику я пошёл не сразу, до этого начинал с фронт-энда, который в те времена назывался просто вёрсткой. Учился я на это дело по видосам и статьям в интернете, не долго, месяц может. Это вам не современные реактивные фреймворки, тогда самой крутой технологией был jQuery, а для крепкого фуллстека было достаточно знать HTML, CSS, JS и PHP.

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

Как-то я смотрел какой-то видос из блога AIC, это был ролик с Виталиком Черемисиновым. Он там дико грузил терминами и до меня дошло — аналитическое сопровождение вашего сайта! Гениально. Это ж не продукт полноценный, подумал я, че там делов-то, прикрутил метрику, конверсии туда-сюда, изи. И так, в общем-то и было. Клиенты знать не знали про такие чудеса, а когда мы просто прокатывали рандомные АБ-тесты через калькуляторы, да ещё и умудрялись растить там какие-то циферки, они были довольны.

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

Когда я понял, что хотел бы заниматься аналитикой официально, погуглил вакансии и нашёл одну продуктовую компанию, которым как раз нужен был аналитик. Написал им большое письмо на почту со своей историей, и они с удовольствием закинули мне тестовое — посмотреть их CJM и порекомендовать доработки (тогда вот такая жесть была, да). Ну а я то чё, я ж в студии чем только не занимался, чё мне ваша CJM. Накидал каких-то мыслей и отправил обратно.

Меня приняли тут же. Оказалось, мой отклик был у них вторым за 2 месяца, а первым был дизайнер, который спросил что такое CJM.

На работе никто понятия не имел зачем я нужен. Да и я тоже не особо. Пилил какой-то дашборд в амплитуде, ходил по офису с важным видом, сыпал терминами типа “выборка” и “распределение”, ловил за это восторженные взгляды и учил R по книге великого Хэдли Уикема. За бешенные деньги тогда, 50к рублей.

О питоне в то время и речи не шло, он не был привычным языком аналитиков на Руси. Да, всякие numpy-scipy появились в 2006-2008, но популярными у нас они стали сильно позже. Я так и вообще не слышал о таких, хотя целенаправленно копался в той части интернета.

А потом начали набирать популярность всякие курсы. Мне очень помог в своё время курс скиллбокса “UX-аналитик”, он вышел одним из первых. Вели его нынешние отцы EXPF — Искандер Мирмахмадов и всё тот же Виталик Черемисинов. Не то чтобы курс был крутым и полным, наоборот, одна тема — один видос на 10 минут. Но он задавал вектор. Видишь тему — гуглишь книгу.

Я даже как-то написал письмо в AIC типа вот он я, хочу к вам, но на тех собесе Виталика впечатлить не удалось. Зато мы прекрасно поболтали и он накидал тонну фидбека, с которым я перешёл к дальнейшему развитию более структурно.

#кулстори
🔥23👍41🤔1
This media is not supported in your browser
VIEW IN TELEGRAM
😁13
📌 12. Метод доверительных интервалов

Разберём ещё один метод расчёта АБ и потихоньку будем завершать вводную часть по этой теме.

Классический метод, который на практике я встречал не часто — оценка через доверительные интервалы (CI, confidence intervals). Он простой, хоть и не самый надёжный такой реализации.

Да, технически, интервалы в расчётах АБ заложены везде. Мы же поговорим о классике, когда построение CI это самоцель.

🧐 CI — это диапазон значений, в котором, с определённой вероятностью, находится истинное значение параметра.

Если CI выборок не пересекаются, то это означает стат. значимость в различиях (технически, среднее одной выборки не должно лежать в интервале второй, но на цифрах интервалов мы среднего не видим)

Ограничение: CI предполагают нормальные распределения выборок и теряют в точности на малых выборках.

Пример реализации метода:
# Заводим функцию для расчёта CI
calc_ci <- function(df, cl = 0.95) {
mean_metric <- mean(df$metric) # считаем среднее
std_error <- sd(df$metric) / sqrt(nrow(df)) # считаем стандартную ошибку
error_limit <- qt(cl / 2 + .5, df = nrow(df) - 1) * std_error # считаем предел погрешности
lower <- mean_metric - error_limit # считаем нижнюю границу интервала
upper <- mean_metric + error_limit # считаем верхнюю границу интервала
return(c(lower, upper))
}

# Считаем CI для групп
ci_A <- calc_ci(df %>% filter(var == "A"))
ci_B <- calc_ci(df %>% filter(var == "B"))


# Заводим функцию для расчёта CI
def calc_ci(df, cl = 0.95):
mean_metric = np.mean(df['metric']) # считаем среднее
std_error = np.std(df['metric']) / np.sqrt(len(df)) # считаем стандартную ошибку
error_limit = stats.t.ppf(cl / 2 + 0.5, df = len(df) - 1) * std_error # считаем предел погрешности
lower = mean_metric - error_limit # считаем нижнюю границу интервала
upper = mean_metric + error_limit # считаем верхнюю границу интервала
return lower, upper

# Считаем CI для групп
ci_A = calc_ci(df[df['var'] == 'A'])
ci_B = calc_ci(df[df['var'] == 'B'])


#ABtest
👍4
📌 13. Парадокс Симпсона

Как-то я проходил собес и мне задали вопрос:

- Доводилось ли тебе иметь дело с парадоксом Симпсона?


Я немного подумал и вспомнил пример из теста в моей практике.

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

Всё бы хорошо, но заказчик решил посмотреть его в разрезе платформ. Проблема была в том, что аудитории платформ (iOS vs Android) у нас были неравномерные, одной группы было сильно меньше.

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

Этот явление и есть парадокс Симпсона.

По смыслу он немного похож на "Эффект чирлидерш" от Барни Стинсона из HIMYM (if you know — you know).

Я не очень часто с ним сталкивался, во многом потому что сегментация по итогам теста не самое популярное развлечение.

Как его обойти?

🧐 Есть такая штука теорема “Принципа уверенности”, которая утверждает, что, если действие увеличивает вероятность события в каждой группе в отдельности, оно также увеличивает вероятность события во всей популяции.

В соответствии с этой теоремой, я вывел для себя два правила, которых стараюсь придерживаться:

Не сегментировать результаты теста. Этот вариант подходит чаще всего, когда сегментация не несет существенного значения для анализа.

Сегментировать заранее. Если всё же сегментация нужна, то стоит убедиться что группы будут сбалансированы. В идеале равные размеры выборок, но это скорее пожелание, чем правило. Другое дело — размеры выборок минимального сегмента. Если они слишком малы (например, у нас почти нет Android-юзеров), мы можем потерять в стат. мощности.

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

#ABtest #собесы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥1
📌 14. Нестандартные тесты

В завершении цикла про АБ, будет полезным рассказать про некоторые их нестандартные вариации. Или другие типы тестов. Кому как нравится, я их условно разделил.

К первой вариации я бы причислил AB/n-тесты. Это расширенная версия АБ, когда в сравнении участвуют 3 и более вариантов. Самый частый метод расчёта таких тестов — дисперсионный анализ (ANOVA).

Ещё отдельно я бы вынес непараметрические тесты. Технически, это те же самые АБ (AБ/н), но методы их расчёта не делают предположений о распределении, как это делают параметрические тесты. К таким методам можно отнести критерии Манна-Уитни или Краскела-Уоллиса (такой непараметрический аналог ANOVA, когда вариантов 3 и более).

И нельзя не упомянуть Байесовских бандитов. В этих тестах алгоритм динамически “приспосабливается” для определения эффективного варианта, при постоянном обновлении данных. В отличии от АБ, где оба варианта наполняются на протяжении всего теста, бандиты постоянно обновляют вероятность выбора каждого варианта. За счёт этого они более гибкие в быстро меняющихся условиях.
Я довольно часто встречал их у ребят из маркетинга, на тестировании креативов, или в CPA на каналах. А вот в классической продуктовой аналитике почти не видел.

Можно ли успешно работать продуктовым аналитиком без этих тестов? Да легко. Но попробовать, хотя бы в образовательных целях, никогда не лишнее 🙂

#ABtest
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
📌 Испытательный срок

Вот ты прошёл собес и вышел на работу. На первую или на новую, не важно. Что вообще делать во время испыталки?

У каждой, уважающей себя, компании, новички проходят онбординг, когда тебя знакомят с продуктом и инструментами. Давай разберёмся, на что обращать внимание.

Практически сразу же тебе выдадут доступы для работы — в слак, таск-трекер, сервис по хранению документации, BI-систему и главное — к базам данных.

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

В первую очередь тебе нужно изучить продукт. Потыкай там всякие кнопочки, посмотри что как работает. Пообщайся со своим куратором и попытайся понять как устроен бизнес, какая система монетизации продукта и т.д.

Удели внимание метрикам. Скорее всего в твоём продукте уже есть какая-то карта метрик, что из чего состоит и как считается. Даже такая простая штука как DAU в разных компаниях или даже отделах может считаться по разному: у продукта — зареганые уники, у маркетинга — визиты. Попытайся сопоставить экономику с метриками и понять, что больше драйвит бизнес. Иерархия метрик довольно удобная штука, потом будешь использовать её для планирования гипотез.

Когда поймёшь как устроен продукт, можно и в инструментарий погрузиться. Удели особое внимание знакомству с данными. Попроси инженеров рассказать что как куда летит, что с фронта, что с сервера. Изучи основные таблицы, с которыми придётся работать (обычно таблицы по транзакциям, юзерам и событиям).

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

На испыталке никто не ждет от тебя инициативы или геройства. Твоя цель — погрузиться и ничего не испортить. Бюджет на найм в разы больше твоей зарплаты. Никому не хочется тебя выгонять. Не давай повод и ты успешно справишься ❤️
Please open Telegram to view this post
VIEW IN TELEGRAM
👍155
Закон Тваймана — возможно, самый важный закон во всём анализе данных. Чем необычнее или интереснее данные, тем больше вероятность, что они получены в результате ошибки того или иного рода.

— Формулировка закона Тваймана от К. Марш и Д. Эллиотт

Это закон про интересную особенность аналитиков — когда твоё исследование приводит к сильным положительным результатам, ты радуешься и спешишь поделиться со всеми, показать прорыв. Но если результат резко отрицательный — стараешься найти ошибку.

Я раньше часто так делал, наверное, чтобы показать свою ценность. Со временем всё реже и реже, пока в голове окончательно не улеглась мысль о том, что у меня нет цели гоняться за прорывами. Суть моей работы не в том, чтобы порадовать заказчика, а в том, чтобы предоставить ему объективную картину. И лучше дважды перепроверить, чем ошибочно обнадежить 🙂

#funfact
👍18🤔21
🔗 Руководство по проведению анализа и продуктовых исследований

Приветики, вчера ничего не выкладывал, потому что заканчивал вот эту статью про процесс организации продуктовых исследований, как это делаю я.

Хоть и получилось объёмно, всё равно в теме очень много нюансов и мест для манёвра. Но основной флоу описать получилось.

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

Приятного прочтения 🍿

https://habr.com/p/781466/
18👍7
Вы, наверное, уже нарешали миллион всяких тренировочных задачек, а хотите боевую?

Прилетела сегодня из маркетинга. В общих чертах задачка про моделирование.

📎 Вводная: Маркетплейс, там ты можешь заказать всякие товары с доставкой. Цена доставки не фиксирована и зависит от кучи разных факторов (загруженность курьеров, расстояние и т.д.). Планируется выделять деньги для покрытия части цены доставки, чтобы она была привлекательнее для клиента. К тому же, если цена доставки будет ниже, мы можем увеличить конверсию в покупку.

📎 Дано: Опытным путём установлено, что комфортная цена — N (известно). Мы готовы выделять M денег на один заказ (не известно), сколько это — зависит от итогового бюджета, который тоже не известен. Мы будем брать в эту программу компенсации только те заказы, где при добавлении к расчётной сумме из M столько денег, чтобы получить N в итоге. Если сумма сильно больше N (и даже вся M не поможет прийти к N), мы игнорируем такие заказы.

Чем больше M, тем больше заказов будут смотреться выгоднее и тем больше конверсия в покупку, но тем выше итоговый бюджет на всё это дело, т.к. количество заказов растёт. Снижая M, мы уменьшаем конверсию и тотал заказов, снижая бюджет.

💛 Что нужно на выходе: Нужна модель, которая вычислит оптимальный баланс размера M, бюджета и ожидаемой конверсии. Сроки как обычно, вчера, поэтому имплементировать какого-нибудь Байеса или NLP не вариант, максимально быстрая реализация в небольшой ущерб точности.

Нестандартная задачка, как мы любим, размять мозги 🧐
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🤔3
Я твой продукт анализировал
Вы, наверное, уже нарешали миллион всяких тренировочных задачек, а хотите боевую? Прилетела сегодня из маркетинга. В общих чертах задачка про моделирование. 📎 Вводная: Маркетплейс, там ты можешь заказать всякие товары с доставкой. Цена доставки не фиксирована…
Расскажу в какую сторону мы пошли.

🔖 Для начала определяем то, что можем определить. У нас есть прогноз траффика на период и история заказов с ценами на доставку.

🔖 Из исторических цен строим гистограмму, как x0 берем наш N, крайний порог x1 вычисляем на глаз — режем выбросы, распределение получается плюс-минус колоколообразным, режем по 2-3 сигмам. Это крайнее значение фиксируем как x1. Мы назвали этот интервал слоном (не спрашивайте).

🔖 Выделяем интеграл от слона, распределяем по гистограмме ещё раз, для удобства. Каждый бин гистограммы это некая категория, в которую, с определённой вероятностью может попасть какая-то цена. Считаем вероятности каждого бина, в сумме это 1 — это будут наши веса. Зная миддл бина и его вес, можем посчитать взвешенную среднюю цену в диапазоне x0-x1. Или вычесть заранее из каждой цены N — это будет взвешенная средняя сумма субсидии.

🔖 Теперь конверсии. Для начала строим линейную модель регрессии (или предсказательную модель, у нас и регрессия и RF плюс-минус выдали похожую точность), чтобы найти взаимосвязь между конверсией и стоимостью доставки. Получается скошенное вправо распределение. Его так же делим на бины, таким образом, что зная средневзвешенную стоимость, мы можем по графику отследить какая конверсия там может быть.

🔖 Зная прогнозируемый траффик, взвешенную цену и конверсию, можем прикинуть бюджет.

Бетка модели готова. Теперь изменяя x1 ("худея" слона) на какой-нибудь шаг, мы можем пересчитывать все остальные показатели. Таким образом мы получаем какое-то множество результатов, которое уже можно визуализировать или прогнать какой-нибудь моделью, в поисках подходящего.

Не то чтобы решение получилось самое изящное из возможных, но в условиях сроков вполне рабочее 🙂
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7