Теорія
Утримання: день N, ковзне чи за періодами
Три способи виміряти утримання і який підходить продукту, яким користуються щотижня чи щомісяця.
~9 хв читання · 9 вправ · 250 балів
Перед початком
Чи повертаються люди?
Ти в продуктовій команді Halves — застосунку, який ділить спільні витрати між сусідами по квартирі, парами й компаніями в подорожах; платний план називається Halves Plus. Зареєструвати людей — лише половина справи: застосунок, який за місяць ніхто не відкриває, не росте, а витікає. Цей модуль відповідає на одне бізнес-питання — чи повертаються люди — і показує, як читати відповідь чесно: яку міру утримання (retention) обрати, як читати когортну таблицю, що каже про product-market fit крива, яка вирівнюється, і як оцінювати кожен сегмент за його власним ритмом. Перший урок починається із самого слова: три різні числа, які всі називають «утриманням».
Утримання дня N: активні саме того дня
«Утримання» — це не одне число. Перш ніж порівнювати два показники утримання, з'ясуй, яке з трьох вимірювань стоїть за кожним.

Найсуворіше — утримання дня N (day-N retention): частка когорти, яка була активна саме в день N після реєстрації.
Утримання дня N = користувачі, активні в день N ÷ усі користувачі когорти
День 0 — це сам день реєстрації, тож день 7 — рівно тиждень потому. У знаменнику всі, хто зареєструвався, зокрема ті, хто більше не повернувся.
У таблиці з десяти користувачів саме в день 7 Halves відкрили лише r01 і r04: 2 ÷ 10 = 20%. Хто повернувся на 9-й день, рахується не утриманим на день 7, хоча очевидно й далі користується застосунком.
Набір даних · 10 рядків
Десять користувачів Halves та їхні активні дні
Дні від реєстрації з `app_opened`, через `;`. Спостереження до 40-го дня.
Перші 5 з 10 рядків
Така суворість пасує продуктам, потрібним щодня: іграм, месенджерам, трекерам звичок, де пропущений день справді щось означає. Для продукту, яким користуються кілька разів на тиждень чи на місяць, вона додає багато шуму: число залежить від того, в який саме день людина випадково відкрила застосунок.
- ТакУтримання дня 7 = 2 активні в день 7 ÷ 10 зареєстрованих = 20%
- Не такЗараховувати r02 (повернувся на 9-й день) до утриманих на день 7
Це пізніший день, тож він належить ковзному утриманню чи утриманню за періодом, а не дню N.
Ковзне утримання: «ще не пішов»
Ковзне утримання (rolling retention) зараховує користувача утриманим на день N, якщо він був активний у день N або будь-якого пізнішого дня. Воно відповідає на питання «ця людина ще не пішла?».
Ковзне утримання на день N = користувачі, активні в день N або пізніше ÷ усі користувачі когорти
У таблиці з десяти користувачів восьмеро мають активність на 7-й день або пізніше: r01, r02, r04, r05, r06, r08, r09 і r10. Випадають лише r03 (востаннє на 2-й день) і r07 (лише день 0), тож ковзне утримання 7-го дня — 8 ÷ 10 = 80%. Зверни увагу на r09: одного візиту на 31-й день досить, щоб рахуватися утриманим на день 7.
Датасет: Десять користувачів Halves та їхні активні дні · є вище
Оскільки зараховується будь-який пізніший візит, ковзне утримання для того самого дня завжди не нижче за утримання дня N, а зазвичай значно вище. Тому з трьох мір воно найлестивіше.

У нього є одне чесне застосування: відрізнити тих, хто ще може повернутися, від тих, хто пішов назовсім. Як головне число у звіті воно перебільшує, скільки людей справді користуються продуктом у певний період.
- ТакКовзне 7-го дня: усі, хто має день ≥ 7 → 8 з 10 = 80%
- Не так«80% користувачів були активні на другому тижні.»
Ковзне включає r09, якого бачили лише на 31-й день; саме на другому тижні активних було 70%.
Утримання за періодами: активні в межах вікна
Утримання за періодами (bracket retention) — частка когорти, яка була активна хоча б раз у межах вікна днів, наприклад у дні 7–13 (другий тиждень) чи 30–59 (другий місяць).
Утримання за періодом = користувачі, які мають хоча б один активний день у вікні ÷ усі користувачі когорти
У таблиці з десяти користувачів семеро мають день між 7-м і 13-м: r01 (7), r02 (9), r04 (7), r05 (12), r06 (8), r08 (13) і r10 (10 і 11). r03 і r07 більше не повернулися, а єдиний пізніший візит r09, на 31-й день, лежить поза вікном. Тож утримання за періодом днів 7–13 — 7 ÷ 10 = 70%.
Датасет: Десять користувачів Halves та їхні активні дні · є вище
Період лежить між двома іншими мірами. Він пробачає точний день, тож користувач, який повернувся на 9-й день замість 7-го, усе одно зараховується. Але на відміну від ковзного утримання він ставить справжнє питання про проміжок часу: чи з'явилася людина на другому тижні?
Ще одна деталь: користувач зараховується один раз на вікно, хоч скільки днів він був активний. У r10 два дні в періоді, а до чисельника він додає 1.
- ТакДні 7–13: r01, r02, r04, r05, r06, r08, r10 → 7 ÷ 10 = 70%
- Не такРахувати активні дні замість користувачів: r10 додає 2
Кожен користувач зараховується один раз на вікно, інакше частка може перевищити 100%.
Як порахувати період крок за кроком
Щоб порахувати утримання за періодом вручну чи запитом, іди по одному користувачу:
- Зафіксуй вікно з обома межами включно: дні 14–20 — це 14, 15, 16, 17, 18, 19 і 20.
- Для кожного користувача постав одне питання «так чи ні»: чи є хоча б один активний день усередині вікна?
- Порахуй відповіді «так» і поділи на всіх у когорті, а не лише на тих, хто взагалі повертався.
Для днів 14–20 у таблиці з десяти користувачів: у r01 є день 14, у r02 — день 16, у r08 — день 20. Решта або зупинилися раніше, або «перестрибнули» вікно (r05 — з 12-го на 33-й, r09 — з 0-го на 31-й). Виходить 3 ÷ 10 = 30%.
Датасет: Десять користувачів Halves та їхні активні дні · є вище
Поширені дві помилки. Перша — непомітно перейти на ковзну логіку й зарахувати всіх, кого бачили після вікна: це додало б r05, r06 і r09 і дало б 60%. Друга — викинути зі знаменника тих, хто не повернувся після дня 0, через що будь-який період виглядає кращим, ніж є.
- ТакДні 14–20: r01 (14), r02 (16), r08 (20) → 3 ÷ 10 = 30%
- Не такДодати r05 (33), r06 (40) і r09 (31) → 6 ÷ 10 = 60%
Це ковзне утримання від 14-го дня, а не період третього тижня.
Обирай міру за природним ритмом використання
Ті самі десять користувачів дають 20% (день 7), 70% (дні 7–13) і 80% (ковзне). Жодне з чисел не хибне; вони відповідають на різні питання. Обирай за природним ритмом використання продукту (natural usage rhythm): як часто його відкривала б задоволена людина (як знайти ритм у даних, показує урок DAU, WAU, MAU і stickiness). Кожному ритму — своя міра утримання:

- Щоденним продуктом (головоломка, чат) користуються щодня, тож пасує утримання дня N: пропущений перший день — справжній сигнал.
- Пари й друзі в подорожі ділять рахунки в Halves кілька разів на тиждень, тож їм пасує тижневий період (дні 7–13, 14–20…).
- Сусіди по квартирі, які вносять оренду й комуналку, повертаються приблизно раз на місяць, тож їм пасує місячний період (дні 30–59).
- Ковзне утримання пасує лише одному питанню: чи пішов цей користувач назовсім?
Міра, суворіша за ритм, записує у втрачені тих, хто й далі користується продуктом. Міра, м'якша за ритм, як-от ковзне утримання, зараховує тих, хто давно перестав.
- ТакСусіди в Halves, які вносять оренду → місячний період, дні 30–59
- Не такОцінювати функцію щомісячної оренди за утриманням дня 1
Ніхто не платить оренду наступного дня після реєстрації; міра суворіша за ритм.
Пиши міру і вікно поруч із кожним числом
У блозі Theo писали, що добрі застосунки утримують 25% на 7-й день; у Halves — 20% на 7-й день і 70% на другому тижні. Порівняння 70% із 25% виглядало б тріумфом, а 20% із 25% — провалом. Обидва порівняння зламані однаково: два числа ставлять поруч, не перевіривши, що вони міряють одне й те саме.
Число утримання можна прочитати лише з трьома підписами:
- міра: день N, період чи ковзне;
- вікно: день 7, дні 7–13, дні 30–59;
- когорта: хто і коли зареєструвався.
Ілюстрація: Ті самі десять людей дають 20% утримання дня 7, 70% за періодом 7–13 днів і 80% ковзного: пиши назву міри біля кожного числа. · є вище
Знайдений в інтернеті орієнтир порівнюваний, лише якщо в нього та сама міра й те саме вікно, а в ідеалі й продукт зі схожим ритмом. Більшість опублікованих орієнтирів не кажуть, яку міру взято, і тоді ними взагалі не можна користуватися.
Тож чесне речення: «Утримання за періодом другого тижня (дні 7–13) червневої когорти: 70%». Воно довше за «утримання — 70%», і лише його ніхто не прочитає хибно.
- Так«Утримання за періодом другого тижня (дні 7–13): 70%; утримання дня 7: 20%.»
- Не так«Наше утримання — 70%, значно вище за орієнтир 25%.»
Період порівнюють з орієнтиром дня N: це два різні вимірювання.
Ковзне утримання змінюється й після звіту
Утримання дня N і за періодом стають остаточними, щойно їхній день чи вікно минули. Утримання за періодом днів 28–34 може змінюватися лише поки ці дні тривають; після 34-го дня ніщо, що зробить користувач, на нього вже не вплине.
Ковзне утримання ніколи не закривається. Воно враховує активність у день N або будь-коли пізніше, тож кожне майбутнє повернення його переписує.
У таблиці з десяти користувачів ковзне утримання 28-го дня, пораховане на 35-й день, — 50%: з 28-го дня поверталися r01, r02, r05, r08 і r09. На 40-й день застосунок відкриває r06, і та сама метрика для тієї самої когорти стає 6 ÷ 10 = 60%. У продукті нічого не змінилося; змінився звіт.

Датасет: Десять користувачів Halves та їхні активні дні · є вище
Це дає дві практичні проблеми. Число з торішньої презентації вже не збігається з дашбордом, а свіжа когорта завжди виглядає гіршою за стару просто тому, що стара мала більше часу назбирати пізні візити. Якщо ковзне утримання таки потрібне, пиши дату, на яку його пораховано, і порівнюй когорти лише в однаковому віці.
- Так«Утримання за періодом днів 28–34: 50% (остаточне).»
- Не так«Ковзне утримання 28-го дня: 50%» без дати, у порівнянні зі старішою когортою
Воно зростатиме, коли повертатимуться пізні користувачі, а старіша когорта мала на це більше часу.
Число остаточне, лише коли його вікно минуло
Перш ніж показувати будь-яке число утримання, глянь в календар: чи кожен користувач когорти прожив усе вікно? Вікно, яке ще не скінчилося, — це цензурування справа (right censoring; докладно про нього в уроці Як читати воронку: цензурування справа і діапазони дат): повернення, якого немає, могло просто ще не настати.
На 35-й день після реєстрації для десяти користувачів картина така:
- Утримання дня 28 і утримання за періодом днів 28–34 остаточні. Ці дні минули.
- Утримання за періодом днів 30–59 ще не готове. Дні з 35-го по 59-й не настали, тож сьогоднішнє число враховує частину вікна й зростатиме. Показати його зараз — занизити утримання.
- Будь-яке ковзне утримання ніколи не остаточне, як показав приклад з r06.
Датасет: Десять користувачів Halves та їхні активні дні · є вище
У реальних когортах рахуй лише користувачів, достатньо «старих» для вікна, і пиши про це поруч із числом.
Як це складається докупи: міру обирають за ритмом продукту, біля числа пишуть міру, вікно й когорту, а показують лише вікна, які вже скінчилися. Далі урок Як читати когортну таблицю ставить багато когорт поруч.
- ТакНа 35-й день: показати період днів 28–34 (50%), остаточний
- Не такНа 35-й день: показати період днів 30–59 як утримання другого місяця
Більша частина вікна ще попереду, тож число занижене.
Готові потренуватися?
Виконайте вправи уроку й отримайте 250 балів, коли пройдете його вперше.
Розпочати вправи