Ответ
При планировании A/B-теста для кредитного скоринга я определял длительность, исходя из двух ключевых факторов: статистической достаточности и бизнес-цикла кредита.
Мой расчётный процесс:
-
Определение целевой метрики и MDE. Основная метрика — коэффициент дефолта (Default Rate, DR). Я договаривался с бизнесом о минимальном значимом эффекте (MDE). Например, мы хотели обнаружить снижение DR с 5.0% до 4.5% (MDE = 0.5 п.п.).
-
Расчёт необходимого размера выборки. Использовал калькулятор мощности для пропорций (двухвыборочный Z-тест):
from statsmodels.stats.power import NormalIndPower from statsmodels.stats.proportion import proportion_effectsize # Исходные параметры p1 = 0.05 # DR в контроле p2 = 0.045 # Ожидаемый DR в тесте alpha = 0.05 # Уровень значимости power = 0.8 # Статистическая мощность # Расчёт эффекта и размера выборки на группу effect_size = proportion_effectsize(p1, p2) analysis = NormalIndPower() sample_size_per_group = analysis.solve_power(effect_size=effect_size, alpha=alpha, power=power) print(f"Необходимо заявок на КАЖДУЮ группу: {int(sample_size_per_group)}") -
Учёт периода наблюдения (observation window). Для кредита важен полный цикл — время, за которое становится ясно, платёжеспособен ли заёмщик. В моих проектах это было 3-6 месяцев (зависит от продукта: кредитная карта или автокредит).
-
Расчёт длительности теста.
- Допустим, по расчётам нужно 10 000 заявок на группу, а в тест идёт 50% трафика.
- Если ежедневно поступает 500 заявок, то тестовая группа получает 250 в день.
- Фаза набора: 10 000 / 250 = 40 дней для набора достаточной выборки.
- Итоговая длительность: 40 дней (набор) + 90 дней (наблюдение за дефолтами) = ~130 дней.
Важно: Я всегда добавлял буфер на сезонность (например, не запускать набор в декабрьские праздники) и проверял, что в тесте участвуют все типы заёмщиков.