본문 바로가기
프로젝트

[분석프로젝트] 웹 페이지 개선을 통한 A/B테스트: t-test, 시각화

by kime2 2024. 2. 28.
스파르타 코딩클럽 과제

 

목적

 A/B테스트를 통해 웹사이트의 랜딩 페이지 UI 실험에 따른 효과를 비교한다

 

  • 실험 진행 기간: 약 1달간(2017/1/2 - 1/24) 
  • 실험 대상: 총 약 29만명 랜딩 페이지 유입 유저 → 실험군(약 14만명), 대조군(약 14만명) 
  • 실험 목표: 유저의 랜딩 페이지 전환율 상승  
  • 성공 지표(실험이 성공했다고 판단할 수 있는 지표): conversion rate(%) 
  • 실험 검증 방법: t-test

 

사용데이터

https://www.kaggle.com/datasets/zhangluyuan/ab-testing

 

t-test 방법

1. 가설설정

  • 귀무가설(H0): 두 집단의 전환율 평균에 차이가 없을 것이다
  • 대립가설(H1): 두 집단의 전환율 평균에 차이가 있을 것이다

2. 유의수준 설정 : 0.05

 

3. T-test실행 stats.ttest_ind

  • 독립된 두 집단(new page를 본 그룹과 old page를 본 그룹)이므로 독립표본 T검정을 수행
  • 두 집단의 같고 다름을 알고하 하므로 양측 검정 실행
1. 단일표본 T 검정 : stats.ttest_1samp
하나의 표본 데이터와 기준값(또는 평균)을 비교하여 통계적으로 유의미한 차이가 있는지를 검정
예시1 : 평균비교, 제품의 평균 수명이 100일인지 여부를 검정
예시2: 실험전후 비교, 신약의 효과를 검증하기 위해 환자들의 약 복용 전과 후의 특정 지표를 비교
예시3: 표본과 기준값 비교, 학생들의 수학 성적이 평균 70점과 다른지를 검정

from scipy  import
stats stats.ttest_1samp(검증집단, 모평균)

2. 독립표본 T 검정 : stats.ttest_1samp 
두 집단이 독립이라는 가정 하에 두 평균이 통계적으로 유의미한 차이가 있는지를 검정
등분산, 정규성 검정 후 실행
예시1 : 두 개의 그룹비교, 남성과 여성의 평균 키를 비교

stats.ttest_ind(집단1, 집단2, equal_var = True)

3. 대응표본 t 검정 : stats.ttest_rel
두 집단의 데이터가 같은 경우 (각 데이터끼리 pair를 이룸) 유의미한 변화가 있는지 검정
각 비교집단의 데이터 수가 같아야 함

예시1: 전후비교, 특정 약물을 투여하기 전과 후의 환자들의 혈압을 비교
예시2:짝지어진 데이터 비교, 부부의 소득 차이를 비교

stats.ttest_rel(집단1, 집단2)

**양측/단측 검정
1. 양측(기본값): alternative='two-sided' -> 같고 다름을 비교
2. 단측: alternative='less'/'great' -> 크고작음을 비교
- 'less' : 첫 번째 샘플의 평균이 두 번째 샘플의 평균보다 작은지를 검정
- 'greater': 첫 번째 샘플의 평균이 두 번째 샘플의 평균보다 큰지를 검정

 

5. 정규성 검정 shpiro()

  • 정규성 검정을 위한 Shapiro-Wilk 검정을 수행
  • p-value가 유의수준보다 크면 데이터가 정규분포를 따른다고 판단

6. 등분산성 검정 : levene, bartlet

1) 등분산성 검정 levene, bartlet

  • 두 개 이상의 집단 간에 분산이 동일한지를 확인하는 것
  • p-value가 유의수준보다 크다면 등분산성 가정을 만족
  • 등분산성 가정이 충족될 때는 equal_var=True로 설정하여 등분산 t-검정을 수행하고
  • 등분산성 가정이 충족되지 않을 때는 equal_var=False로 설정하여 Welch's t-test를 수행합
  • 예) stats.ttest_ind(a, b, equal_var = True)

2) levene() 

  • 집단 내 데이터의 중앙값과의 차이를 이용하여 분산의 동일성을 검정
  • 정규성 가정을 따르지 않거나 이상치가 존재시 사용

3) bartlet()

  • 집단 내 데이터의 분산을 사용하여 분산의 동일성을 검정 -> 분산의 비율 계산
  • 정규성 가정을 따르거나 이상치가 존재하지 않을 때 사용

 

t-test 실행

1. 라이브러리 및 데이터 불러오기

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from scipy import stats

data = pd.read_csv("/Users/t2023-m0017/Desktop/실습/태블로/ab_data.csv")
data.head(10)

 

2. 전처리 : control 그룹에는 old_page treatment 그룹으로 필터링

data_check = data[((data['group'] == 'control') & (data['landing_page'] == 'old_page')) | 
                  ((data['group'] == 'treatment') & (data['landing_page'] == 'new_page'))]
data_check[data_check["group"]=='control'].count

 

3. 정규성 검정

#정규성 검정
from scipy.stats import shapiro
normal1 = shapiro(control_group)
normal2 = shapiro(treatment_group)
print(normal1, normal2)

>>> statistic=0.37687772512435913, pvalue=0.0

 

P-value가 0.05보다 작으므로 정규성이 충족하지 않는다 

정규성이 충족하지 않기 때문에  levene()  수행

 

4. 등분산성 검정

from scipy.stats import levene 
print(levene(treatment_group, control_group))

>>> statistic=1.7203126672199422, pvalue=0.18965383907560016

 

P-value가 0.05보다 크므로 등분산성을 충족한다

 

5. t-test검정

from scipy.stats import ttest_ind

t_stat, p_val = ttest_ind(control_group, treatment_group,equal_var = True)

print(f"t-statistic: {t_stat:.2f}")
print(f"p-value: {p_val}")

>>> t-statistic: 1.31

>>> p-value: 0.18965383906859376

 

P-value가 0.05보다 작으므로 두 집단의 차이가 통계적으로 유의하지 않아 귀무가설을 채택한다

 

 T-test 해석 by 뤼튼

- t-statistic의 부호
: t-statistic이 양수인 경우는 첫 번째 집단의 평균이 더 크다는 것을 의미하며, 음수인 경우는 두 번째 집단의 평균이 더 크다는 것을 의미합니다. 여기서는 t-statistic의 값만 주어졌으므로 부호만 알 수 있을 뿐, 어떤 집단의 평균이 더 큰지는 알 수 없습니다.
- > 양측검정이라서 알 수 없음

- t-statistic의 크기
: t-statistic의 절댓값이 클수록 두 집단의 평균 차이가 크다는 것을 나타냅니다. 여기서 주어진 t-statistic의 절댓값은 1.31으로, 보통의 기준에 비하면 크지 않은 값입니다.
- > 보통의 기준이 유의수준(0.05)라면 1.31은 큰편이 아닌가?

- p-value: p-value는 주어진 데이터로부터 얻은 통계량(t-statistic) 이상의 결과가 관측될 확률을 나타내며, 작을수록 더 유의미한 결과를 의미합니다. 여기서 주어진 p-value는 0.18965383906859376로, 보통의 유의수준(예: 0.05)보다 큰 값입니다. 따라서 주어진 결과에서는 통계적으로 유의미한 차이가 있다고 말하기 어렵습니다.

 

A/B 테스트를 위한 지표

  1. 그룹별 유저 비율
  2. 그룹별 평균 전환율
  3. 일별 그룹별 평균 전환율
  4. 그룹별 평균 전환율
  5. 그룹별 고유 유저 방문에 따른 캘린더
  6. 일별 유저 방문수

 

대시보드를 통해 알아보는  랜딩페이지 실험 결과

 

결론

두 그룹간의 차이가 없다!