← Назад к вопросам

Используется ли в a/b тестах скалирование

2.0 Middle🔥 121 комментариев
#Метрики и оценка моделей#Статистика и A/B тестирование

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Скалирование в A/B тестах

Скалирование (нормализация) в классическом смысле НЕ требуется в A/B тестах для статистических проверок. Однако контекст и вид анализа определяют, когда оно может быть полезно.

1. Почему скалирование НЕ требуется в A/B тестах

A/B тестирование основано на статистических гипотезах, которые работают с сырыми метриками без трансформации:

from scipy import stats
import numpy as np

# Пример: сравнение конверсий
group_a = [1, 1, 0, 1, 0, 1, 1, 0, 1, 0]  # Конверсия (1) или нет (0)
group_b = [1, 1, 1, 0, 1, 1, 0, 1, 1, 1]

# t-test работает со сырыми данными
t_stat, p_value = stats.ttest_ind(group_a, group_b)
print(f"t-stat: {t_stat:.3f}, p-value: {p_value:.3f}")

# Скалирование сюда не нужно — результат будет тот же!

Почему?

  • Статистические тесты (t-test, chi-square, Mann-Whitney U) работают с относительными разностями между группами
  • Масштаб данных не влияет на статистическую значимость
  • Скалирование не изменяет p-value

2. Когда скалирование может быть полезно в A/B тестах

2.1 Анализ множественных метрик

Если вы сравниваете разные метрики с разными шкалами, скалирование помогает визуализировать:

import pandas as pd

# Метрики с разными шкалами
metrics = pd.DataFrame({
    "Конверсия (%)": [2.5, 3.1],
    "Среднее время (сек)": [45, 42],
    "Лайки на пользователя": [0.8, 1.2]
}, index=["Группа A", "Группа B"])

# Для красивой визуализации нормализуем
metrics_scaled = (metrics - metrics.min()) / (metrics.max() - metrics.min())
print(metrics_scaled)  # Теперь все в диапазоне [0, 1]

2.2 Машинное обучение поверх A/B результатов

Если вы используете ML модели для анализа A/B эффектов, то скалирование может помочь:

from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression

# Данные A/B теста с коварианами
X = np.array([
    [1, 100, 25],
    [0, 150, 30],
    [1, 120, 28],
    [0, 200, 35]
])
y = np.array([1, 0, 1, 0])

# Скалирование для ML моделей (рекомендуется)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

model = LogisticRegression()
model.fit(X_scaled, y)

3. Статистические тесты без скалирования

Для A/B тестирования используют:

from scipy.stats import ttest_ind, chi2_contingency, mannwhitneyu

# 1. T-test для непрерывных метрик
group_a_revenue = [100, 120, 95, 150, 110]
group_b_revenue = [140, 160, 130, 190, 120]
t_stat, p_val = ttest_ind(group_a_revenue, group_b_revenue)
print(f"T-test p-value: {p_val:.4f}")

# 2. Chi-square test для категориальных данных
contingency_table = np.array([
    [50, 200],
    [60, 190]
])
chi2, p_val, dof, expected = chi2_contingency(contingency_table)
print(f"Chi-square p-value: {p_val:.4f}")

# 3. Mann-Whitney U для ненормальных данных
group_a = [10, 20, 15, 25, 18]
group_b = [22, 28, 25, 35, 30]
u_stat, p_val = mannwhitneyu(group_a, group_b)
print(f"Mann-Whitney U p-value: {p_val:.4f}")

4. Эффект размера (Effect Size)

Эффект размера часто вычисляется без скалирования для интерпретируемости:

# Cohens d — относительная разница между группами
mean_a = np.mean(group_a)
mean_b = np.mean(group_b)
pooled_std = np.sqrt(((len(group_a)-1)*np.std(group_a, ddof=1)**2 + 
                       (len(group_b)-1)*np.std(group_b, ddof=1)**2) / 
                      (len(group_a) + len(group_b) - 2))
cohens_d = (mean_b - mean_a) / pooled_std
print(f"Cohens d: {cohens_d:.3f}")

5. Относительный лифт

# Прямое сравнение конверсий
conv_a = 0.03  # 3%
conv_b = 0.035  # 3.5%

uplift = (conv_b - conv_a) / conv_a * 100
print(f"Относительный лифт: {uplift:.1f}%")  # 16.7%

Заключение

В классическом A/B тестировании скалирование НЕ требуется для:

  • Проверки статистической значимости (t-test, chi-square)
  • Вычисления p-value
  • Оценки эффекта размера (Cohens d)

Скалирование полезно для:

  • Визуализации результатов с разными шкалами
  • ML моделей, построенных поверх A/B результатов
  • Комбинирования нескольких метрик в один индекс

Правило: Если вы делаете статистический тест — скалирование не нужно. Если вы делаете ML анализ — скалирование рекомендуется. Если вы делаете визуализацию — скалирование помогает.

Используется ли в a/b тестах скалирование | PrepBro