Что такое effect size

Зачем

P-value показывает, есть ли эффект. Effect size — насколько он велик.

Маленький эффект может быть значимым на огромной выборке, но бизнес-бесполезным. Большой эффект на маленькой выборке — может не быть значимым, но важным для бизнеса.

Простой пример

В A/B-тесте конверсия:

  • Контроль: 5.0%.
  • Тест: 5.1%.
  • Lift: +2% (relative).
  • p-value < 0.001 (значимо благодаря 1M пользователей).

Effect size очень маленький. Стоит ли катить?

  • Если затраты на разработку фичи $10k → возможно нет.
  • Если 1 час работы → катим.

Виды effect size

1. Cohen's d (для средних)

Стандартизованная разница средних:

d = (mean₁ - mean₂) / pooled_std

Интерпретация (Cohen):

  • 0.2 — small.
  • 0.5 — medium.
  • 0.8 — large.

2. Cohen's h (для пропорций)

Для разницы между конверсиями:

h = 2 * arcsin(√p₁) - 2 * arcsin(√p₂)

Те же пороги (0.2, 0.5, 0.8).

3. r (correlation)

Для регрессии и корреляций:

  • 0.1 — small.
  • 0.3 — medium.
  • 0.5+ — large.

4. Cramér's V (для chi-square)

Для категориальных переменных:

  • 0.1 — small.
  • 0.3 — medium.
  • 0.5+ — large.

Расчёт в Python

Cohen's d

import numpy as np

def cohens_d(group1, group2):
    diff = np.mean(group1) - np.mean(group2)
    pooled_std = np.sqrt((np.std(group1)**2 + np.std(group2)**2) / 2)
    return diff / pooled_std

d = cohens_d(control, treatment)
print(f'Cohen\'s d: {d:.3f}')

Cohen's h для пропорций

def cohens_h(p1, p2):
    return 2 * np.arcsin(np.sqrt(p1)) - 2 * np.arcsin(np.sqrt(p2))

h = cohens_h(0.05, 0.06)
print(f'h: {h:.3f}')

Через библиотеку

from scipy import stats
import statsmodels.stats.api as sms

# Cohen's d
es = sms.tt_ind_solve_power(...)

Больше таких примеров с разборами — в Telegram-тренажёре. Короткие сессии, прогресс по темам, объяснения после каждого ответа.

Effect size vs p-value

              p-value         effect size
Маленький N | может быть      может быть значим
              незначим        для бизнеса

Большой N   | всегда значим   значим только если
              даже при        реально большой
              крошечном
              эффекте

Используйте оба: p-value для статистической значимости, effect size для практической.

Effect size в дизайне A/B

При планировании теста через power analysis:

  1. Какой минимальный effect size, который нам важно поймать (MDE)?
  2. Какая мощность? (обычно 0.8).
  3. Какой α? (0.05).
  4. → Размер выборки.
from statsmodels.stats.power import TTestIndPower

analysis = TTestIndPower()
n = analysis.solve_power(effect_size=0.2, alpha=0.05, power=0.8)
print(f'Sample size: {n:.0f} per group')
# → Sample size: 393 per group

Меньший effect size → больше выборка нужна.

Частые ошибки

1. Полагаться только на p-value

«p < 0.001 → катим». Без эффекта значит, что результат измерим, но возможно бесполезен.

2. Игнорировать effect size

«Lift +0.1%, p<0.05» — радоваться рано. Это технически значимо, бизнесу — нет.

3. Использовать Cohen's d для пропорций

Cohen's d — для непрерывных. Для пропорций — Cohen's h.

4. Слишком высокая планка

«Только large effect (d > 0.8) ловим». Часто реальные эффекты — small / medium. Будете пропускать важные.

Как использовать на практике

При планировании

«Какой effect size мы хотим поймать?» → определяет размер выборки.

При интерпретации

  • p-value: значимо?
  • Effect size: насколько большой?
  • Confidence interval: насколько уверенно?

Все три — для зрелого решения.

При обсуждении с PM

«Мы поймали +5% lift, effect size medium. Это reliable improvement, рекомендую катить.»

Не «p<0.001, катим».

Если готовишься к собесу — бот @kariernik_bot закрывает 80% технических вопросов. SQL, Python, A/B, продуктовые метрики — всё в одном месте.

Примеры из жизни

Хорошо

«Lift конверсии +20%, Cohen's h = 0.4 (medium-large effect), p<0.001 на n=10k. Катим.»

Плохо

«Lift +0.05%, p<0.001 на n=10M. Технически значимо, effect size near zero. Не катим.»

Хитро

«Lift +30%, p=0.07 на n=200. Effect size large, но мощности не хватило. Продлеваем тест.»

Связь с power analysis

Power = вероятность задетектить эффект данного размера.

Power = f(N, effect_size, α)

При фиксированных α и power — N обратно пропорционален quadratically effect_size:

  • Effect 0.5 → нужно N=64.
  • Effect 0.2 → нужно N=400.
  • Effect 0.1 → нужно N=1600.

Чем меньше эффект, тем больше нужна выборка.

Читайте также

FAQ

Какой effect size «good»?

Зависит от контекста. В медицине ловят 0.2 (важно). В digital marketing 0.5+ — отлично.

Почему важно вместе с p-value?

P-value говорит «есть эффект». Effect size — «насколько большой». Без второго — неинформативно.

Cohen's d сложно считать?

Нет. (mean1 - mean2) / pooled_std. Pandas / scipy считают за секунду.

Малый effect size = плохо?

Нет. В медицине крошечный effect может спасать жизни. Контекст определяет.