Cute Hello Kitty 3
본문 바로가기
Data/통계

정규분포와 t분포 / Python

by 민 채 2025. 4. 3.
 
 
 

 

 

가설검정이란?

가설검정(Hypothesis Testing)은 통계학에서 어떤 주장이나 가설이 옳은지를 데이터 기반으로 판단하는 절차입니다. 주어진 데이터로부터 모집단의 특성을 추정하고, 이 추정값을 바탕으로 기존에 세운 주장(귀무가설)이 타당한지를 검정합니다.


절차

1.귀무가설(H0) 설정: 기존의 주장 혹은 변화가 없다는 가정

2.대립가설(H1) 설정: 새롭게 주장하고 싶은 가정

3.검정통계량 계산: 관측된 데이터로부터 검정통계량을 구함

4.p-value 계산: 귀무가설 하에서 관측값보다 극단적인 결과가 나올 확률

5.판단: p-value가 유의수준보다 작으면 귀무가설 기각


정규분포와 t분포

정규분포 (Normal Distribution)

  • 연속확률분포의 대표적인 분포
  • 평균 μ, 표준편차 σ를 모수로 가짐
  • 중앙에 봉우리가 있는 종 모양(Bell-shaped curve)

정규분포에서 자주 쓰이는 중요한 python 함수

from scipy.stats import norm

# 확률 밀도 함수 (PDF)
norm.pdf(x, loc=μ, scale=σ)

# 누적 분포 함수 (CDF)
norm.cdf(x, loc=μ, scale=σ)

# 분위수 함수 (PPF)
norm.ppf(p, loc=μ, scale=σ)

t분포 (t-distribution)

  • 표본의 수가 작고, 모분산을 모를 때 사용하는 분포
  • 정규분포보다 꼬리가 두꺼움 → 극단적인 값이 나올 확률이 큼
  • 자유도(df)에 따라 모양이 달라지며, df가 커질수록 정규분포에 가까워짐

python 에서 사용하는 법

from scipy.stats import t

 


정규분포 t분포 차이 비교

구분 정규분포 t분포
사용조건 모분산을 아는 경우 모분산을 모르는 경우 (특히 n<30)
분포모양 꼬리가 없음 꼬리가 두꺼움
자유도 없음 df = n - 1
샘플 수 증가 시 그대로 정규분포에 수렴

 

검정 점선은 정규분포의 PDF 입니다.

노란색파란색 실선은 t분포를 나타냅니다.

t분포는 자유도가 커질수록 (표본의 크기가 커질수록) 정규분포의 형태와 비슷해집니다.

 

t분포의 자유도가 30이 되니깐 정규분포의 형태와 거의 같아진 모습을 볼 수 있습니다.

 


가설검정 예시

커피숍의 커피 온도 검정 (정규분포)

어떤 커피숍은 본인들의 커피의 평균 온도가 75도라고 주장합니다.

(단, 이때 모 표준편차는 1.2 입니다.)

이를 의심한 소비자가 10잔의 온도를 측정한 결과는 다음과 같습니다.

x = np.array([72.4, 74.1, 73.7, 76.5, 75.3, 74.8, 75.9, 73.4, 74.6, 75.1])

Step 1. 가설 설정

  • H0: 평균은 75도이다.
  • H1: 평균은 75도가 아니다.

우리가 검정하고 싶은 사실을 대립가설 (H1) 로 설정합니다.

즉, 우리는 커피온도가 평균 75도가 아니라는 사실을 증명하고 싶습니다.

귀무가설은 통용되는 사실로 그대로 둡니다.


Step 2. 검정통계량 계산 (모분산을 알 때 → Z검정)

$$
z = \frac{\bar{x} - \mu}{\sigma / \sqrt{n}}
$$

$\mu$: 모평균 (75)

$\bar {x}$: 표본 평균 (x.mean())

$\sigma$: 모표준편차 (1.2)

${n}$: 표본의 크기 (10)

위의 수식을 파이썬 코드로 나타내 봅시다.

z = (x.mean() - 75) / (1.2 / np.sqrt(10))

Step 3. p-value 계산

from scipy.stats import norm

p_value = norm.sf(abs(z)) * 2
  • norm.sf() 는 1 - cdf 를 한 결과입니다.
  • 즉, 오른쪽 꼬리 확률을 의미합니다.
  • 양측 검정을 하기 때문에 * 2를 해줍니다.

Step 4. 판단

p_value < 0.05  # False → 귀무가설 기각 불가

색칠된 영역에 z 값이 속한다면 H0을 기각할 수 있게 되지만, z 는 해당 영역에 속하지 않는 것을 볼 수 있습니다.

즉, 평균은 75도가 아니다. 라고 말할 수 있는 통계적 증거가 없습니다.
결국, 커피의 온도가 75도라고 할 수 있게 됩니다.

 


커피숍의 커피 온도 검정 (t분포)

 

🔍 t분포는 언제 사용하나?

1. 모집단이 정규분포를 따른다고 가정

2. 모분산을 모름 (표본에서 구한 표준편차 이용해서 추정)

 

x = np.array([72.4, 74.1, 73.7, 76.5, 75.3, 74.8, 75.9, 73.4, 74.6, 75.1])
n = len(x)

# 1. 가설 설정
# H0: 모평균이 75도씨이다.
# H1: 모평균이 75도씨가 아니다.

# 검정통계량 계산
t_stat = (x.mean() - 75) / (x.std(ddof=1) / np.sqrt(n))

# pvalue 계산
p_value = t.cdf(t_stat, df=n-1)
p_value = p_value * 2  # 양측검정이니까 2를 곱해준다.

p_value < 0.05  # False
# p-value가 0.05보다 작지 않으므로 귀무가설을 기각할 수 없다.
# 즉, 모평균이 75도씨라고 주장할 수 있다.

 

t분포를 사용해도 여전히 기각되지 않는 모습을 볼 수 있습니다.

 

정규분포와 t분포를 사용해서 가설 검정을 해보았습니다. 

하지만, 나의 데이터가 어떤 분포를 따르고 있는지 모를 땐 어떻게 해야할까요?

나의 데이터가 정규분포를 따르고 있는지 검증하고 싶을 땐 어떻게 할까요?

해당 내용은 아래 포스팅에 있습니다.

 

2025.04.04 - [Data] - LS 빅데이터 스쿨 / 정규성 검정 / Shapiro-Wilk / Anderson-Darling / Kolmogorov–Smirnov / Q-Q Plot

 

LS 빅데이터 스쿨 / 정규성 검정 / Shapiro-Wilk / Anderson-Darling / Kolmogorov–Smirnov / Q-Q Plot

정규성 검정(Normality Test) 이란?정규성 검정은 데이터가 정규분포를 따르는지를 검정하는 과정입니다.많은 통계 기법(Z-test, t-test 등)은 정규분포를 전제로 하기 때문에, 분석 전에 정규성을 검정

kiminchae.tistory.com