: 두 버전(A와 B) 중 어느 것이 더 효과적인지 평가하기 위해 사용되는 검정 방법
두 그룹 간의 변화가 우연이 아니라 통계적으로 유의미한지를 확인
A/B 검정이 실제로 어떻게 적용되는지
온라인 쇼핑몰에서 두 가지 디자인(A와 B)에 대한 랜딩 페이지를 테스트하여 어떤 디자인이 더 높은 구매 전환율을 가져오는지 평가
```
import numpy as np
import scipy.stats as stats
# 가정된 전환율 데이터
group_a = np.random.binomial(1, 0.30, 100) # 30% 전환율
group_b = np.random.binomial(1, 0.45, 100) # 45% 전환율
# t-test를 이용한 비교
t_stat, p_val = stats.ttest_ind(group_a, group_b)
print(f"T-Statistic: {t_stat}, P-value: {p_val}")
```
❓ stats.ttest_ind
: scipy.stats.ttest_ind 함수는 독립표본 t-검정을 수행하여 두 개의 독립된 집단 간 평균의 차이가 유의미한지 평가함
: 표본 데이터를 통해 모집단의 가설을 검증하는 과정
귀무가설과 대립가설 설정
유의수준(α) 결정
검정통계량 계산
p-값과 유의수준 비교
결론 도출
➡️ 통계적 유의성
신뢰구간과 가설검정은 밀접하게 관련된 개념
둘 다 데이터의 모수(ex.평균)에 대한 정보를 구하고자 하는 것이지만 접근 방식이 다름
신뢰구간
가설검정
# 기존 약물(A)와 새로운 약물(B) 효과 데이터 생성
A = np.random.normal(50, 10, 100)
B = np.random.normal(55, 10, 100)
# 평균 효과 계산
mean_A = np.mean(A)
mean_B = np.mean(B)
# t-검정 수행
t_stat, p_value = stats.ttest_ind(A, B)
print(f"A 평균 효과: {mean_A}")
print(f"B 평균 효과: {mean_B}")
print(f"t-검정 통계량: {t_stat}")
print(f"p-값: {p_value}")
# t-검정의 p-값 확인 (위 예시에서 계산된 p-값 사용)
print(f"p-값: {p_value}")
if p_value < 0.05:
print("귀무가설을 기각합니다. 통계적으로 유의미한 차이가 있습니다.")
else:
print("귀무가설을 기각하지 않습니다. 통계적으로 유의미한 차이가 없습니다.")
```
가설검정의 대표적인 검정
: 두 집단 간의 평균 차이가 통계적으로 유의미한지 확인하는 검정 방법
: 두 독립된 그룹의 평균을 비교
동일한 그룹의 사전/사후 평균을 비교
가설검정이 실제로 어떻게 적용되는지
p-값을 통한 유의성 확인
# 학생 점수 데이터
scores_method1 = np.random.normal(70, 10, 30)
scores_method2 = np.random.normal(75, 10, 30)
# 독립표본 t검정
t_stat, p_val = stats.ttest_ind(scores_method1, scores_method2)
print(f"T-Statistic: {t_stat}, P-value: {p_val}")
```
여러 가설을 동시에 검정 🚫 하지만 오류가 발생할 수 있음
: 여러 가설을 동시에 검정할 때 발생하는 문제
본페로니 보정, 튜키 보정, 던넷 보정, 윌리엄스 보정 등이 있음
가장 대표적이고 기본적인게 본페로니 보정
import numpy as np
import scipy.stats as stats
# 세 그룹의 데이터 생성
np.random.seed(42)
group_A = np.random.normal(10, 2, 30)
group_B = np.random.normal(12, 2, 30)
group_C = np.random.normal(11, 2, 30)
# 세 그룹 간 평균 차이에 대한 t검정 수행
p_values = []
p_values.append(stats.ttest_ind(group_A, group_B).pvalue)
p_values.append(stats.ttest_ind(group_A, group_C).pvalue)
p_values.append(stats.ttest_ind(group_B, group_C).pvalue)
# 본페로니 보정 적용
alpha = 0.05
adjusted_alpha = alpha / len(p_values)
# 결과 출력
print(f"본페로니 보정된 유의 수준: {adjusted_alpha:.4f}")
for i, p in enumerate(p_values):
if p < adjusted_alpha:
print(f"검정 {i+1}: 유의미한 차이 발견 (p = {p:.4f})")
else:
print(f"검정 {i+1}: 유의미한 차이 없음 (p = {p:.4f})")
범주형 데이터의 분석에 사용한다는 것이 포인트
두 범주형 변수 간의 독립성을 검정
p값이 높으면 두 변수 간의 관계가 연관성이 ❌ → 독립성 ⭕
p값이 낮으면 두 변수 간의 관계가 연관성이 ⭕ → 독립성 ❌
카이제곱검정은 어떻게 적용되는지
범주형 데이터의 분포 확인 및 독립성 확인을 위해 사용
# 적합도 검정
observed = [20, 30, 25, 25]
expected = [25, 25, 25, 25]
chi2_stat, p_value = stats.chisquare(observed, f_exp=expected)
print(f"적합도 검정 카이제곱 통계량: {chi2_stat}, p-값: {p_value}")
# 독립성 검정
observed = np.array([[10, 10, 20], [20, 20, 40]])
chi2_stat, p_value, dof, expected = stats.chi2_contingency(observed)
print(f"독립성 검정 카이제곱 통계량: {chi2_stat}, p-값: {p_value}")
# 성별과 흡연 여부 독립성 검정
observed = np.array([[30, 10], [20, 40]])
chi2_stat, p_value, dof, expected = stats.chi2_contingency(observed)
print(f"독립성 검정 카이제곱 통계량: {chi2_stat}, p-값: {p_value}")
두가지의 오류를 구분하는 것이 포인트
(난 도움이 많이 됬기때문에)
2.가설검정에서 귀무가설(null hypothesis)과 대립가설(alternative hypothesis)의 차이에 대한 설명으로 옳은 것을 고르세요.
귀무가설은 현재 상태를 나타내며, 대립가설은 연구자가 입증하고자 하는 주장이다.
4.다중검정에서 발생할 수 있는 문제점은 무엇인가요?
여러 번의 검정을 수행할 때, 전체 실험에서 제 1종 오류가 발생할 확률이 증가한다.
카이제곱검정은 주로 어떤 데이터를 분석할 때 사용되나요?
범주형 데이터
제 1종 오류(Type I error)와 제 2종 오류(Type II error)의 차이에 대한 설명으로 옳은 것을 고르세요.
제 1종 오류는 귀무가설이 참인데 기각하는 오류이고, 제 2종 오류는 대립가설이 참인데 기각하는 오류이다.