Data Traveler
Tantum videmus quantum scimus

2022-05-31

Author: 98hyun

Published: 2022-06-02

Tags: 데이터분석 통계

Share :


  dirty-cat

dirty-cat은 categorical variable을 기계학습이 가능하게 numerical 하게 바꾸어주는 feature engineering library다.

scikit-learn과 호환되어 직접 변수에 encoder를 연결하는 방법부터 다 귀찮고 자동으로 적용되는 방법까지 다양하다.

링크를 참고하여 적용해볼 수 있다.

분석환경은 kaggle notebook을 통해 진행하였다.


  A/B 테스트

A/B 테스트는 한가지 독립변수(새로운 홈페이지)에 의해 전환율의 차이가 나타나는 변화를 검증하는 것이다.

전환율이 평균 13%에서 통제집단과 실험집단을 나누어 2%를 증가시키고 싶은 연구과제다.

해당 연구를 진행하면서 배웠던 용어 및 코드를 밑에 적어 놓았다.

설명


1. 귀무가설과 대립가설

이젠 확실하게 머리에 들어간 용어. 

귀무가설은 차이가 없는. 있는 그대로의 변화가 없는. 현재의 가설.   

대립가설은 차이가 발생한. 변화가 있는. 우리가 밝히고 싶은 가설. 

2. 1종 오류와 2종 오류

1종 오류란 귀무가설이 맞지만 기각하는 오류. 즉, 음성인데 양성이라고 한 오류.  

2종 오류란 대립가설이 맞지만 기각하는 오류. 즉, 양성인데 음성이라고 한 오류.

둘 다 오류기에 줄이면 좋지만 한쪽이 커지면 다른쪽은 작아지는 trade-off 관계이기 때문에 

그래도 오해(1종오류)보단 오류(2종오류)가 더 나쁘기 때문에 2종 오류를 적게 하는 편이다. 

3. 유의수준과 유의확률

유의수준은 1종 오류가 일어날 최대 확률. 즉, a=5%. 신뢰수준은 (1-a)=95%. 반대 관계. 

유의확률은 p값이라고도 하며 귀무가설이 맞다고 할 때 극단값이 나올 확률. 그래서 0.005 혹은 0.01? 정도로 한다. 

4. 검정력

드디어 검정력은 대립가설이 맞다고 할 때 채택할 확률. 즉, 2종 오류가 B이므로 (1-B) %.

검정력이 좋아지면 2종오류를 범할 확률이 줄어든다. 

python code 중 

import statsmodels.stats.api as sms
from math import ceil 

effect_size = sms.proportion_effectsize(0.13, 0.15)  
# Calculating effect size based on our expected rates
# 13%에서 15%가 되고 싶어하므로

required_n = sms.NormalIndPower().solve_power(
    effect_size, 
    power=0.8,  # 검정력 (1-b)
    alpha=0.05, # 신뢰계수 (a)
    ratio=1     # ?
    )                                                  # Calculating sample size needed

required_n = ceil(required_n)                          # Rounding up to next whole number                          

print(required_n) # 4720 

즉, 0.13 에서 0.15 2%가 증가했다는 것을 알고 검정력 0.8 정도가 되려면 4720 관찰이 필요하다는 것이다.  

그 후 , 두 이벤트의 정규성을 비교했을 때 p 값이 커서 귀무가설을 채택했다. 

즉, 전환율 상승이 없었다. 두 이벤트의 정규성을 비교하는 방법은 https://frhyme.github.io/python-libs/statsmodel_proportion_ztest/ 다음 링크를 참고한다. 


Contact Form