Используется ли в A/B-тестах масштабирование (скалирование) данных?

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

Ответ

Да, масштабирование (или другие преобразования данных) часто применяется в A/B-тестах, особенно когда исходные метрики имеют нестандартное распределение. Цель — привести данные к виду, который лучше соответствует предпосылкам используемого статистического теста (например, нормальности для t-теста).

Типичные сценарии и методы:

  1. Логарифмирование: Применяется для метрик с правосторонней асимметрией (положительный skew), таких как доход на пользователя, длительность сессии или количество кликов.

    import numpy as np
    import scipy.stats as stats
    
    # Исходные данные с выбросами (например, Revenue Per User)
    revenue_group_a = np.array([5, 12, 8, 150, 10])  # Выброс 150
    revenue_group_b = np.array([7, 9, 15, 11, 8])
    
    # Логарифмическое преобразование для уменьшения влияния выбросов
    log_revenue_a = np.log1p(revenue_group_a)  # log1p = log(1+x), безопасно для нулей
    log_revenue_b = np.log1p(revenue_group_b)
    
    # Проведение t-теста на преобразованных данных
    t_stat, p_value = stats.ttest_ind(log_revenue_a, log_revenue_b)
    print(f"p-value после логарифмирования: {p_value:.4f}")
  2. Квадратный корень или преобразование Бокса-Кокса: Альтернативные методы для стабилизации дисперсии.

Важное замечание: Интерпретация результатов после преобразования меняется. Вы говорите не о разнице в средних доходах, а о разнице в средних логарифмов доходов. Отчёт бизнесу должен это учитывать.