Заскуль питона (Data Science)
6.15K subscribers
109 photos
15 videos
4 files
142 links
Канал про Python, Data Science, SQL и многое другое

По вопросам сотрудничества и рекламе: @m459n9

Чат: https://t.iss.one/my_it_frogs
Download Telegram
🤓 Нашел классный материал по Causal Inference и A/B тестам на просторах интернета на английском языке. В целом, есть примеры, формулки, можно самому что-то запрогать. Тут от обычной статистики до продвинутых методов, на досуге можно глянуть. Есть часть глав недописанных, например девятая, в остальном все гуд. К прочтению или ознакомлению советую. Как мне показалось, не совсем полно написано про Variance Reduction, хотелось бы видеть больше методов. Гайд 2021 года, но всеми любимый CUPED не забыли.
Please open Telegram to view this post
VIEW IN TELEGRAM
18🔥53🐳1🍓1🦄1👾1
VWE (Variance Weighted Estimator) - как еще один метод снижения дисперсии.

🚙 Зачем это нужно?

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

💡 Основная идея

Дать пользователям с меньшей дисперсией метрики больший вес для снижения общей дисперсии эффекта.

🖥 Как реализовать?

Предположим, мы хотим оценить ARPU и применить к выручке на пользователя для того чтобы снизить дисперсию. Основная реализация заключается в том, что мы смотрим на то, как изменялась метрика в предпериоде и тем самым мы знаем ее дисперсию и как следствие вес. Затем, мы берем вес для метрики на пользователя, равный 1 / дисперсию, тем самым становится очевидно, что при больших дисперсиях вес становится меньше и затем рассчитываем среднее в группе A и группе B. Код который можно реализовать у себя ниже при сплите 50 / 50 с историей в 21 день (это также можно поресерчить, например, если у нас есть бОльшая история по пользователям, будет меньшее смещение, как мне кажется). Чем-то похоже на стратификацию, где каждой страте мы присваиваем вес, только здесь вес рассчитывается на истории пользователя:

import numpy as np
import pandas as pd

n_users = 1000
days = 21
pre_experiment_revenue = np.random.normal(loc=5, scale=2, size=(n_users, days))

control_group_revenue = np.random.normal(loc=5, scale=2, size=500)
treatment_group_revenue = np.random.normal(loc=5.5, scale=2, size=500)

pre_experiment_df = pd.DataFrame(pre_experiment_revenue, columns=[f'day_{i+1}' for i in range(days)])
pre_experiment_df['user_id'] = np.arange(n_users)

experiment_df = pd.DataFrame({
'user_id': np.arange(n_users),
'group': ['control'] * (n_users // 2) + ['treatment'] * (n_users - n_users // 2),
'revenue': np.concatenate([control_group_revenue, treatment_group_revenue])
})

data = pd.merge(experiment_df, pre_experiment_df, on='user_id')
data['user_variance'] = data[[f'day_{i+1}' for i in range(days)]].var(axis=1)
data['weight'] = 1 / data['user_variance']
data['weighted_revenue'] = data['revenue'] * data['weight']


👎 Минусы VWE:

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

Необходима история по пользователям, должна быть богатая история по действиям, например, когда замеряем CTR
VWE требует значительного объема предэкспериментальных данных для точного расчета дисперсий и весов. В случае недостатка данных, результаты могут быть менее надежными

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

Можно использовать с CUPED с уже перевзвешенными значениями. В статье от Facebook удалось добиться следующих результатов по снижению дисперсии в %.

CUPED only - 37,24%
VWE only - 17,31%
CUPED + VWE - 48,38%


На стратификации не смотрели, как я понимаю, но можно было бы еще, наверное снизить либо есть какие-то ограничения про которые я не знаю. А с Ratio-метрикой так вообще прикол: линеаризируем, VWE, CUPED, стратификацию

Этот метод еще освещался на Avito Analytics Meetup + был разбор статьи на YouTube

😉 Ставьте реакции, если пост был полезен, пишите комментарии. Дальше разберем стратификацию и линеаризиацию
Please open Telegram to view this post
VIEW IN TELEGRAM
14🔥73👍1🐳1🦄1👾1
Иван Максимов | 13 способов ускорить А/В тест, или "Не CUPED-ом единым"

Длительность видео: 52:13

Слишком годное видео, чтобы не делиться. 2 года назад в ODS Тимлид из Деливери рассказывал про 🆎. Тут и бакеты затронули и параллельные тесты, и линеаризацию метрик и другие трансформации.

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

Ставьте реакции, пишите комментарии, все такое. А я пойду готовить пост о переходе в другую компанию 😐
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1697
This media is not supported in your browser
VIEW IN TELEGRAM
😠 вот ❤️

Всем привет! Да, я перехожу в Яндекс.Лавку продуктовым аналитиком, будет много рисерчей, исследований, A/B и прочего.

Хочу сказать спасибо команде в Ozon за предоставленную возможность развиваться, различные кейсы, сложности, очень ценю, всех люблю ❤️

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

Сейчас планирую отдохнуть от всей рабочей рутины, собраться с мыслями и выйти на новое рабочее место.

У меня были еще оферы, но решил отдать предпочтение именно ❤️ за потенциальную возможность роста, изучения чего-то нового и потенциального роста внутри компании. Конечно, как плюс, бейджик с 1000 рублями, приятно (не основной фактор 😬)

🍔 Ставьте реакции, пишите комментарии. Раньше, когда я переходил в 💙, оказывается, было очень много озончан, посмотрим сколько теперь тут яндексоидов 🦆
Please open Telegram to view this post
VIEW IN TELEGRAM
60👍18🔥84😱2🤡2👾21😁1🍓1😎1
Causal Inference from Observational Data, или как провести А/В-тест без А/В-теста.

В данной статье рассмотрены различные методы Causal Inference без проведения 🆎

Это и матчинг, и propensity score, diff-in-diff, Time-Series, IPW, RDD и другие.

Раскидано очень много материалов в статье + есть различные кейсы применения.

Например, один из таких - это про третью переменную, конфаундер, которая опровергает ложную зависимость между двумя.

Ссылки на ноутбуки

Я уверен, что буду возвращаться к это статье не один раз, так как материалов слишком много и всё написано достаточно приятно.

А вы видели эту статью? Пишите в комментариях 😑
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥933🆒1🦄1👾1
Подкаст: Единая A/B платформа, её плюсы, плюсы и подводные камни

Про 🆎 платформу в 💙, зачем она нужна, как устроен процесс валидации в 💙, что занимает больше всего времени, исследования, ошибки, множественные тестирования, про регламент, метрики, процесс становления платформы, MDE и др.

😯 У ребят есть собственный критерий для расчета множественного тестирования. Сейчас в ручном формате все рассчитывается

Как качественно понять, что A/B платформа лучше компании аналитиков без A/B платформы?


❤️ Рассказали про Hold-out, глобальный контроль пользователей на квартал. Необходим для честной оценки эффектов на всех A/B тестах (про это говорили на aha’24)

Что делать, если ты не бигтех-компания, но ты хочешь data-driven? Какие варианты для меня? Нужна ли мне продуктовая история?


A/B платформа будущего? Не сузится ли она до локального применения в каждом домене?


🤸 Цитатами я выделял интересные вопросы, которые могут быть полезны и вам.

Если вы хотели понять всегда как устроена 🆎 платформа изнутри, к прослушиванию.
Please open Telegram to view this post
VIEW IN TELEGRAM
107🔥5👍1
😂 статистика интересная штука. Нормальные распределения, критические области доверительные интервалы и всё.

but...
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20😁1311🤡3💅2🤬1
Так-с, пока я вливаюсь в рабочие процессы Яндекс 💙 Лавки, пишите, что хотите видеть тут, в каком направлении в дальнейшем. Возможно, какие-то продуктовые кейсы, теоретическое, возможно разбавить определенным лайфстайлом.

Пока кидаю классный тренажер от 😀 (типа симулятор). Там есть различные разделы по типу аналитика данных, машинное обучение. Так что на выходных можно пройти 😼
Please open Telegram to view this post
VIEW IN TELEGRAM
35🔥6
Видели уже новый ребрендинг СберМаркета? Что думаете?

«Купер»

🏦 «От слова купить»

Пост РБК
ТАСС
Please open Telegram to view this post
VIEW IN TELEGRAM
🥴50🤔8🤡7😱3🎃2👍1🔥1🤣1
Это должен быть 💙, но…
Please open Telegram to view this post
VIEW IN TELEGRAM
😁39💅10💔61👍1🔥1
Уже видели перфоманс? 💙
Я считаю, что это взаимный маркетинг для обеих компаний. Вообще шикарно, будем ждать ответочку Лавки (или нет)
Please open Telegram to view this post
VIEW IN TELEGRAM
52🔥74🤣2
Закажу пожалуй себе доставку домой, нормальная тема ❤️

Я думал, что машины - это максимум, но нет, возьму себе с аванса или в рассрочку, пока не придумал 🙊

Линк на товар
Please open Telegram to view this post
VIEW IN TELEGRAM
😎24😁104🤷‍♀1🤡1🤣1
Заскуль питона (Data Science)
🆎 CUPED как метод сокращения дисперсии для проведения A/B экспериментов. 🤭 Всем привет! В этом посте хочу рассказать о том что такое CUPED, зачем он нужен? 🤩 CUPED (Controlled-experiment Using Pre-Experiment Data) - один из методов сокращения дисперсии при…
Возвращаемся к CUPED.

Видите, что тут есть поправка на среднее значение ковариаты. Чисто интуитивно на больших данных мы можем делать поправку на среднее значение ковариаты метрики, но по факту это делать некорректно с точки зрения математики, т.к. истинного матожидания генеральной совокупности мы не знаем, мы оперируем значением выборки, про это кстати говорилось на одном из курсов по A/B (увидел в чатиках).

Отсюда вопрос, как можно корректно оценивать метрику CUPED? Относительно чего считать относительное MDE? При расчете MDE мы тоже используем стандартное нормальное распределение, хотя должны использовать по-хорошему t-распределение.

Тогда еще один вопрос, зачем проводить тесты, если можно взять просто значения средних и сравнивать? Можете запустить симуляцию и проверить. В некоторых компаниях есть ограничения к MDE (если у метрики он большой, значит выбираем другую метрику). К абсолютному MDE вопросов нет, мы не используем среднее, а дисперсии у метрик CUPED равны. Как раз это возникает еще из-за того, что мы берем значение ковариации и дисперсии выборочно. В реальном же мире мы не знаем истинного значения матожидания ковариаты, поэтому поправка, с точки зрения математики неверна.


import numpy as np
from scipy.stats import norm

def generate_data(sample_size, corr, mean=2000, sigma=300):
"""Генерируем коррелированные данные исходной метрики и ковариаты.

sample_size - размер выборки
corr - корреляция исходной метрики с ковариатой
mean - среднее значение исходной метрики
sigma - стандартное отклонение исходной метрики

Возвращает:
'metric' - значения исходной метрики,
'covariate' - значения ковариаты.
"""
np.random.seed(1337)
means = np.array([mean, mean])
cov = sigma ** 2 * np.array([[1, corr], [corr, 1]])
data = np.random.multivariate_normal(means, cov, sample_size).astype(int)
metric, covariate = data[:, 0], data[:, 1]
return metric, covariate

def get_theta_for_cuped(values, covariate):
'''Функция получает значение theta
values - значения
covariate - значение ковариаты
Возвращает:
theta - значение theta'''
import numpy as np

cov = np.cov(values, covariate)[0][1]
var = np.var(covariate)
theta = cov / var
return theta

def get_mde(values, alpha = 0.05, beta = 0.2):
'''На вход получает значения метрики
На выходе
mde_abs - абсолютный MDE
mde_rel - относительный MDE'''

std = np.std(values)
mu = np.mean(values)
sample_size = len(values)

f = norm.ppf(1 - alpha / 2) + norm.ppf(1 - beta)

mde_abs = 2 * std * f / np.sqrt(sample_size)
mde_rel = mde_abs / mu * 100

return mde_abs, mde_rel

corr = 0.6
values, covariate = generate_data(20000, corr)
print(f' Коэффициент корреляции - {np.corrcoef(values, covariate)[0][1]}')
theta = get_theta_for_cuped(values, covariate)

print('')

cuped_metric = values - theta * covariate
cuped_metric_with_mu = values - theta * (covariate - np.mean(covariate))

print(f' Стандартное отклонение метрики - {np.std(values)}')
print(f' Стандартное отклонение CUPED метрики - {np.std(cuped_metric)}')
print(f' Старндартное отклонение CUPED метрики с поправкой - {np.std(cuped_metric_with_mu)}')
print('')
print(f' Среднее метрики - {np.mean(values)}')
print(f' Стандартное отклонение CUPED метрики - {np.mean(cuped_metric)}')
print(f' Старндартное отклонение CUPED метрики с поправкой - {np.mean(cuped_metric_with_mu)}')


mde_standard_abs, mde_standard_rel = get_mde(values)
mde_cuped_abs, mde_cuped_rel = get_mde(cuped_metric)
mde_cuped_with_mu_abs, mde_cuped_with_mu_rel = get_mde(cuped_metric_with_mu)

print('')

print(f' Абслютный и относительный MDE метрики {float(mde_standard_abs), float(mde_standard_rel)}')
print(f' Абслютный и относительный MDE CUPED метрики {float(mde_cuped_abs), float(mde_cuped_rel)}')
print(f' Абслютный и относительный MDE CUPED метрики с поправкой {float(mde_cuped_with_mu_abs), float(mde_cuped_with_mu_rel)}')


А что думаете вы? Ставьте реакции, пишите комментарии!
17🔥6👍4🤯3🤡2
блинб, такое ощущение, что нужно начать выкладывать какие-то посты про рабочие процессы и отойти от технической составляющей на какое-то время. Если так думаете, ставьте реакции, чего-нибудь придумаем про то, как я вливаюсь, что делаю и т.п. 🙊
Please open Telegram to view this post
VIEW IN TELEGRAM
60🔥26🌭6🥱4😁2😢2🐳2👨‍💻2👾2
Как проходит мой испытательный срок в Яндекс 🍫 Лавке?

Всем привет! Если говорить в общем, я жив. Если чуть глубже, то мне очень нравится то, чем занимаюсь сейчас. Изначально, я приходил из 💙, редко задумываясь над тем, а как вообще ведет себя пользователь, что ему нужно у нас и как мы можем повлиять на бизнесовые, продуктовые метрики. Напомню, что ранее я работал в направлении продавцов и коммерции OZON СНГ. Сейчас я отвечаю за различные интеграции, экосистемные подходы в Лавке. Если говорить про функционал, я немножко прифигел с того, что продукт неразрывно связан с аналитикой, так и должно быть, но, возможно, это специфика продуктовых аналитиков, точно сказать не могу. Можно предложить различные гипотезы, обосновав их как-то на цифрах и уже в дальнешйем связать с продуктом, весьма классно! 😏

Еще доставляет то, что у Яндекса есть свои решения, используемые внутри. Взять тот же YQL, который используется для написания различных запросов + можно сразу в нем написать код на Python, что удобно, ты не будешь думать над тем, что по памяти где-то не пройдешь. Nirvana, используемая для оркестрации задач с понятным UI интерфейсом и различными сценариями. Python по-прежнему остался, можно что-то поделать в том же VS Code, Jupyter тетрадках 🥲

А еще тут очень много интересных ивентов, нетворкинг, ну и конечно же бейджик с компенсацией питания, как без него. Представьте, вы сидите на рабочем месте, хотите затестировать какой-то функционал на проде, просто берете, заказываете еду из Лавки, вам ее доставляют. Буквально можно пройти полный путь клиента, отловить различные проблемы и поесть нормально! 👍

Посмотрим, что будет со мной еще через какое-то время, но пока так. Помните свой испытательный срок в последней компании? Как это было, какие эмоции испытывали? Пишите в комментариях! 😎
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥297😍5👍1🖕1
This media is not supported in your browser
VIEW IN TELEGRAM
POV: когда пройду испытательный срок 👻
Please open Telegram to view this post
VIEW IN TELEGRAM
😁42🔥54🍌1
Признавайтесь, сколько натапали уже кабанов? ❤️
Please open Telegram to view this post
VIEW IN TELEGRAM
13🔥5😁5🤡2
✈️ Вдруг кто еще не видел, по ML есть хороший конспектик, красиво оформленный + понятно объясненный. Был бы еще код от руки написан, цены бы не было, а так, хорошо 🙊
Please open Telegram to view this post
VIEW IN TELEGRAM
16🔥3👏1🥴1
✈️ От гипотезы до инсайтов

Всем привет, сегодня я бы хотел написать о том как гипотезы вообще обретают бизнес-ценность на примере цикла HADI.

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

Пример: Если мы внедрим X, то это повлияет на Y с эффектом в Z% в течение T дней.

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

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

Data - метрики / показатели на которые мы хотим появлиять. Например, в контексте A/B тестирования это могут быть целевые метрики (AOV, ARPU, CR, ну вы поняли...)

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

Советы по HADI:

1. Можно формулировать гипотезы по SMART.
2. Приоретизация результата, можно использовать RICE
3. Чем больше гипотез, тем лучше, можно тестировать много всего.

🥰 Если на посте наберется 100 реакций, напишу про стенд метрик более подробно!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3912🔥7🍓3😐1
🧀 Ранее, когда я изучал разные материалы, связанные с A/B тестами, натыкался на интересный доклад (aka дискуссию) о том, как проводятся A/B тесты про специфику, проблемы.

А. Карпов, А. Сахнов, А. Байрамкулов, А. Хакимов — A/B-тесты. Источники данных и инструменты анализа

😑 Зачем нужно развивать культуру A/B тестов?
Нужны не всем. Например, чтобы увидеть результат в каком-то стартапе можно увидеть эффект практически сразу (если мы говорим о продуктовых изменениях). Микроизменения хочется смотреть крупным игрокам, такие показатели без A/B тестов поймать сложно. Скажу, что в целом достаточно классно, когда продукт мыслит в рамках экспериментов и такими шажками развивается (гипотез много, все сразу в прод не катнешь, а сезонность учитывать хочется).

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

😱 Как разные сферы влияют на A/B тестирование?
... (думаю про это даже пост катнуть, если интересно, пишите).

🐶 Тут еще упоминалось о различных тестах, которые рассматривались (запись 2023 года). Говорили о разных платформах, в т.ч про Ambrosia. Почитал документацию, будто она не может бить по неравным размерам групп, не нашел correction какой-то по крайнем мере с отношением групп, как в статейке от Ozon. Ладно, еще упомянули Varioqub от ❣️

🆎 Если наберется 100 🐳, напишу про то, как можно оценивать влияние различных фич друг на друга или про возможности A/B платформ разных компаний.
Please open Telegram to view this post
VIEW IN TELEGRAM
🐳998🔥4🏆1