일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 파이썬 머신러닝 완벽 가이드
- 오블완
- TiL
- 스파르타
- Cluster
- 회귀분석
- 내일배움캠프
- 스파르타코딩
- 스파르타 코딩
- 내일배움카드
- 티스토리챌린지
- 파이썬 머신러닝 완벽가이드
- 파이썬 철저입문
- harkerrank
- 중회귀모형
- 내일배움
- hackerrank
- 프로젝트
- 파이썬
- 텍스트 분석
- R
- 미세먼지
- MySQL
- wil
- 웹 스크랩핑
- 파이썬 철저 입문
- 파이썬 완벽 가이드
- 실전 데이터 분석 프로젝트
- SQL
- 프로그래머스
- Today
- Total
OkBublewrap
2025-01-08 TIL (A/B Test, 통계분포) 본문
아티클 # 17
A/B 테스트 제대로 이해하기: ②A/B 테스트를 위한 기초 통계 이해하기 | 요즘IT
앞선 글에서 A/B 테스트를 설계하거나 수행할 때 ‘목표를 달성하기 위한 방안으로 A와 B 중 어느 게 더 나은가?’ 뒤에 숨은 진짜 질문에 관해 살펴보았다. 이번 글에서는 이러한 우리의 진짜 질
yozm.wishket.com
1. 아티클 주요 내용 요약
- 핵심 주제 : 이게 우연인가?
- 주요 내용 :
- 일부를 통해서 전체에 대해 추론할 수 있다.
- 양측 검정 :
- 귀무가설 : A와 B사이 차이가 없다
- 대립가설 : A와 B사이 차이가 있다
- 단측 검정 :
- 귀무가설: A − B ≤ 0
- 대립가설: A − B > 0
- 실험 결과도 추측
우리가 관심이 있는 특정 유형의 고객 중 실험에 노출된 일부를 바탕으로 해당 유형 고객의 전체를 추측한 것 - 점 추정 : 특정 한점
- 구간 추정 : 범위
- 표준 오차 : 샘플 평균이 모집단 평균을 얼마나 잘 추정할 수 있는지를 나타내는 척도
- 실험을 N번 하면 N번마다 결과는 다를 수 있다.
왜냐하면 아무리 비슷하게 세팅해도 결국에는 모두 각각 다른 사람이니까
A/B Test 예제
Kaggle moilbe-games-ab-testing
참고 스터디
DataScienceForMarketing/03_[Retention]_ABtest.ipynb at master · pynoodle/DataScienceForMarketing
마케팅을 위한 데이터 분석. Contribute to pynoodle/DataScienceForMarketing development by creating an account on GitHub.
github.com
userid | version | sum_gamerounds | retention_1 | retention_7 |
9999441 | gate_40 | 97 | True | False |
9999710 | gate_30 | 30 | Fasle | False |
- version : 실험군, 대조군
- sum_gamerounds : 첫 설치후 14일 간 유저가 플레이한 라운드 수
- retention_1 : 유저가 설치 후 1일 이내에 다시 돌아왔는지 여부
- retention_7 : 유저가 설치 후 7일 이내에 다시 돌아왔는지 여부
문제 정의
Cookie Cats 게임에서는 특정 스테이지가 되면 스테이지가 Lock되게 합니다. Area Locked일 경우 Keys를 구하기 위한 특별판 게임을 해서 키 3개를 구하거나, 페이스북 친구에게 요청하거나, 유료아이템을 구매하여 바로 열 수 있다. Area Locked Lock을 몇 번째 스테이지에서 할 때 이용자 retention에 가장 좋을지 의사결정을 해야합니다.
Gate_30 그룹 : 44700
Gate_40 그룹 : 45489
그룹별 1-day Retention의 평균
gate_30 | 0.448198 |
gate_40 | 0.442283 |
단순 평균 비교로 gate_30에 Area Locked Lock을 두는 것이 gate_40에 두는 것이 맞는 것일까?
Bootstrap - 두 그룹간의 차이가 유의미한지 알아보는 방법
Bootstrap : 무작위 중복 추출
레벨 30에 있을 때 1-day retention이 클 확률 : 96.2%
그룹별 7-day Retention의 평균
gate_30 | 0.190183 |
gate_40 | 0.182000 |
bootstrap 방식으로 진행
결론
부트스트랩 결과는 게이트 레벨 40에 있을 때 보다 레벨 30에 있을 때 7일 retention이 더 높다는 증거가 있음
rention을 늘리기 위해서 게이트를 레벨 30에서 레벨 40으로 이동해서는 안된다.
T-Test
독립표본 T-검정
1-day retention
- 통계량 : 1.78711
- p-value : 0.0739
- df = 90186
7-day retention
- 통계량 : 3.1575
- p-value : 0.001591
- df = 90186
해석
1. t-score이 크면 두 그룹이 다르다
2. p-value : 작을 수록 데이터가 우연히 발생한 것이 아니라는 것을 의미
3. 1-day retention은 유의미 하지 않게 나오고 7-day retention은 유의미한 차이가 있다
4. 7-day retention은 gate30그룹이 gate40보다 높은 것은 우연히 발생한 일이 아니다.
5. gate는 30에 있는 것이 40에 있는 것보다 7-day retention에서 더 좋은 선택지이다.
실행했던 T-test는 retension 여부를 0, 1으로 두고 분석한 것이기 때문에, 카이 제곱검정을 하는 것이 더 좋은 방법이다.
H0 : 독립적이다 (상관관계가 없다)
H1 : 독립적이지 않다 (상관관계가 있다)
sum()
sum_gamerounds | retention_1 | retention_7 | |
gate_30 | 2294941 | 20034 | 8501 |
gate_40 | 2333530 | 20119 | 8279 |
count()
count | |
gate_30 | 44699 |
gate_40 | 45489 |
카이제곱-독립성 검정
1-day retention
- 통계량 : 3.1698
- p-value : 0.075009
- dof = 1
20252.35 | 25236.64 |
19900.64 | 24798.36 |
7-day retention
- 통계량 : 9.91527
- p-value : 0.0016391
- dof = 1
20252.35 | 25236.64 |
19900.64 | 24798.36 |
1-day retention은 유의확률이 0.075이고 귀무가설 채택, 즉 독립적이다(상관관계가 없다)
7-day retention은 유의확률이 0.0016이고 귀무가설 기각, 즉 독립적이지 않다(상관관계가 있다)
결론
gate는 30에 유지 해야 하고
더 다양한 메트릭을 고려해야 한다.
통계
베르누이 분포
정의 : 확률 변수가 취할 수 있는 경우 2가지인 경우
확률 : 0과 1사이 값이며 모든 경우 확률의 합은 1
확률 변수 : 변수가 가질 수 있는 경우의 수를 표현하는 방법
$$ P(X = x) = \begin{cases} p & \text{if } x = 1, \\ 1-p & \text{if } x = 0, \end{cases} $$
평균
$$ \mathbb{E}[X] = p $$
분산
$$ \text{Var}(X) = p(1-p) $$
이항 분포
베르누이 분포 N번 실행
$$ X \sim B(n, p) $$
$$ P(X = k) = \binom{n}{k} p^k (1-p)^{n-k}, \quad k = 0, 1, 2, \dots, n $$
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import binom
# 이항분포 정의
n_large = 100 # 100명이 시행
p_large = 1 / 2 # 클릭 확률 0.5
#데이터 생성
x_large = np.arange(0, n_large + 1)
# 100명의 시행횟수 수행
y_large = binom.pmf(x_large, n_large, p_large)
# Normal approximation (mean and standard deviation)
mean = n_large * p_large
std = np.sqrt(n_large * p_large * (1 - p_large))
normal_approx = (1 / (std * np.sqrt(2 * np.pi))) * np.exp(-0.5 * ((x_large - mean) / std) ** 2)
# 이항분포와 정규분포 시각화
plt.figure(figsize=(10, 6))
plt.bar(x_large, y_large, color='blue', alpha=0.5, label='Binomial Distribution')
plt.plot(x_large, normal_approx, color='red', lw=2, label='Normal Approximation')
plt.xlabel('Number of Users Clicking')
plt.ylabel('Probability')
plt.title(f'Binomial Distribution (n={n_large}, p={p_large:.2f}) vs Normal Approximation')
plt.legend()
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.show()
균등 분포
정의 : 모든 x에 대애서 확률이 동일한 분포입니다.
연속확률 분포중 하나
정규 분포
$$ X \sim N(\mu, \sigma^2) $$
왜도(skewness) : 얼마나 치우쳐져있나
Right Skewness : Skewness > 0
Left Skewness : Skewness < 0
첨도(kurtosis) : 얼마나 평균에 모여있냐
- Kurtosis > 0 (양의 첨도):
- 뾰족한 분포를 나타냅니다.
- 데이터가 평균 근처에 많이 몰려 있고, 꼬리가 길고 두꺼운 형태를 가집니다.
- 예: 극단적인 값(꼬리 값)이 더 자주 나타나는 분포.
- Kurtosis < 0 (음의 첨도):
- 뭉툭한 분포를 나타냅니다.
- 데이터가 중심에서 덜 몰려 있고, 꼬리가 짧고 얇은 형태를 가집니다.
- 예: 극단적인 값이 적고, 분포가 더 평평함.
표준정규분포
$$ Z = \frac{\bar{x} - \mu}{\sigma} \sim N(0, 1) $$
'Today I Learning' 카테고리의 다른 글
2025-01-10 TIL (QCC 리뷰) (0) | 2025.01.10 |
---|---|
2025-01-09 TIL (SQL codekata, Sub Query) (0) | 2025.01.09 |
2025-01-07 TIL (A/B Test, SQL CodeKata) (0) | 2025.01.07 |
2025-01-06 TIL (가설 검증 방법) (0) | 2025.01.06 |
WIL -6주차 (0) | 2025.01.04 |