huny.log

기술 포스트 · 통계·ML

Power analysis와 MDE — 실험 시작 전에 표본·기간을 정직하게 잡는 법

A/B 시작 전 "표본 얼마나 모아야?"의 답이 power analysis. 검출력 80%로 검출 가능한 최소 효과(MDE)를 미리 계산해 실험 기간·해석 한도를 명확히 잡는 흐름.

A/B 실험을 시작하기 전 “표본 얼마나 모으면 돼?”라는 질문에 답하지 못하면, 결과 단계에서 “p-value 0.07이라 결론 못 냄”이 흔히 나옵니다. Power analysis는 그 질문에 답하는 표준 도구이고, MDE(Minimum Detectable Effect) 개념이 결정의 핵심입니다. 실험 시작 전 한 번의 계산이 실험 운영의 절반을 정직하게 만듭니다.

마케터가 이 글을 읽어야 하는 이유: 실험 결과 회의에서 “결론 보류”가 자주 나오는 자리는 사실 실험 시작 전의 power analysis 부족이 원인입니다. 검출력·MDE를 미리 계산하면 “이 실험은 +3%p 이상 효과만 검출 가능하다”는 한도를 알고 시작할 수 있습니다.

표본 크기 N에 대한 검출 가능 효과 MDE 곡선과 검출력 80% 영역을 시각화한 다이어그램
N이 커질수록 MDE가 작아진다. 그 곡선 위에서 실험 디자인이 결정된다.

1. 4개 변수의 관계

A/B 실험의 통계적 결정은 4개 변수가 서로 묶여 있습니다.

변수의미
표본 크기 (그룹당)
효과 크기 (MDE)
양측 유의수준 (보통 0.05)
검출력 (보통 0.80)

이 4개 중 3개를 정하면 나머지 1개가 결정됩니다.

N과 , 를 정하면 → MDE가 결정 (이만큼 작은 효과까지 검출 가능) , , 를 정하면 → 필요한 N이 결정

마케팅 자리에서 가장 자주 마주치는 건 두 번째 — “이만큼 효과면 의미 있을 것 같으니 표본 얼마나 모을까?”.

2. 표본 크기 공식

이항 비율(전환율) 비교의 표준 공식.

  • : baseline 전환율
  • : 검출하고자 하는 절대 효과 크기
  • (양측 5%)
  • (검출력 80%)

예시: baseline 전환율 5%, 효과 1%p (5% → 6%) 검출.

  • ,

각 그룹 8,136명, 총 16,272명. 효과 크기를 절반(0.5%p)으로 잡으면 표본은 4배(32,500+).

3. MDE — 표본 거꾸로 풀기

표본이 정해져 있을 때 거꾸로 검출 가능한 최소 효과를 풉니다.

예시: 그룹당 5,000명, baseline 5%.

  • MDE
  • 약 1.22%p

이 실험은 +1.22%p 이상의 효과만 통계적으로 검출. +1%p 효과는 결과 보류 위험.

그룹당 NMDE (baseline 5%)
1,0002.7%p
5,0001.2%p
10,0000.85%p
50,0000.38%p

작은 효과를 잡으려면 표본 폭증. 보통 +1%p 이하 효과를 잡으려면 그룹당 1만+ 필수.

4. 코드 한 묶음 — 표본·MDE 계산기

이게 글에 박는 유일한 코드입니다.

import numpy as np
from scipy import stats
def required_sample_size(p, mde, alpha=0.05, power=0.8):
"""그룹당 필요한 표본 크기"""
z_alpha = stats.norm.ppf(1 - alpha / 2)
z_beta = stats.norm.ppf(power)
p_avg = p + mde / 2
n = (z_alpha + z_beta) ** 2 * 2 * p_avg * (1 - p_avg) / (mde ** 2)
return int(np.ceil(n))
def detectable_effect(n, p, alpha=0.05, power=0.8):
"""그룹당 N명일 때 검출 가능한 최소 효과"""
z_alpha = stats.norm.ppf(1 - alpha / 2)
z_beta = stats.norm.ppf(power)
return (z_alpha + z_beta) * np.sqrt(2 * p * (1 - p) / n)
# 시나리오 1: baseline 5%, 1%p 효과 검출하려면?
print(f"필요 표본: {required_sample_size(0.05, 0.01)}/group")
# 8136
# 시나리오 2: 그룹당 5000명일 때 검출 가능 효과는?
print(f"MDE: {detectable_effect(5000, 0.05) * 100:.2f}%p")
# 1.22
# 시나리오 3: 일일 트래픽 2000명 가정 시 실험 기간
daily_traffic = 2000
needed = required_sample_size(0.05, 0.01) * 2 # 양 그룹 합계
days = needed / daily_traffic
print(f"실험 기간: {days:.0f}일")
# 약 8일

이 한 묶음이 실험 디자인의 의사결정 도구. 시작 전에 한 번만 돌리면 표본·기간이 정해집니다.

5. 효과 크기 결정의 근거

MDE를 잡는 결정은 통계가 아니라 비즈니스 의미입니다.

5-1. 비즈니스 의미가 있는 최소 효과

“이 실험에서 +0.1%p 효과면 운영적으로 의미 있는가?” → 의미 없으면 검출할 가치도 없음. 의미 있는 최소 효과를 MDE로 잡음.

5-2. 과거 비슷한 실험의 효과 분포

비슷한 실험에서 효과가 보통 +2-5%p였다면 MDE를 +2%p로 잡음. 그보다 작은 효과는 의미 없는 자리.

5-3. 운영적 결정 임계값

실험 결과로 “B안 채택” vs “A안 유지”의 결정 임계값. 임계값 차이 정도를 MDE로.

자리MDE 결정 근거
이메일 CTR+0.5%p (운영 표준)
광고 CVR+1-2%p (효과 분포)
매출/유저+5% 상대 (비즈니스)
Onboarding 완료율+2-3%p (의사결정)

6. 실험 기간 결정

표본이 정해지면 일일 트래픽으로 나누면 실험 기간.

은 그룹당. 양 그룹 합쳐 일일 트래픽으로 나눔. 추가 고려:

6-1. 주말 효과

주중·주말 트래픽 패턴이 다르면 한 주 단위로 자르는 게 안전. 7-14일 권장.

6-2. Novelty effect

새 기능·디자인은 처음 며칠 효과가 부풀어짐. 효과 안정화에 1-2주 기다림.

6-3. 시즌성

큰 시즌(블프, 설) 직전·직후는 매출 분포 격변. 평상시 기간으로 한정.

대부분의 실험이 1-3주가 실용적. 1주 미만은 노이즈, 1달+은 비효율.

7. 작은 표본 자리의 대안

일일 트래픽이 작아 표본 8,000명/group이 어렵다면.

7-1. CUPED 분산 축소

CUPED는 사전 데이터로 분산을 깎아 같은 N에서 더 작은 MDE 검출. 분산 30-50% 감소가 흔함.

7-2. 베이지안 A/B

Bayesian A/B는 prior로 정보 보강. 작은 N에서도 합리적 추정.

7-3. 효과 크기 재평가

작은 효과 검출이 비즈니스적 의미 없으면 MDE를 키워 표본 감축.

7-4. 실험 단위 변경

유저 단위 실험이 어려우면 캠페인·세그먼트 단위로 변경해 효과 크기 키움.

작은 표본 자리대안
분산 큼CUPED
사전 정보 있음Bayesian A/B
효과 잘게 보고 싶음Sequential testing
단위 작음실험 단위 확대

8. 분기 보고에 박을 표 양식

실험 시작 전 사전 등록 문서에 다음 한 표를 박아둡니다.

항목
실험 가설”B안이 A안 대비 CVR +2%p 개선”
Baseline CVR (사전 측정)5.2%
MDE2.0%p (절대)
양측 0.05
검출력 ()0.80
그룹당 필요 표본2,034
일일 트래픽 (예상)1,500/그룹
실험 기간약 3일 + 안정화 4일 = 7일
결과 발표실험 종료 즉시

이 표가 실험 사전 등록의 표준 양식. 실험 시작 후 결과 보고 임의 조정하지 않는 신뢰성의 기반.

9. 마치며 — 실험의 정직성은 시작 전에 결정

A/B 실험의 운영 신뢰도는 사후 분석이 아니라 시작 전 power analysis에 달려 있습니다. 표본·MDE·기간을 미리 계산하고 사전 등록 문서에 박아두면, 실험 결과 회의가 데이터로 답하는 자리가 됩니다. 일일 트래픽이 부족하면 CUPED·베이지안·실험 단위 변경 같은 대안이 답이 됩니다.

다음 분기에 한 번만 시도해 볼 만한 것은 모든 A/B 실험에 사전 등록 문서를 표준화해 power analysis 표를 의무화하는 흐름입니다. 결과 단계의 “보류” 비율이 한 단계 내려갑니다.

다음에 읽을 글

참고

통계·ML 카테고리의 다른 글

전체 보기 →