Как правильно разбить существующие магазины компании на две группы для A/B-теста?

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

Ответ

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

Практический подход (на Python):

  1. Определяю ключевые страты (признаки): Это метрики, которые сильно влияют на целевую переменную (например, выручку). Обычно это:

    • Географический регион / тип города.
    • Формат и площадь магазина.
    • Историческая средняя выручка за последний квартал.
    • Трафик (среднее количество чеков).
  2. Создаю страты и выполняю разбиение:

    import pandas as pd
    import numpy as np
    from sklearn.model_selection import train_test_split
    
    # df - DataFrame с данными магазинов
    # Создаю категориальную переменную 'strata', комбинируя ключевые признаки
    df['strata'] = (
        df['region'].astype(str) + '_' + 
        pd.qcut(df['historical_revenue'], q=4, labels=['q1','q2','q3','q4']).astype(str)
    )
    
    # Стратифицированное разбиение. test_size=0.5 для двух равных групп.
    group_a, group_b = train_test_split(
        df,
        test_size=0.5,
        stratify=df['strata'],
        random_state=42 # для воспроизводимости
    )
  3. Проверяю баланс: После разбиения обязательно проверяю, что распределение ключевых метрик (средняя выручка, медианная площадь) между группами статистически неразличимо (например, с помощью t-теста или визуализации). Если дисбаланс есть, повторяю разбиение.

Почему не простая случайная выборка? Прямой рандомизации недостаточно для магазинов, так как они сильно различаются. Стратификация гарантирует, что в каждой группе будет пропорциональное количество, например, маленьких магазинов в регионах и крупных в столице, что делает сравнение честным.