Загрузка данных


День 07. «Зашёл и не вернулся»
ОБРАТНЫЙ КАНАЛ · ВХОДЯЩИЙ ПАКЕТ

отправлено 2030 адресат ты

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

Представь: ты знаешь, как улучшить приложение. ИИ провел оценку идеи, объяснил, почему она прекрасна, нашел аргументы и уже готов писать код. А теперь попроси его доказать, что делать этого не стоит. Тоже объяснит. И тоже убедительно.
Хм. Оба ответа есть. Решения по-прежнему нет. В 2030 с этим сталкиваешься постоянно. Воплотить замысел стало так быстро, что успеваешь сделать целый продукт, пока еще не понимаешь, кому он нужен. ИИ может помочь тебе на каждом шаге. Даже очень красиво объяснить, зачем мы потратили время впустую.
Я хочу предложить тебе научиться замечать это раньше. Нам с тобой еще много всего предстоит придумать. И кое-что действительно стоит сделать.

Сегодня твоя роль UX/UI-дизайнер или продакт-менеджер (все зависит от компании, в которой будешь работать). У тебя будет право потратить на одну идею время других людей. Что ты захочешь знать прежде, чем скажешь им: «Делаем»?
Интересно, понравится тебе такая работа? У меня есть предположения, учитывая мою профессию сейчас... Но давай к делу.

💡Ситуация

Lichess – бесплатный шахматный сайт с открытым кодом. На нём нет рекламы и платных функций, он живёт на пожертвования и никого не удерживает силой.
Этим летом месячная аудитория Lichess побила рекорд, и в команде заговорили о росте. Но аналитики заметили: новички регистрируются, играют несколько партий - и пропадают. Задачу на квартал сформулировали одной фразой:нужно лучше удерживать новичков.
Что именно не так, никто не знает. Есть выгрузка активности за 3 месяца, когортный отчёт без пояснений, пачка сигналов от пользователей и коллег.
И бюджет на одно изменение.

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

Кейс вымышленный: данные сгенерированы для проекта и не являются статистикой Lichess. Принципы и механики сайта - настоящие.

img1

Старт работы

SQL на сегодня
Задание 1. Рекорд или проблема
Задание 2. Когортный отчёт
Задание 3. Почему уходят
Задание 4. Что делать первым
Задание 5. Решение
Задание 6. Разложить проблемы на измеримые составляющие
Задание 7 Bonus. Прототип
Чек-поинт

Старт работы
Как работать с проектом
Как распределяются баллы на проверке
Материалы
SQL на сегодня
Всё то же, что вчера: 6 конструкций (SELECT … FROM …, WHERE, ORDER BY, COUNT / SUM / AVG / MIN / MAX / ROUND, GROUP BY, HAVING) и приём "доля - это AVG от условия". Сложное уже сделано за тебя: в таблице act готовы неделя, месяц, месяц регистрации и номер дня с регистрации, в таблице newcomers - что каждый новичок делал в день регистрации и вернулся ли он потом.
Новое на сегодня - в materials/sql_rus.md: даты и LIKE, IS NOT NULL, группировка по условию и ловушка с делением целых чисел.
Проверь, что всё работает: python3 src/db.py. Контрольная точка: в users 24907 строк, в activity - 207640.

Задание 1. Рекорд или проблема
Месячная аудитория побила рекорд. Прежде чем удерживать новичков, проверь, есть ли проблема вообще - и какое число её показывает.
Что такое DAU, WAU, MAU и “липкость” - в materials/metrics_rus.md.

Что сделать в src/ex01.md:

1. Период и пользователи.
Контрольный вопрос: почему пользователей больше, чем зарегистрировалось за период, и кого из них ты будешь считать новичком?

2. DAU по дням.
Посчитай DAU за каждый день и посмотри на него графиком — через src/chart.py. Выпиши 3 дня с самым большим DAU и один — с самым маленьким.
Контрольный вопрос: что повторяется каждую неделю? Какие из выписанных дней — это повторение, а какие — событие, и как ты их отличаешь?

3. WAU по неделям.
Контрольный вопрос: все ли недели в выгрузке полные? Каким запросом ты это проверишь и что будет, если сравнить неполную неделю с полной?

4. MAU по месяцам.
Контрольный вопрос: все ли месяцы полные? Почему MAU месяца не равен сумме DAU за этот месяц?

5. Средний DAU и липкость.
Контрольный вопрос: как менялась липкость, пока рос MAU, и что это говорит о тех, кто пришёл?

6. Новички месяца в MAU.
Раздели MAU каждого месяца на тех, кто зарегистрировался в этом же месяце, и остальных. Посчитай липкость для каждой части.
Контрольный вопрос: чья липкость изменилась, а чья осталась прежней?

7. Кто остался.
Посчитай, сколько новичков июля заходили в августе и сколько новичков августа — в сентябре. Сравни доли.
Контрольный вопрос: если бы новички августа удерживались так же, как новички июля, сколько из них заходило бы в сентябре? Сколько людей мы недосчитались?

Вывод. Есть ли проблема? Одно число, которое это показывает, — и почему рекордный MAU её не опровергает.
Контрольная точка: DAU 1 июля — 1109.
Проверка: python3 src/run_sql.py src/ex01.md.\

Задание 2. Когортный отчёт
Кто-то из аналитиков выгрузил когортный отчёт и ничего к нему не написал. Что происходило с новичками - выясни самостоятельно, по отчёту. Как устроен когортный отчёт - в materials/metrics_rus.md.

Что сделать в src/ex02.md:

1. Что бросается в глаза.
Открой data/cohort_report.csv в LibreOffice Calc и найди не меньше 4-х необычных мест. Для каждого запиши адрес ячейки или области, что видно, как это можно объяснить и как проверить объяснение.
Контрольный вопрос: что в твоих находках видно прямо в отчёте, а что — твоя догадка о причине?

2. Удержание в процентах.
Посчитай запросом к таблице cohorts удержание дня 1, 7 и 30 для каждой когорты.
Контрольный вопрос: какая когорта лучшая в штуках и какая — в процентах? Почему картина поменялась?

3. Периоды.
Раздели когорты на периоды, границы проведи сам по отчёту. Для каждого периода посчитай, сколько в нём когорт и новичков, и удержание дня 1, 7 и 30.
Контрольный вопрос: почему границы проходят именно там? Удержание периода можно посчитать от сумм или как среднее процентов когорт — какой способ ты выберешь и насколько отличаются числа? По скольким когортам посчитано удержание дня 7 и дня 30?

4. Самая странная находка.
Назови календарную дату, в которую эта находка обнаруживается, и подтверди находку запросом не к таблице cohorts.
Контрольный вопрос: это случилось только с новичками или со всеми? Какие числа удержания из-за этого нельзя брать как есть?

Вывод. Какие новички уходят и когда? Отличаются ли они от остальных новичков? С числами.

Проверка: python3 src/run_sql.py src/ex02.md.

Результат: src/ex02.md

Сейчас будет соблазн придумать за человека, почему он ушел. Мы с тобой это умеем: быстро находим объяснение, которое нам нравится, и перестаем искать. Представь, что кто-то вот так же объяснил твой уход. Даже не спросил. Уже придумал, какой кнопкой тебя вернуть. Хочется ему что-нибудь сказать? Вот с этим чувством и рассмотри путь новичка.

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

Что сделать в src/ex03.md:

1. Путь новичка.
Открой lichess.org в приватном окне браузера — играть можно без регистрации. Пройди путь новичка в день регистрации: главная, первая партия, экран после партии, что дальше. Если сайт не открывается — по скриншотам из materials/screens/. Запиши путь таблицей, не меньше 6 шагов: что видит новичок, что может сделать, где может уйти.
Контрольный вопрос: на каком шаге новичку проще всего уйти и что ему в этот момент предлагает сайт?

2. Сигналы.
Прочитай materials/signals_rus.md. Для каждого сигнала реши: к какой гипотезе он относится (может, он вообще не про удержание), веришь ли ты ему и почему.
Контрольный вопрос: какой сигнал самый громкий, а какой - самый надёжный? Есть ли среди сигналов такой, который опасно брать в работу, и почему?

3. Гипотезы.
4 гипотезы от команды:

№	Гипотеза	Суть
H1	После поражения - тупик	Новичок проигрывает первые партии, а экран после партии предлагает только играть дальше. Ничего не объясняет и не помогает понять ошибку.
H2	Быстрая игра слишком быстрая	Новичок выбирает контроль времени, не понимая, что это значит, и проигрывает по времени.
H3	Обучение спрятано	Уроки и задачи держат новичков, но новичок их не находит.
H4	Первый рейтинг слишком высокий	Все начинают с рейтинга 1500, и новичка сводят с игроками сильнее него.
4. Можешь добавить свою — H5. Она должна быть про механику Lichess, опираться на путь новичка или на сигналы и проверяться данными (может быть и “инсайт” - непроверяемая на данных гипотеза, в которую ты очень веришь по какой-то причине). Для каждой гипотезы запиши: на каком шаге она живёт; что будет видно в данных, если она верна; запрос; результат; вердикт — подтверждается, не опровергнута, но есть другое объяснение, опровергнута или не проверить этими данными. Если не проверить - каких данных не хватает.
Контрольный вопрос: какой результат запроса опроверг бы гипотезу? Для гипотезы с самым сильным вердиктом — какое другое объяснение даёт тот же результат?

5. Проверка на честность.
Возьми гипотезу, которая выглядит сильнее всех, и повтори проверку внутри одного периода из Задания 2.
Контрольный вопрос: эффект остался, изменился или пропал? Почему это важно?

Вывод. Какие гипотезы идут в Задание 4 и с каким вердиктом.

Проверка: python3 src/run_sql.py src/ex03.md.

Результат: src/ex03.md

Задание 4. Что делать первым
Что сделать:

1. Охват.
Реши, за какой месяц считать охват. В src/ex04.md — по запросу на каждую гипотезу: сколько новичков в месяц она затрагивает. Если посчитать охват запросом нельзя — оцени его и запиши, из чего исходишь.
Контрольный вопрос: почему именно этот месяц и как изменится охват, если взять другой? Кого ты считаешь затронутым: всех, кто увидит изменение, или только тех, у кого есть проблема?

2. Таблица.
Заполни src/rice.csv для всех гипотез, кроме опровергнутых в Задании 3: охват, влияние, уверенность, трудозатраты, принципы, комментарий. Что такое RICE - materials/rice_rus.md.

3. Трудозатраты.
Для каждой гипотезы опиши решение, которое оцениваешь, и разложи человеко-дни по ролям из materials/budget_rus.md.
Контрольный вопрос: укладывается ли каждое решение в лимиты квартала? Что станет с оценкой, если решить ту же гипотезу дешевле или дороже?

4. Оценка.
Запусти запрос из раздела “Таблица RICE” в src/ex04.md и найди лидера.
Контрольный вопрос: совпал ли лидер с тем, кого ты ждал до подсчёта? Если нет - что тебя удивило?

Выбор. Какую гипотезу берёшь в Задание 5 и почему. Если лидер не укладывается в принципы Lichess - что берёшь вместо него.

Закоммить rice.csv и ex04.md до того, как начнёшь Задание 5, с сообщением rice. На защите проверяющий посмотрит git log: коммит rice должен быть раньше первого коммита, который меняет ex05.md. Менять оценку потом можно, но тогда в ex05.md честно напиши, что поменял и почему.

Проверка: python3 src/run_sql.py src/ex04.md.

Результат: src/ex04.md, src/rice.csv

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

Задание 5. Решение
Спроектируй одно изменение для гипотезы, выбранной в Задании 4. Не экран мечты, а изменение, которое команда сделает за 6 недель и за деньги из materials/budget_rus.md - и которое не стыдно показать сообществу Lichess.

Каркас. Возьми шаблон под свою гипотезу из materials/wireframes/ и скопируй его к себе:

Гипотеза	Шаблон
H1	h1_posle_partii.html - экран после партии
H2	h2_bystraya_igra.html - быстрая игра на главной
H3	h3_obuchenie.html - главная и вход в обучение
H4	h4_reiting.html - поиск соперника и рейтинг новичка
своя	svoya.html - пустой каркас
Например: cp materials/wireframes/h1_posle_partii.html src/wireframe.html. Открой src/wireframe.html в редакторе и в браузере. Слева - "Было": набросок экрана. Сверь его с живым сайтом или скриншотом и поправь, если что-то не так. Справа - "Стало": пока копия "Было". Меняй её: новые элементы помечай class="new", убранные - class="gone", ставь пометки и объясняй их под каркасом. Как это делается - в комментарии в начале шаблона. Каркас - серые блоки и подписи, без цвета и красоты: красота - в бонусе.

Что сделать в src/ex05.md:

Что меняем. Одно изменение, на каком экране. Что означает каждая пометка каркаса.
Для кого. Кто увидит изменение, как сайт это определит, сколько человек в месяц.
Чем платим. Смета по ролям и человеко-дням по budget_rus.md: итог в рублях и проверка лимитов. Плюс то, что не измеряется в рублях: место на экране, привычки опытных игроков, время до результата, что не успеем сделать.
Что измерим. Главная метрика - через поля таблицы newcomers - и её значение сейчас, запросом. Цель, срок и с кем сравниваешь. Ограничитель - метрика, которая не должна ухудшиться, - и её значение сейчас.
Что докажет, что мы ошиблись - критерий ошибки. Условие с числом и сроком, записанное до запуска. Что делаем, если оно выполнилось.
Принципы Lichess. Какой принцип решение задевает сильнее всего и почему не нарушает. Как от изменения отказаться.
Что может пойти не так. Один главный риск и что с ним делаем.
Проверка: python3 src/run_sql.py src/ex05.md, каркас - в браузере.

Результат: src/ex05.md, src/wireframe.html

Задание 6. Разложить проблему на измеримые составляющие
Модель «Айсберг» помогает замечать закономерности, разбирать устройство процесса и проверять исходные предположения.\ Сегодня продолжаем развивать Аналитическое мышление: будем уточнять, какие конкретные затруднения могут скрываться за общей формулировкой проблемы и как их проверить.

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

Создай src/problem_decomposition.md.
Выбери одну гипотезу из Задания 3, которую имеющиеся данные не позволяют проверить полностью. Запиши её и сошлись на свой разбор: что уже проверено и в чём остаётся неопределённость. С помощью инструмента уточни, какие разные затруднения могут скрываться за её общей формулировкой.
Выдели 3 разные по смыслу составляющие. Для каждой укажи:

Что может происходить. Конкретное действие или затруднение в начале использования Lichess: для какой группы и на каком шаге пути оно возникает. Это возможное объяснение, пока оно не подтверждено.
Как проверить. Что наблюдать или измерять, по какому источнику и как получить показатель. Укажи единицы измерения и период, если он применим. Для доли определи числитель и знаменатель. Если данных в проекте нет, предложи, как их собрать, соблюдая принципы Lichess.
Что уже известно и чего не хватает. Какие результаты Задания 3 помогают проверить эту составляющую? Что они показывают и чего по ним утверждать нельзя? Можно ссылаться на уже выполненные запросы и наблюдения, не повторяя их. Если подходящих результатов нет, прямо укажи это.
Примеры для выбора
Краткий итог. Какую составляющую стоит проверить первой и почему? Как разные результаты этой проверки повлияют на выбор изменения? Назови конкретно, какое действие будет уместно при одном результате и какое — при другом. Не нужно проводить новое исследование или менять готовое решение. Достаточно предложить конкретные способы проверки, отделить известное от предположений и показать, что ещё стоит уточнить прежде, чем действовать. Переименование одного показателя или пересчёт из штук в проценты не создаёт новую составляющую. Сохрани результат коммитом и сделай пуш в ветку develop.

Результат: src/problem_decomposition.md — гипотеза со ссылкой на Задание 3, таблица из трёх составляющих и краткий итог. Проверка: при проверке оцениваются связь с гипотезой из Задания 3, различие составляющих, способы проверки и границы уже известных данных. В итоге понятно, что проверить первым и как результаты повлияют на выбор изменения.

Задание 7 Bonus. Прототип
С помощью ИИ собери прототип экрана "Стало" - такой, чтобы он был лучше, чем этот экран на Lichess сейчас, и при этом оставался Lichess: тот же стиль, те же принципы.

Прототип - src/prototype/index.html, открывается в браузере.
Рядом - два скриншота в .png: lichess.png - экран Lichess, с которым сравниваешь (с сайта или из materials/screens/), и prototype.png - твой прототип.
В src/ex07.md: как собирал и какие запросы давал ИИ; 3 вещи, которые ИИ сделал не так и исправлены тобой; 3 пункта, чем прототип лучше экрана Lichess, - каждый связан с гипотезой или метрикой из Задания 5.
Результат: src/prototype/, src/ex07.md