이전 포스팅에서 A/B테스트란 무엇이고, 파이썬에서 수행하는 방법에 대한 내용을 다루었다. 처리(treatment)의 효과를 알기 위해, 통계 검증을 하는 내용이 주였다.

 

파이썬 A/B 테스트 하는 방법은?!

A/B TEST는 어떤 처리(treatment)를 했을 때 발생하는 결과를 통계적으로 검증하는 테스트이다. 이를 통해 더 효율이 높은 방법을 알 수 있다. 웹사이트나 게임 등에서 어떤 방법이 

www.infoking.site

 

오늘은 A/B테스트를 할 때 필요한 샘플 크기가 얼마나 되는지 확인하는 방법에 대해서 알아보도록 하겠다.

 

파이썬 A/B테스트 샘플 크기

 

샘플 크기를 알기 위해서는 검증력 분석(power analysis)를 해야 한다. 파이썬에서는 statsmodel 패키지에서 해당 분석을 지원하고 있다. 필요한 샘플 크기를 알기 위해서는 아래 3가지를 정해야 한다.

 

- 효과력 크기: 대조군에 비해서 처리를 한 그룹이 얼마나 효과가 있는지를 나타내는 숫자이다. statsmodel의 TTestIndPower에서는 두 평균간의 차이를 표준 편차로 나눈 값으로 정의하고 있다.

- 유의 수준: 유의 수준보다 낮은 확률이 나왔을 때, 해당 처리가 효과가 있다고 본다. p-value로 이해해도 될 듯 하다.
- 검정력: 처리한 것이 효과가 있다고 나올 확률

보통 유의수준은 0.05, 효과력 크기는 0.8, 검정력 크기는 0.8로 한다고 한다. 위의 숫자로 필요한 샘플 크기를 계산해 보았따.

from statsmodels.stats.power import TTestIndPower

effect=0.8
alpha = 0.05
power = 0.8

analysis = TTestIndPower()
result = analysis.solve_power(effect, power=power, alpha=alpha)

print(result)

 

실행하면 25.52가 나온다. 샘플크기는 26개 이상이 되면 되는 것을 알 수 있다. 사실 solve_power는 샘플 크기수도 넣을 수 있다. 효과력 크기, 유의수준, 검정력, 샘플 크기 중에서 하나의 값만 제외하고 입력하면, 다른 나머지 값이 return된다. 이번에는 샘플 크기를 넣고, 검정력 값을 비워보았다. 샘플크기를 넣기 위해서는 nobs1과 ratio를 넣어야 한다. nobs1은 1그룹의 샘플수이고, 2그룹의 샘플수는 nobs1 * ratio가 된다.

from statsmodels.stats.power import TTestIndPower

effect=0.8
alpha = 0.05
nobs1 = 26

analysis = TTestIndPower()
result = analysis.solve_power(effect, nobs1=nobs1, ratio=1.0, alpha=alpha)

print(result)

 

실행하면 0.807의 값이 나온다. 검정력이 위에서 0.8이었던 것을 생각하면 비슷한 숫자가 나왔다. slove_power외에도 plot_power를 이용하면 효과력 크기, 유의수준, 샘플 크기의 변화에 따른 검증력의 차이를 알 수 있다. Y축은 검정력 크기가 되고, X축은 dep_var에서 정한 변수가 된다. 샘플크기와 효과력크기에 따른 검정력의 차이를 알아보았다.

import numpy as np

analysis = TTestIndPower()
analysis.plot_power(dep_var='nobs', nobs=np.arange(5,100), effect_size=np.array([0.2, 0.5, 0.8]), alpha=0.05)

 

검정력 분석

 

plot_power는 유용하기는 하지만, Y축이 검정력만 가능한 것이 아쉽다. 하지만, for문을 이용하면 쉽게 원하는 형태로 값을 구하고 그래프를 그릴 수 있다. X축에 검정력을 넣고, Y축에는 샘플 크기를 넣어 보았다.

power = np.arange(0.1, 1, 0.1)
alpha = 0.05
effect = 0.8
y = list()

for x in power:
    result = analysis.solve_power(effect, power=x, alpha=alpha)
    y.append(result)

 

import seaborn as sns

sns.lineplot(x=power, y=y)
sns.scatterplot(x=power, y=y)

 

검정력 그래프

 

오늘은 이렇게 파이선 A/B테스트에서 샘플 크기를 확인할 수 있는 검정력 테스트에 대해서 알아보았다.

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기

댓글을 달아 주세요

">
  1. thumbnail
    랑니2116
    2020.12.27 00:31

    이해는 못해도 새로운 내용을 보면 저의 상식이 넓어지는 느낌이라 좋습니다!