본문 바로가기

카테고리 없음

빅데이터 분석기사 - 작업형 3유형 [통계 관련]

2023년 상반기부터 통계 관련 문항들이 객관식 선다형으로 나오다가 이제 그냥 코드짜는 2문제로 바뀌었다.

작업형3 유형이 그 대상인데, 아래 캐글에 좋은 예제가 있어서 같이 풀어보았다. . . .. ..

 

 

* 쌍체표본 t검정

 

scipy.stats의 ttest_rel 활용

주어진 데이터는 고혈압 환자 치료 전후의 혈압이다. 해당 치료가 효과가 있는지 대응(쌍체)표본 t-검정을 진행하시오
  • 귀무가설(H0):  >= 0
  • 대립가설(H1): < 0
  •  = (치료 후 혈압 - 치료 전 혈압)의 평균
  • 유의수준: 0.05
  1. 의 표본평균은?(소수 둘째자리까지 반올림)
  2. 검정통계량 값은?(소수 넷째자리까지 반올림)
  3. p-값은?(소수 넷째자리까지 반올림)
  4. 가설검정의 결과는? (유의수준 5%)
# lib import!
import pandas as pd
import numpy as np
from scipy import stats

# Data Load
df = pd.read_csv("/kaggle/input/bigdatacertificationkr/high_blood_pressure.csv")

# 1번 평균
df['diff'] = df['bp_post'] - df['bp_pre']
avg = df['diff'].mean()
print(round(avg,2))

# 2번 검정통계량 구하기
stat, pvalue = stats.ttest_rel(df['bp_post'], df['bp_pre'], alternative = 'less')

 

통계학은 늘 그랬듯 상식을 검증할 것이다.

치료 후에 고혈압이 조금이라도 낮아지는게 상식이므로,

(치료 후 혈압) < (치료 전 혈압) 을 기대할 것이고,

따라서 μ = (치료 후 혈압) - (치료 전 혈압) 으로 정의한 상황에서 귀무가설은 μ >= 0, 대립가설은 μ < 0

 

* scipy ttest 코드에서 alternative(대립가설) 옵션을 less를 두는데, 이는 array를 투입할때 앞 샘플 평균이 뒤 샘플 평균보다 작을것을 의미한다. 

** pvalue가 주어진 유의수준(0.05) 보다 작으면 귀무가설을 기각하고 대립가설을 채택하면 됌. 

 

귀무가설, 대립가설의 의미와 예시

T-test, chi-square test를 공부하다보니 귀무가설과 대립가설을 어떻게 설정해야 하는지 헷갈릴 때가 있었다. p-value에 따라 귀무가설의 기각 여부가 결정되니, 내가 어떻게 세우느냐에 따라 검정 결

velog.io

* scipy의 stats 라이브러리에 있는 함수들 외우기.

https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ttest_ind.html

 

scipy.stats.ttest_ind — SciPy v1.10.1 Manual

[4] Yuen, Karen K. “The Two-Sample Trimmed t for Unequal Population Variances.” Biometrika, vol. 61, no. 1, 1974, pp. 165-170. JSTOR, www.jstor.org/stable/2334299. Accessed 30 Mar. 2021. [5] Yuen, Karen K., and W. J. Dixon. “The Approximate Behaviour

docs.scipy.org

 

Calculate the t-test on TWO RELATED samples of scores, a and b.

This is a test for the null hypothesis that two related or repeated samples have identical average (expected) values.

equal_var : bool, optional

alternative : {‘two-sided’, ‘less’, ‘greater’}, optional

 

 

독립표본 t검정

 

scipy.stats.ttest_ind 활용.

Calculate the T-test for the means of two independent samples of scores.

This is a test for the null hypothesis that 2 independent samples have identical average (expected) values. This test assumes that the populations have identical variances by default.

=> 정규분포의 가정

 

단일표본 t검정

 

=> scipy.stats의 ttest_1samp 함수 활용

모집단이 정규분포 따르고, 표본 크기가 충분히 크다는 가정.

from scipy.stats import ttest_1samp

# 데이터
scores = [75, 80, 68, 72, 77, 82, 81, 79, 70, 74, 76, 78, 81, 73, 81, 78, 75, 72, 74, 79, 78, 79]

# 모평균 가설검정
mu = 75  # 검정할 모평균
alpha = 0.05  # 유의수준

# t-test를 사용하여 가설 검정
t_statistic, p_value = ttest_1samp(scores, mu, alternative='greater')

# 결과 출력
print("t-statistic:", t_statistic)
print("p-value:", p_value)

if p_value < alpha:
    print("귀무가설을 기각합니다. 모평균은 75보다 큽니다.")
else:
    print("귀무가설을 채택합니다. 모평균은 75보다 크지 않습니다.")

 

이때 특히 함수명만 아니라, 해당 함수에 있는 인자(파라미터)들이 어떤식으로 구성되어 있는지 range 등 파악하기!

 

 

일원배치법

scipy.stats 의 f_oneway 함수 활용

import scipy.stats as stats

# 데이터
groupA = [85, 92, 78, 88, 83, 90, 76, 84, 92, 87]
groupB = [79, 69, 84, 78, 79, 83, 79, 81, 86, 88]
groupC = [75, 68, 74, 65, 77, 72, 70, 73, 78, 75]

# 일원배치법 수행
f_value, p_value = stats.f_oneway(groupA, groupB, groupC)

# F-value
print(round(f_value,2))

# p-value
print(format(p_value,'.6f'))

 

shapiro-wilk 검정

scipy.stats의 shapiro 함수 활용

from scipy import stats

data = [75, 83, 81, 92, 68, 77, 78, 80, 85, 95, 79, 89]

# Shapiro-Wilk 검정 수행
statistic, p_value = stats.shapiro(data)

# 결과 출력
print("Shapiro-Wilk 검정 통계량:", statistic)
print("p-value:", p_value)

# 유의 수준 0.05에서의 검정 결과 확인
alpha = 0.05
if p_value > alpha:
    print("귀무 가설을 기각할 수 없다. 데이터는 정규 분포를 따름")
else:
    print("귀무 가설을 기각한다. 데이터는 정규 분포를 따르지 않음")

 

 

 

 

 

 

* round 뒤에 인자 주의