Поговорим о собесах (часть 2) 😎
В прошлом посте затронули софты, методологию STAR и Excel. Это базовый набор. Теперь идём дальше, SQL.
Если вы хорошо освоили Excel, вы уже понимаете основы: как данные связываются, какие проблемы бывают при связках, как работают группировки. Переход к SQL на старте это по сути 5 команд: SELECT, FROM, WHERE, JOIN, GROUP BY. Оконные функции и временные таблицы полезны, но на старте не критичны.
А вот теперь к главному. Основная проблема не в синтаксисе. Проблема в блоках, которые не роняют запрос. Код отрабатывает, интерпретатор молчит, а результат не тот, который ждёт интервьюер. Именно на этом сыпятся.
1️⃣ NOT IN + NULL: тишина вместо данных
В SQL: NULL ≠ пусто ≠ 0. Кто изучал Python, знает: ноль это ноль, а NULL это пустота, ничто. Держите в голове.
Задача: найти пользователей не из чёрного списка.
❌
Казалось бы, всё верно. Но если в blocked хоть одна строка с user_id = NULL, результат: 0 строк. SQL не может сравнить с NULL и молча возвращает пустоту.
✅
Кстати, NOT EXISTS ещё и быстрее: берёт id, идёт во вторую таблицу, нашёл первое вхождение, остановился. NOT IN шерстит таблицу сверху донизу целиком. На больших таблицах разница заметная.
2️⃣ LEFT JOIN, который молча стал INNER JOIN
Про типы JOIN подробно разберём в следующих постах серии. Сейчас только суть ловушки.
❌
Что происходит: WHERE убивает NULL-строки из правой таблицы. Клиенты без заказов просто исчезли. LEFT JOIN превратился в INNER JOIN. А результат мимо.
✅
Одна строчка через AND. Разница принципиальная.
3️⃣ AVG врёт красиво
Вот вам задачка. 10 строк по продажам. У трёх NULL. Сколько вернёт AVG? Среднее по 7, не по 10. Если значения похожи на правду, подвох заметить сложно. Цифра реалистична, но искажена.
❌
✅
COALESCE: встретил NULL, заменил на 0. Можно и без него, но тогда объясните интервьюеру, что понимаете поведение AVG и принимаете его осознанно. Оба варианта зачтутся👌
4️⃣ Порядок выполнения: главный подвох
Пишем: SELECT → FROM → WHERE → GROUP BY.
Выполняется: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY.
Нелогично? Ещё как🤷♀️
❌
Алиас avg_sales ещё не существует на этапе WHERE. Система просто не знает этого поля.
✅
HAVING это фильтрация после группировки. Подробнее разберём в отдельном посте серии.
5️⃣ Забыли синтаксис? Не паникуйте
Бывает: нервы, давно не касались темы. Ну с кем не бывает. Говорите прямо: «Я понимаю логику, могу описать шаги. Точный синтаксис загуглил бы». Любой адекватный специалист это оценит. Логику понимать одно дело. Функцию загуглить = 30 секунд.
Бонус напоследок: первый вопрос при тестовом = «Какая у вас СУБД?».
DATE_TRUNC — PostgreSQL. DATE_FORMAT — MySQL. Правильный запрос для неправильной базы = ошибка на ровном месте.
В следующем посте SQL: Retention и когорты. А завтра пост и статья про кейс моей команды с компанией Гранд-Альфа. Занимаются кормами для животных.
Вопрос к вам. У вас бывало такое, что забыли ответ и хоть убей не помнишь ? Как действовали в этой ситуации?👇
#собесы
@data_dzen🙂
В прошлом посте затронули софты, методологию STAR и Excel. Это базовый набор. Теперь идём дальше, SQL.
Если вы хорошо освоили Excel, вы уже понимаете основы: как данные связываются, какие проблемы бывают при связках, как работают группировки. Переход к SQL на старте это по сути 5 команд: SELECT, FROM, WHERE, JOIN, GROUP BY. Оконные функции и временные таблицы полезны, но на старте не критичны.
А вот теперь к главному. Основная проблема не в синтаксисе. Проблема в блоках, которые не роняют запрос. Код отрабатывает, интерпретатор молчит, а результат не тот, который ждёт интервьюер. Именно на этом сыпятся.
В SQL: NULL ≠ пусто ≠ 0. Кто изучал Python, знает: ноль это ноль, а NULL это пустота, ничто. Держите в голове.
Задача: найти пользователей не из чёрного списка.
SELECT * FROM users
WHERE id NOT IN (SELECT user_id FROM blocked)
Казалось бы, всё верно. Но если в blocked хоть одна строка с user_id = NULL, результат: 0 строк. SQL не может сравнить с NULL и молча возвращает пустоту.
SELECT * FROM users u
WHERE NOT EXISTS (
SELECT 1 FROM blocked b
WHERE b.user_id = u.id
)
Кстати, NOT EXISTS ещё и быстрее: берёт id, идёт во вторую таблицу, нашёл первое вхождение, остановился. NOT IN шерстит таблицу сверху донизу целиком. На больших таблицах разница заметная.
Про типы JOIN подробно разберём в следующих постах серии. Сейчас только суть ловушки.
SELECT c.name, o.amount
FROM customers c
LEFT JOIN orders o ON c.id = o.customer_id
WHERE o.status = 'completed'
Что происходит: WHERE убивает NULL-строки из правой таблицы. Клиенты без заказов просто исчезли. LEFT JOIN превратился в INNER JOIN. А результат мимо.
SELECT c.name, o.amount
FROM customers c
LEFT JOIN orders o
ON c.id = o.customer_id
AND o.status = 'completed'
Одна строчка через AND. Разница принципиальная.
Вот вам задачка. 10 строк по продажам. У трёх NULL. Сколько вернёт AVG? Среднее по 7, не по 10. Если значения похожи на правду, подвох заметить сложно. Цифра реалистична, но искажена.
SELECT AVG(salary) FROM employees
SELECT AVG(COALESCE(salary, 0)) FROM employees
COALESCE: встретил NULL, заменил на 0. Можно и без него, но тогда объясните интервьюеру, что понимаете поведение AVG и принимаете его осознанно. Оба варианта зачтутся
Пишем: SELECT → FROM → WHERE → GROUP BY.
Выполняется: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY.
Нелогично? Ещё как
SELECT category, AVG(sales) AS avg_sales
FROM orders
WHERE avg_sales > 1000
GROUP BY category
Алиас avg_sales ещё не существует на этапе WHERE. Система просто не знает этого поля.
SELECT category, AVG(sales) AS avg_sales
FROM orders
GROUP BY category
HAVING AVG(sales) > 1000
HAVING это фильтрация после группировки. Подробнее разберём в отдельном посте серии.
Бывает: нервы, давно не касались темы. Ну с кем не бывает. Говорите прямо: «Я понимаю логику, могу описать шаги. Точный синтаксис загуглил бы». Любой адекватный специалист это оценит. Логику понимать одно дело. Функцию загуглить = 30 секунд.
Бонус напоследок: первый вопрос при тестовом = «Какая у вас СУБД?».
DATE_TRUNC — PostgreSQL. DATE_FORMAT — MySQL. Правильный запрос для неправильной базы = ошибка на ровном месте.
В следующем посте SQL: Retention и когорты. А завтра пост и статья про кейс моей команды с компанией Гранд-Альфа. Занимаются кормами для животных.
Вопрос к вам. У вас бывало такое, что забыли ответ и хоть убей не помнишь ? Как действовали в этой ситуации?
#собесы
@data_dzen
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
1 31 26 18 8⚡7🥰6😁6🤩2
Шарик, ну ты и жрёшь 🐕
А точнее - жрёт бюджет, который уходит в слепую зону между производителем и полкой магазина.
Написал статью про кейс моей команды с компанией «Гранд-Альфа». Одного из крупнейших производителей кормов в России.
Раньше аналитика у них жила в Excel, но не применялся ни один из моих советов по его настройке. (Кощунство не иначе😡 )
Из-за чего компания видела, сколько отгрузила дистрибьютору. Но понятия не имела, что происходит дальше:
- какие магазины реально продают;
- какие регионы растут, а какие просто складируют товар.
Что сделали:
- сшили 1С и CISLINK в единое хранилище;
- построили дашборды, где видно путь товара до конкретной полки;
- убрали зависимость от ad-hoc анализа: заходишь → видишь картину → понимаешь, кого похвалить, а кому дать пинка. Без звонков Семёну Семёновичу.
Внутри: полный кейс + 7 ошибок аналитики производителей.
👉 [Ссылка на статью]
А точнее - жрёт бюджет, который уходит в слепую зону между производителем и полкой магазина.
Написал статью про кейс моей команды с компанией «Гранд-Альфа». Одного из крупнейших производителей кормов в России.
Раньше аналитика у них жила в Excel, но не применялся ни один из моих советов по его настройке. (Кощунство не иначе
Из-за чего компания видела, сколько отгрузила дистрибьютору. Но понятия не имела, что происходит дальше:
- какие магазины реально продают;
- какие регионы растут, а какие просто складируют товар.
Что сделали:
- сшили 1С и CISLINK в единое хранилище;
- построили дашборды, где видно путь товара до конкретной полки;
- убрали зависимость от ad-hoc анализа: заходишь → видишь картину → понимаешь, кого похвалить, а кому дать пинка. Без звонков Семёну Семёновичу.
Внутри: полный кейс + 7 ошибок аналитики производителей.
Please open Telegram to view this post
VIEW IN TELEGRAM
10 36 22 22⚡6👌6 6🤣4 3🥰2🙏2
Неделя как-то резко закончилась. Ай да хвалить себя 😎
Поймал себя на старой мысли, опять. Как только пытаюсь сделать сразу "идеально", всё начинает ехать. Слишком рано хочется результата, хотя сам ещё толком не разобрался. В итоге не ускоряешься, а просто стопоришься на месте.
С дашбордами это вообще классика. Садишься сделать "красиво", залипаешь на деталях, ковыряешь это всё несколько дней… а потом смотришь и понимаешь, что половину можно было сделать проще и быстрее.
Вспомнил кейс Airbnb. У них часть объявлений почти не бронировали. Долго можно было искать причины, строить гипотезы, усложнять. А оказалось всё банально: у людей были просто плохие фото. Тёмные, кривые. Начали помогать с нормальными снимками и всё поехало вверх. Ничего героического, просто попали в точку.
У меня на этой неделе примерно про то же.
Начал разбираться с видеосъёмкой. Пока местами получается средненько. Но уже начинаю видеть разницу. Пробую играть со светом, композицией, оставлять чуть больше "воздуха" в кадре. Пару раз пересматривал то, что снял раньше, и там, конечно, больно смотреть😎
По ходу записываю идеи в блокнот. Не всё складывается, но уже видно, что часть принципов можно спокойно перетащить в дашборды и в обучение команды. Посмотрим, что из этого выйдет. Если не развалится по дороге, попробую применить в работе и поделюсь с вами.
Остальное было довольно спокойно. Без рывков. И это даже хорошо. Сейчас как раз есть время нормально дожать то, что раньше откладывал. Потом начнётся движ, и будет уже не до этого.
А теперь ваш черед🔥
Была ли у вас беда от гонки за идеалом? И расскажите какие у вас победы на неделе👇
Поймал себя на старой мысли, опять. Как только пытаюсь сделать сразу "идеально", всё начинает ехать. Слишком рано хочется результата, хотя сам ещё толком не разобрался. В итоге не ускоряешься, а просто стопоришься на месте.
С дашбордами это вообще классика. Садишься сделать "красиво", залипаешь на деталях, ковыряешь это всё несколько дней… а потом смотришь и понимаешь, что половину можно было сделать проще и быстрее.
Вспомнил кейс Airbnb. У них часть объявлений почти не бронировали. Долго можно было искать причины, строить гипотезы, усложнять. А оказалось всё банально: у людей были просто плохие фото. Тёмные, кривые. Начали помогать с нормальными снимками и всё поехало вверх. Ничего героического, просто попали в точку.
У меня на этой неделе примерно про то же.
Начал разбираться с видеосъёмкой. Пока местами получается средненько. Но уже начинаю видеть разницу. Пробую играть со светом, композицией, оставлять чуть больше "воздуха" в кадре. Пару раз пересматривал то, что снял раньше, и там, конечно, больно смотреть
По ходу записываю идеи в блокнот. Не всё складывается, но уже видно, что часть принципов можно спокойно перетащить в дашборды и в обучение команды. Посмотрим, что из этого выйдет. Если не развалится по дороге, попробую применить в работе и поделюсь с вами.
Остальное было довольно спокойно. Без рывков. И это даже хорошо. Сейчас как раз есть время нормально дожать то, что раньше откладывал. Потом начнётся движ, и будет уже не до этого.
А теперь ваш черед
Была ли у вас беда от гонки за идеалом? И расскажите какие у вас победы на неделе
Please open Telegram to view this post
VIEW IN TELEGRAM
10 19 16🎉14⚡3 3
Созвон который порадовал 🔥
Сегодня хотел выложить основной пост. Он уже готов, про retention и когорты. В итоге у меня вышло около 5 постов на тему собесов, получился нормальный переход между Excel и SQL.
Но… сегодня слишком хороший день, чтобы грузить вас техничкой🌞
С утра отвёз машину в сервис и решил не заходить домой. Просто сел на лавочке возле дома и провёл все рабочие созвоны прямо на улице.
И это было кайфово😎
Реально. Я давно не получал такого удовольствия от звонков.
Просидел где-то полтора часа: солнце греет, птицы поют, ляпота.
Поэтому сегодня без собесов и сложных задач.
Я снял лёгкое видео по итогам первой недели обучения видеосъёмке.
Тема рядом, про найм будущего😂
Посмотрите, отдохните и напишите:👇
Как у вас стартовала неделя? Уже осознали что пришла весна и зима вышла из чата ?
@data_dzen🙂
Сегодня хотел выложить основной пост. Он уже готов, про retention и когорты. В итоге у меня вышло около 5 постов на тему собесов, получился нормальный переход между Excel и SQL.
Но… сегодня слишком хороший день, чтобы грузить вас техничкой
С утра отвёз машину в сервис и решил не заходить домой. Просто сел на лавочке возле дома и провёл все рабочие созвоны прямо на улице.
И это было кайфово
Реально. Я давно не получал такого удовольствия от звонков.
Просидел где-то полтора часа: солнце греет, птицы поют, ляпота.
Поэтому сегодня без собесов и сложных задач.
Я снял лёгкое видео по итогам первой недели обучения видеосъёмке.
Тема рядом, про найм будущего
Посмотрите, отдохните и напишите:
Как у вас стартовала неделя? Уже осознали что пришла весна и зима вышла из чата ?
@data_dzen
Media is too big
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
11 29⚡18💯15🥰10🤩6 6 5 4😁3
Весенняя эра открыта 😎
Время обновить дизайн на теплые оттенки согревающие душу. Собрал новый дизайн, что бы каждый пост отдавал весенней энергией🔥
Такс пойдем теперь за вопросы продуктовые поговорим👇
Тебе дают две таблицы - users и events. И 20 минут на задачу:
И вот на этом ловят ступор.
А с чего вообще стартовать?🤔
Проще всего - не с SQL, а с картинки в голове. Представь спортзал.
100 человек купили абонемент - это твоя когорта.
Дальше обычно эту когорту принимают за 100%. Это и есть M0.
Но вот нюанс: это не закон природы, а просто негласное соглашение.
На следующий день пришли 60 человек - Day 1 = 60%.
Через неделю пришли 40 - Day 7 = 40%.
Дальше логика не меняется.
Просто вместо дней - месяцы.
И вместо спортзала - продукт.
1️⃣ Junior-уровень - понять, сколько людей вообще пришло в каждую когорту
Если уже здесь ошибка, все суши весла. Потому что DATE_TRUNC и DISTINCT - это база продуктового блока.
Хотя бы для PostgreSQL и похожих диалектов.
2️⃣ Следующий уровень - понять, кто вернулся
Тут под ноги бросаются грабли🤔
Такой код нормален, если даты у тебя хранятся как DATE, без времени.
Но если это TIMESTAMP, простое равенство может ломать расчёт.
Потому что у одного событие в 2023-12-08 00:01, у другого в 2023-12-08 19:42, и формально это уже не то же самое значение.
Значит, нужно либо приводить к дате, либо считать через диапазоны.
То есть логика всегда одна и та же:
✅ зафиксировал когорту → посмотрел, кто вернулся
Для M1, M2, M3 всё почти то же самое, но есть принципиальный момент:
👉 сравнивают не просто даты, а смещение по календарным месяцам относительно месяца регистрации ( да сложно звучит сейчас объясню )
То есть не +30 дней. Месяцы разной длины, поэтому такой расчёт съезжает.
Для месячного retention смотрят смещение по календарным месяцам, а не просто прибавляют 30 дней.
❌ Где еще грабли поджидают
1️⃣ Считают события вместо людей
Один пользователь сделал 5 событий.
И внезапно retention у тебя больше 100%.
Значит, ты считаешь не возврат людей, а активность.
2️⃣ Ставят INNER JOIN
И в выборке остаются только те, кто вернулся.
Все, кто отвалился, просто исчезают.
Получается красивая цифра. И полностью фальшивая картина.
3️⃣ Не фиксируют базу расчёта
Размер когорты обычно принимают за 100%, и уже от него считают всё дальше.
Если база у тебя гуляет, проценты превращаются в мусор.
А дальше начинается главная беда... тест на мышление и софты. Вот уж где самая тернистая тропа если мало опыта.
Потому что на собесе тебя не спросят:
А спросят:
Приехали...И вот тут SQL уже никого не впечатляет.
✅ Нормальный ход мысли такой:
- разложить retention по когортам
- посмотреть каналы привлечения
- проверить activation
- понять, не ломался ли онбординг
- сравнить поведение до и после релизов
Можно копать еще глубже, но для старта достаточно этих основ.
❌ Ответ который сразу поставит крест на вашем диалоге
Спасибо товарищ Капитан. Но это не ответ аналитика, а догадка.
Если простыми словами:
Retention - это не про SQL, это про поведение.
SQL - это просто лопата, которой ты выкапываешь цифру.
Если ты не можешь объяснить, почему люди перестали возвращаться,
то сами по себе твои проценты ни о чем не расскажут🤷♀️
У вас бывали проблемы на продуктовом блоке? И вообще любо ли вам продуктовое направление или больше нравиться инженерная часть ?👇
#собесы
@data_dzen🙂
Время обновить дизайн на теплые оттенки согревающие душу. Собрал новый дизайн, что бы каждый пост отдавал весенней энергией
Такс пойдем теперь за вопросы продуктовые поговорим
Тебе дают две таблицы - users и events. И 20 минут на задачу:
«Посчитай батенька retention по когортам M0–M3»
И вот на этом ловят ступор.
А с чего вообще стартовать?
Проще всего - не с SQL, а с картинки в голове. Представь спортзал.
100 человек купили абонемент - это твоя когорта.
Дальше обычно эту когорту принимают за 100%. Это и есть M0.
Но вот нюанс: это не закон природы, а просто негласное соглашение.
На следующий день пришли 60 человек - Day 1 = 60%.
Через неделю пришли 40 - Day 7 = 40%.
Дальше логика не меняется.
Просто вместо дней - месяцы.
И вместо спортзала - продукт.
SELECT
DATE_TRUNC('month', registration_date) AS cohort_month,
COUNT(DISTINCT user_id) AS new_users
FROM users
GROUP BY 1
ORDER BY 1;
Если уже здесь ошибка, все суши весла. Потому что DATE_TRUNC и DISTINCT - это база продуктового блока.
Хотя бы для PostgreSQL и похожих диалектов.
WITH cohort_dec AS (
SELECT user_id, registration_date
FROM users
WHERE registration_date >= '2023-12-01'
AND registration_date < '2024-01-01'
)
SELECT
COUNT(*) AS cohort_size,
COUNT(DISTINCT CASE WHEN event_date = registration_date + 1 THEN user_id END) AS day1,
COUNT(DISTINCT CASE WHEN event_date = registration_date + 7 THEN user_id END) AS day7
FROM cohort_dec u
LEFT JOIN events e ON u.user_id = e.user_id;
Тут под ноги бросаются грабли
Такой код нормален, если даты у тебя хранятся как DATE, без времени.
Но если это TIMESTAMP, простое равенство может ломать расчёт.
Потому что у одного событие в 2023-12-08 00:01, у другого в 2023-12-08 19:42, и формально это уже не то же самое значение.
Значит, нужно либо приводить к дате, либо считать через диапазоны.
То есть логика всегда одна и та же:
Для M1, M2, M3 всё почти то же самое, но есть принципиальный момент:
То есть не +30 дней. Месяцы разной длины, поэтому такой расчёт съезжает.
Для месячного retention смотрят смещение по календарным месяцам, а не просто прибавляют 30 дней.
Один пользователь сделал 5 событий.
И внезапно retention у тебя больше 100%.
Значит, ты считаешь не возврат людей, а активность.
И в выборке остаются только те, кто вернулся.
Все, кто отвалился, просто исчезают.
Получается красивая цифра. И полностью фальшивая картина.
Размер когорты обычно принимают за 100%, и уже от него считают всё дальше.
Если база у тебя гуляет, проценты превращаются в мусор.
А дальше начинается главная беда... тест на мышление и софты. Вот уж где самая тернистая тропа если мало опыта.
Потому что на собесе тебя не спросят:
«Как посчитать retention?»
А спросят:
«D30 упал. Почему?»
Приехали...И вот тут SQL уже никого не впечатляет.
- разложить retention по когортам
- посмотреть каналы привлечения
- проверить activation
- понять, не ломался ли онбординг
- сравнить поведение до и после релизов
Можно копать еще глубже, но для старта достаточно этих основ.
«Ну… retention снизился, потому что пользователи стали хуже возвращаться..»
Спасибо товарищ Капитан. Но это не ответ аналитика, а догадка.
Если простыми словами:
Retention - это не про SQL, это про поведение.
SQL - это просто лопата, которой ты выкапываешь цифру.
Если ты не можешь объяснить, почему люди перестали возвращаться,
то сами по себе твои проценты ни о чем не расскажут
У вас бывали проблемы на продуктовом блоке? И вообще любо ли вам продуктовое направление или больше нравиться инженерная часть ?
#собесы
@data_dzen
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
10 28 23 18⚡5👀5🤩3🤣2
Пятница. Сушим весла и готовимся отдыхать 😎
Неделька выдалась великолепная. Было больше энергии, легче включался в задачи, и в целом появилось чувство движения. После зимы это особенно заметно: солнце, длинный день, чуть больше ресурса, чуть легче держать ритм.
Почему же я молодец?🤔
Во-первых, продолжаю держать темп в съёмке. При обычной рабочей нагрузке у меня всё равно получается не выпадать: съёмки идут, референсы собираются каждый день. Для меня это важный сдвиг. Потому что в какой-то момент интерес перестаёт быть просто интересом и становится практикой.
Во-вторых, спустя три месяца я наконец получил данные от одной медицинской организации. И это как раз тот материал, на котором хочу собрать показательный кейс.
Я хотел пропустить все посты по Excel через реальный кейс. Где будет и подключение к базе и дашборды красивые и макросы. Это вам и буду показывать в скором времени.
До 20 апреля мне надобно собрать кейс и потом показать его на вебинаре. Не как душную теорию, а как нормальный практический разбор. Что было на входе, какие шаги я сделал, где Excel реально помогает, и как из этого получается понятный BI-учёт.
И ещё одна линия недели - съёмка.
Меня всё сильнее тянет к ретро-эстетике: тёплой фактуре, ощущению времени, старому визуальному языку. При этом снимать это приходится в современной квартире, где почти всё работает против нужной атмосферы. Поэтому сейчас съёмка для меня, это не только нажать на кнопку камеры, но и сначала собрать пространство так, чтобы кадр вообще начал звучать правильно.
Постепенно что-то начинает получаться💪
В общем, неделя про активности и про ощущения, что важные для меня вещи понемногу переходят из идеи в действие.
А теперь ваша очередь. Поделитесь своими победами на неделе👇
@data_dzen🙂
Неделька выдалась великолепная. Было больше энергии, легче включался в задачи, и в целом появилось чувство движения. После зимы это особенно заметно: солнце, длинный день, чуть больше ресурса, чуть легче держать ритм.
Почему же я молодец?
Во-первых, продолжаю держать темп в съёмке. При обычной рабочей нагрузке у меня всё равно получается не выпадать: съёмки идут, референсы собираются каждый день. Для меня это важный сдвиг. Потому что в какой-то момент интерес перестаёт быть просто интересом и становится практикой.
Во-вторых, спустя три месяца я наконец получил данные от одной медицинской организации. И это как раз тот материал, на котором хочу собрать показательный кейс.
Я хотел пропустить все посты по Excel через реальный кейс. Где будет и подключение к базе и дашборды красивые и макросы. Это вам и буду показывать в скором времени.
До 20 апреля мне надобно собрать кейс и потом показать его на вебинаре. Не как душную теорию, а как нормальный практический разбор. Что было на входе, какие шаги я сделал, где Excel реально помогает, и как из этого получается понятный BI-учёт.
И ещё одна линия недели - съёмка.
Меня всё сильнее тянет к ретро-эстетике: тёплой фактуре, ощущению времени, старому визуальному языку. При этом снимать это приходится в современной квартире, где почти всё работает против нужной атмосферы. Поэтому сейчас съёмка для меня, это не только нажать на кнопку камеры, но и сначала собрать пространство так, чтобы кадр вообще начал звучать правильно.
Постепенно что-то начинает получаться
В общем, неделя про активности и про ощущения, что важные для меня вещи понемногу переходят из идеи в действие.
А теперь ваша очередь. Поделитесь своими победами на неделе
@data_dzen
Please open Telegram to view this post
VIEW IN TELEGRAM
Магическое A/B-тестирование 😎
Для многих сия тема кажется весьма простой: показали одной группе старую версию, другой новую, метрика выросла, стало быть тест успешен.
Но на практике именно тут и скрывается одна из главных ловушек.
Смысл A/B-теста не в одном лишь ответе на вопрос, выросла метрика или нет.
Куда важнее понять: можно ли вообще считать сей рост полезным для продукта🤔
Разберём на простом примере.
Допустим, в городе есть кофейня. Долгое время она работает с одним меню, а потом решает его обновить. После этого выручка растёт🔥
На первый взгляд всё ладно: хозяин доволен, цифры стали лучше.
Но если копнуть глубже, может оказаться, что выручка выросла только за счёт новых гостей, постоянные посетители стали приходить реже, а средний чек поднялся вместе с количеством жалоб🤦♂️
И тут открывается истинна: смотреть только на одну метрику опасно.
Сам по себе рост выручки ещё не означает, что решение было верным.
Вполне может статься, что сработал эффект новизны: пришли новые люди, им стало любопытно, а вот ядро аудитории начало отваливаться.
А коли уходят постоянные посетители, для бизнеса это уже тревожный знак.
Потому в A/B-тестах важно смотреть шире.
Вот несколько вещей, которые действительно нужно проверять.
1️⃣ Не сломали ли вы что-то рядом
Целевая метрика может вырасти, но вместе с ней могут просесть соседние показатели: retention, качество пользователей, глубина использования продукта и другие важные метрики.
Это как с машиной: можно сделать двигатель мощнее, и она поедет быстрее.
Но ежели при этом она начнёт хуже тормозить, вряд ли такое улучшение можно назвать удачным.
2️⃣ Держится ли эффект во времени
На всё новое люди часто реагируют положительно.
Просто потому, что это новое, непривычное и притягивает внимание.
Например, вы сделали перестановку мебели в квартире. Первые несколько дней всё кажется свежим и занятным.
Но потом проходит эффект новизны, и вы начинаете замечать, что жить удобнее не стало.
С продуктом ровно та же история.
Посему важно смотреть не только на первые дни после запуска изменений, но и на то, что происходит дальше.
3️⃣ Одинаков ли эффект для разных групп пользователей
Средний результат по продукту может выглядеть хорошо.
Но если разложить данные по сегментам, окажется, что рост был только у одной группы, а другой стало хуже.
У новичков метрика выросла, а у старых пользователей просела.
Именно поэтому полезно сегментировать результаты.
На что обычно стоит смотреть:
- Давность регистрации.
- Уровень активности.
- Пол и возраст.
- Тип пользователя или род деятельности, если платформа это позволяет.
Одна и та же функция может отлично зайти новичкам, но раздражать пользователей, которые давно привыкли к старому сценарию.
Или наоборот: активные пользователи быстро увидят ценность изменения, а редкие вообще не заметят разницы.
Но и тут важно не переусердствовать ❗️
Не стоит раскладывать данные на все возможные сто разрезов просто потому, что вы можете это сделать.
Иначе анализ легко превращается в охоту за случайными совпадениями.
Сегментация должна быть логичной и объяснимой.
Если вы не можете словами обосновать, зачем смотрите именно этот разрез и что хотите в нём проверить, скорее всего, он вам не нужен.
В итоге сильный анализ A/B-теста не сводится к выводу в духе «метрика выросла, значит всё хорошо».
Сильный анализ это ответ сразу на несколько вопросов:
- у кого именно выросла метрика;
- за счёт чего произошёл рост;
- не сломали ли вы что-то рядом;
и можно ли после этого раскатывать решение на весь продукт.
Вот тогда тест и впрямь радует глаз, а не создаёт красивую иллюзию роста.
А у вас от слова A/B тесты трясутся поджилки, али наоборот воодушевление испытываете ?👇
#собесы
@data_dzen🙂
Для многих сия тема кажется весьма простой: показали одной группе старую версию, другой новую, метрика выросла, стало быть тест успешен.
Но на практике именно тут и скрывается одна из главных ловушек.
Смысл A/B-теста не в одном лишь ответе на вопрос, выросла метрика или нет.
Куда важнее понять: можно ли вообще считать сей рост полезным для продукта
Разберём на простом примере.
Допустим, в городе есть кофейня. Долгое время она работает с одним меню, а потом решает его обновить. После этого выручка растёт
На первый взгляд всё ладно: хозяин доволен, цифры стали лучше.
Но если копнуть глубже, может оказаться, что выручка выросла только за счёт новых гостей, постоянные посетители стали приходить реже, а средний чек поднялся вместе с количеством жалоб
И тут открывается истинна: смотреть только на одну метрику опасно.
Сам по себе рост выручки ещё не означает, что решение было верным.
Вполне может статься, что сработал эффект новизны: пришли новые люди, им стало любопытно, а вот ядро аудитории начало отваливаться.
А коли уходят постоянные посетители, для бизнеса это уже тревожный знак.
Потому в A/B-тестах важно смотреть шире.
Вот несколько вещей, которые действительно нужно проверять.
Целевая метрика может вырасти, но вместе с ней могут просесть соседние показатели: retention, качество пользователей, глубина использования продукта и другие важные метрики.
Это как с машиной: можно сделать двигатель мощнее, и она поедет быстрее.
Но ежели при этом она начнёт хуже тормозить, вряд ли такое улучшение можно назвать удачным.
На всё новое люди часто реагируют положительно.
Просто потому, что это новое, непривычное и притягивает внимание.
Например, вы сделали перестановку мебели в квартире. Первые несколько дней всё кажется свежим и занятным.
Но потом проходит эффект новизны, и вы начинаете замечать, что жить удобнее не стало.
С продуктом ровно та же история.
Посему важно смотреть не только на первые дни после запуска изменений, но и на то, что происходит дальше.
Средний результат по продукту может выглядеть хорошо.
Но если разложить данные по сегментам, окажется, что рост был только у одной группы, а другой стало хуже.
У новичков метрика выросла, а у старых пользователей просела.
Именно поэтому полезно сегментировать результаты.
На что обычно стоит смотреть:
- Давность регистрации.
- Уровень активности.
- Пол и возраст.
- Тип пользователя или род деятельности, если платформа это позволяет.
Одна и та же функция может отлично зайти новичкам, но раздражать пользователей, которые давно привыкли к старому сценарию.
Или наоборот: активные пользователи быстро увидят ценность изменения, а редкие вообще не заметят разницы.
Но и тут важно не переусердствовать ❗️
Не стоит раскладывать данные на все возможные сто разрезов просто потому, что вы можете это сделать.
Иначе анализ легко превращается в охоту за случайными совпадениями.
Сегментация должна быть логичной и объяснимой.
Если вы не можете словами обосновать, зачем смотрите именно этот разрез и что хотите в нём проверить, скорее всего, он вам не нужен.
В итоге сильный анализ A/B-теста не сводится к выводу в духе «метрика выросла, значит всё хорошо».
Сильный анализ это ответ сразу на несколько вопросов:
- у кого именно выросла метрика;
- за счёт чего произошёл рост;
- не сломали ли вы что-то рядом;
и можно ли после этого раскатывать решение на весь продукт.
Вот тогда тест и впрямь радует глаз, а не создаёт красивую иллюзию роста.
А у вас от слова A/B тесты трясутся поджилки, али наоборот воодушевление испытываете ?
#собесы
@data_dzen
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM