road/mapsВсе маршруты ↗

ОТКРЫТОЕ ОБУЧЕНИЕ / 05

Продуктовый аналитик

От поведения пользователей к проверяемым продуктовым решениям

21 этапов с отметкамиВ своём темпе

Как пройти маршрут

Начинайте без опыта в профессии. Результат маршрута — исследование поведения, система метрик и обоснованный план эксперимента. Переходите дальше, когда можете выполнить задание и объяснить результат.

Здесь 18 основных шагов и 3 шага углубления. Это самостоятельная часть единой программы аналитических профессий: другие карты проходить заранее не нужно. Разделы с одинаковой базой можно пропустить только после решения их задания без подсказки. Фиксированного срока и гарантии трудоустройства нет.

Работайте в цикле: прочитайте объяснение → попробуйте пример → выполните задание → откройте разбор → исправьте ошибку → сохраните результат. Одна отметка может потребовать нескольких занятий. Записывайте время и трудности первых трёх шагов, затем планируйте посильный темп. Обязательные задания основной части выполняются бесплатно. Для локальных программ нужен компьютер; ограничения ОС и доступа указаны в шагах.

Кейс «Круг» и данные вымышлены. На маленькой таблице удобно проверить вычисления руками; она не доказывает спрос, причинность или качество ML-модели. В самостоятельном проекте предстоит изменить данные и требования. Не загружайте реальные персональные или рабочие данные в публичные тренажёры.

Основной текст русский. Для английской документации ведите словарь: термин, смысл своими словами, пример. Перевод браузера допустим, но названия полей и код не переводите. Начните с одного абзаца документации за занятие и постепенно переходите к самостоятельному чтению.

ШагРезультат обученияЧасть
1Подготовить рабочее место и словарьОснова
2Проверять таблицы, доли и средниеОснова
3Получать строки и итоги с помощью SQLОснова
4Соединять таблицы без потери и удвоения строкОснова
5Использовать окна и проверять порядок событийОснова
6Написать первые программы на PythonОснова
7Запускать код в отдельном окружении и хранить версииОснова
8Обработать таблицу в pandas и сохранить проверкиОснова
9Сформулировать продуктовый вопрос и дерево метрикОснова
10Описать события и проверить сбор данныхОснова
11Посчитать воронку с окном конверсииОснова
12Считать удержание и зрелость когортОснова
13Связать поведение с экономикой продуктаОснова
14Освоить выборку и статистическую неопределённостьОснова
15Спроектировать и разобрать A/B-тестОснова
16Показать результат и выбрать следующий шагОснова
17Защитить самостоятельное продуктовое исследованиеОснова
18Проверить готовность и выбрать вакансииОснова
19Оценить размер теста и множественные проверкиУглубление
20Различать причинный эффект и изменение во времениУглубление
21Организовать работу над метриками и дальнейший ростУглубление
ОСНОВНОЙ МАРШРУТ

Шаг 1. Подготовить рабочее место и словарь

Разберём на примере

Сервис «Круг» сдаёт учебные комнаты по времени. Это вымышленный кейс: все числа и записи созданы для обучения. Начните с файлов, чтобы уметь повторить работу на другом компьютере. CSV — текстовая таблица: первая строка содержит имена столбцов, последующие строки — записи. Расширение файла обозначает его формат; переименование картинки в CSV таблицу не создаёт. В наших данных одна строка — одно бронирование, суммы хранятся целым числом евроцентов, даты — как год-месяц-день.

Скачать вымышленные бронирования (CSV). Для SQL позже понадобится готовая схема и те же строки.

Что прочитать и посмотреть

  1. LibreOffice: CSV — Импорт CSV: разделитель, кодировка и типы столбцов. Бесплатная справка, английский; приложение LibreOffice бесплатно.

Что сделать

  1. Создайте папку krug и внутри raw, work, results. Скачайте bookings.csv по ссылке в этом разделе и сохраните в raw; исходник больше не редактируйте.
  2. Откройте CSV в LibreOffice Calc: кодировка UTF-8, разделитель — запятая. Проверьте восемь столбцов и шесть строк данных. Сохраните рабочую копию в work в формате ODS.
  3. Создайте словарь с полями: столбец, смысл, тип, допустимые значения, единица измерения. Запишите вопросы о неизвестных правилах; не подставляйте догадки.

Что сохранить

Таблица, словарь восьми полей и журнал вопросов в results.

Как проверить себя

Снова откройте сохранённую таблицу. Идентификаторы u1 и A сохранились как текст, суммы 2000 не превратились в 20. Дата читается однозначно.

Разбор — откройте после своей попытки

booking_id обозначает бронирование; user_id — учебный код пользователя, room_id — комнату. minutes — длительность забронированного интервала. Для cancelled она не означает фактическое использование. Словарь должен прямо говорить об этом. Файл содержит 6 бронирований, но только 4 разных пользователя.

ОСНОВНОЙ МАРШРУТ

Шаг 2. Проверять таблицы, доли и средние

Разберём на примере

Руководитель просит «средний доход». Сначала уточните знаменатель: на бронирование, завершённый визит или пользователя. Доля — часть, делённая на целое: 1 отмена из 6 бронирований даёт 16,7%. Среднее чувствительно к большим значениям; медиана — середина отсортированного ряда. Возврат уменьшает поступления, но не превращает их в прибыль: расходы нам неизвестны. Не складывайте проценты разных групп и не считайте среднее средних без размеров групп.

Что прочитать и посмотреть

  1. LibreOffice: CSV — Импорт CSV: разделитель, кодировка и типы столбцов. Бесплатная справка, английский; приложение LibreOffice бесплатно.
  2. Introduction to Modern Statistics — Темы описания данных, вероятности, выборки, доверительных интервалов и проверки гипотез. Читайте только тему текущего шага и разбирайте один пример. Бесплатный учебник, английский.

Что сделать

  1. В рабочей таблице добавьте net_cents = charged_cents − refund_cents. Посчитайте сумму и переведите её в евро делением на 100.
  2. Отфильтруйте completed. Найдите среднюю и медианную длительность только этих визитов. Проверьте числа ручным расчётом.
  3. Сравните долю отмен с долей пользователей, у которых была отмена. Подпишите числитель и знаменатель каждой метрики.

Что сохранить

Лист расчётов с формулами, единицами измерения и тремя выводами.

Как проверить себя

Пустая ячейка, ноль и отсутствующий пользователь различаются. Формула на отфильтрованном листе не должна случайно включать скрытую отмену.

Разбор — откройте после своей попытки

Поступления после возвратов: (2000+3000+4000+2000+3000−1000)/100 = 130 евро. Завершённые длительности: 60,90,120,60,90; среднее 84, медиана 90 минут. Отменено 1/6 бронирований; отмена есть у 1/4 пользователей. Эти проценты отвечают на разные вопросы.

ОСНОВНОЙ МАРШРУТ

Шаг 3. Получать строки и итоги с помощью SQL

Разберём на примере

SQL — язык запросов к таблицам. SELECT выбирает столбцы, WHERE оставляет строки по условию, GROUP BY объединяет строки для расчёта итогов. COUNT(*) считает строки; COUNT(column) пропускает NULL — неизвестные значения. Начинайте с маленького набора, в котором можете проверить каждый результат руками. Учебные запросы выполняются в SQLite Fiddle; PostgreSQL появится отдельно там, где нужны его особенности.

SELECT room_id, SUM(charged_cents-refund_cents) AS net_cents
FROM bookings WHERE status='completed'
GROUP BY room_id ORDER BY room_id;

Что прочитать и посмотреть

  1. SQLBolt — Уроки 1–12: SELECT, условия, JOIN, NULL и группировка. Выполните встроенные задания. Бесплатно, английский, без установки.
  2. SQLite Fiddle — Официальная SQL-песочница: вставьте учебный SQL и нажмите Run. Бесплатно, английский интерфейс; работаем только с вымышленными данными.

Что сделать

  1. Пройдите SQLBolt 1–5 и 10–12. Затем откройте SQLite Fiddle, вставьте содержимое bookings.sql из первого шага и выполните его один раз в пустой базе.
  2. Напишите SELECT для completed, затем итог net_cents по комнате. Используйте SUM(charged_cents-refund_cents).
  3. Добавьте условие day >= '2026-09-02'. Объясните, почему фильтр по строкам ставится до группировки. Сохраните запросы в results/queries.sql.

Что сохранить

Три SQL-запроса и таблица ожидаемых результатов.

Как проверить себя

Без фильтра итог A равен 6000, B — 7000 евроцентов. После фильтра даты A=2000, B=7000. Укажите, какие строки сформировали результат.

Разбор — откройте после своей попытки

Запрос ниже считает поступления после возвратов по комнатам. Cancelled с нулевыми суммами не меняет итог, но явный фильтр фиксирует бизнес-правило. Если повторно создать таблицу в той же базе, будет ошибка: начните новую сессию, не скрывайте ошибку.

ОСНОВНОЙ МАРШРУТ

Шаг 4. Соединять таблицы без потери и удвоения строк

Разберём на примере

Справочник хранит описание объекта один раз: код A соответствует комнате «Тихая». Первичный ключ уникально называет запись; внешний ключ связывает запись с другим объектом. JOIN сопоставляет строки по условию. Если одному бронированию соответствуют два платежа, после соединения оно появится дважды. Поэтому перед соединением назовите зерно обеих таблиц — что означает одна строка. LEFT JOIN сохраняет строки слева даже без пары; INNER JOIN оставляет только совпадения.

Что прочитать и посмотреть

  1. SQLBolt — Уроки 1–12: SELECT, условия, JOIN, NULL и группировка. Выполните встроенные задания. Бесплатно, английский, без установки.
  2. PostgreSQL: учебник — Разделы The SQL Language и Advanced Features: таблицы, соединения, внешние ключи, транзакции. Бесплатно, английский; команды PostgreSQL не переносите в SQLite без проверки.

Что сделать

  1. Пройдите SQLBolt 6–9. Создайте rooms(room_id TEXT PRIMARY KEY, name TEXT) и добавьте A/Тихая, B/Большая.
  2. Соедините bookings и rooms. Сверьте COUNT(*) и сумму net_cents до и после соединения.
  3. В отдельной CTE создайте платежи (1,1000),(1,1000),(2,2000). Соедините с bookings и объясните, почему сумма charged_cents теперь не является суммой всех бронирований. Сначала сгруппируйте платежи по booking_id.

Что сохранить

Запрос с соединением, проверками количества строк и пояснением отношения «один ко многим».

Как проверить себя

Со справочником остаются 6 строк и 13000 евроцентов net. В варианте с платежами бронирование 1 повторяется; проверка это обнаруживает.

Разбор — откройте после своей попытки

LEFT JOIN rooms USING(room_id) сохраняет шесть бронирований. Платежи имеют другое зерно: один перевод денег. Суммировать поля бронирования после такого соединения опасно. Сначала SELECT booking_id, SUM(amount) FROM payments GROUP BY booking_id; затем соединяйте этот итог.

ОСНОВНОЙ МАРШРУТ

Шаг 5. Использовать окна и проверять порядок событий

Разберём на примере

Оконная функция считает по группе, сохраняя исходные строки. ROW_NUMBER присваивает номер в заданном порядке; LAG возвращает значение предыдущей строки. В отличие от GROUP BY, можно одновременно видеть отдельное бронирование и место этого бронирования в истории пользователя. Если даты совпадают, добавьте booking_id в ORDER BY, иначе порядок не определён полностью. Дата бронирования и дата события оплаты могут быть разными: выберите нужную заранее.

Что прочитать и посмотреть

  1. SQLite: оконные функции — Примеры row_number(), PARTITION BY и сумм по окну. Бесплатная документация, английский.

CTE задаёт именованный промежуточный результат: WITH имя AS (запрос). Внешний SELECT затем читает его как таблицу. Так можно сначала вычислить номер строки, а затем отфильтровать его.

Что сделать

  1. Для каждого user_id пронумеруйте бронирования по day, booking_id. Выведите первые бронирования через CTE и внешний WHERE rn=1.
  2. Посчитайте накопленные net_cents по дням: сначала сгруппируйте по day, затем примените SUM(...) OVER (ORDER BY day ROWS UNBOUNDED PRECEDING).
  3. Добавьте копию даты с новым booking_id в рабочую базу. Убедитесь, что порядок внутри пользователя остаётся определённым; исходный файл не меняйте.

Что сохранить

Два оконных запроса и объяснение порядка вычислений.

Как проверить себя

Первые бронирования: 1,2,4,5. Дневные net: 4000,4000,5000; накопленные: 4000,8000,13000.

Разбор — откройте после своей попытки

Фильтрацию rn=1 выполняют снаружи CTE, после расчёта окна. Для u1 первой будет запись 1, следующей — отмена 3. Исключение cancelled до окна меняет вопрос на «первое завершённое бронирование»; явно укажите, какой вопрос решаете.

WITH numbered AS (
 SELECT *, ROW_NUMBER() OVER (
   PARTITION BY user_id ORDER BY day, booking_id
 ) AS rn
 FROM bookings
)
SELECT user_id, booking_id FROM numbered
WHERE rn = 1 ORDER BY user_id;

WITH daily AS (
 SELECT day, SUM(charged_cents - refund_cents) AS net
 FROM bookings GROUP BY day
)
SELECT day, net,
 SUM(net) OVER (ORDER BY day ROWS UNBOUNDED PRECEDING) AS cumulative_net
FROM daily ORDER BY day;
ОСНОВНОЙ МАРШРУТ

Шаг 6. Написать первые программы на Python

Разберём на примере

Программа выполняет инструкции по порядку. Переменная связывает имя со значением; список хранит несколько значений; цикл повторяет действия. Условие if выбирает ветку. Функция объединяет действия и возвращает результат через return. Начните без библиотек: аналитик или инженер должен понимать, что происходит с одной записью, до обработки тысяч строк. Текст "2000" и число 2000 имеют разные типы; преобразование int может завершиться ошибкой, если текст не является числом.

Что прочитать и посмотреть

  1. Основы Python — Яндекс Образование — Темы ввода и вывода, условий, циклов, коллекций и функций: решайте задачи по порядку до уверенного решения без подсказки. Бесплатный текст на русском; тренажёр может потребовать аккаунт.
  2. Учебник Python — Разделы An Informal Introduction, More Control Flow Tools, Data Structures и Errors and Exceptions. Бесплатно, английский; это справочник после первых упражнений, а не единственное объяснение с нуля.

Что сделать

  1. Пройдите темы ввода, условий, циклов, списков и функций в русскоязычном учебнике. Решите минимум по три задачи каждой темы самостоятельно.
  2. Напишите функцию net(charged, refund), которая возвращает разность. Для списка пар [(2000,0),(3000,1000),(0,0)] получите общий итог.
  3. Добавьте проверки: refund неотрицателен и не больше charged. Для неверных данных выдавайте ValueError с понятным сообщением. Проверьте ноль, полный возврат и возврат больше оплаты.

Что сохранить

Файл basics.py, пять коротких примеров вызова и объяснение одной ошибки.

Как проверить себя

Итог примера равен 4000. net(0,0) возвращает 0, net(2000,2000) — 0, net(100,200) сообщает об ошибке.

Разбор — откройте после своей попытки

Внутри функции сначала проверьте if charged < 0 or refund < 0 or refund > charged: raise ValueError("Некорректный возврат"). Затем return charged-refund. Общий итог получите циклом с накоплением. В таком виде правило допускает полный возврат и запрещает превышение оплаты.

ОСНОВНОЙ МАРШРУТ

Шаг 7. Запускать код в отдельном окружении и хранить версии

Разберём на примере

Окружение отделяет библиотеки проекта от других программ. Терминал — окно для текстовых команд; его текущая папка определяет, где создаются файлы. Git сохраняет историю изменений: commit — именованный снимок выбранных файлов. Репозиторий может оставаться на компьютере, публикация не требуется. Для начала достаточно Python 3, текстового редактора и терминала; Jupyter — необязательная удобная оболочка для исследований.

Что прочитать и посмотреть

  1. Python: venv — Creating virtual environments и команды активации для своей ОС. Бесплатно, английский.
  2. Pro Git — Главы «Основы Git»: создание репозитория, запись изменений, история, отмена изменений. Бесплатный текст на русском.
  3. Установить Python — Выберите установщик Python 3 для своей ОС. На Linux при отсутствии venv установите пакет python3-venv через менеджер пакетов своей системы. Бесплатно; справка на английском.

Что сделать

  1. Установите Python 3 по ссылкам из официального учебника. Откройте терминал в krug. На Windows проверьте py --version, на macOS/Linux — python3 --version.
  2. Создайте окружение: Windows — py -m venv .venv, macOS/Linux — python3 -m venv .venv. Запускайте код интерпретатором .venv/Scripts/python.exe (Windows) или .venv/bin/python (macOS/Linux). Это работает без активации.
  3. Установите pandas командой выбранного интерпретатора -m pip install pandas. Сохраните версии через -m pip freeze > requirements.txt. Создайте .gitignore с .venv/ и __pycache__/. Выполните git init, git add basics.py requirements.txt .gitignore, git commit -m "First calculation". При первом commit настройте имя и email локально по Pro Git.

Что сохранить

Рабочее окружение, requirements.txt, первый commit и инструкция запуска в обычном текстовом файле.

Как проверить себя

Запустите basics.py из нового окна терминала. Объясните, какой Python использован. Проверьте git status: окружение не попало в историю.

Разбор — откройте после своей попытки

Команда .venv/bin/python basics.py запускает файл на macOS/Linux; на Windows используйте .venv/Scripts/python.exe basics.py. Путь к программе и путь к файлу — разные аргументы. Если терминал не видит файл, сначала проверьте текущую папку; переустановка библиотек здесь не поможет.

ОСНОВНОЙ МАРШРУТ

Шаг 8. Обработать таблицу в pandas и сохранить проверки

Разберём на примере

DataFrame — таблица в памяти Python. Чтение CSV не гарантирует правильность типов: идентификаторы, пропуски и числа требуют проверки. Фильтр выбирает строки, groupby собирает их в группы, merge соединяет таблицы. Проверки assert останавливают учебный скрипт при нарушении ожидания; для рабочих загрузок позже понадобится явная обработка ошибок. Не исправляйте исходный CSV вручную: код преобразования должен объяснять каждую правку.

Что прочитать и посмотреть

  1. pandas: вводные уроки — Read and write tabular data, Select a subset, Calculate summary statistics, Combine data. Бесплатно, английский.

Что сделать

  1. Создайте analysis.py рядом с raw. Прочитайте raw/bookings.csv с помощью pd.read_csv. Выведите shape, dtypes, isna().sum() и число дубликатов booking_id.
  2. Добавьте net_cents и посчитайте итог по room_id. Сравните результат с ручным расчётом; сохраните results/by_room.csv без индекса.
  3. В рабочей копии добавьте дубликат строки и пустую сумму. Напишите проверки, которые обнаружат обе ошибки. Не заменяйте все пропуски нулями: сначала решите, что означает отсутствие значения.

Что сохранить

Повторяемый скрипт, итоговый CSV и проверка двух испорченных входов.

Как проверить себя

При чистом запуске итог A=6000, B=7000. Повторный запуск даёт тот же файл. Ошибочный вход обнаруживается до публикации результата.

Разбор — откройте после своей попытки

Проверки: assert df.booking_id.is_unique; assert df[["charged_cents","refund_cents"]].notna().all().all(). Затем df["net_cents"]=df.charged_cents-df.refund_cents. Группировка: df.groupby("room_id",as_index=False)["net_cents"].sum(). Отсутствующее число может означать сбой выгрузки, поэтому ноль без объяснения недопустим.

ОСНОВНОЙ МАРШРУТ

Шаг 9. Сформулировать продуктовый вопрос и дерево метрик

Разберём на примере

Команда «Круга» предлагает упростить экран бронирования. Продуктовый аналитик помогает решить, стоит ли внедрять изменение и как проверить его пользу. Метрика — число с однозначным правилом расчёта. Дерево метрик связывает итог с составляющими: поступления = число платящих пользователей × средние поступления на платящего. Рост числа нажатий сам по себе не доказывает пользу: пользователи могут чаще ошибаться.

Что прочитать и посмотреть

  1. Amplitude: воронка — Порядок событий, уникальные пользователи и окно конверсии. Бесплатная документация, английский; аккаунт продукта для задания не нужен.

Что сделать

  1. Напишите одностраничный запрос: какое решение принимаем, для кого, к какому сроку, какие данные доступны.
  2. Определите основную метрику — долю пользователей с завершённым бронированием за 7 дней после регистрации. Укажите календарь, часовой пояс, критерий регистрации и завершения.
  3. Добавьте две защитные метрики: отмены и обращения в поддержку. Нарисуйте дерево поступлений и назовите возможное противоречие между его ветвями.

Что сохранить

Карточка решения и словарь пяти метрик.

Как проверить себя

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

Разбор — откройте после своей попытки

Упрощение может увеличить число бронирований и одновременно долю отмен. Поэтому решение по одному числу опасно. «Конверсия выросла» требует уточнения: у кого, из какого события в какое и за какое окно. Семидневная метрика требует дождаться полного окна наблюдения.

ОСНОВНОЙ МАРШРУТ

Шаг 10. Описать события и проверить сбор данных

Разберём на примере

Событие — запись о произошедшем действии. event_name описывает действие, event_time — время, user_id — участника, event_id — уникальный идентификатор записи. Свойства уточняют контекст: booking_id, room_id, версия приложения. План событий — договор с разработчиком: когда отправляется запись, какие поля обязательны и как проверить её получение. Повторная отправка при сетевой ошибке не должна превращаться в два действия.

Что прочитать и посмотреть

  1. Amplitude: план событий — События и их свойства в tracking plan. Бесплатная документация, английский; платные функции для задания не требуются.

Что сделать

  1. Опишите события registration_completed, room_viewed, booking_started, booking_completed. Для каждого задайте момент отправки, обязательные свойства и владельца.
  2. Создайте журнал из 12 вымышленных событий четырёх пользователей. Включите повтор event_id, неизвестное имя события и завершение без booking_id.
  3. Составьте проверки схемы, дублей и последовательности. Исправьте только рабочую копию, сохранив причины исключения каждой строки.

Что сохранить

План событий и журнал проверки: правило, плохая строка, действие.

Как проверить себя

Оплата подтверждается серверным фактом по договорённости кейса; нажатие кнопки не выдаётся за завершённое бронирование.

Разбор — откройте после своей попытки

Повтор одного event_id можно удалить после проверки одинакового содержимого. Два разных event_id с одинаковым booking_id требуют выяснения семантики. Отсутствие booking_started иногда вызвано потерей телеметрии: нельзя автоматически объявлять такое бронирование невозможным.

ОСНОВНОЙ МАРШРУТ

Шаг 11. Посчитать воронку с окном конверсии

Разберём на примере

Воронка показывает, сколько участников проходит последовательность событий. Важно считать пользователей, а не число кликов, соблюдать порядок и ограничить время перехода. Для упражнения у шести зарегистрированных пользователей есть просмотр комнаты; u1,u2,u3,u4 начали бронирование; u1,u2,u3 завершили его. У u3 завершение произошло через 9 дней после регистрации, у остальных — в течение суток. Окно конверсии выбирают до расчёта.

Что прочитать и посмотреть

  1. Amplitude: воронка — Порядок событий, уникальные пользователи и окно конверсии. Бесплатная документация, английский; аккаунт продукта для задания не нужен.

Что сделать

  1. Запишите исходные факты в таблицу с user_id и временем каждого этапа. Для отсутствующих событий оставьте пропуск.
  2. Посчитайте воронку за 7 дней: просмотр → начало → завершение. Сначала вручную, затем SQL или pandas.
  3. Измените окно на 14 дней. Объясните изменение результата и предложите проверку причины потери пользователей между началом и завершением.

Что сохранить

Таблица воронки, запрос и один проверяемый вопрос для исследования.

Как проверить себя

За 7 дней завершили 2 из 6, за 14 — 3 из 6. Повторные просмотры не увеличивают число пользователей.

Разбор — откройте после своей попытки

Семидневная конверсия в завершение — 33,3%, конверсия из начала — 2/4=50%. За 14 дней это 50% и 75%. Различие вызвано определением окна, а не улучшением продукта. По одной воронке нельзя узнать причину отказа; понадобятся дополнительные события или беседа с пользователями.

ОСНОВНОЙ МАРШРУТ

Шаг 12. Считать удержание и зрелость когорт

Разберём на примере

Когорта объединяет пользователей по общему старту, например неделе первой завершённой брони. Удержание показывает возвращение к выбранному действию. В учебном определении week-1 retention — доля участников, совершивших новую завершённую бронь через 7–13 суток после первой. Это отличается от «вернулся когда-нибудь позднее». Пользователь, зарегистрированный вчера, ещё не мог пройти полное окно; такие наблюдения нельзя считать невозвратами.

Что прочитать и посмотреть

  1. Amplitude: удержание — Начальное событие, событие возврата и интервалы удержания. Бесплатная документация, английский; считаем на собственных таблицах.

Что сделать

  1. Создайте когорту из четырёх пользователей: первый визит у всех 1 сентября, следующий у u1 — 8 сентября, u2 — 14 сентября, u3 — 20 сентября, у u4 его нет.
  2. На дату среза 15 сентября посчитайте week-1 retention. Затем повторите срез на 5 сентября и опишите, почему метрика ещё не готова.
  3. Постройте таблицу двух когорт с числом участников и зрелыми окнами. Явно отличайте 0% от «недостаточно времени».

Что сохранить

Когортная таблица и точное определение возврата.

Как проверить себя

В интервал 7–13 суток попадают u1 и u2: 2/4=50%. Срез 5 сентября не позволяет оценить этот показатель.

Разбор — откройте после своей попытки

У u2 разница 13 суток, поэтому он включён; у u3 — 19 суток, он не входит. На раннем срезе нужна отметка «окно не завершено», а не 0%. Чтобы сопоставлять когорты, сохраняйте одинаковые определения начального и повторного события.

ОСНОВНОЙ МАРШРУТ

Шаг 13. Связать поведение с экономикой продукта

Разберём на примере

Команда хочет покупать рекламу. CAC — расходы на привлечение, делённые на число привлечённых клиентов в определённом правиле атрибуции. Маржинальный доход здесь определим как поступления после возвратов минус переменные расходы. LTV требует горизонта, удержания и модели будущего: нельзя назвать сегодняшнюю выручку пожизненной ценностью клиента. Учебная кампания стоила 120 евро и привела 10 новых платящих пользователей. Их поступления за 30 дней — 200 евро, переменные расходы — 80.

Что прочитать и посмотреть

  1. Introduction to Modern Statistics — Темы описания данных, вероятности, выборки, доверительных интервалов и проверки гипотез. Читайте только тему текущего шага и разбирайте один пример. Бесплатный учебник, английский.
  2. Amplitude: удержание — Начальное событие, событие возврата и интервалы удержания. Бесплатная документация, английский; считаем на собственных таблицах.

Что сделать

  1. Посчитайте CAC, 30-дневный маржинальный доход на клиента и результат после рекламных расходов.
  2. Повторите расчёт, если кампания привела только 8 новых клиентов при тех же общих поступлениях и расходах.
  3. Напишите три ограничения: органические пользователи, атрибуция и неполный горизонт. Предложите данные для следующего решения о бюджете.

Что сохранить

Таблица экономики с формулами и записка об ограничениях.

Как проверить себя

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

Разбор — откройте после своей попытки

CAC=120/10=12 евро; маржинальный доход на клиента=(200−80)/10=12 евро. После рекламы остаётся 0 до постоянных расходов. Для 8 клиентов оба показателя равны 15 евро; общий результат не меняется. Это ещё не доказательство выгодности будущей кампании.

ОСНОВНОЙ МАРШРУТ

Шаг 14. Освоить выборку и статистическую неопределённость

Разберём на примере

Наблюдения меняются случайно, даже если продукт не изменился. Выборка — наблюдаемая часть интересующей нас совокупности. Смещение возникает, когда она систематически отличается от этой совокупности: например, опросили только довольных посетителей. Доверительный интервал — результат процедуры, которая при повторениях с оговорёнными условиями покрывает истинный параметр с заданной частотой. Он не исправляет плохой сбор данных.

Что прочитать и посмотреть

  1. Introduction to Modern Statistics — Темы описания данных, вероятности, выборки, доверительных интервалов и проверки гипотез. Читайте только тему текущего шага и разбирайте один пример. Бесплатный учебник, английский.

Что сделать

  1. Разберите в учебнике выборку, распределение, стандартную ошибку и доверительный интервал. Для 20 успехов из 100 вычислите долю p и приближение SE=sqrt(p*(1-p)/n).
  2. Посчитайте приближённый интервал p ± 1.96*SE. Повторите для 200 успехов из 1000.
  3. Составьте пример смещённой выборки и объясните, почему увеличение её размера не решает проблему. Для редких событий отметьте ограничение нормального приближения.

Что сохранить

Расчёты двух интервалов и описание одного источника смещения.

Как проверить себя

При одинаковой доле больший размер уменьшает случайную погрешность. Интервал не называется вероятностью «истина находится здесь».

Разбор — откройте после своей попытки

Для n=100 SE=0,04, интервал примерно 12,16–27,84%. Для n=1000 SE≈0,01265, интервал 17,52–22,48%. Оба основаны на независимых наблюдениях и приближении; много событий одного пользователя не равны такому же числу независимых пользователей.

ОСНОВНОЙ МАРШРУТ

Шаг 15. Спроектировать и разобрать A/B-тест

Разберём на примере

A/B-тест случайно назначает участникам вариант интерфейса. Единица назначения должна соответствовать анализу: один пользователь остаётся в одном варианте. До запуска задают основную метрику, минимальный полезный эффект, длительность, правило остановки и защитные показатели. p-value оценивает совместимость данных с нулевой гипотезой в выбранном тесте; он не означает вероятность истинности гипотезы. В учебном результате A: 200 успехов из 1000, B: 240 из 1000.

Что прочитать и посмотреть

  1. Introduction to Modern Statistics — Темы описания данных, вероятности, выборки, доверительных интервалов и проверки гипотез. Читайте только тему текущего шага и разбирайте один пример. Бесплатный учебник, английский.

Что сделать

  1. Составьте паспорт теста нового экрана: гипотеза, назначение по пользователю, исключения, 7-дневное окно и проверка полноты данных. Для исходной конверсии p=0.2 и полезного эффекта delta=0.04 оцените число пользователей на группу: n=2*(1.96+0.84)^2*p*(1-p)/delta^2, округление вверх. Это приближение для независимых долей, двустороннего уровня 5% и мощности около 80%.
  2. Посчитайте абсолютную и относительную разницу конверсий. Для учебного интервала разницы используйте SE=sqrt(pA*(1-pA)/nA+pB*(1-pB)/nB).
  3. Проверьте баланс групп, дубли пользователей и одинаковый срок наблюдения. Напишите решение с учётом интервала и отсутствующих данных по отменам.

Что сохранить

Паспорт эксперимента и одностраничный разбор результата.

Как проверить себя

Абсолютный эффект измеряется процентными пунктами. Относительный эффект имеет другой знаменатель. Победа не объявляется только по положительной точечной оценке.

Разбор — откройте после своей попытки

Разница 24%−20%=4 процентных пункта; относительный рост 4/20=20%. SE≈0,01850, приближённый 95%-интервал разницы 0,37–7,63 п.п. Без проверки назначения, зрелости и защитных метрик решение о полном запуске преждевременно. Постоянное подглядывание с остановкой при удобном p-value нарушает обычную процедуру.

План даёт 1568 пользователей на группу. При 200 новых участниках в сутки на обе группы набор займёт минимум 16 суток; затем нужно дождаться полного семидневного окна последней группы. До запуска также учитывают календарные циклы и возможные потери. Результат по 1000 участникам в начале урока представляет отдельный учебный пример расчёта интервала; он не соответствует этому плану размера.

ОСНОВНОЙ МАРШРУТ

Шаг 16. Показать результат и выбрать следующий шаг

Разберём на примере

После расчётов команда должна принять решение. Начните записку с вопроса и короткого вывода, затем покажите доказательство и ограничение. График выбирайте по сравнению: столбцы для групп, линия для времени, таблица для точных чисел. Аномалия — неожиданное отклонение — может возникнуть из-за поведения, состава аудитории или ошибки сбора. Если вывод зависит от определения, подпишите его рядом с числом.

Что прочитать и посмотреть

  1. Tableau: обучение — Бесплатные вводные видео: подключение данных, диаграммы, фильтры и dashboard. Английский; используйте только открытые уроки.
  2. Amplitude: план событий — События и их свойства в tracking plan. Бесплатная документация, английский; платные функции для задания не требуются.

Что сделать

  1. Для воронки из предыдущего задания сделайте таблицу и столбчатую диаграмму в Calc. Подпишите окно 7 дней и численность каждого этапа.
  2. Разберите падение общей конверсии: в периоде 1 группа новых пользователей дала 1/10, возвращающихся — 8/10; в периоде 2 новые дали 9/90, возвращающиеся — 8/10. Посчитайте общую долю и доли внутри групп.
  3. Напишите записку из пяти абзацев: решение, наблюдение, возможные причины, ограничения, следующий способ проверки. Дайте человеку объяснить её своими словами.

Что сохранить

График и одностраничная записка с проверяемым следующим действием.

Как проверить себя

Диаграмма совпадает с запросом. Изменение состава аудитории не названо ухудшением внутри каждой группы.

Разбор — откройте после своей попытки

Общая конверсия изменилась с 9/20=45% на 17/100=17%, хотя в группах осталось 10% и 80%. Причина арифметического изменения — большая доля новых пользователей. Почему их стало больше, из этих чисел неизвестно; проверьте источники привлечения и полноту событий.

ОСНОВНОЙ МАРШРУТ

Шаг 17. Защитить самостоятельное продуктовое исследование

Разберём на примере

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

Что прочитать и посмотреть

  1. Amplitude: план событий — События и их свойства в tracking plan. Бесплатная документация, английский; платные функции для задания не требуются.
  2. Amplitude: воронка — Порядок событий, уникальные пользователи и окно конверсии. Бесплатная документация, английский; аккаунт продукта для задания не нужен.
  3. Amplitude: удержание — Начальное событие, событие возврата и интервалы удержания. Бесплатная документация, английский; считаем на собственных таблицах.

Что сделать

  1. Попросите другого человека подготовить журнал 30 пользователей за 28 дней: регистрация, начало записи, завершение, отмена. Либо создайте его самостоятельно, явно отметив ограничение. Добавьте дубли и незрелую последнюю когорту.
  2. Без копирования готовых ответов составьте словарь метрик, проверки данных, воронку и удержание. Покажите один разрез и объясните, почему он выбран.
  3. В середине работы измените требование: теперь важны только впервые платящие. Пересчитайте результат, запишите последствия. Подготовьте пять слайдов или страниц: вопрос, данные, метод, вывод, следующий проверяемый шаг.

Что сохранить

Воспроизводимый проект: исходник, SQL/Python, проверки, словарь и короткая записка.

Как проверить себя

Проверяющий воспроизводит один результат и получает честный ответ на вопрос «можно ли сделать причинный вывод?». Все ошибки и изменения прослеживаются.

Разбор — откройте после своей попытки

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

ОСНОВНОЙ МАРШРУТ

Шаг 18. Проверить готовность и выбрать вакансии

Разберём на примере

Название «Product Analyst» не задаёт одинаковые обязанности во всех компаниях. Сравнивайте задачи, уровень самостоятельности, язык команды и условия работы. Европа — основной ориентир этой программы; вакансии РФ помогают увидеть совпадения и отличия. Старшие вакансии показывают дальнейшее развитие, но не превращают весь их список в обязательный входной порог. Диплом, местный язык и опыт могут быть отдельными условиями работодателя. Учебный проект не заменяет коммерческий опыт.

Что прочитать и посмотреть

  1. Pro Git — Главы «Основы Git»: создание репозитория, запись изменений, история, отмена изменений. Бесплатный текст на русском.

Что сделать

  1. Соберите пять свежих европейских и три российских вакансии. Запишите дату, страну, реальный уровень по обязанностям, обязательные требования и пожелания в разные столбцы. Обновляйте ссылки перед откликом.
  2. Для каждого требования приложите своё доказательство: запрос, словарь метрик, план событий, паспорт эксперимента и итоговое исследование. Отметьте «делал самостоятельно», «с подсказкой» или «пока не делал». Выберите три пробела и задания для их закрытия.
  3. Попросите знакомого провести 20-минутное собеседование по вашему проекту. Объясните задачу на русском и кратко на английском: problem, method, result, limitation. Выполните новое небольшое задание без готового решения и запишите, где потребовалась помощь.

Что сохранить

Матрица вакансий, портфолио из собственных файлов и план закрытия трёх пробелов.

Как проверить себя

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

Разбор — откройте после своей попытки

«Знаю SQL» не является доказательством. Подойдёт ссылка на ваш файл запроса, входные данные, ожидаемый результат и описание ошибки, которую запрос выявляет. Если проверяющего пока нет, отметьте внешнюю проверку как незавершённую; не заменяйте её галочкой.

УГЛУБЛЕНИЕ

Шаг 19. Оценить размер теста и множественные проверки

Разберём на примере

Мощность — вероятность обнаружить заданный эффект при выбранной процедуре. Малый тест может не отличить практически полезное изменение от шума. MDE — минимальный эффект, под который планируют размер. Проверка многих метрик увеличивает вероятность случайной находки; заранее выделенная основная метрика уменьшает свободу выбрать удобный результат.

Что прочитать и посмотреть

  1. Introduction to Modern Statistics — Темы описания данных, вероятности, выборки, доверительных интервалов и проверки гипотез. Читайте только тему текущего шага и разбирайте один пример. Бесплатный учебник, английский.

Что сделать

  1. Для базовой конверсии 20% и эффекта 4 п.п. оцените размер каждой группы приближением 2*(1.96+0.84)^2*p*(1-p)/delta^2.
  2. Уменьшите эффект до 2 п.п. и сравните размер. Объясните, почему точный план требует проверки допущений и длительности окна.
  3. Опишите порядок проверки основной метрики и трёх исследовательских разрезов. Разделите подтверждающий и поисковый анализ.

Что сохранить

Расчёт мощности как приближение и план проверок.

Как проверить себя

Размер округлён вверх; число пользователей не перепутано с событиями. При уменьшении эффекта вдвое размер примерно учетверяется.

Разбор — откройте после своей попытки

Получается 1568 пользователей на группу для 4 п.п. и 6272 для 2 п.п. Это приближение для двух независимых долей, двустороннего уровня 5% и мощности около 80%; кластеризация, потери и другие процедуры меняют план.

УГЛУБЛЕНИЕ

Шаг 20. Различать причинный эффект и изменение во времени

Разберём на примере

После запуска выручка выросла, но одновременно начался учебный сезон. Сравнение «до/после» смешивает действие продукта и сезонность. Difference-in-differences сравнивает изменение экспериментальной и сопоставимой контрольной группы. Для интерпретации нужен обоснованный параллельный тренд: без вмешательства группы должны были бы меняться сопоставимо. Проверяйте предысторию и другие изменения в группах.

Что прочитать и посмотреть

  1. Scott Cunningham: Difference-in-Differences Fundamentals — учебник автора, английский, бесплатно. Начните с простого сравнения двух групп и допущения parallel trends; сложные варианты пока пропустите.
  2. Introduction to Modern Statistics — Темы описания данных, вероятности, выборки, доверительных интервалов и проверки гипотез. Читайте только тему текущего шага и разбирайте один пример. Бесплатный учебник, английский.

Что сделать

  1. Для группы изменения возьмите 100 до и 130 после, для сравнения — 80 и 100. Посчитайте разность изменений.
  2. Нарисуйте ещё четыре периода до запуска. Придумайте пример нарушения параллельных трендов.
  3. Напишите, почему отбор групп по их будущему росту недопустим. Предложите рандомизированный тест, если он осуществим.

Что сохранить

Учебный расчёт и список допущений причинного вывода.

Как проверить себя

Разность изменений равна 10, но не называется доказанным эффектом без обоснования дизайна.

Разбор — откройте после своей попытки

(130−100)−(100−80)=10. Если в первой группе открылись новые комнаты, различие может быть вызвано ими. Нужны данные о сопутствующих изменениях, предыстории и механизме отбора; учебные четыре числа не позволяют проверить это.

УГЛУБЛЕНИЕ

Шаг 21. Организовать работу над метриками и дальнейший рост

Разберём на примере

По мере роста команды возникает несколько определений активного пользователя. Управление метриками означает договориться о смысле, владельце, проверке и порядке изменения. Аналитик отвечает за объяснимость расчёта, но изменение бизнес-правила согласует с теми, кто принимает решение. Углубление можно продолжить в экспериментах, монетизации или аналитике отдельного продукта.

Что прочитать и посмотреть

  1. Amplitude: план событий — События и их свойства в tracking plan. Бесплатная документация, английский; платные функции для задания не требуются.
  2. Pro Git — Главы «Основы Git»: создание репозитория, запись изменений, история, отмена изменений. Бесплатный текст на русском.

Что сделать

  1. Выберите пять метрик проекта и назначьте владельца определения, источника и проверки.
  2. Измените правило активности: вместо входа в приложение требуется завершённая запись. Оцените, какие отчёты и исторические сравнения затронуты.
  3. Составьте план развития на три проекта с внешней проверкой. При использовании AI сохраните запрос и самостоятельно проверьте формулы, SQL и ссылки.

Что сохранить

Версионируемый словарь и план развития по фактическим пробелам.

Как проверить себя

Изменение определения имеет дату, причину и предупреждение о несопоставимости истории.

Разбор — откройте после своей попытки

Нельзя незаметно заменить формулу в старом графике. Можно пересчитать историю при доступности исходных событий, сохранив обе версии и объяснив разрыв. Ответ AI — черновик: совпадение результата на одной таблице не доказывает корректность на дублях и пропусках.