LabHub
시작하기
배우기 러닝패스 코스

개발자의 창업 — 만들기 전에 검증하기

A/B 테스트 — p 값보다 먼저 볼 것들

LabHub 에서 이어서 보기

한 줄 요약

A/B 테스트의 결론은 p 값 하나로 나지 않는다. ① 나눠진 비율이 설계대로인가(SRM) ② 효과를 잡을 만큼 사람이 모였나(검정력) ③ 미리 정한 시점에 한 번 봤나(엿보기) ④ 몇 번을 비교했나(다중 비교) — 이 넷을 먼저 확인하고, 그다음 신뢰구간으로 효과의 크기를 말한다.

왜 이게 필요했나

작은 팀일수록 실험을 서두른다. 트래픽이 적으니 매일 대시보드를 열어 보고, p 가 0.05 아래로 내려간 날 "이겼다" 며 배포한다. 결과가 안 나오면 기기별·신규/재방문별로 쪼개 보다가 하나가 유의하게 나오면 그 세그먼트용 기능을 만든다. 둘 다 흔하고, 둘 다 우연을 발견으로 착각하는 가장 빠른 방법이다.

Johari 등의 Peeking at A/B Tests(KDD 2017)는 고전적 p 값과 신뢰구간이 표본 크기를 미리 정해 두었을 때만 성립하며, 대시보드를 계속 보다가 유의해진 순간 멈추면 거짓 양성 확률이 크게 부푼다고 보고한다. 또 Fabijan 등의 표본 비율 불일치 연구(KDD 2019)는 관측된 배정 비율이 기대와 다른 SRM 을 여러 데이터 품질 문제의 '증상' 으로 다루고, SRM 이 있는 실험의 분석은 믿을 수 없다고 적는다.

어떻게 동작하나

SRM — 가장 먼저. 50:50 으로 나눴다면 두 쪽 사용자 수는 비슷해야 한다. 기대값과의 차이를 카이제곱 적합도 검정(자유도 1)으로 재고, 이 실습은 p < 0.001 을 SRM 으로 본다. 한쪽 사용자 일부가 기록에서 빠지는 버그(리다이렉트 실패, 봇 필터, 앱 버전)는 전환율까지 한쪽으로 기울인다. SRM 이 보이면 전환율을 해석하지 않고 원인을 먼저 찾는다.

두 비율의 z 검정과 신뢰구간. 차이 = B 전환율 − A 전환율. 검정 통계량은 '두 쪽이 같다' 는 가정 아래 합동(pooled) 비율로 표준오차를 구하고, 95% 신뢰구간은 각자의 비율로 구한 비합동 표준오차에 1.96(정확히는 NormalDist().inv_cdf(0.975))을 곱한다. 파이썬 표준 라이브러리 statistics.NormalDist 가 정규분포의 cdfinv_cdf 를 제공하므로 외부 패키지가 필요 없다. 신뢰구간이 0 을 포함하지 않고 양의 방향이면 "B 가 낫다" 에 더해 얼마나 나은지(하한이 얼마인지)를 말할 수 있다.

검정력과 표본 크기. 기준 전환율 p1 에서 절대 δ 만큼의 차이를 유의수준 α(양측)와 검정력 1−β 로 잡으려면 한 쪽에 필요한 사람 수는 정규 근사로

n = ⌈ ( z(1−α/2)·√(2·p̄(1−p̄)) + z(1−β)·√(p1(1−p1) + p2(1−p2)) )² / δ² ⌉,  p2 = p1 + δ, p̄ = (p1+p2)/2

이다. 기준 전환율 11% 근처에서 1%p 를 α=0.05, 검정력 80% 로 잡으려면 한 쪽에 만 명을 훌쩍 넘는다(예시). 표본이 모자란 실험에서 유의하게 나온 효과는 실제보다 크게 추정되는 경향이 있다 — Gelman 과 Carlin(2014)이 이를 Type M(크기) 오류라 불렀다. 그래서 표본 크기는 실험을 시작하기 전에 정한다.

엿보기. A/A 실험(두 쪽이 같은 화면)이라도 누적 p 값을 매일 계산하면 어느 날엔가 0.05 아래로 내려갈 수 있다. 정해 둔 날에 한 번만 보면 그 날의 p 가 결론이다. 매일 보고 싶다면 순차 검정처럼 그 목적으로 설계된 방법을 쓴다.

다중 비교. 변형 다섯 개를 대조군과 각각 비교하거나 세그먼트 열 개로 쪼개면, 효과가 없어도 0.05 아래가 하나쯤 나오는 것이 자연스럽다. Holm(1979) 의 단계 하강 방법은 p 값을 작은 것부터 k 번째에 (m−k+1)을 곱해 α 와 비교하다가 처음 넘는 곳에서 멈춘다. 본페로니보다 덜 보수적이면서 전체 거짓 양성 확률을 α 이하로 묶는다.

현장에서 만나는 모습

틀렸을 때 알아채는 법

다음 실습에서 할 것

실험 네 개로 SRM 검사, 두 비율의 z 검정과 신뢰구간, 표본 크기 계산을 함수로 만들고, A/A 실험의 날짜별 누적 p 에서 엿보기의 함정을, 변형 다섯 개와 세그먼트 열 개에서 Holm 보정 전후의 차이를 확인한다. 마지막에 실험마다 배포 판단을 한 장으로 낸다. 채점기는 여러분의 함수를 무작위 입력으로 다시 부른다.