ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 빅데이터 분석기사 3) t 검정(t-test)과 수행 예시
    데이터 사이언스(DS)와 통계 2024. 7. 27. 21:28

    t 분포와 t 검정에 대한 전반적인 설명은 지난 글에서 설명하였으므로, 지난 글 링크로 갈음하고

    바로 1표본 t 검정, 2표본 t검정, 동일표본 t검정에 대한 수행 예시로 넘어가겠다.

    (빅데이터 분석기사 2) 중심 극한 정리와 t 분포)

     

     

     

    < 1표본 t검정 >

     

    내가 샘플링한 단일 표본으로 '모평균'을 추정하는 것이다.

    예제) 
    공장에서 생산한 10000개의 PCB 기판중 임의로 15개를 샘플링하여, 측정한 기판의 두께(mm)는 다음과 같다.
    [117, 110, 109, 119, 117, 109, 103, 95, 123, 111, 125, 106, 92, 93, 105]
    공장에서 생산하는 기판 두께의 평균이 110보다 작은지 검정하라.
    ### 아래 자료를 통해 평균이 110보다 작다고 볼수 있는가?
    ### - 귀무가설 : 평균은 110보다 작지않다.
    
    import pandas as pd
    import numpy as np
    from scipy import stats
    
    data = np.array([117, 110, 109, 119, 117, 109, 103, 95, 123, 111, 125, 106, 92, 93, 105])
    
    
    ## 정규성 확인
    norm = stats.shapiro(data) 
    
    
    ## 자유도 설정 및 t 통계량 구하기 
    ## (t검정 수행 모듈에서 구해주므로, 따로 해줄필요는 없으나 그냥 구해보기)
    freedom = len(data) - 1
    t_stats = (data.mean() - 110) / (np.std(data) / (freedom**0.5) )
    
    
    ## t검정 수행
    result = stats.ttest_1samp(data, popmean = 110, alternative = 'less') 
    
    result
    
    >>  TtestResult(statistic=-0.40085990783587394, pvalue=0.3472871061786855, df=14)

     

    유의 수준 5%로 결론내기

    >> p-value 값은 0.347로 0.05보다 크다.

    >> 즉, 귀무가설(=평균은 110보다 작지 않다)을 기각할 정도로 p-value값이 작지 않다.

    >> 따라서 귀무가설을 기각하지 않는다.

    >> 다시말해서 '평균 값 110이 작지 않다'가 틀렸다고 볼 수 없다. (귀무가설이 아니라고 볼 수 없다와 동일한 문장)

    >> 귀무가설이 아니라고 볼 수 없으므로, 귀무가설이 맞다.

    >>  ∴ 위 data를 통해 모평균이 110보다 작지 않다라고 판단한다.

     

    ※ 만일, 110보다 큰지에 대해 검정하고 싶다면, 위 코드에서 alternative = ‘greater’로만 수정해주면 된다.

    ※ t 검정은 샘플이 정규할 때 적용 가능하므로, 정규성 검정을 수행한뒤 t 검정을 수행하는 것이 바람직하다.

     

     

     

    < 2 표본 t검정 >

     

    두 개의 '다른 집단'에서 샘플링한 표본에 대해 평균이 서로 다른지, 같은지에 대해 추정하는 검정이다.

    예제)
    두 업체로부터 PCB 기판을 납품받고 있다. 
    
    각 업체로부터 납품받은 10000개의 제품 중 30개의 PCB를 샘플링하여, 
    업체별로 PCB 기판 두께(mm) 품질의 차이가 있는지 확인하고자 한다. 
    
    두 업체로부터 납품받는 PCB 기판이
    업체에 따라 통계적으로 유의미한 평균 차이가 있는지 검정하여라.

     

    # 두 업체의 PCB 기판 두꼐가 통계적으로 유의미한 평균 차이가 있는지 검정하여라.
    # - 귀무 가설 : 두 업체의 PCB 기판의 평균은 차이가 없다.
    
    
    # 두 개의 표본 데이터 (리스트 형태)
    sample1 = [10, 9, 8, 10, 11, 12, 10, 10, 9, 8, 11, 13, 10, 12, 9, 8, 11, 12, 10, 10, 9, 8, 11, 13, 10, 12, 9, 8, 11, 12]
    sample2 = [10, 9, 8, 12, 11, 12, 11, 13, 12, 11, 14, 16, 13, 15, 12, 11, 14, 11, 11, 12, 12, 8, 11, 12, 10, 12, 9, 8, 11, 12]
    
    # 정규성 확인
    norm1 = stats.shapiro(sample1) 
    norm2 = stats.shapiro(sample2)
    
    # 등분산성 확인
    equal_var = stats.levene(sample1, sample2) 
    
    # 2 표본 t검정 수행
    result = stats.ttest_ind(sample1, sample2)
    
    equal_var, result
    
    >> (LeveneResult(statistic=0.670283018867925, pvalue=0.41630417403199094),
        TtestResult(statistic=-2.75649732667415, pvalue=0.007796996326617907, df=58.0))

     

    유의 수준 5%로 결론내기

    >> p-value 값은 0.00779로 0.05보다 작다.

    >> 즉, 귀무가설(=두 샘플의 평균은 차이가 없다)을 기각할 정도로 p-value값이 작다.

    >> 따라서 귀무가설을 기각한다.

    >> 다시 말해서 '두 샘플의 평균은 차이가 없다 '가 틀렸다고 볼 수 있다. (귀무가설이 아니라고 볼 수 있다와 동일한 문장)

    >> 귀무가설이 맞다고 볼 수 없으므로, 귀무가설이 아니다.

    >>  ∴ 위 data를 통해 두 업체의 PCB 두께 평균은 업체 별로 다르다고 판단한다.

     

    ※ t 검정은 샘플이 정규할 때 적용 가능하므로, 정규성 검정을 수행한뒤 t 검정을 수행하는 것이 바람직하다.

    ※ 2표본 t검정은 다른 t검정에 비해 '등분산성 확인'이 필요하다. 

        등분산성이라는 것은, 분산이 같은 수준이냐는 것이다. 

        위 예제의 경우, 등분산하다고 볼 수 있다. (자세한 내용은 차후 다른 글에서 작성하도록 하겠다)

        2표본 t검정은 등분산인지 아닌지에 따라, 공식이 달라지기때문에 확인이 필요한 것일뿐

        두 케이스 모두 2표본 t검정 수행은 가능하다.

    stats.ttest_ind(sample1, sample2, equal_var= False)

    위와 같이 equal_var를 False로 설정하면, 두 분산의 값이 다름을 인지하고 각각 분산을 계산하여

    2표본 t 검정을 수행한다. 

     

     

     

    < 동일 표본 t검정 >

    동일 표본 t검정은 쌍체 t검정이라고 불린다.

    말 그대로 동일한 집단에 대해 조건만 달리하여, 나온 두 표본 값의 평균을 비교하는데 쓰이는 검정이다.

     

    예제)
    통계 교육 프로그램의 효과를 확인하기 위해, A 중학교 학생 20명을 대상으로 
    교육 이수 전/후에 대한 시험 점수를 확인하였다.
    
    교육 이수 전/후의 시험 점수를 통해 유의미한 평균 차이가 있었는지 검정하여라.
    # 쌍체 t-검정
    # - 귀무가설 : 두 시험 점수의 평균은 차이가 없다
    
    import numpy as np
    from scipy import stats
    
    # 두 개의 쌍체 데이터 (리스트 형태)
    before = [60, 65, 70, 68, 64, 64, 70, 68, 70, 67, 61, 69, 69, 75, 71, 60, 59, 68, 71, 74]
    after =  [60, 65, 70, 68, 64, 69, 75, 72, 70, 67, 61, 72, 74, 76, 75, 65, 64, 68, 71, 74]
    
    # 쌍체 t검정 수행
    result = stats.ttest_rel(before, after)
    result
    
    >> TtestResult(statistic=-3.6327474986069723, pvalue=0.0017713762097907293, df=19)

     

    유의 수준 5%로 결론내기

    >> p-value 값은 0.00177로 0.05보다 작다.

    >> 즉, 귀무가설(=두 샘플의 평균은 차이가 없다)을 기각할 정도로 p-value값이 작다.

    >> 따라서 귀무가설을 기각한다.

    >> 다시 말해서 '두 샘플의 평균은 차이가 없다 '가 틀렸다고 볼 수 있다. (귀무가설이 아니라고 볼 수 있다와 동일한 문장)

    >> 귀무가설이 맞다고 볼 수 없으므로, 귀무가설이 아니다.

    >>  ∴ 위 data를 통해 교육 프로그램 전/후의 평균 점수는 차이가 있음이 확인된다.

     

    ※ t 검정은 샘플이 정규할 때 적용 가능하므로, 정규성 검정을 수행한뒤 t 검정을 수행하는 것이 바람직하다.

       위의 예시에서는 생략하였다.

    728x90
Designed by Tistory.