티스토리 뷰

Q. 요즘같은 빅데이터(?)시대에는 정규성 테스트가 의미 없다는 주장이 있습니다. 맞을까요?

 

1. 정규성 테스트란? 

- 데이터가 정규 분포를 따르는지 여부를 확인하는 것입니다.

 

2. 왜 하나요?

- 정규성 가정을 필요로 하는 특정 통계 분석이나 모델을 사용하는 경우

- 표본이 작거나 특정 표본의 특성을 분석해야 하는 경우

- 표본이 작고 정규성을 띠지 않으면, 데이터의 중심 경향이나 분포를 평균과 표준편차만으로 설명하기 어렵기 때문에, 정규성 검정을 통해 정규에 가깝다고 확인되어야 신뢰구간이나 가설 검정을 수행할 때 더 높은 신뢰성을 가질 수 있습니다.

- 비모수적 모델이나, 비정규 분포를 처리하는 모델은 생략해도 무방합니다. 

- 데이터가 정규성을 띠지 않더라도 표본 크기가 크면 중심극한정리에 따라 데이터의 평균 분포가 정규 분포에 가까워 지기 때문에 굳이 필수적이지 않을 수 있습니다.

- 회귀 분석에서는 잔차(Residuals)가 정규성을 따르는지가 중요한 가정 중 하나입니다. 개별 데이터가 정규 분포를 따르지 않아도, 중심극한정리에 의해 표본 크기가 클수록 잔차의 평균 분포는 정규성에 가까워질 수 있습니다. 이는 모델 예측의 신뢰도를 높이는 데 기여합니다

 

3. 정규성을 가정하는 통계적 방법

1) 정규성을 가정하는 통계적 방법: t검정, ANOVA, 회귀분석 등

* t검정, ANOVA는 피처의 정규성 검정, 회귀 분석은 잔차의 정규성 검정

2) 샘플 크기가 작을 때: 데이터의 분포 특성을 명확히 이해해야 분석 결과의 신뢰성을 높일 수 있다.

- 월별 매출액을 비교하는 경우, 신생 업체라면 몇개월 혹은 많아야 12개월이니 표본의 수는 12개이다.

- 중심극한정리는 표본을 30개 이상으로 본다.

 

4. 정규성을 가정하지 않는 통계적 방법

1) 비모수적 가설 검정

- 윌콕슨 부호 순위 검정: 대응 표본 t-검정비모수적 대안으로, 두 관련된 그룹 간 차이를 비교

- 맨-휘트니 U검정: 독립 표본 t-검정비모수적 대안, 두 독립된 그룹의 차이를 비교

- 크루스칼-월리스 검정: ANOVA의 비모수적 대안으로, 세 개 이상독립된 그룹 간 차이를 비교

- 프리드만 검정: 반복 측정 ANOVA비모수적 대안으로, 세 개 이상관련된 그룹 간 차이를 비교

- 중앙값 검정: 두 그룹 이상 간 중앙 값 차이를 검정

 

2) 순위 기반 상관 분석

- 스피어만 상관 계수: 두 변수 간 순위 상관 관계를 측정

- 켄달의 타우: 두 변수 간 순위 상관 관계를 측정하는 비모수적인 방법, 표본 크기가 작은 경우 적합

 

3) 부트스트랩 방법: 데이터의 표본을 여러 번 무작위로 다시 뽑아 각 표본의 통계량을 계산하여 신뢰 구간을 추정, 데이터 분포 가정 없이도 안정적인 추정이 가능

 

5. 정규성을 가정하지 않는 비모수적 모델

- 랜덤 포레스트, 부스팅 모델, 신경망 등은 데이터의 분포 형태에 크게 영향을 받지 않음

 

6. 정규성 검정 방법 : Shapiro-Wilk 검정

- p-value가 0.05 이상이면 정규성을 만족한다.(귀무가설: 데이터가 정규 분포를 따른다)

* 회귀분석 시 summary에 나오는 변수들의 p-value는 0.05보다 작을수록 유의미한데, 이때 귀무가설이  회귀계수가 0이다, 즉 영향을 미치지 않는다이다.

* p-value가 유의수준(0.05리고 한다면)보다 작을때 귀무가설을 기각한다.

from scipy.stats import shapiro

data= [4.5, 3.6, 6.8, 2.4, 5.9]
stat, p_value = shapiro(data)
# p-value가 약 0.92로 유의수준(0.05)보다 크므로 정규성을 만족한다.

- stat: 검정 통계량, 데이터가 정규 분포에서 벗어나는 정도를 나타낸다.

- stat이 임계값(t분포는 t.ppf)보다 작아야 정규분포에 가깝다.

- stat을 임계값과 직접 비교하기 보다는 p-value 값을 기준으로 비교하는데, 그 이유는 p-value가 검정통계량을 기반으로 계산되기 때문이다.

 

* 회귀분석 시 잔차의 정규성 가정

- 잔차가 정규성을 따르지 않는다면 모델을 수정하거나 대체 모델을 고려할 수 있다.

- 모델 적합 후 검토를 통해 모델이 데이터를 충분히 설명하고 있는지 확인한다.

import numpy as np
import statsmodels.api as sm
import matplotlib.pyplot as plt
from scipy.stats import shapiro

# 예시 데이터
X = np.array([1, 2, 3, 4, 5])
y = np.array([1.2, 1.9, 3.0, 3.8, 5.1])

# 상수 추가 (회귀 분석을 위한 절편 포함)
X = sm.add_constant(X)

# 회귀 모델 적합
model = sm.OLS(y, X)
results = model.fit()

# 잔차 계산
residuals = results.resid

# 잔차의 Q-Q Plot
sm.qqplot(residuals, line='45')
plt.show()

# 잔차의 Shapiro-Wilk 검정
stat, p_value = shapiro(residuals)
print("Shapiro-Wilk 검정 통계량:", stat)
print("p-value:", p_value)

if p_value > 0.05:
    print("잔차가 정규성을 만족합니다.")
else:
    print("잔차가 정규성을 만족하지 않습니다.")

 

 

※ 면접 질문 모음집: https://zzsza.github.io/data/2018/02/17/datascience-interivew-questions/

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함