Как определить длительность A/B-теста для оценки модели кредитного скоринга?

«Как определить длительность A/B-теста для оценки модели кредитного скоринга?» — вопрос из категории A/B тестирование, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

При планировании A/B-теста для кредитного скоринга я определял длительность, исходя из двух ключевых факторов: статистической достаточности и бизнес-цикла кредита.

Мой расчётный процесс:

  1. Определение целевой метрики и MDE. Основная метрика — коэффициент дефолта (Default Rate, DR). Я договаривался с бизнесом о минимальном значимом эффекте (MDE). Например, мы хотели обнаружить снижение DR с 5.0% до 4.5% (MDE = 0.5 п.п.).

  2. Расчёт необходимого размера выборки. Использовал калькулятор мощности для пропорций (двухвыборочный 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)}")
  3. Учёт периода наблюдения (observation window). Для кредита важен полный цикл — время, за которое становится ясно, платёжеспособен ли заёмщик. В моих проектах это было 3-6 месяцев (зависит от продукта: кредитная карта или автокредит).

  4. Расчёт длительности теста.

    • Допустим, по расчётам нужно 10 000 заявок на группу, а в тест идёт 50% трафика.
    • Если ежедневно поступает 500 заявок, то тестовая группа получает 250 в день.
    • Фаза набора: 10 000 / 250 = 40 дней для набора достаточной выборки.
    • Итоговая длительность: 40 дней (набор) + 90 дней (наблюдение за дефолтами) = ~130 дней.

Важно: Я всегда добавлял буфер на сезонность (например, не запускать набор в декабрьские праздники) и проверял, что в тесте участвуют все типы заёмщиков.