[수업 목표]
두 그룹 (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}")
scipy.stats.ttest_ind 함수는 독립표본 t-검정(Independent Samples t-test)을 수행하여 두 개의 독립된 집단 간 평균의 차이가 유의미한지 평가한다.
t-통계량 (statistic)
p-값 (pvalue)
딜라이트룸 A/B 테스트 사례
당근마켓 A/B 테스트 사례
데이터가 특정 가설을 지지하는지 검정하는게 포인트!


데이터 분석시 두가지 전략을 취할 수 있음
1. 확증적 자료분석
(미리 가설들을 먼저 세운 다음 가설을 검증해 나가는 분석)
2. 탐색적 자료분석(EDA)
(가설을 먼저 정하지 않고 데이터를 탐색해보면서 가설 후보들을 찾고 데이터의 특징을 찾는 것)
신뢰구간? (Confidence Interval)
- 신뢰구간은 모집단의 평균이 특정 범위 내에 있을 것이라는 확률을 나타낸다.
- 일반적으로 95% 신뢰구간이 사용되며, 이는 모집단 평균이 95% 확률로 이 구간 내에 있음을 의미한다.
- 만약 어떤 설문조사에서 평균 만족도가 75점이고, 신뢰구간이 70점에서 80점이라면, 우리는 95% 확률로 실제 평균 만족도가 이 범위 내에 있다고 말할 수 있다.
# 기존 약물(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("귀무가설을 기각하지 않습니다. 통계적으로 유의미한 차이가 없습니다.")
가설검정의 대표적인 검정
# 학생 점수 데이터
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})")
범주형 데이터의 분석에 사용한다는 것이 포인트!
# 적합도 검정
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}")
scipy.stats.chisquare 함수는 카이제곱 적합도 검정을 수행하여 관찰된 빈도 분포가 기대된 빈도 분포와 일치하는지 평가한다. 이 검정은 주로 단일 표본에 대해 관찰된 빈도가 특정 이론적 분포(예: 균등 분포)와 일치하는지 확인하는 데 사용된다.
반환 값
scipy.stats.chi2_contingency 함수는 카이제곱 검정을 수행하여 두 개 이상의 범주형 변수 간의 독립성을 검정한다. 이 함수는 관측 빈도를 담고 있는 교차표(contingency table)를 입력으로 받아 카이제곱 통계량, p-값, 자유도, 그리고 기대 빈도(expected frequencies)를 반환한다.
반환 값
두가지의 오류를 구분하는 것이 포인트!

다중 검정시 제 1종 오류가 증가하는 이유?
- 하나의 검정에서 제1종 오류가 발생하지 않을 확률은 .
- m개의 독립된 검정에서 제1종 오류가 전혀 발생하지 않을 확률은 .
- 따라서, m개의 검정에서 하나 이상의 제1종 오류가 발생할 확률(즉, 전체 제1종 오류율)은 .
- 이 값은 m이 커질수록 빠르게 증가한다. 예를 들어, α=0.05, m=10인 경우
- 즉, 10개의 가설을 동시에 검정할 때 하나 이상의 가설에서 제 1종 오류가 발생할 확률이 약 40.1% 이므로 개별검증에서 발생하는 오류율(5%)보다 높다.
그나마 통제를 해볼 수 있는 방법으로는…
1. 표본 크기(𝑛) 증가시키기 : 표본크기 n이 커질 수록 β가 작아짐.
2. 유의수준(α)의 적절한 설정 : α와 β는 상충관계에 있어서 너무 낮은 α를 가지게 되면 β는 더욱 높아짐
가설검정에서 사용되는 주요 개념 중 하나인 p-value의 의미를 설명하세요.
1) p-value는 두 그룹 간의 평균 차이를 나타낸다.
2) p-value는 귀무가설이 참일 때, 관찰된 데이터 또는 더 극단적인 데이터가 나타날 확률이다.
3) p-value는 두 그룹 간의 표준편차를 나타낸다.
4) p-value는 실험 그룹의 크기를 나타낸다.
정답 및 해설
2) p-value는 귀무가설이 참일 때, 관찰된 데이터 또는 더 극단적인 데이터가 나타날 확률이다.
- p-value는 가설검정에서 귀무가설이 참일 때, 관찰된 데이터 또는 더 극단적인 데이터가 나타날 확률을 의미한다.
- 따라서 p-value가 유의수준보다 낮다는 것은 귀무가설치 참일 가능성이 우리가 유의하는 수준보다 굉장히 낮다는 의미가 된다.
가설검정에서 귀무가설(null hypothesis)과 대립가설(alternative hypothesis)의 차이에 대한 설명으로 옳은 것을 고르세요.
1) 귀무가설은 연구자가 입증하고자 하는 주장이고, 대립가설은 현재 상태를 나타낸다.
2) 귀무가설은 현재 상태를 나타내며, 대립가설은 연구자가 입증하고자 하는 주장이다.
3) 귀무가설과 대립가설은 동일한 개념이다.
4) 귀무가설은 대립가설의 반대를 나타낸다.
정답 및 해설
2) 귀무가설은 현재 상태를 나타내며, 대립가설은 연구자가 입증하고자 하는 주장이다.
- 가설검정에서 귀무가설은 연구자가 입증하는 주장과는 아무 상관없는 현재 상태나 기존의 믿음을 나타내며, 대립가설은 연구자가 입증하고자 하는 새로운 주장.
1) 독립 표본 t검정
2) 대응 표본 t검정
3) 분산 분석
4) 카이제곱검정
정답 및 해설
- 독립 표본 t검정은 두 개의 독립된 그룹 간의 평균을 비교할 때 사용되며, 대응 표본 t검정은 같은 그룹의 두 시점(사전/사후) 간 평균을 비교할 때 사용된다.
1) 표본의 크기가 작아진다.
2) 한 번의 검정에서 제 1종 오류가 발생할 확률이 감소한다.
3) 여러 번의 검정을 수행할 때, 전체 실험에서 제 1종 오류가 발생할 확률이 증가한다.
4) 한 번의 검정에서 제 2종 오류가 발생할 확률이 증가한다.
정답 및 해설
- 다중검정은 여러 번의 검정을 수행하므로, 전체 실험에서 제 1종 오류가 발생할 확률이 증가한다.
정답 및 해설
- 카이제곱검정은 범주형 데이터의 독립성이나 적합성을 검정하는 데 사용된다.
제 1종 오류(Type I error)와 제 2종 오류(Type II error)의 차이에 대한 설명으로 옳은 것을 고르세요.
1) 제 1종 오류는 귀무가설이 참인데 기각하는 오류이고, 제 2종 오류는 대립가설이 참인데 기각하는 오류이다.
2) 제 1종 오류는 대립가설이 참인데 기각하는 오류이고, 제 2종 오류는 귀무가설이 참인데 기각하는 오류이다.
3) 제 1종 오류와 제 2종 오류는 동일한 개념이다.
4) 제 1종 오류는 표본 크기와 관련이 없고, 제 2종 오류는 표본 크기와 관련이 있다.
정답 및 해설
- 제 1종 오류는 귀무가설이 참인데도 불구하고 기각하는 오류이며, 제 2종 오류는 대립가설이 참인데도 불구하고 기각하는 오류.