본문 바로가기
그 유명한 A/B 테스트 결과를 신뢰구간을 이용해서 분석해 보는 이야기

그 유명한 A/B 테스트라는 걸 신뢰구간을 이용해서 한번 해보는 이야기입니다. 사실 앞에서 살펴본 선거기사에 관련한 이야기는 비율에 관련한 이야기였는데, 이번에는 평균에 관련한 이야기입니다. 늘 비율과 평균이 같이 다니니까, 조금 그렇구나 정도 생각해 주시면 매우 즐거운 시간이 될 수 있지 않을까 합니다. 

사실 이 A/B테스트라는게 이미 살펴본 선거기사를 읽는 것과 아주 똑같은 것인데요. 한번 보면 아주 똑같습니다. 이렇게 똑같을 수가...
자, 두 개의 신뢰구간이 겹치지 않으면 → 차이가 난다고 보면 좋겠고. 두 개의 신뢰구간이 겹치면 차이가 날 수도 있고 안날 수도 있습니다. 두 개의 신뢰구간이 겹치면 차이 검정을 해 보는 편을 권합니다. 

이번에는 실전 마케팅!!!!을 예시로 이야기를 할까 합니다. 퍼포먼스 마케팅에서 사용되는 A/B테스트는 A안과 B안을 두고서 실제 마케팅 활동의 효과 결과를 비교할 때 통계적으로 차이가 나는지를 보는 방법인데요, 예를 들면, A안으로 운영하고 있었고, B안으로 바꾸고 싶은데, B안이 A안보다 더 나은가를 검증한다는 둥, 완전 새로운 A안 B안 두 개를 두고 어떤 것이 더 나은지를 알아낸다는 둥의 테스트입니다. 홈페이지 등에서 랜덤으로 사용자들에게 A안과 B안을 보여주는 방식으로 테스트를 합니다. 

그러면 A/B안을 두고 - A/B안에서 안을 Plan으로 표기하면, -, 다음과 같은 결과가 있었다고 할 때, 방문객당 평균 구매액을 측정했습니다. 확실히 B가 높군요. 실제 통계적으로 차이가 나는 것일까요?

그냥 데이터로만 보면 B가 A보다는 더 퍼져있고 평균에서 높이가 좀 낮겠군요. 

자, 이제 표준오차를 배웠으니 표준오차를 구해봅시다. 표준오차는 
$= \cfrac{\sigma}{\sqrt{n}}$ 이렇게 되는데, 여기서는 표본이니까 $= \cfrac{s}{\sqrt{n}}$이 되겠군요.라는 것은 결국 t분포를 따르게 되겠지만, n이 워낙 큰 관계로 z분포로 근사해서 문제를 볼 수 있겠습니다. 

그러니까, A에 대해서 표준오차는 $\cfrac{2502}{\sqrt{101765}} = 7.84$이고 표본오차는 (95%신뢰도) 1.96×7.84=15.37가 되고요, 
B에 대한 표준오차는 $\cfrac{2713}{\sqrt{102003}} = 8.49$가 되고, 표본오차는 1.96×8.45=16.5가 됩니다. 

즉, 95% 신뢰구간을 따지면 A시나리오에 대해서는 105.00±1.96×7.84=105.00±15.37 
B시나리오는 120.33±1.96×8.49=120.33±16.5가  되겠군요. -소수점이 반올림해서 표기하고, 반올림 전의 값으로 계산은 하다 보니 조금 왔다 갔다 하는군요-

이걸 구간으로 표기하면, (89.63,120.37), (103.68, 136.98)이 되겠습니다. 엇, 103.68~120.37 구간이 겹칩니다. 흠.

이걸 그려보면 말이죠.

이렇게 되네요. 어. 95% 신뢰구간이 겹치는군요. 그러니까 A안과 B안의 평균 구매액은 그냥 데이터만 보았을 때는 15만원 정도 차이가 나지만, 신뢰구간이 겹치니까 차이가 나는지 안나는지 도통 모르겠습니다. 실제로 통계적으로는 차이가 나는지는 확인해 봐아 하겠군요. 조금 수고로움이 더해지겠군요. 

반면에 신뢰구간이 겹치지 않으면 차이가 난다고 할 수 있겠는데, 선거기사랑 똑같죠? 다만, 평균의 비교이고, 표본오차가 좀 다를 뿐.

 

이것은 신뢰구간을 활용해서 차이가 나는지를 판정하려고 했는데, 신뢰구간이 겹치는 바람에 이것을 검정방법을 이용해서 설명해야 하겠습니다. 자세한 검정 이야기는 검정에서 한번 보시고, 다만 조금 이르긴 하지만 참고할 수 있도록, 이걸 python scipy를 이용해서 풀어볼 수도 있는데 말이죠, Independent Samples t-test를 통계값만으로도 계산할 수 있거든요.

import scipy.stats
scipy.stats.ttest_ind_from_stats(105, 2502,101765, 120.33, 2713, 102003, equal_var=False)
# arguments : mean1, std1, nobs1, mean2, std2, nobs2, equal_var=True, alternative='two-sided'
>
Ttest_indResult(statistic=-1.3259307503622877, pvalue=0.18486413175879948)

 

ttest_ind_from_stats를 사용하면 되는데, 데이터를 넣어서 직접 계산해 보면, p value가 0.184로 95% 신뢰수준에서 유의하지 않게 나오는 군요. 그러니까, 통계적으로 서로 차이가 없다. 는 결론을 볼 수 있겠습니다. 

베이지안으로 A/B테스트를 할 수도 있습니다. 이것은 이것대로 또 재미있으니, 베이지안 통계를 다룰 때, 또 A/B테스트를 한번 해 보시죠. 

친절한 데이터 사이언스 강좌 글 전체 목차 (링크) -



댓글





친절한 데이터 사이언스 강좌 글 전체 목차 (링크) -