SciPy 가설 검정 (t-test, chi-square)
1. 가설 검정의 개념
가설 검정(Hypothesis Testing)은 통계학에서 특정 주장이나 가설이 데이터에 의해 얼마나 타당한지를 검증하는 방법입니다. 주로 귀무가설(null hypothesis, H0)과 대립가설(alternative hypothesis, H1)을 세워, 주어진 데이터가 귀무가설을 기각할 충분한 증거를 제공하는지를 확인하는 과정입니다.
가설 검정의 기본 과정
- 귀무가설(H0): 현재의 상태나 기본적인 가정을 나타냅니다.
- 대립가설(H1): 귀무가설과 반대되는 주장입니다.
- 유의 수준(α): 보통 0.05(5%)로 설정하며, 귀무가설을 기각할 기준을 의미합니다.
- 검정 통계량: 주어진 데이터로부터 계산된 통계량입니다.
- p-value: 검정 통계량이 귀무가설 하에서 관찰될 확률입니다.
- 결론: p-value가 유의 수준보다 작으면 귀무가설을 기각하고, 그렇지 않으면 기각하지 않습니다.
이제, SciPy의 scipy.stats 모듈을 활용해 t-검정과 카이제곱 검정을 수행하는 방법을 살펴보겠습니다.
2. t-검정 (t-test)
2.1 t-검정의 개요
t-검정은 두 집단의 평균이 통계적으로 유의미하게 다른지를 검증하는 데 사용됩니다. 주로 다음과 같은 상황에서 활용됩니다.
- 단일 표본 t-검정: 한 집단의 평균이 특정 값과 다른지를 검정합니다.
- 독립 표본 t-검정: 서로 다른 두 집단의 평균이 차이가 있는지 검정합니다.
- 대응 표본 t-검정: 같은 집단에서 두 번의 측정을 수행하고 그 차이를 검정합니다.
2.2 단일 표본 t-검정
아래는 한 집단의 평균이 특정 값과 다른지를 검정하는 예제입니다.
import numpy as np
from scipy import stats
# 데이터 생성
sample = np.array([70, 72, 68, 74, 76, 71, 69, 73, 75, 72])
mu = 70 # 검정하고자 하는 평균값
# 단일 표본 t-검정 수행
t_stat, p_value = stats.ttest_1samp(sample, mu)
print(f"t-통계량: {t_stat:.2f}")
print(f"p-value: {p_value:.4f}")
# 결론
if p_value < 0.05:
print("귀무가설을 기각합니다: 모집단 평균이 70과 다릅니다.")
else:
print("귀무가설을 기각할 충분한 증거가 없습니다.")
2.3 독립 표본 t-검정
서로 다른 두 집단의 평균이 차이가 있는지 확인하는 방법입니다.
# 두 집단의 데이터 생성
group1 = np.array([88, 92, 85, 90, 87, 91, 89, 84, 86, 93])
group2 = np.array([81, 79, 83, 85, 80, 78, 82, 84, 80, 77])
# 독립 표본 t-검정 수행
t_stat, p_value = stats.ttest_ind(group1, group2)
print(f"t-통계량: {t_stat:.2f}")
print(f"p-value: {p_value:.4f}")
if p_value < 0.05:
print("귀무가설을 기각합니다: 두 집단의 평균은 유의미한 차이가 있습니다.")
else:
print("귀무가설을 기각할 충분한 증거가 없습니다.")
2.4 대응 표본 t-검정
같은 집단에서 전후 비교를 할 때 사용하는 방법입니다.
# 예: 치료 전후의 점수
before = np.array([85, 88, 84, 82, 86, 87, 85, 83, 89, 90])
after = np.array([88, 90, 87, 85, 89, 90, 88, 85, 91, 93])
# 대응 표본 t-검정 수행
t_stat, p_value = stats.ttest_rel(before, after)
print(f"t-통계량: {t_stat:.2f}")
print(f"p-value: {p_value:.4f}")
if p_value < 0.05:
print("귀무가설을 기각합니다: 치료 전과 후의 평균이 유의미하게 다릅니다.")
else:
print("귀무가설을 기각할 충분한 증거가 없습니다.")
3. 카이제곱 검정 (Chi-Square Test)
3.1 카이제곱 검정의 개요
카이제곱 검정은 범주형 데이터에서 기대 빈도와 관찰 빈도의 차이를 분석하는 데 사용됩니다. 주요 유형은 다음과 같습니다.
- 적합성 검정: 관찰된 데이터가 특정 이론적 분포와 일치하는지 확인합니다.
- 독립성 검정: 두 범주형 변수 간에 관계가 있는지를 검정합니다.
3.2 적합성 검정 예제
아래는 주사위를 던졌을 때 공평한지 확인하는 예제입니다.
# 관찰된 데이터와 기대값
observed = np.array([18, 30, 25, 20, 22, 25]) # 주사위를 140번 던진 결과
expected = np.array([140/6] * 6) # 공평한 주사위일 때 기대되는 값
# 카이제곱 적합성 검정 수행
chi2_stat, p_value = stats.chisquare(observed, expected)
print(f"카이제곱 통계량: {chi2_stat:.2f}")
print(f"p-value: {p_value:.4f}")
if p_value < 0.05:
print("귀무가설을 기각합니다: 주사위는 공평하지 않을 가능성이 있습니다.")
else:
print("귀무가설을 기각할 충분한 증거가 없습니다.")
3.3 독립성 검정 예제
두 범주형 변수 간의 관계를 검정하는 예제입니다.
# 예: 성별과 제품 선호도 조사
contingency_table = np.array([[30, 10], [15, 25]])
# 카이제곱 독립성 검정 수행
chi2_stat, p_value, dof, expected = stats.chi2_contingency(contingency_table)
print(f"카이제곱 통계량: {chi2_stat:.2f}")
print(f"p-value: {p_value:.4f}")
print(f"기대값:
{expected}")
if p_value < 0.05:
print("귀무가설을 기각합니다: 성별과 제품 선호도 간에 관계가 있습니다.")
else:
print("귀무가설을 기각할 충분한 증거가 없습니다.")
4. 결론
가설 검정은 데이터 분석에서 중요한 역할을 하며, t-검정과 카이제곱 검정은 비교적 간단하면서도 강력한 방법입니다. scipy.stats 모듈을 사용하면 이러한 검정을 쉽게 수행할 수 있으며, 검정 결과를 바탕으로 귀무가설을 기각할지 여부를 판단할 수 있습니다.
이 글에서는 기본적인 사용법과 예제 코드를 중심으로 설명했으며, 실제 분석에서는 데이터의 성격에 따라 적절한 검정 방법을 선택하는 것이 중요합니다. 다양한 상황에서 SciPy의 가설 검정 기능을 활용해 데이터를 해석해보시기 바랍니다.
'Python > SciPy' 카테고리의 다른 글
| SciPy 상관 관계 분석 (SciPy.stats) (0) | 2025.12.03 |
|---|---|
| SciPy 확률 분포와 난수 생성 (SciPy.stats) (0) | 2025.12.01 |
| Python SciPy로 배우는 기술 통계 (평균, 중앙값, 표준편차 등) (0) | 2025.11.30 |
| SciPy 신호 간 상관 분석 (0) | 2025.11.29 |
| SciPy 주파수 분석과 스펙트로그램 (0) | 2025.11.28 |