Условие
Построил cohort retention за 12 месяцев. Кривые ползут вниз. Как понять, есть ли product-market fit?
Решение
Как читать кривую retention
- Сначала падение (1st week → 1st month) — это нормально. Случайные посетители уходят.
- Затем стабилизация — это и есть индикатор PMF. Если кривая выходит на плато > 0, у вас есть постоянная аудитория, которая держится. Если падает в 0 — PMF нет.
- Smile curve — после плато retention слегка растёт (реактивации) — признак сильного продукта.
Бенчмарки 30-дневной retention
| Тип продукта | 30d retention |
|---|---|
| Соцсеть | 25–40% |
| Мессенджер | 40–60% |
| Игра mobile | 20–35% |
| E-com | 15–25% |
| Маркетплейс | 20–30% |
| Хорошая B2B SaaS | 60–80% |
| Утилитарный (банк) | 50–70% |
Сравнение когорт
Накладывайте кривые разных месяцев регистрации:
- Свежие cohort выше старых → продукт улучшается.
- Свежие ниже → новый трафик хуже / продукт деградирует.
- Параллельные → стабильность.
Скрытое в усреднённом retention
Усреднённая cohort retention скрывает бимодальность: одна часть юзеров уходит сразу, другая держится. Лучше:
- Активные/пассивные/спящие — сегментация по дням активности.
- L28 — сколько дней из 28 заходил юзер.
Python пример
import pandas as pd
import seaborn as sns
# cohort_matrix: index=cohort_month, columns=offset_months, values=retention%
sns.heatmap(cohort_matrix, annot=True, fmt='.0%', cmap='Blues')Подводные камни
- Survivorship bias: для свежих cohort N-й месяц ещё не наступил — heatmap покажет NaN или 0. Не интерпретируйте как «упало в 0».
- Сезонность искажает retention: cohort, зарегистрировавшаяся в декабре, на М+1 (январь) выглядит хорошо (праздники).
- Семплинг по «когда-либо был активен» = выживший. Правильно — % уникальных от cohort_size.
- Retention считается на уровне юзеров, не сессий или транзакций.
- Если кривая совсем плоская (10% год — 10%) — это либо удивительный PMF, либо ошибка измерения (например, считаете «когда-либо заходил вообще»).
Эталонный ответ
Кривая retention падает в первые недели и должна выйти на плато > 0 — это PMF. Если падает в 0 — нет. Сравнивать когорты во времени, чтобы видеть улучшение/деградацию.