테스트 설계 시 유의해야 하는 표본크기와 검정력

기존에 사용하던 광고소재 A와 새로운 소재 B의 성과를 비교하기 위해 클릭률을 조사한다고 가정하자. 이 조사를 위해서는 얼마나 많은 클릭수를 수집해야 할까?

두 소재의 성과 차이가 50% 이상 나는지 확인하는 게 목표라면, 상대적으로 적은 수의 표본으로도 확인할 수 있을 것이다. 하지만 1%의 차이도 중요하다고 한다면 훨씬 큰 표본이 필요하다. 따라서 "새로운 소재가 기존 소재에 비해 얼마큼 더 효과적이어야 하는지"에 대한 기준을 먼저 설정해야 한다. 이 기준, 즉 '효과크기'가 가설 검정에 필요한 '표본크기'를 결정한다.

검정력이란 특정 표본크기에서 특정한 효과크기를 알아낼 수 있는 확률을 의미한다. 예를 들어 10,000명에게 광고 A와 B를 노출시켰을 때 광고 A의 클릭률이 1.1이고 광고 B의 클릭률은 그보다 약 10% 높은 1.2였다고 하자. 이 때 10,000 명이라는 표본크기가 10%의 클릭률 차이, 즉 효과크기를 어느정도의 확률로 보장할까? 만약 이 확률이 75%라고 하면 두 개의 광고소재를 대상으로 한 10,000명의 클릭률 비교 실험은 10%의 효과크기에 대해 75%의 검정력을 갖는다고 할 수 있는 것이다.

검정력과 관련된 요소는 다음 4가지가 있다.

  • 표본크기
  • 탐지하고자 하는 효과크기
  • 가설검정을 위한 유의수준
  • 검정력

이 중 3가지를 정하면 나머지 하나를 알 수 있다. 보통은 이 중 표본크기를 알고자 하는 경우가 가장 많을 것이다. 이 때는 나머지 3가지 요소를 정해야 한다.

statsmodel 패키지를 이용한 검정력 계산

statsmodels 패키지는 검정력 계산을 위한 여러가지 메서드를 제공한다. 효과크기를 계산할 때는 proportion_effectsize를 사용하고, 표본크기를 구하기 위해서는 TTestIndPower를 사용하면 된다.

import statsmodels.api as sm

effect_size = sm.stats.proportion_effectsize(prop1=0.0121, prop2=0.011) # 두 비율 간의 차이, 즉 효과크기를 계산
analysis = sm.stats.TTestIndPower() 

# 필요한 표본크기 계산
result = analysis.solve_power(effect_size=effect_size, # 효과 크기
                             alpha=0.05, # 검정을 수행할 유의수준
                             power=0.8, # 검정력
                             alternative='larger')

위 코드는 1.1 클릭률과 1.21 클릭률 사이의 차이가 80%의 검정력을 갖기 위해 조사해야 할 표본크기를 계산하는 코드이다. result 값을 출력해보면 다음과 같다. 즉 실험을 위해 11만6천명이 필요하다는 것이다.

116602.39258799309

prop1prop2 간의 비율 차이를 크게 하면 효과크기가 커져 result 값이 작아진다. prop1 값을 0.016으로 바꾸면 필요한 표본크기는 약 6500명으로 줄어든다.

즉, 검정력과 표본크기는 대체로 반비례 관계에 있다고 볼 수 있다.

좋은 웹페이지 즐겨찾기