이전 포스팅에서 A/B테스트란 무엇이고, 파이썬에서 수행하는 방법에 대한 내용을 다루었다. 처리(treatment)의 효과를 알기 위해, 통계 검증을 하는 내용이 주였다.
오늘은 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테스트에서 샘플 크기를 확인할 수 있는 검정력 테스트에 대해서 알아보았다.
'데이터 > 데이터 분석' 카테고리의 다른 글
범주형 데이터 기준 의사결정나무 알고리즘 만들기 (0) | 2022.01.17 |
---|---|
데이터 분석 용어 정리 - Funnel, adhoc 분석 (0) | 2022.01.17 |
XGBoost와 랜덤 포레스트 재학습 하는 방법은? (0) | 2022.01.17 |
SOM 군집 알고리즘이란? 파이썬 학습 방법은?! (0) | 2022.01.16 |
파이썬 판다스 데이터프레임 리스트로 추출하는 방법은?! (0) | 2022.01.15 |
지역별(시군구, 동단위까지) 소득 통계 데이터 수집하는 3가지 방법 (2) | 2022.01.14 |
파이썬 A/B 테스트 하는 방법은?! (0) | 2022.01.14 |
데이터 유사도 알고리즘 알아보기! (0) | 2020.11.08 |