Глава 1 — Анатомия метрик

Что именно мы считаем

14 мин
Чему научишься
  • читать журнал событий и понимать, из чего состоит строка события;
  • различать четыре единицы счёта на одних и тех же данных: событие, пользователь, визит, заказ;
  • собирать определение метрики из четырёх частей: объект → событие → период → способ подсчёта;
  • понимать, почему два аналитика считают «одну и ту же» метрику и получают разные числа.

Прежде чем считать — посмотри, что лежит в ящике

Ты сейчас захочешь посчитать пользователей. Не спеши. Сначала ответь: что в этом архиве вообще является пользователем? — КВЕРИ

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

Чёрный ящик Котомаркета — это не таблица «пользователи» и не таблица «метрики». Это журнал событий: длинный список строк, каждая из которых означает «вот это произошло вот тогда».

Вот девять строк одного дня — 14 марта:

времяuser_idsession_idсобытиесвойства
09:12:044412s-101app_opensource=push
09:12:314412s-101product_viewitem=миска
09:13:024412s-101product_viewitem=когтеточка
09:13:404412s-101add_to_cartitem=когтеточка
09:20:117781s-102app_opensource=direct
09:21:557781s-102product_viewitem=лежанка
14:02:094412s-140app_opensource=direct
14:03:444412s-140purchasesum=1290
21:47:009003s-166app_opensource=ads

Каждая колонка отвечает за свой вопрос:

  • время — когда это случилось. По времени события можно выделять периоды: день, неделю, месяц;
  • user_id — кто совершил действие. Один и тот же пользователь во всех своих заходах носит один и тот же id;
  • session_id — в рамках какого захода произошло действие. Если начинается новая сессия, она получает новый id;
  • событие — что именно пользователь сделал;
  • свойства — подробности конкретного действия: из какого источника пришёл, какой товар смотрел, на какую сумму купил.

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

Событие — это одна строка лога4412product_view19:00:12812|||ктоuser_idкогдаtimestampчто сделалeventс каким объектомproduct_idсобытие = кто · что · когда · с каким объектом
Анатомия события: кто, когда, что сделал и в каком заходе. Эти поля позволяют по-разному группировать и считать события, получая метрики.

Одни данные — четыре разных ответа

Возьмём те же девять строк и зададим четыре простых вопроса.

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

Сколько пользователей? Три — 4412, 7781 и 9003. Пользователь 4412 наследил шесть раз, но пользователь он один. Здесь мы удаляем повторы по user_id.

Сколько визитов (сессий)? Четыре — s-101, s-102, s-140, s-166. Пользователь 4412 заходил дважды: утром и днём.

Сколько заказов? Один — в этих данных есть единственное событие purchase.

9 событий → 4 визита → 3 пользователя → 1 заказ

Девять, четыре, три, один. Данные не менялись — менялась единица счёта. И ни одно из четырёх чисел не «правильнее» остальных: они отвечают на разные вопросы.

Отсюда первая профессиональная привычка: услышав число, спроси, что за единица под ним. «У нас сорок тысяч» — сорок тысяч чего: событий, людей, заходов, покупок? В примере Котомаркета девять событий превращаются в одного покупателя-заказчика только после того, как мы меняем вопрос и способ подсчёта.

Запись №2 в журнале Л.:

Полгода на совете показывали „активность“, посчитанную в событиях, и сравнивали её с числом клиентов из биллинга. Никто не заметил, что делят яблоки на километры. Отношение „событий на клиента“ росло — праздновали вовлечённость. Оказалось, у части людей приложение перезапускалось само.

Для такого журнала полезно держать в голове проверку: за один и тот же период событий не может быть меньше, чем сессий, а сессий — меньше, чем пользователей, если каждое событие относится к сессии и у каждого пользователя есть хотя бы одна сессия. Если при этих условиях в отчёте «пользователей» больше, чем «событий», — это не рекорд, а повод проверить подсчёт.

Определение метрики состоит из четырёх частей

Метрика — это не название. Название — ярлык на банке; определение — то, что внутри. Полное определение отвечает на четыре вопроса:

  1. Объект — что считаем поштучно: пользователей, сессии, заказы, события?
  2. Событие — что должно произойти, чтобы объект попал в счёт: открыл приложение, посмотрел товар, оплатил?
  3. Период — за какое окно времени: календарный день (и в каком часовом поясе?), календарная неделя, последние 7 дней?
  4. Способ подсчёта — считаем уникальные объекты или все совпадения? Складываем, усредняем, берём долю?

Пример полного определения, к которому стоит привыкнуть:

DAU = число уникальных user_id (объект), у которых за календарный день по московскому времени (период) есть хотя бы одно событие app_open (событие), причём каждый пользователь считается один раз (способ подсчёта).

Длинно? Да. Зато по такому определению два разных человека получат одно и то же число — и в этом весь смысл.

Уникальные против количества событий

Самая частая подмена живёт в четвёртой части. Сравни две формулировки на одном дне:

формулировка14 марта
число событий app_open18 400
число уникальных пользователей с app_open4 200

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

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

Почему два аналитика получают разные числа

Запись №5 в журнале Л. Руководитель просит у двух аналитиков «число активных за март». Приходят два ответа: 41 200 и 33 900. Оба считали честно, оба не ошиблись в арифметике. Разошлись они вот где:

часть определенияпервый аналитиквторой аналитик
объектуникальные user_idуникальные user_id
событиелюбое событие в журналетолько app_open
период1–31 марта30 дней, заканчивающихся 31 марта
способ подсчётауникальныеуникальные

Расхождение — 7 300 человек, то есть примерно 18% от большего значения. Спорить, кто прав, бессмысленно: правы оба. Неполным был вопрос.

Заметь, где именно разъехалось: во второй и третьей строке. Первый считал активным любого, кто вообще оставил след, — включая тех, кому просто пришёл пуш и система записала доставку. Второй потребовал осознанного открытия приложения. Плюс разные окна: у первого — 31 календарный день, у второго — 30 дней подряд, заканчивающихся 31 марта.

Типичная ошибка новичка — считать определение «очевидным» и стесняться уточнять. На деле уточняющий вопрос «активный — это кто именно и за какое окно?» звучит не как незнание, а как профессия. Незнание — это молча посчитать по своему определению и отдать число без подписи.

Практическое правило дознавателя, и оно пригодится тебе до конца курса:

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

А если число уходит в отчёт — пусть определение уйдёт вместе с ним, сноской под таблицей. Через месяц ты сам не вспомнишь, что имел в виду.

Калькулятор дознавателя. В этой главе раннер — именно калькулятор: переменные, арифметика и print. Ниже — итоги журнала за 14 марта, посчитанные по четырём разным единицам. Запусти, а потом поменяй числа и посмотри, как поедут отношения.
python · pandas
Практика: напиши код
Те же итоги 14 марта уже лежат в переменных. Посчитай два отношения, которые аналитик смотрит первым делом: событий на одного пользователя (events_per_user) и визитов на одного пользователя (sessions_per_user). Оба — обычное деление, округлять не нужно.
python · pandas
Практика: напиши код
В отчёте за 14 марта написано: «покупателей — 1 284». На самом деле 1 284 — это число событий purchase, а уникальных user_id среди них 1 050. Посчитай, на сколько человек отчёт завысил число покупателей (overcount), и сколько заказов приходится на одного покупателя (orders_per_buyer).
python · pandas
Проверь себя
В журнале за день 9 строк: кот 4412 оставил 6 событий в двух сессиях, кот 7781 — 2 события в одной сессии, кот 9003 — 1 событие в одной сессии. Сколько здесь пользователей и сколько визитов?
Проверь себя
Заказчик просит: «Посчитай активных пользователей за неделю». Какой вопрос стоит задать первым, чтобы потом не пришлось пересчитывать метрику?
Главное из урока
  • в чёрном ящике лежат события, а не метрики; метрика — инструкция, как свернуть журнал в число
  • одни и те же строки дают разные числа в зависимости от единицы счёта: события, визиты, пользователи, заказы — всегда уточняй, какая единица стоит за числом
  • определение метрики состоит из четырёх частей: объект → событие → период → способ подсчёта
  • число уникальных пользователей и количество событий — разные метрики; один пользователь может оставить несколько событий
  • если определение не зафиксировано, два аналитика могут посчитать одну и ту же метрику по-разному и получить разные числа

Дальше — первая настоящая метрика: DAU. Соберём её из этих четырёх частей и посмотрим, как одно и то же слово «активный» даёт три разных ответа.