호쌤
호쌤 Just For Fun

[Python 데이터 분석] 가설검정의 이해와 T-검정

크리에이티브 커먼즈 라이선스 ITPAPER(호쌤,쭈쌤)에 의해 작성된 ≪[Python 데이터 분석] 가설검정의 이해와 T-검정≫은(는) 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.
이 라이선스의 범위 이외의 이용허락을 얻기 위해서는 leekh4232@gmail.com으로 문의하십시오.

[Python 데이터 분석] 가설검정의 이해와 T-검정

통계기반 데이터 분석은 기술통계추론통계로 구분됩니다. 기술통계는 앞에서 소개한 데이터전처리, 정제 등을 포함한 데이터를 설명하기 위한 과정 전반을 의미하고 추론통계는 어떠한 가설을 검증하는 과정을 통해 예측을 하기 위한 데이터 분석을 의미합니다.

1) 데이터 분석 기술의 구분

  기술 통계 분석 추론 통계 분석
정의 데이터를 요약해 설명하는 기법 단순히 숫자를 요약하는 것을 넘어 어떤 값이 발생할 확률을 계산하는 통계 기법.
모집단에서 샘플링한 표본을 가지고 모집단의 특성을 추론하고 그 결과가 신뢰성이 있는지 검정하는 것이다.
예시 사람들이 받는 월급을 집계해 전체 월급 평균을 구한다. 수집된 데이터에서 성별에 따라 월급에 차이가 있는 것으로 나타났을 때 이런 차이가 우연히 발생할 확률을 계산한다.

추론 통계 분석의 결론

성별에 따른 월급의 차이가 우연히 나타날 확률이 작다면 통계적으로 유의하다(statistically signficant)라고 결론 내린다.

성별에 따른 월급의 차이가 우연히 나타날 확률이 크다면 통계적으로 유의하지 않다(not statistically signficant)고 결론 내린다.

일반적으로 통계 분석을 수행했다는 것은 추론 통계를 이용해 가설 검정을 했다는 의미.

2) 가설검정

정의

모집단의 특성에 대한 통계적 가설을 모집단으로부터 추출한 표본을 사용하여 검토하는 통계적인 추론

통계적인 유의성을 검정하는 것으로, 유의성(有意性) 검정(Significance Test)이라고도 함

절차

가설 설정 ▶ 유의수준 설정 ▶ 검정통계량 산출 ▶ 기각/채택 판단

용어 설명

귀무가설 (=영가설=H0)

통계학에서 처음부터 버릴 것을 예상하는 가설이다.

차이가 없거나 의미있는 차이가 없는 경우의 가설이며 이것이 맞거나 맞지 않다는 통계학적 증거를 통해 증명하려는 가설이다.

대립가설 (=H1)

귀무가설과 반대되는 가설을 대립가설이라고 한다.

대립가설은 연구자가 연구를 통해 입증되기를 기대하는 예상이나 주장하는 내용이다.

보충설명

대부분의 설명에서 대립가설은 우리가 증명하려는 가설이라고 정의하기 때문에 마치 분석기법을 적용할 때 우리가 대립가설이 뭔지 정해줘야 하는 것처럼 착각이 일기도 한다. 하지만 분석기법별로 귀무가설/대립가설의 패턴은 이미 정해져 있다고 보면 된다.

편하게 기억하자면,

귀무가설은 차이가 없다, 영향력이 없다, 연관성이 없다, 효과가 없다. (부정)
대립가설은 귀무 가설에 대한 부정

예를 들어 회귀분석의 경우 귀무가설은 “설명변수(x)는 반응변수(y)에 영향을 주지 않는다.” 이고 대립가설은 “설명변수(x)는 반응변수(y)에 영향을 준다.” 라고 기억하는 게 편하다.

3) 유의수준의 이해

신뢰수준

모집단에서 반복해서 표본을 추출할 경우 모수를 포함할 구간의 비율

모수: 모집단의 평균

신뢰수준이 95% 이상 될 경우 그 구간을 신뢰구간이라고 한다.

유의수준(α)

가설이 어느 정해진 수치를 벗어나면 귀무가설이 오류라고 인정할 것인가를 판단하는 기준.

신뢰수준이 95%라면 유의수준은 5%가 된다.

1-유의수준은 신뢰 수준이 된다.

유의수준 α는 귀무 가설(null hypothesis)이 맞다는 전제 하에, 표본에서 실제로 관측된 통계치와 ‘같거나 더 극단적인’ 통계치가 관측될 확률이다.

유의확률(p-value)

p-value는 관찰된 데이터가 귀무가설과 양립하는 정도를 0에서 1 사이의 수치로 표현한 것이다. p-value가 작을수록 그 정도가 약하다고 보며, 특정 값 (대개 0.05나 0.01 등) 보다 작을 경우 귀무가설을 기각하는 것이 관례이다.

P-Value 는 데이터가 우연에 의해 일어났을 확률

p-value가 작을 수록 대립가설이 우연이 아닌 필연이라는 의미가 된다.

일반적으로 p-value가 유의수준인 0.05보다 작은 경우 귀무가설을 기각하고 대립가설을 채택한다.


t 검정(t-test)

모집단의 분산이나 표준편차를 알지 못할 때, 표본으로부터 추정된 분산이나 표준편차를 이용하여 두 모집단의 평균에 통계적으로 유의한 차이가 있는지 알아볼 때 사용하는 통계 분석 기법

#01. 필요한 패키지 참조

pip install scipy

1
2
import numpy             # 표본집단을 랜덤값으로 생성하기 위해서 사용
from scipy import stats  # t검정 수행을 위한 패키지 (내장)

#02. One-Sample T-test(단일 표본 t-검정)

학생들의 평균키 검증

전체 학생들 중 20명의 학생들을 추려 키를 측정해서 전체 학생들의 평균 키가 175cm인지 아닌지 알아보고 싶다.

  • 귀무 가설: 20개의 샘플 데이터를 통해, 학생들의 평균 키가 175cm라는 것이 옳다는 것을 증명한다.
  • 대립 가설: 20개의 샘플 데이터를 통해, 학생들의 평균 키가 175cm라는 것이 틀리다는 것을 증명한다.

1) 학생 키에 대한 리스트 구성 (랜덤배치)

1
2
3
#height_list = numpy.random.randint(low=162, high=182, size=20)
height_list = numpy.array([164, 163, 173, 165, 180, 173, 175, 167, 176, 166, 181, 163, 173,170, 172, 171, 178, 168, 170, 166])
height_list
▶ 출력결과
1
2
array([164, 163, 173, 165, 180, 173, 175, 167, 176, 166, 181, 163, 173,
       170, 172, 171, 178, 168, 170, 166])

2) T 테스트 수행

귀무가설이 참인 경우 학생들의 평균 키는 175cm와 차이가 없다..

그러므로 평균키는 175다.

귀무가설이 거짓인 경우 학생들의 평균 키는 175cm와 차이가 있다

그러므로 평균은 175가 아니다.

대립가설이 참인 경우 - 관측된 p-value가 0.05보다 작은 경우 귀무가설을 기각한다.

1
2
tTestResult = stats.ttest_1samp(height_list, 175)
tTestResult
▶ 출력결과
1
Ttest_1sampResult(statistic=-3.5041793592045303, pvalue=0.002372734516013681)

귀무 가설이 맞거나 틀린 것을 증명하려면 어떤 증거가 있어야 한다. 이 증거에 해당하는 숫자를 검정 통계량(test statistics)라고 한다.

1
print('t검정 통계량 = %.3f, pvalue = %.3f'%(tTestResult))  
▶ 출력결과
1
t검정 통계량 = -3.504, pvalue = 0.002

#03. Two-Sample T-test(독립 표본 t-검정) / Unpaired T-test

집단 1과 집단 2에서 각각 20명의 학생들을 추려, 각 집단의 키가 같은지, 다른지 알아보고 싶다.

  • 귀무 가설: 두 집단의 평균 키는 차이가 없다. –> 그러므로 두 집단의 평균은 같다.
  • 대립 가설: 두 집단의 평균은 같지 않다.

p-value가 0.05보다 작은 경우 귀무가설을 기각하고 대립가설 채택

1
2
3
numpy.random.seed(1)
group1Heights = numpy.random.randint(low=157, high=178, size=20)
group1Heights
▶ 출력결과
1
2
array([162, 168, 169, 165, 166, 168, 162, 172, 157, 173, 158, 169, 164,
       170, 163, 175, 177, 162, 175, 177])
1
2
group2Heights = numpy.random.randint(low=162, high=182, size=20)
group2Heights
▶ 출력결과
1
2
array([173, 172, 176, 180, 166, 171, 179, 162, 175, 171, 171, 169, 163,
       162, 179, 170, 175, 181, 177, 172])
1
2
tTestResult= stats.ttest_ind(group1Heights, group2Heights)
tTestResult
▶ 출력결과
1
Ttest_indResult(statistic=-2.466231851659976, pvalue=0.01827995629176634)

#04. Paired T-test(대응 표본 t-검정)

다이어트 보조제를 복용한 사람들 중 20명을 추려 복용 전/후의 체중 차이가 유의미한지 알아보고 싶다.

  • 귀무 가설: 복용 전/후의 체중 차이가 없다. –> 그러므로 이 약은 다이어트에 효과가 없다.
  • 대립 가설 : 귀무 가설을 부정하므로 이 약은 다이어트에 효과가 있다.
1
2
3
# 복용전 몸무게에 대한 랜덤 값 배치
beforeWeights = numpy.random.randint(low=60, high=90, size=20)
beforeWeights
▶ 출력결과
1
2
array([85, 68, 67, 63, 66, 81, 77, 85, 63, 64, 84, 77, 71, 72, 86, 80, 76,
       73, 79, 69])
1
2
3
4
5
6
7
# 복용 후 몸무게를 가정한 데이터 변조
tmp_list = []
for i in beforeWeights:
    tmp_list.append(i * numpy.random.normal(0.99,0.02))
    
afterWeights = numpy.array(tmp_list)
afterWeights
▶ 출력결과
1
2
3
4
array([86.70542024, 68.89847193, 65.68285853, 60.09364745, 64.13160916,
       80.07703094, 74.92106965, 84.23605949, 63.2583912 , 61.2096743 ,
       86.51995907, 78.01172344, 70.56422751, 69.04366933, 85.12277671,
       80.23866485, 77.60903086, 72.61799364, 78.38077685, 69.71106283])
1
2
tTestResult= stats.ttest_rel(beforeWeights, afterWeights)
tTestResult
▶ 출력결과
1
Ttest_relResult(statistic=1.2648673255171896, pvalue=0.22121350446506352)
Rating:

크리에이티브 커먼즈 라이선스 ITPAPER(호쌤,쭈쌤)에 의해 작성된 ≪[Python 데이터 분석] 가설검정의 이해와 T-검정≫은(는) 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.
이 라이선스의 범위 이외의 이용허락을 얻기 위해서는 leekh4232@gmail.com으로 문의하십시오.

comments powered by Disqus