본문 바로가기
자격증/[빅분기] 빅데이터분석기사

[작업형3] 단일표본검정

by 바다의 공간 2024. 11. 4.

🟢   단일표본검정에 대해 공부했습니다.

 

문제는 이렇습니다.

단일표본검정

 

나커피 유튜버는 최근 판매되는 "합격 원두(dark)" 상품의 실제 무게를 조사하였다.

 

제조사는 "합격 원두(dark)"의 무게를 120g라고 표기하였다.

 

나커피 유튜버는 이 주장이 사실인지 확인하기 위해 상품의 무게를 측정하였다.

 

다음은 30개의 상품 샘플의 무게 측정 결과다.

이 측정 결과를 바탕으로 제조사의 주장인 상품의 무게(120g)가 사실인지 검정해보시오.

(데이터는 정규분포를 따른다고 가정한다.) <- 요말이 있으면 단일표본검정(T검정)을 해도 됨.

  • 귀무가설: μ = μ0, "합격 원두(dark)" 상품의 평균 무게는 120g이다.
  • 대립가설: μ ≠ μ0, "합격 원두(dark)" 상품의 평균 무게는 120g 아니다.
 
  • μ(뮤): 현재 조사하려는 상품의 실제 평균 무게
  • μ0(뮤 제로): 제조사가 주장하는 상품의 평균 무게(120g)

🟢 단일표본검정(t검정)

import pandas as pd
df = pd.DataFrame({
    '무게':[119, 121, 121, 119, 125, 115, 121, 118, 117, 127,
           123, 129, 119, 124, 114, 126, 122, 124, 121, 116,
           123, 123, 127, 118, 122, 117, 124, 125, 123, 121],
})

의 데이터를 가지고 활용해보겠습니다.

# 단일표본검정
from scipy import stats
print(stats.ttest_1samp(df['무게'], 120))

scipy싸이파이에 stats를 가지고 임포트를 해주고 

stats.ttest_1samp() 는 단일표본검정을 해주는 함수입니다.

안에는 실제값을 넣고, 뮤제로(120)을 넣습니다. 정리를 하면

stats.ttest_1samp(df['무게],120)

 

🟢결과

TtestResult(statistic=2.153709967150663, pvalue=0.03970987897788578, df=29)

Ttest결과가 나옵니다. 

statistic(검정통계량)은 2.1537,  pavalue 0.039

여기서는 0.05 유의수준보다 작기때문에 귀무가설 기각, 대립가설 채택이 될 수 있습니다.

df는 자유도고 관측 +1 이라고 생각해주면 됩니다.

그러면 즉 30개가 되겠죠 

그러나 시험환경은 1.7이라서 자유도(df)가 출력되지않습니다. 참고용입니다.


🟢  여기서 꼭 알아야할것!!

alternative 매개변수는 대립가설의 방향을 설정하는 옵션이에요.

two-sided, greater, less가 각각 어떤것을 의미하는지 알아야 또 이해를 하고 넘어갈 수 있으니

꼭 숙지하도록 해야합니다..

  1. two-sided (양측 검정):
    • 표본 평균이 기준값과 다르다 (기준값보다 크거나 작다).
    • 예: "표본 평균이 120과 다르다"를 검정하고 싶을 때 사용.
  2. greater (단측 검정, 오른쪽 꼬리):
    • 표본 평균이 기준값보다 크다.
    • 예: "표본 평균이 120보다 크다"를 검정하고 싶을 때 사용.
  3. less (단측 검정, 왼쪽 꼬리):
    • 표본 평균이 기준값보다 작다.
    • 예: "표본 평균이 120보다 작다"를 검정하고 싶을 때 사용.

쉽게 말해:

  • two-sided: 기준값과 다르냐? (크든 작든 상관없이 차이가 있는지)
  • greater: 기준값보다 크냐?
  • less: 기준값보다 작냐?

이렇게 해석하면 됩니다! 뭔가 쉬워보이긴하는데 막상 적용할라면 헷갈리더라구요.


# 대립가설: 합격 원두(dark)" 상품의 평균 무게는 120g 아니다.
print(stats.ttest_1samp(df['무게'], 120, alternative='two-sided'))

 

🟢결과

TtestResult(statistic=2.153709967150663, pvalue=0.03970987897788578, df=29)

의 결과로 p-value값이 0.05보다 작으므로 같은 결과가 대립가설 채택됩니다.


# 대립가설: 합격 원두(dark)" 상품의 평균 무게는 120g 보다 크다
print(stats.ttest_1samp(df['무게'], 120, alternative='greater'))

alternative는 크다가 들어가서 greater

🟢결과

TtestResult(statistic=2.153709967150663, pvalue=0.01985493948894289, df=29)

또한 p-value값이 0.05보다 작기때문에 대립가설 채택됩니다.

 


# 대립가설: 합격 원두(dark)" 상품의 평균 무게는 120g 보다 작다
print(stats.ttest_1samp(df['무게'], 120, alternative='less'))

alternative는 작다가 들어가서 less

🟢결과

TtestResult(statistic=2.153709967150663, pvalue=0.9801450605110571, df=29)

여기서는 pvalue값이 유의수준인 0.05보다 크기때문에 귀무가설을 채택하게 됩니다.


 

여기서 궁금했던건
pavalue값은 왜 중요한지 알겠고 df자유도도 몇개인지 알 수 있다고 생각하는데

statistic은 왜 필요한거지? 라는 생각이 들었습니다.

이것은 표본평균보다 큰지 작은지를 알아보는 것으로 대립가설(120)을 적은것보다 큰지 작은지를 
알 수 있습니다. 
좀 더 자세히 공부하자면 (+)양수는 기준값보다 크고 (-)음수는 기준값보다 작다 라는 의미로 볼 수 있어요.
 
그럼 위에있는건 2.15(양수)니까 표본평균이 120(대립)보다 크다는것을 의미합니다.