TGViewer
Channel Public Channel
Заскуль питона (Аналитика данных)

Заскуль питона (Аналитика данных)

@zasql_python

Канал про Python, аналитику, Data Science, SQL и многое другое

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

Сайт: zasqlpython.ru
Subscribers
8.94K
Photos
236
Videos
19
Links
236

Showing posts older than #235 · Back to latest

Older Posts 20 shown
Post #234 3.68K
блинб, такое ощущение, что нужно начать выкладывать какие-то посты про рабочие процессы и отойти от технической составляющей на какое-то время. Если так думаете, ставьте реакции, чего-нибудь придумаем про то, как я вливаюсь, что делаю и т.п. 🙊
  • ❤ 60
  • 🔥 27
  • 🌭 6
  • 🥱 4
  • 😁 2
Post #233 4.21K
Заскуль питона (Аналитика данных) 🆎 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
Post #232 3.73K
Закажу пожалуй себе доставку домой, нормальная тема ❤️

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

Линк на товар
  • 😎 24
  • 😁 10
  • ❤ 4
  • 🤷‍♀ 1
  • 🤡 1
Post #231 3.53K
Уже видели перфоманс? 💙
Я считаю, что это взаимный маркетинг для обеих компаний. Вообще шикарно, будем ждать ответочку Лавки (или нет)
  • 🔥 7
  • ❤ 4
  • 🤣 2
Post #230 3.57K
Это должен быть 💙, но…
  • 😁 40
  • 💅 10
  • 💔 6
  • ✍ 1
  • 👍 1
Post #229 4.84K
Видели уже новый ребрендинг СберМаркета? Что думаете?

«Купер»

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

Пост РБК
ТАСС
  • 🥴 50
  • 🤔 8
  • 🤡 7
  • 😱 3
  • 🎃 2
Post #228 5.41K
Так-с, пока я вливаюсь в рабочие процессы Яндекс 💙 Лавки, пишите, что хотите видеть тут, в каком направлении в дальнейшем. Возможно, какие-то продуктовые кейсы, теоретическое, возможно разбавить определенным лайфстайлом.

Пока кидаю классный тренажер от 😀 (типа симулятор). Там есть различные разделы по типу аналитика данных, машинное обучение. Так что на выходных можно пройти 😼
  • 🔥 7
Post #227 5.62K
😂 статистика интересная штука. Нормальные распределения, критические области доверительные интервалы и всё.

but...
  • 🔥 20
  • 😁 13
  • 🤡 3
  • 💅 2
Post #226 5.72K
Подкаст: Единая A/B платформа, её плюсы, плюсы и подводные камни

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

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

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


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

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


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


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

Если вы хотели понять всегда как устроена 🆎 платформа изнутри, к прослушиванию.
  • ❤ 10
  • 🔥 5
  • 👍 1
Post #225 5.79K
Causal Inference from Observational Data, или как провести А/В-тест без А/В-теста.

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

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

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

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

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

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

А вы видели эту статью? Пишите в комментариях 😑
  • 🔥 9
  • ❤ 3
  • 🆒 1
  • 🦄 1
Post #224 4.95K
😠 вот ❤️

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

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

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

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

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

🍔 Ставьте реакции, пишите комментарии. Раньше, когда я переходил в 💙, оказывается, было очень много озончан, посмотрим сколько теперь тут яндексоидов 🦆
  • 👍 19
  • 🔥 8
  • ❤ 5
  • ⚡ 2
Post #223 4.94K
Иван Максимов | 13 способов ускорить А/В тест, или "Не CUPED-ом единым"

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

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

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

Ставьте реакции, пишите комментарии, все такое. А я пойду готовить пост о переходе в другую компанию 😐
  • 🔥 16
  • ❤ 9
Post #222 7.86K
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

😉 Ставьте реакции, если пост был полезен, пишите комментарии. Дальше разберем стратификацию и линеаризиацию
Telegram Заскуль питона (Data Science) 🆎 CUPED как метод сокращения дисперсии для проведения A/B экспериментов. 🤭 Всем привет! В этом посте хочу рассказать о том что такое CUPED, зачем он нужен? 🤩 CUPED (Controlled-experiment Using Pre-Experiment Data) - один из методов сокращения дисперсии…
  • 🔥 7
  • ❤ 3
  • 🐳 2
  • 👍 1
Post #221 5.63K
🤓 Нашел классный материал по Causal Inference и A/B тестам на просторах интернета на английском языке. В целом, есть примеры, формулки, можно самому что-то запрогать. Тут от обычной статистики до продвинутых методов, на досуге можно глянуть. Есть часть глав недописанных, например девятая, в остальном все гуд. К прочтению или ознакомлению советую. Как мне показалось, не совсем полно написано про Variance Reduction, хотелось бы видеть больше методов. Гайд 2021 года, но всеми любимый CUPED не забыли.
  • 🔥 7
  • ❤ 3
  • 🐳 1
  • 🍓 1
Post #219 5.62K
C’mon, bro. Bayesian stats… 👻
  • 😁 15
  • 👍 4
  • 🔥 1
  • 😢 1
Post #218 6.27K
Ладно, так уж и быть, можно сюда реакций тоже дать, если действительно хотите знать, куда я ухожу из 💙
  • 🔥 101
  • ❤ 15
  • 👀 4
  • 👍 1
Post #217 10.2K
7. Основы ML. Что ж, дошли до этого этапа, значит есть потенциал, идем смотреть лекции Жени Соколова от ВШЭ и кайфуем от жизни. Достаточно все классно объяснено + подкреплено соответствующей практикой.

Если есть чего добавить или изменить пишите в комментариях. 120+ реакций и я рассказываю о дальнейших планах не в 💙. Упс, спойлеры подъехали!

UPD: Ещё по АБ тестированию есть очень крутой курс от я практикума.
https://practicum.yandex.ru/statistics-basic/
  • 🔥 84
  • ❤ 20
  • 👍 4
  • 👾 2
Post #216 24.5K
Как бы я сейчас построил свое обучение в продуктовой аналитике / аналитике данных?

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

Всем привет! Сегодня напишу о том, что бы я изменил в своем обучении, если я бы вкатывался сейчас. Давайте перейдем к самому простому, как мне кажется, это стек. Базово на аналитика данных / аналитика предлагается следующее:

🐍 Python - для обработки данных, ETL-процессов, первичной визуализации, построения ML моделей, работа с тем же Spark / Hadoop для работы с большим объемом данных.
💻 SQL - работа с СУБД, по сути данные это наш хлеб. Любые логи, записи по пользователям / клиентам, различные фичи пользователей. По моему мнению, аналитик ОБЯЗАН уметь работать с SQL, без этого никуда. Поскольку первично если собирается неправильно получится следующее: garbage in garbage out
📊 Визуализация - бизнесу нужно интерпретировать данные в удобном формате, для этого используют дашборды. Это понятно + на основе них аналитик может понимать в удобном формате как можно генерить гипотезы. Для этого подойдут Superset, Yandex DataLens, Tableu, PowerBI, FineBI и др.

Что ж, с этим разобрались, базово это выглядит так, но если углубляться в мой стек, который я использовал в 💙 - это Gitlab, Hadoop, Airflow, SQL (ClickHouse, Vertica, MS SQL, PostgreSQL), Python, Superset.

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

Сюда наслаивается и развитие продуктового мышления, и статистика с эконометрикой и ML, и A/B тесты, различные продвинутые методы и др.

К роадмапу (помните, что 🗯 ваш друг):

0. SQL - лучший бесплатный курс по SQL ever от 🔥. Если пользователь ClickHouse, можно документацию на русском глянуть, достаточно хорошо описано. Если пользователь Vertica 😬, то можно также документацию на английском

1. Про Python у меня был пост, можно глянуть тут

2. По визуализации можно зайти в соответствующие чаты и читать документацию. По Superset документация и соответствующий чат в телеграме. По Yandex DataLens есть курс от ❤️

3. Статистика и теория вероятностей. У ФЭН ВШЭ есть хороший курс с систематизацией того, как выводятся методы, которые мы привыкли видеть. Систематизация на уровне дисциплины без упрощения. Если вдруг оказалось сложным и непонятным, можно ВЕРХНЕУРОВНЕВО вернуться к любимому Анатолию Карпову и основам статистики на степике

4. Прикладная статистика, эконометрика, уход в АБ тесты и продвинутые методы. С курсом от ВШЭ (там кстати есть Python в блоке статистики) очень хорошо сочетаются следующие курсы: Прикладная статистика от МФТИ и ААА в открытом доступе (предыдущий пост). И также курс по эконометрике от ВШЭ от Бориса Демешева на R

4* Если вдруг предыдущий пункт оказывается непосильным, подрубаем ChatGPT, ведем конспектики и смотрим Глеба Михайлова с его практическим руководством к АБ + подкрепляем статьями на Хабр. Могу отдельным постом выложить какие статьи я читаю, для чего и т.д., как систематизирую знания.

4.1. Продвинутые методы A/B тестирования. Предыдущие посты были про любимый CUPED. Сюда наслаиваются еще и дельта-методы, стратификации, линеаризации, SPRT, VWE и др. Про это также будет отдельный пост.

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

6. Работа с большими данными. Если вы дойдете до этого, то советую ознакомиться с документацией Spark, в частности работа с Pyspark (плейлист на YouTube) основы работы с Hadoop. Здесь вы поймете какие есть ограничения при работе, будете работать над ускорением расчетов, оптимизацией и другое.
  • ❤ 109
  • 🔥 47
  • 👍 16
  • 🤯 4
Post #215 7.8K
У академии аналитиков Авито есть в открытом доступе свой курс по прикладной статистике. Сам курс проходил, могу сказать, что для A/B тестов самое то, но нужно знать первый курс статистики про распределения, ЦПТ, ЗБЧ и проверку гипотез из статистики. Помимо этого, есть Python, на котором показывают как всё это применять на практике (про A/A тесты на исторических данных тоже было). Годная штука, которая позволяет наглядно показать как работают статкритерии и прочее.

Если проходили или слышали, отпишите. Ставьте реакции, если сделать подобную подборку хороший материалов.

UPD: осенью будет вторая часть по продвинутым методам, но могу уже на канале дать подспорье для успешного прохождения
  • 🔥 50
  • ❤ 8
  • 👍 3
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →