A/B 테스트와 예제

4 minute read

서론

서비스에서는 새로운 모델, 새로운 디자인이 실제로 효과가 있는 것인지 확인하는 것이 굉장히 중요한 일이다. 따라서 우리에게는 새로 개발한 모델이 사용자의 구매를 늘리거나, 새로운 디자인이 더 많은 클릭을 유도한다는 것을 증명할 필요가 생긴다. 간단하게 말해 기존의 방법과 새로운 방법 사이에 유의미한 차이가 있다는 것을 증명해야한다. 흔히들 예로 드는 CTR(Click Through Rate), 클릭률을 기준으로 설명해보자. 어떤 웹사이트에서 광고를 하는데 새로운 디자인의 광고메세지가 기존의 디자인보다 월등한 클릭률을 자랑한다면, 이는 서비스의 수익과 직결되는 중요한 문제이다.

그렇다면 어떻게 새로운 방법이 기존의 방법대비 좋다는 것을 증명할 수 있을까? 이에 대한 내용이 바로 A/B Test이다. 아주 직관적 네이밍인데, A안과 B안 중 누가 좋은지 테스트하겠다~의 의미다.

A/B 테스트

단, A/B 테스트는 한 가지의 차이만 존재해야한다. 디자인도 바꾸면서 모델도 바꾸면 안되고, 두 군데 이상의 디자인을 한 꺼번에 바꿔서도 안된다. 어떤 ‘포인트’가 내가 바꾸고 싶은 ‘목표’에 영향을 주는 지를 알아야하기 때문이다. 물론 대부분의 목표는 돈을 벌어다줄 수 있는 클릭률, 구매율 등을 의미하게 될 것이다. 하지만 A/B 테스트라는 것은 어떻게 진행되는 것일까? 단순히 클릭률이 1%p, 2%p, 또는 10%p 높다고 무조건 새로운 디자인/모델이 우수하다고 결론내릴 수 있을까? 세상은 그렇게 만만하지 않다 :) 통계적으로 ‘유의미한 차이’가 있는 것을 증명해야한다. 다행히도 온라인에는 이 사이트 와 같이 간단하게 A안 사용자 수, 클릭 수, B안 사용자 수, 클릭 수만 입력하면 어떤 것이 나은 지 알려주는 서비스가 존재한다. 하지만, 필자는 직접 손으로 계산하며 이 유의성이 어떻게 도출되는 지 확인하고 싶었다. 그러나 온라인 상에는 A/B 테스트의 정의, 주의할 점 등만 기술되어 있고 실제로 어떻게 계산되는 지에 대한 예제가 부족해 직접 작성하고자 한다.

예제

본격적으로 예제를 생각해보자. 당신은 웹 디자이너이고 어떻게하면 사람들이 당사가 만든 서비스를 이용하게 할 지 고민중이다. UI의 차이에 따라서 사람들이 서비스를 어떻게 생각할 지 결정되고, 더 많은 클릭을 유도할 수록 더 많은 수익을 회사에 벌어다줄 수 있다. 기존의 디자인을 A안, 내가 새로 고안안 UI를 B안이라고 해보자.

우리는 약 한 달간 절반의 사용자에게는 A안을, 나머지 절반의 사용자에게는 B안을 보여주었다. 물론, 절반을 나누는 방법에는 여러 가지가 있지만 전화번호 뒷번호 홀/짝과 같은 랜덤한 방식(독립적)으로 나누어 주어야 한다. 그 결과는 다음과 같다고 가정하자. A안: 1000회 사용 중 클릭 20번, B안 1100회 사용 중 클릭 30번. 정말 애매하다. 단 10번의 클릭 증가가, 100회의 사용 증가를 감수하고서라도 의미있는 증가라고 결론내릴 수 있을까?

A/B 테스트는 단순히 직감이 아니라, 통계를 이용하여 유의성을 검정해야만 의미가 있어진다. 그렇다면 통계적으로 어떤 문제를 풀어야하는가? 먼저, 우리는 ‘두 표본’을 가지고 있다. 그리고 우리가 알고 싶은 것은 두 표본 내에서가 아닌, 실제 A안의 모집단, B안의 모집단에서 이 클릭률에 실제로 차이가 있는지이다. 즉, ‘두 모비율의 차이’를 알고 싶은 것이다.

문제는 정해졌다. 두 집단의 모비율 차이에 대한 가설검정을 진행하면 된다.

두 집단의 모비율 차이에 대한 가설 검정

가설 검정에 앞서, 두 집단의 분포는 어떤 것일까? 이항 분포이다. 왜냐하면 클릭을 했냐 vs 클릭하지 않았냐의 선택 문제이기 때문이다. 이항분포는 연속된 n번의 독립적 시행에서 각 시행이 확률 p를 가질 때의 확률분포이며 베르누이 시행이라고 불린다. 우리의 예제에서 시행 횟수는 $n_1 = 1000$, $n_2 = 1100$, 표본비율은 $p_1 = \frac{20}{1000} = 0.02$, $p_2 = \frac{30}{1100} = 0.027$ 이다.

확률 p, 시행n의 이항분포는 n이 적당히 크다면 중심극한 정리에 의해 $N(np, np(1-p))$ 정규분포에 가까워진다. 또한 표본 비율은 이항분포의 표본 평균이라고 볼 수 있기 때문에 $ p \sim N(p, p(1-p)/n)$ 와 같이 표현할 수 있다. 다른말로 하면, 비율은 $\frac{X}{n}$에 대해서 평균과 분산을 구하기 때문에, 각각 $E(\frac{X}{n}), Var(\frac{X}{n})$ 꼴인데, 분산의 경우 제곱되어 밖으로 나오기 때문에 위와 같은 형식이 된다.

본격적으로 가설검정을 해보자. 우리에게 중요한 것은 대립가설인데, 우리는 $p_2>p_1$ 을 바라고 있다. 따라서 아래와 같은 귀무가설, 대립가설을 세울 수 있다.

$H_0: p_1 - p_2 = 0$ $H_1: p_1 - p_2 < 0$

$p_1 = p_2$ 로 표현하지 않은 이유는 $p_1 - p_2$의 하나의 분포라고 생각하고 문제를 풀기 위함이다. $p_1 - p_2$의 분포는 두 정규분포의 차이임으로 $\tilde{p_1} - \tilde{p_2} \sim N(p_1-p_2, \frac{p_1(1-p_1)}{n_1}+\frac{p_2(1-p_2)}{n_2})$ 다음과 같은 분포를 따른다. 분산의 항은 두 분포가 ‘독립’인 가정에서 추출되었기 때문이다. 자세한 것이 궁금하면 이 포스트 를 참고하면 된다. 독립인 분포의 공분산은 0이기 때문에 합의 꼴로 나타나게 된다.

검정통계량은 어떤 검정을 사용할 지(Z 검정, T 검정), 모분산이 같다고 가정할 것인지(등분산, 이분산)에 따라서 다르다. ‘모분산’을 알 경우 Z검정, 아닐 경우 T검정을 사용하지만, 표본의 크기가 충분히 크다면 T검정 대신 Z검정을 사용해도 된다. 필자는 이 글에서는 모분산이 같다고 가정, 표본의 크기가 충분히 크다고 가정하여 Z검정을 이용할 것이다. 혹시! 정확히 T검정과, 분산이 다른 경우(unpooled)에 대한 예제를 찾고 싶으면 이 곳을 참고하시길 바란다.

Z 검정 통계량은 다음과 같다. $Z=\frac{\bar{X} - \mu}{SE}$. 우리의 분포는 표본비율(이항분포인 표본평균의 분포로부터 구해진)에 관한 것이므로, 분모항인 표준오차의 경우 $\sqrt{\frac{p_1(1-p_1)}{n_1}+\frac{p_2(1-p_2)}{n_2}}$ 이다. 따라서 검정통계량을 표현하자면 아래와 같다.

$ Z = \frac{(\tilde{p_1}-\tilde{p_2})-(p_1-p_2)}{\sqrt{\frac{p_1(1-p_1)}{n_1}+\frac{p_2(1-p_2)}{n_2}}}$

검정통계량의 경우 귀무가설 가정 하에서 구하게 된다. $p_1-p_2=0$. 따라서 우리는 분모의 표준오차항에서 각각의 표본비율을 사용하는 대신 합동표본비율을 사용할 것이다. 합동 표본비율은 $\tilde{p} = \frac{m_1+m_2}{n_1+n_2}$와 같이 구할 수 있으며 우리의 경우 $\frac{20+30}{1000+1100} = 0.024$이 되겠다.

다시 검정통계량을 쓰면 아래와 같다.

$ Z = \frac{(\tilde{p_1}-\tilde{p_2})-(p_1-p_2)}{\sqrt{\frac{\tilde{p}(1-\tilde{p})}{n_1}+\frac{\tilde{p}(1-\tilde{p})}{n_2}}}$

이를 수치로 대입하여 구하면

$ Z = \frac{(0.02-0.027)-(0)}{\sqrt{\frac{0.024(0.976)}{1000}+\frac{0.024(0.976)}{1100}}} = -1.05$ 이다.

z = 1.05에서 $P(Z<-1.05)$ 값을 Z분포표에서 구하면 1 - 0.8531 = 0.1469이다. 95% 신뢰도 (유의 수준 0.05)에서 p값이 0.05보다 한참 크므로 귀무가설을 기각할 수 없다. 따라서 디자인 B안이 A안보다 낫다고 판단할 수 없는 것이다.

결론

단순히 클릭률을 비교한다면 A안은 2%, B안은 2.7% 이므로 B안이 낫다고 섣불리 판단할 수 있다. 하지만, A/B test는 이 결과와 표본을 가지고 통계적으로 유의미한 차이인지 결론 내리는 것을 포함한다. 따라서 신중한 방법으로 정확하게 결론을 내릴 수 있어야하겠다.

A/B 테스트에 대한 정의를 다루는 글은 많이 찾을 수 있었지만, 실제 예제를 통해 과정을 이해시켜주는 글을 찾기 어려웠다. 이번 포스트를 통해 나도 A/B 테스트에 대해 정확히 이해할 수 있게 되었다. 단순히 온라인 툴의 사용법과 결과가 아니라 실제 과정과 해석을 찾는 분들에게 도움이 되었으면 좋겠다. 추가적으로 다음의 글을 참고하면 A/B 테스트를 총체적으로 이해하는 데에 더 큰 도움이 될 수 있을 것이다. A/B 테스트 정리 잘 된 곳

Leave a comment