[AB] A/B테스트 학습 도장깨기

T아카데미에서 진행한 A/B테스트 세미나를 요약했습니다. 다 알고 있는 내용이긴 했는데 한번 깔꼼하게 정리할 수 있었다. 주위에 A/B테스트 처음 공부해보려는 사람들께 추천드림!!
Jul 07, 2023
[AB] A/B테스트 학습 도장깨기
💡
T아카데미에서 진행한 A/B테스트 세미나를 요약했습니다. 다 알고 있는 내용이긴 했는데 한번 깔꼼하게 정리할 수 있었다. 주위에 A/B테스트 처음 공부해보려는 사람들께 추천드림!!
 

1. A/B테스트 정의


  • 임의로 나눈 두 집단에 서로 다른 콘텐츠 제시 후 어떤 집단이 더 좋은 성과를 보이는지 정량적으로 평가하는 방식. RCT를 서비스에 적용한 방법론.
  • 고객분석
    • 종단적 연구 : 코호트 분석
    • 횡단적 연구 : A/B테스트, 다변량 분석
  • 많은 요소들이 복합적으로 작용하여 외생성 및 고려변수의 영향으로 명확한 요인 및 원인 분석이 어렵다.
    • 외생성이란 시스템 밖의 요소로 결정되거나 생성되는 것
    • 내생성이란 해당 시스템 내에서 결정되거나 생성되는 것
 

2. A/B테스트 설계


  • 유사실험 설계의 특징
    • 사회현상에서 인과관계 판단용
    • 대안적으로 통제 집단을 구성
    • 외생변수 개입 가능성이 높음 (시계열 전후비교시 특히)
    • 외적 타당성이 상대적으로 높아 현실 문제 해결에 유용함

2.1. 실험 설계 과정

  • 대상 선정 → 사용자 및 지표 선정
  • 실험환경 선정 → 실제 예정 환경
  • 무작위표집 → 사용자 무작위 선정
  • 무작위할당 → 추출된 표본을 무작위로 실험집단과 통제집단에 배치
  • 사전검사 → 실험 환경 확인
  • 실험조치 → 분기
  • 사후검사 → 실험 환경 재확인
  • 비교 및 검증 → 결과 분석

2.2. 목표 지표 선정

  • 가설 검정에 가장 직관적이면서 구하기 용이한 지표 선정
  • 양적으로 확인 가능한 실질적 지표
  • 비율 : 사용 흐름상 전/후 (퍼널의 실험 참여 단계 → 실험 결과 반응 단계)
  • 실험 대상 : 지표 대상도 사람이 되어야 정확한 결과를 얻을 수 있음 (클릭한 사용자/페이지 본 사용자)
  • 지표 관련 대푯값 :
    • 평균(소수의 이상치 값에 대한 민감도가 높음)
    • 중앙값(분포가 쌍봉형이면 적절한 대푯값이 되지 못할 수도, 이상치 값에 민감도가 낮음)
    • 최빈값(다양한 값을 가지는 경우 적절치 않음)
  • 지표 관련 분포 :
    • 히스토그램 : 대푯값만으로 판단이 어려울 때, 같이 확인. 이상치로 인해 대푯값이 기울어진 경우 파악 후 보정 진행.
 

3. A/B테스트 평가


3.1. 목표 지표의 해석

  • 비교 전 확인
    • 실험군과 대조군의 사용자 집합 크기 비교 → 비교 유의성 판단
    • 실험군과 대조군의 사용자 분포의 차이 비교
  • 유의 사항
    • 실험으로 얻은 값은 항상 동일한 결과를 담보하는 것은 아님
    • 실험 크기가 통제되지 않은 경우 사후 추정으로 판단 가능
 

3.2. 분포

  • 실험에서 쓸 일이 많지 않습니다 (?) 아무 때나 함수를 막 쓰다가 망하는 경우가 많습니다. 테스트를 심플하게 만들었을 때 사용할 수 있는 분포를 소개해주셨습니다.
  • 이항 분포
    • 매회 사건 X가 일어날 확률이 동일한 독립시행의 경우에 있어서 확률변수 X가 따르는 분포
    • 클릭 등 간단한 단일 이벤트 대상 A/B 테스트 경우 다른 서비스 내의 요인은 동일하게 통제된 상태로 사용하니까 이벤트 발생 확률을 동일하다고 가정하고 사용한다. 이항분포 조건에 들어맞음.
 

3.3. 가설 검정

  • 통계적 추측으로, 모집단 실제 값이 얼마가 된다는 주장에 대해 표본의 정보를 사용해서 가설의 합당성 여부를 판정하는 과정
귀무가설과 대립가설
  • 귀무가설 : 실험군, 대조군 결과의 차이가 없을 것이다
  • 대립가설 : 양측검정, 단측검정
유의 수준
  • 귀무가설의 기각 기준 (허용 오류의 수준을 결정함)
  • 일반적으로 0.05 사용
유의 확률(p값) - 두 그룹간의 차이가 통계적으로 유의미한지를 확인
  • 검정 통계량과 같거나 더 극단적인 결과가 귀무가설에서 예상되는 경우를 측정한 지표
  • 귀무가설이 맞을 경우, 얻을 수 있는 결과보다 더 극단적인 값이 관측될 확률
  • 유의 확률이 유의 수준보다 작을 경우, 귀무가설 기각하고 대립가설을 지지함
 
결과값 비교 - 두 그룹간의 차이가 실제로 유의미한지를 평가
  • 이항분포의 상태 비교 : 집단의 크기가 np>5 인지 (정규 분포 적용할 수 있는지 확인)
  • 비교군의 해당 지표에 대한 신뢰구간을 구한 뒤 실험군의 지표의 크기가 이 신뢰구간에 들어가는지 확인 (독립 t검정을 사용해서 유의성 및 차이 비교)
 

3.4. Case

  • 목표 지표 : CTR
  • A CTR: 1.8%/ Impression 52만
  • B CTR: 7.4%/ Impression 51만
  • ab테스트 calculator를 사용하면 99.9% Significance가 나온다
파이썬으로 검정하기 : statsmodels 패키지의 z검정 함수 사용 → 목표 지표의 유형에 따라 검정방법이 달라집니당
import numpy as np from statsmodels.stats.proportion import proportions_ztest # A 그룹의 CTR 데이터 A_clicks = 1800 # A 그룹 클릭 수 A_impressions = 520000 # A 그룹 노출 수 # B 그룹의 CTR 데이터 B_clicks = 7400 # B 그룹 클릭 수 B_impressions = 510000 # B 그룹 노출 수 # CTR 계산 A_ctr = A_clicks / A_impressions B_ctr = B_clicks / B_impressions # A, B 그룹의 성공(클릭 수)과 시도(노출 수)를 통해 Z-검정 수행 successes = np.array([A_clicks, B_clicks]) trials = np.array([A_impressions, B_impressions]) stat, p_value = proportions_ztest(successes, trials) # 결과 출력 print(f"A 그룹 CTR: {A_ctr:.2%}") print(f"B 그룹 CTR: {B_ctr:.2%}") print(f"p-값: {p_value}") # 유의수준 0.05와 비교하여 유의미한지 평가 if p_value < 0.05: print("통계적으로 유의미한 차이가 있습니다.") else: print("통계적으로 유의미한 차이가 없습니다.")
 
Share article
RSSPowered by inblog