Statistics

Hypothesis Test

bomishot 2023. 2. 26. 19:30
  • 가설(귀무가설, 대립가설)
  • 1종 오류, 2종 오류
  • 검정 방법론
  • 단측 검정, 양측 검정
  • p-value 계산, 의미
  • 검정 결과 해석 → insight 얻기

 

가설검정

특정 모집단에 대한 가설을 세우고, 이 가설을 sample data를 사용하여 검토하는 추론 과정

  • 귀무가설 (H0) (Null Hypothesis)
    • 데이터를 수집하기 전, 사실이라고 믿는 가설
    • 디폴트 가설, 자연 그대로의 상
    • = 등호 사인 포함 ( ≤, ≥, =)
  • 대립가설(H1) (Alternative Hypothesis)
    • 귀무가설과 대립되는 가설
    • 문제에서 나온 말 그대로. 우리가 사실이라고 주장하는 가설
    • =등호 사인 미포함 (<, >, !=)

1종 오류, 2종 오류

1종 오류(FP)

  • 귀무가설이 참인데, 기각한 경우 → 대립가설 참
  • 실제로 죄가 없는데, 유죄 선고한 경우

2종 오류 (FN)

  • 대립가설이 참인데, 귀무가설을 기각하지 않은 경우
  • 실제로 죄가 있는데, 무죄 선고한 경우

귀무가설이 참,거짓인 지 먼저 본다음, 판단한 것이 귀무가설 기각한 것인지 기각하지 않은것인지 판단 후 → 몇종오류인지 판단


  • 가설 세우기
    • 단측 검정 (one sample t-test) : (< >)한 쪽만 보니 5% 잡음
    • 양측 검정 (two sample t-test) : (= ≠) 양 쪽 다 봐야하니, 2.5%, 97.5% 잡음

방향성이 있냐없냐 차이.

단측이든,양측이든 95%안에 들어오면, 두 평균값의 차이는 우연히 발생한 것이므로 두 집단의 평균값은 통계적으로 같은것임.

 

가설검정은 우리에게 모집단의 모수에 관한 정보를 주는 것이지

샘플 데이터의 통계치에 대한 정보를 주는 것이 아님.

 

 

검정 방법론

: 우리는 데이터를 이용하여 어떤 가설(H0, H1)을 채택할지 결정하는데 두 가지 방법이 있다.

신뢰구간 확인

평균의 표본 분포 → 95% 신뢰구간 확인 후, 결정
np.random.seed(10)

means=[]

for _ in range(10000):
    bootsample = drug[drug['호르몬투약']==True].sample(drug.shape[0], replace=True)
    means.append(bootsample.키.mean())

# 신뢰구간 확인 
low = np.percentile(means, 5) # 단측 검증이므로

# histogram, axvline 이용해 95% 신뢰구간의 lower limit보다 작은지 큰지 확인

 

p-value 확인

  • 유의확률 (p-value) : 귀무가설을 지지하는 정도
  • 귀무가설의 분포에 샘플 데이터의 평균값보다 큰 면적 확인 → 이 면적이 0.05보다 작으면 귀무가설이 인데, 기각했을 때의 오류가 5%보다 작음을 의미
  • p-value < 0.05
    • 귀무가설 참인데, 기각하기 충분한 증거가 있음
    • 대립가설 채택
np.random.seed(10)

means = []

for _ in range(10000):
    sample = drug[drug.성장호르몬==True].sample(drug.shape[0], replace=True)
    means.append(sample.키.mean())

# 샘플 데이터에서 성장호르몬 투약한 사람의 평균 키
sample_mean = drug[drug.성장호르몬==True].키.mean()

# 귀무 분포를 표본 평균 분포의 모양 그대로 하기 위해
sample_std = np.std(means) 

# visulization
plt.figure(figsize=(8,5))
null_vals = np.random.normal(172.5, sample_std, 10000)
plt.hist(null_vals, alpha=0.5)
plt.axvline(sample_mean, color='r', label='Sample Mean')

어떠한 면적도 존재하지 않음 &rarr; p-value가 0임 &rarr; 귀무가설 기각, 대립 가설 채택

More Study

독립성, 정규성, 등분산 검정

T-test 사용 전, 데이터가 정규분포를 따르는지, 두 집단 간의 분산이 같은지 등의 가정이 성립하는 지 먼저 검토할 것!

  • 독립성 검정
  • 정규성 검정
    • t-test 사용을 위해서, 확률 분포가 정규 분포를 따르는 지 확인하는 것이 중요
    • stats.shapiro(표본)
      • H0 : 정규성을 만족한다
      • H1 : 정규성을 만족하지 않는다.
        • -> sample size가 크지 않을때 사용하기 좋은 함수
        • -> sample size가 커서 miniproject할 때 정규성 결과 오류남. -> kstest 사용하면 sample size가 클때도 정규성 결과 정확히 나왔었음 -> 정규성을 만족하지 않는 모집단을 그대로 t-test에 적용하는 것은 부적절함
  • 등분산 검정
    • stats.levene(표본1, 표본2) : 두 표본 평균 분포의 등분산 확인
      • H0 : 각 샘플의 분산이 같다.
      • H1 : 각 샘플의 분산이 다르다.
    • T-test stats.ttest_ind(샘플1,샘플2, equal=False) -> 분산이 같지 않아서
      • equal=False이용 (분산이 같냐, 다르냐에 따라 함수의 검정 방법이 달라짐)

 

T-test

  • T-test의 목적
    • 두 집단 간 평균 차이 검정하기 위해 사용!
  • 모집단 : z-test
  • 표본 : t-test
  • A대학 남학생들의 키가 B대학 남학생들보다 크다는 생각이 들었다. 두 대학 남학생들의 키는 같을까?다를까?A대학 남학생 평균키 = 178.5cm→ 1.4cm의 차이는 과연 큰 걸까? 작은걸까?→ 누구를 가지고 와서 비교해야할까?
    • 두 집단의 데이터 사이의 평균적인 거리는 1.4cm이다.
    • 두 집단의 데이터들의 표준편차는 XXXcm이다.
    따라서,
    • 만약 이 1.4cm가 표준편차 XXXcm보다 현저히 작다면, 이 1.4cm의 차이에 큰 의미를 둘 수 없다. (우연히 발생했겠지)
    • but, 1.4cm가 표준편차 XXXcm보다 현저히 크다면, 이 1.4cm의 차이에 큰 의미를 둘 수 있다. (우연히 발생x)→ 결론적으로, t-test는 평균값의 차이, 표준편차의 비율이 얼마나 큰지 작은지를 결정하는 통계적 과정!
    • 표준편차(분산)

 

  • 왜 정규분포를 활용하나?
    • t-test는 두 집단 간의 평균 차이가 유의한지 검정하기 위해, 두 집단의 분포가 정규분포를 따른다는 가정을 기반으로 한다.
      • 이 가정은 CLT(중심극한정리)에 기반함.→ t-test에서는 각 집단의 표본이 정규분포를 따른다고 가정하여 분석 진행!
    • 정규분포 : mean, std로만 규정
      • mean, std가 다른 무한개의 서로 다른 정규 분포 존재
      • 정규분포 아래의 면적은 확률 의미
        • 면적을 구하기 위해서는 적분을 해야하는데, 그것은 미친짓이므로, 우리가 가진 정규분포를 표준정규분포로 바꾸어 계산하자(z-score)
          • 표준정규분포 : mean=0, std=1인 정규분포
            • z-score값, 표준정규분포표 이용해서하는 테스트 : z-test
  • 신뢰도 95%일 때, 표준정규분포(Standard normal Distribution)과 T-Distribution의 차이는?
    • 신뢰도 95%는 모집단에서 추출한 표본이 모집단의 평균을 얼마나 정확하게 추정할 수 있는지에 대한 확률을 나타낸다.
    • 표준정규분포 : 모집단의 분산을 알고 있는 경우에 사용
    • t-distribution : 모집단의 분산을 모르는 경우 or 표본의 크기가 작은 경우 사용 (정규분포와 비슷하지만, 표본의 크기에 따라서 자유도가 조절되는 분포)
    • t-distribution은 dg(자유도=n-1)이 커짐에 따라, standard normal distribution에 가까워짐.
  • T-test 시,

ttest_indttest_1samp 함수는 둘 다 가설 검정에서 사용되는 함수로

  • ttest_ind: 독립 표본 t-검정을 수행하는 함수로, 두 개의 독립된 데이터 셋에서 추출한 표본들의 평균값을 비교하여 두 집단 간의 평균 차이가 유의미한지 검정합니다. 두 개의 샘플 데이터가 독립된 데이터셋으로부터 추출되었다는 가정 하에 수행됩니다.
  • ttest_1samp: 대응 표본 t-검정을 수행하는 함수로, 하나의 샘플 데이터셋에서 두 개의 관측값(대응되는 쌍) 간의 평균 차이가 유의미한지 검정합니다. 예를 들어, 동일한 집단에서 전후의 관측값이 있는 경우 대응 표본 t-검정을 사용할 수 있습니다.

!! 요약 !!

ttest_ind : 두개의 독립된 집단 간의 평균 차이 검정에 사용되고,

ttest_1samp : 한 집단 평균값과 모집단의 평균값 의 차이 검정에 사용

import numpy as np
from scipy.stats import ttest_ind, ttest_1samp

# ttest_ind 예시
# 두 개의 독립적인 표본 데이터가 있다고 가정
data1 = np.array([3, 5, 7, 9, 11])
data2 = np.array([2, 4, 6, 8, 10])

# 두 표본 데이터의 평균값이 유의미하게 차이나는지 검정
t_statistic, p_value = ttest_ind(data1, data2)

# ttest_1samp 예시
# 하나의 표본 데이터가 있다고 가정
data = np.array([2, 4, 6, 8, 10])

# 표본 데이터의 평균값이 특정한 값인 5(한 집단의 평균값이라 생각)와 유의미하게 차이나는지 검정
t_statistic, p_value = ttest_1samp(data, 5)
  • np.random.normal(mean값, std값, 생성할 난수의 개수)
    • default : 표준정규분포 (mean=0, std=1)

 

Chi-square Test (카이제곱 검정)

범주형 데이터의 빈도예상 빈도와 같은지 검정Chi-square Test 가설검정 단계

눈여겨보기!!

  1. null(H0), alternative(H1) hypothesis 정하기
    1. H0: 두 변수 간에 상관관계가 없다. (독립적이다)
    2. H1: 두 변수 간에 상관관계가 있다.
  2. choose level of significance(알파값)
  3. find critical value (c.v) : 카이제곱분포표보고 찾기
  4. find test statistic (분산구하기)
  5. draw your conclusion
  • isin() 함수를 사용하여 특정 값이 포함되어 있는지 여부(boolean)를 판단할 수 있습니다.
# '구' 열에서 '서울시', '공원녹지사업소', '시설관리공단'을 포함하지 않은 행만 선택 
df = df[~df['구'].isin(['서울시', '공원녹지사업소', '시설관리공단'])]

 

참고 (statQuest - youtube)