DAU/MAU и stickiness: почему доля меняется после фильтра
Дашборд показывает stickiness 18%. После выбора платного тарифа число внезапно стало 42%. Кажется, что платящие пользователи приходят чаще, но сначала нужно посмотреть, как пересчитались числитель и знаменатель. Если DAU отфильтрован по тарифу, а MAU остался по всему продукту или наоборот, отношение больше не описывает одну аудиторию.
В обычном определении DAU — число уникальных активных пользователей в конкретный день, MAU — число уникальных активных пользователей за месяц. Для месячного показателя stickiness часто берут средний DAU за все календарные дни месяца и делят на MAU того же месяца. Один пользователь может войти в дневной счёт несколько раз в разные дни, но в MAU остаётся один раз.
На календаре виден знаменатель
В учебном апреле всего три активных пользователя. Первый заходил три дня, второй и третий — по одному. Сумма дневных DAU равна 5, но делить её нужно на 30 календарных дней, включая дни без активности. Средний DAU равен примерно 0,167; MAU равен 3. Значит stickiness — 5,56%.
from datetime import date, timedelta
start = date(2025, 4, 1)
end = date(2025, 5, 1) # правая граница исключена
events = [(1, date(2025, 4, 1)), (1, date(2025, 4, 2)),
(1, date(2025, 4, 3)), (2, date(2025, 4, 1)),
(3, date(2025, 4, 2))]
daily = {}
day = start
while day < end:
daily[day] = {uid for uid, at in events if at == day}
day += timedelta(days=1)
mau = len(set().union(*daily.values()))
average_dau = sum(map(len, daily.values())) / len(daily)
print('MAU:', mau)
print('average DAU:', round(average_dau, 3))
print('stickiness:', round(average_dau / mau * 100, 2), '%')
Код напечатает MAU: 3, average DAU: 0.167, stickiness: 5.56 %. Это маленький пример арифметики, а не типичный уровень метрики продукта. Он показывает, почему нельзя усреднять только дни с событиями: тогда дневная активность выглядела бы гораздо выше, хотя пользователи не заходили остальные дни.
Теперь добавим фильтр по тарифу. Для каждого события нужен тариф пользователя на дату события или согласованное правило сегментации «тариф на конец месяца». Выбранное правило применяют к дневным и месячному множествам одинаково. Иначе человек, сменивший тариф в середине месяца, может учитываться в числителе и не учитываться в знаменателе либо наоборот. Перед сравнением сегментов запишите это правило в паспорт метрики.
Что считать активностью
Логин, открытие приложения и осмысленное действие дают разный DAU. Фоновая синхронизация не должна незаметно увеличить активную аудиторию. Определите список событий активности и исключите служебные аккаунты. Важно применять одно и то же правило к ежедневному и месячному счёту, а также не менять его между сравниваемыми месяцами.
Отношение DAU/MAU удобно читать как долю дней месяца, в которые средний месячный пользователь был активен: сумма пользовательских активных дней делится на число дней и пользователей месяца. Это прочтение работает, когда оба счёта построены на одной группе людей и одном календаре. Если месяц неполный, фиксируйте число наблюдаемых дней и не сравнивайте его напрямую с полным месяцем без пояснения.
Если в фильтре выбран не тариф, а страна, проверьте, менялась ли страна пользователя в течение месяца. Сегмент «страна на момент события» может распределить активные дни одного человека между двумя странами, тогда сумма MAU по странам превысит общий MAU. Сегмент «страна на конец месяца» даст другое распределение. Оба подхода могут быть полезны, но в дашборде нужно назвать выбранный и применять его последовательно.
Для диагностики скачка полезно вывести три ряда: сумму дневных уникальных пользователей, число календарных дней и месячное число уникальных пользователей. Если изменился только первый, люди стали заходить чаще. Если вырос MAU при стабильной сумме дневных посещений, доля может упасть из-за большого числа пришедших один раз. Такой разбор помогает отличить вовлечённость от расширения охвата.
Не складывайте значения MAU разных месяцев, чтобы получить квартальную уникальную аудиторию: один человек мог появиться во всех трёх и будет посчитан трижды. Квартальный уникальный счёт потребует нового множества пользователей за весь квартал. Та же осторожность нужна при переносе stickiness на недели: меняются и длина календаря, и определение аудитории.
В курсе «Практическая аналитика данных» вы сначала составляете паспорт метрики, затем проверяете зерно таблиц и строите графики в DataLens. На кейсах продаж, клиентов и каналов расчёты повторяются на новом месяце данных и превращаются в аналитическую записку. Откройте программу, чтобы пройти путь от формулы до дашборда, который выдерживает фильтры.
Если доля меняется из-за настроек самого графика, полезен разбор знаменателя доли при фильтре DataLens.
Продолжить на практике
- Практическая аналитика данных ↗
Превратите знания SQL или Python в аналитическую работу: проверяйте данные, считайте бизнес-метрики, стройте дашборды и объясняйте выводы на трёх прикладных кейсах.
