A/B-тесты · ПродвинутоеВремя до события: Каплан–Мейер
Кривая Каплана–Мейера онлайн и анализ выживаемости: удержание, время до покупки, срок подписки с учётом тех, у кого событие ещё не случилось. Лог-ранговый критерий, медианы, RMST и решение по шагам.
Цифры остаются в браузере и никуда не отправляются
Событие — пользователь ушёл; время — дни после регистрации. Время через запятую; 12+ — событие ещё не случилось. Или два столбца из Excel: время и 1/0.
8 наблюдений · событий 5 · цензура 3
8 наблюдений · событий 7 · цензура 1
Критерий
Разница пограничная.
Медианное время до ухода: «Новый онбординг» — 7 дн., «Старый онбординг» — 15 дн.; log-rank p = 0,055.
Что делать дальше: Наберите больше наблюдений — или дождитесь, пока цензурированные дойдут до события.
Доля без события · S(t)
Старый онбордингНовый онбордингцензурапунктир 50 % — медиана
Медиана · Старый онбординг
15 дн.
ДИ 5…∞
Медиана · Новый онбординг
7 дн.
ДИ 3…18
Без события к 10 дн.
75 % · 33 %
Старый онбординг · Новый онбординг
Среднее до τ = 30 (RMST)
17,7 · 9,5
разница −8,2 дн.
Log-rank
χ² = 3,670
p = 0,055 · df 1
Наблюдений · событий
8/5 · 8/7
цензура: 3 · 1
Таблица дожития
Время
Под риском
Событий
S(t)
95 % ДИ
5
8
1
0,875
0,387…0,981
8
7
1
0,750
0,315…0,931
12
6
1
0,625
0,229…0,861
15
4
1
0,469
0,120…0,763
22
2
1
0,234
0,013…0,616
Время
Под риском
Событий
S(t)
95 % ДИ
3
8
1
0,875
0,387…0,981
4
7
1
0,750
0,315…0,931
6
6
1
0,625
0,229…0,861
7
5
1
0,500
0,152…0,775
10
3
1
0,333
0,056…0,658
14
2
1
0,167
0,009…0,508
18
1
1
0,000
—
Log-rank по шагам
В каждый момент события считаем, сколько событий ждали бы в группе «Старый онбординг», если бы кривые совпадали. Затем сравниваем с тем, что случилось на самом деле.
t
n A
n B
d A
d B
E A
V
3
8
8
0
1
0,500
0,250
4
8
7
0
1
0,533
0,249
5
8
6
1
0
0,571
0,245
6
7
6
0
1
0,538
0,249
7
7
5
0
1
0,583
0,243
8
7
4
1
0
0,636
0,231
10
6
3
0
1
0,667
0,222
12
6
2
1
0
0,750
0,188
14
4
2
0
1
0,667
0,222
15
4
1
1
0
0,800
0,160
18
3
1
0
1
0,750
0,188
22
2
0
1
0
1,000
0,000
Σ
5
7
7,996
2,446
χ² = (O − E)² / V = (5 − 7,996)² / 2,446 = 3,670
p = P(χ²₁ ≥ 3,670) = 0,055
02
О теме
Цензура — не пропуск
Пользователь, который ещё не ушёл, — тоже данные: он продержался как минимум столько дней.
Медиана вместо среднего
Среднее время не посчитать, пока у части людей событие не наступило. Медиану и S(t) — можно.
Log-rank сравнивает кривые целиком
Он смотрит на каждый момент события, а не на одну точку.
03
Проверить в Python / R
Проверить в Python / R
from lifelines.statistics import multivariate_logrank_test
time = [5, 8, 12, 12, 15, 20, 22, 30, 3, 4, 6, 7, 9, 10, 14, 18]
event = [1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1]
group = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1]
r = multivariate_logrank_test(time, group, event)
r.test_statistic, r.p_value
# 3.67, 0.0554
# При S ровно 0,5: R — середина до следующего события (8,5), lifelines — следующий момент (10), на странице — 7
Медиана здесь — первое время, где S(t) ≤ 0,5. При S ровно 0,5 другие программы считают иначе: R берёт середину до следующего события (8,5), lifelines — следующий момент (10), здесь — 7.
Это ступенчатый график доли людей, у которых событие ещё не случилось. Каждая ступенька — момент события: доля падает на столько, сколько людей из оставшихся под риском дошли до него. Цензурированные ступеньки не дают, но уменьшают число под риском, поэтому кривая не завышает и не занижает удержание.
Событие ещё не случилось к концу наблюдения: пользователь не ушёл, подписка не отменена. Известно только, что настоящее время больше записанного. Такое наблюдение запишите со знаком плюс, например 12+. Выбрасывать его нельзя: так вы потеряете как раз самых удержавшихся и заметно занизите всю кривую.
В каждый момент события лог-ранговый критерий сравнивает наблюдаемое число событий с ожидаемым, если бы кривые совпадали. Разницы складываются в статистику хи-квадрат. Режим «По шагам» показывает эту таблицу целиком. Если кривые пересекаются, log-rank теряет чувствительность: тогда сверьтесь с Вилкоксоном–Бреслоу и RMST.
Цензурированных пришлось бы выкинуть или считать событием, и оба варианта искажают результат: в первом случае теряются самые долгие наблюдения, во втором их время занижается. Вместо простого среднего смотрите медиану или среднее до горизонта (RMST): площадь под кривой до выбранного дня честно учитывает всех.
Это время, к которому событие случилось у половины группы, то есть где кривая впервые опускается до 50 %. Если кривая так низко не опустилась, медиана не достигнута. При значении ровно 0,5 программы считают по-разному: здесь берётся первое такое время, а R и lifelines дают более поздние значения.
Это значение кривой S(t) на нужный день: укажите его в поле «Удержание на день», и калькулятор покажет долю по каждой группе. В отличие от простого деления, оценка учитывает тех, за кем наблюдали меньше этого срока. Поэтому удержание на 30-й день можно считать и по пользователям, пришедшим неделю назад.