Data Driven / Bogdan Ivanov
892 subscribers
68 photos
47 videos
2 files
53 links
Данные, карьера, саморазвитие

https://datadrivenbogdan.com/

Помогаю вырасти в работе с данными и зарабатывать больше.
За менторством и сотрудничеством — @b_ivanov_kz
Download Telegram
Контент с казика!
Дальше обещаю (нет) только полезный контент…

@data_driven_bogdan
❤12🔥6🙊4
SQL-лайфхаки, которые экономят время

В SQL есть не только must have синтаксис, без которого ты не сможешь решить поставленную задачу, но есть и маленькие трюки, которые либо делают твою жизнь проще, либо ты нихуя не понимаешь зачем люди это делают😁 (ps первое время я долго был вторым в этой дихотомии)) )

1️⃣ GROUP BY и ORDER BY по номерам колонок

Иногда в SELECT лежат длиннющие названия полей, вычисления или CASE’ы - и повторять их в GROUP BY/ORDER BY просто максимально в падлу.

Есть классный лайфхак: использовать порядковые номера столбцов.
SELECT
transaction_dt::date,
product_id,
COUNT(*) AS cnt_prd
FROM orders
GROUP BY 1, 2
ORDER BY 1;


1 → первый столбец в SELECT
2 → второй столбец в SELECT и так далее


В чем value?

*️⃣ Короче
*️⃣ Легче читать
*️⃣ Легче рефакторить - поменял название поля в SELECT → ничего не упало

2️⃣ Запятая перед неймом колонки

Ставить запятую в начале строки — не баг, а фича😁
Эту штуку поначалу многие видят и думаю: «что за извращение?»
А потом спустя месяц — сами начинают так писать

Пример запроса:
SELECT
order_date
, frmt_id
, cheque_id
, SUM(price * qnt ) as revenue
FROM orders;


И вот зачем это нужно 👇

Теперь мы можем быстро закомментить любой столбец:
SELECT
order_date
-- , frmt_id
, cheque_id
, SUM(price * qnt ) as revenue
FROM orders;


Работает всегда, кроме первой строки — для этого выбираем первой ту, которую планируем оставлять в покое...

3️⃣ WHERE 1=1 / TRUE

Когда фильтров много, запрос превращается в кашу, где потеряться проще простого. А еще хуже — временно выключаешь один фильтр, ломаешь синтаксис, и потом 10 минут как дурачок ищешь, куда делся несчастный AND.

Пример запроса:
WHERE 1=1
AND order_date >= '2025-01-01'
AND city = 'Moscow'
AND is_cancelled = 0


а теперь, если нужно что-то отключить, просто комментируешь:
WHERE 1=1
-- AND order_date >= '2025-01-01'
AND city = 'Moscow'
AND is_cancelled = 0

И работает это всегда, вне зависимости от порядка фильтров.

В чем value?

*️⃣Никаких синтаксических ошибок
*️⃣Удобно включить/выключать фильтры

Пишите в комментах, какие приемы вы уже используете в своих запросах 👇

Подпишись и при желании поддержи канал бустом.
P.S. Сделать это можно здесь (для Premium — бесплатно).

А также ставь реакции:

🍌 — не знал, буду юзать
🍌 — использую все из этого
🍌 — все и так работает, так что оставь себе и не еби мозг

@data_driven_bogdan
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9873😁11
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😁7
Causal Inference: как оценивать эффект, когда A/B — не вариант (Ч. 1)

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

Сразу дисклеймер:
ниже — не истина в последней инстанции.
Не считаю себя гуру в Causal Inference, поэтому буду рад, если кто-то более опытный в этой теме дополнит или поспорит 👇

Что такое Causal Inference❓
Попробую простыми словами


Causal Inference — это набор подходов, которые позволяют ответить на вопрос:
👉 «А что именно изменилось из-за нашего действия, а не просто совпало?»

То есть мы хотим отделить*️⃣эффект фичи / акции / изменения
от*️⃣сезонности, тренда, шума и внешних факторов.

Почему A/B-тесты не всегда возможны❓

*️⃣ Эксперимент сложно или невозможно провести
Технические, бизнес- или этические ограничения, либо просто нет времени и ресурсов на полноценный A/B.

*️⃣ Группы уже сформированы неслучайно
Пользователи изначально разные, и прямое сравнение даёт смещённый результат.

*️⃣ Нужно оценить эффект задним числом
Изменения уже внедрены, а понять — был ли от них эффект — всё равно нужно.

*️⃣ Требуется уточнить результаты A/B
Даже в случайных тестах группы могут различаться — и без корректировок оценка получается шумной.

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

Разберем три популярных подхода Causal Inference

и начнем с

1️⃣ Difference-in-Difference (DiD)

Идея:

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

Условия применимости DiD (❗️очень важно❗️):

*️⃣ Параллельный тренд — до изменений группы должны вести себя похоже
*️⃣ Независимость объектов — метрики участников не влияют друг на друга (студенты не влияют на активность друг друга/ просмотры в web, не влияют на просмотры в ios и тд)
*️⃣ Отсутствие других вмешательств в тот же момент времени

Если хотя бы одно условие нарушено — оценка эффекта становится сомнительной.

Как это работает:

1️⃣ Берем две группы участников (метрику):

*️⃣тестовую (тут легко, на нее идет эффект от фичи/акции)
*️⃣контрольную (тут сложнее, нужно выбрать контроль с похожим поведением, в зависимости от контекста задачи/бизнеса - это должна быть либо другая метрика, но с похожим трендом или может быть другие люди, но с похожим трендом по такой же метрике)

2️⃣ Выбираем метрику, по которой у групп параллельный тренд
(повторюсь - до изменений они ведут себя похоже, тк это важный assumption в DiD)

3️⃣ Смотрим период до момента X (X - начало воздействия эффекта на тестовую группу)
Если метрика в обеих группах растет / падает синхронно — это хороший знак

4️⃣ После момента X:

*️⃣контрольная группа продолжает двигаться по старому тренду
*️⃣в тестовой группе происходит изменение - она отклоняется от тренда (или нет, тогда это может нам говорить о том, что эффекта нет)

5️⃣ Сравниваем:
насколько метрика тестовой группы отклонилась (остановимся на ситуации, где отклонение есть) от своего ожидаемого тренда, который мы восстанавливаем по динамике тренда контрольной группы

Ключевая логика DiD:

если бы изменений не было, тестовая группа продолжила бы двигаться параллельно контрольной
=> Вся суть метода держится именно на этом предположении.

Как выбрать метрику с похожим трендом❓ но напрямую не зависимые от нашего изменения
Помогут проверки на синхронность, например корреляция Пирсона/Спирмена

Пишите в комментах, слышали ли вы что-то про Causal Inference и DiD в частности👇

Дальше будет еще 2 части про популярные методы CI

Подпишись и при желании поддержи канал бустом.
P.S. Сделать это можно здесь (для Premium — бесплатно).

@data_driven_bogdan
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9🔥6❤‍🔥5🤝1
Новогодний корпоратив — официально прошел на ура

Наелись — ✔️
Напились — ✔️
Отдохнули — ✔️
Выиграли в конкурсе — ✔️
И заплатили за это — 0 ₽ 💸

Редкий случай, когда все по плану и даже лучше!
Год можно закрывать с чистой совестью🤩

@data_driven_bogdan
❤11🔥411