본문 바로가기

자격증공부/빅데이터분석기사

[빅데이터분석기사] 작업형3 가설검정 이론 및 프로세스

320x100

빅데이터분석기사

* 퇴근후딴짓 님의 강의를 참고하였습니다. *

1. 모집단과 표본

 ㅇ 모집단 : 집단 전체
 ㅇ 표본 : 모집단을 대표하는 집합


2. 가설검정

 ㅇ 모집단에 대한 가설이 적합한지 추출한 표본데이터로부터 판단하는 통계적 추론
  - 귀무가설 H0 : 기존에 알려진 가설
  - 대립가설 H1 : 새로 밝히려는 가설

 -> 귀무가설 채택 : 귀무가설을 기각하지 못한다.
 -> 대릭가설 채택 : 귀무가설을 기각한다 (통계적으로 유의하다)

ㅇ 가설검정의 오류

  검정결과
H0 채택 H1 채택 (H0기각)
실제 H0 참 올바른 판단(1-a) 제1종 오류(a)
H1 참 제2종 오류(b) 올바른 판단(1-b)


ㅇ 가설검정 과정
 - 통계적 가설 설정(귀무가설 H0, 대립가설 H1)
  ex. yd : 치료후 혈압 - 치료전 혈압의 평균일 때,

        H0 : yd >= 0 : 치료 후 혈압이 더 높으므로 치료제 효과가 없다

        H1 : yd <   0 : 치료 전 혈압이 더 높으므로 치료제 효과가 있다.
 - 유의수준(a) 결정 :  0.05
 - 검정통계량 계산
 - 기각역 / 유의확률(p_value)계산
 - 채택/기각 : 검정통계량이 기각역에 속하면 H1채택(H0 기각), 유의확률이 유의수준보다 낮으면 H1채택(H0기각)

    ex. p-value < 0.05 : 대립가설 채택 (귀무가설 기각)

 

3. 검정 방법

[ T-검정 : T-test ]

1. 단일표본 t-test (one sample t-test) :  stats.ttest_1samp

 A : 하루에 커피 몇 잔 마시니?
 B : 나 평균 두잔 마셔!
 A : 아니야! 너 석잔 넘게 마시는 것 같아
 B : 가설검정 해볼까?

ㅇ 가설1

 - 귀무가설(H0) : 하루 평균 두잔(u=2)
 - 대립가설(H1) : 하루 평균 두 잔보다 더 많이 마신다. (u>2)

import pandas as pd
from scipy import stats

df = pd.DataFrame({
    "하루 커피 몇 잔":[3,2,1,3,2,3,4,1,1,1,2,3,4,4,3,3,3,2,2,2]
	})
df.head(3)

result = stats.ttest_1samp(df["하루 커피 몇 잔"], 2, alternative="greater") #데이터, 평균, alternative
result

print(result.statistic)
print(result.pvalue)

 

 

ㅇ 가설2

 - 귀무가설(H0) : 하루 평균 두잔(u=2)
 - 대립가설(H1) : 하루 평균 두 잔보다 더 적게 마신다. (u<2)

result = stats.ttest_1samp(df["하루 커피 몇 잔"], 2, alternative="less") #데이터, 평균, alternative
result

 

 

ㅇ 가설3

 - 귀무가설(H0) : 하루 평균 두잔(u=2)

 - 대립가설(H1) : 하루 평균 두잔이 아니다. 

result = stats.ttest_1samp(df["하루 커피 몇 잔"], 2, alternative="two-sided") #데이터, 평균, alternative
result

 


2. 독립표본 t-test (two sample t-test, independednt t-test) : stats.ttest_ind
빅데이터 분석기사 실기시험을 공부하면서 강사가(또는 도서에서) 제공한 코드를 복사-붙여넣기 하며 학습하는 사람들(A 집단)과 직접 코딩하면서 에러를 마주하는 사람들(B 집단)의 평균 점수는 다르다고 할 수 있을까요?

ㅇ 가설1
 - 귀무가설(H0):  μ 1 =  μ 2, A집단과 B집단 시험 평균 점수는 같다
 - 대립가설(H1):  μ 1 <  μ 2, A집단이 B집단 보다 평균 점수가 작다
 - 유의수준: 0.05

import pandas as pd
from scipy import stats

# 정규분포를 따른 다는 가정
df = pd.DataFrame({
    "Agroup":[80,69,78,88,100,85,83,81,80,91,95,59,59,49,69,39,49,59,90,90,91,93,79,78,68,58,78,88,88],
    "Bgroup":[78,86,83,91,90,87,85,82,88,100,78,88,78,58,100,97,76,81,90,85,78,91,84,81,80,78,68,68,69]
})
df.head(3)

# 모분산이 같을 때
stats.ttest_ind(df['Agroup'], df['Bgroup'], alternative="less")

# 모분산이 다를 때
stats.ttest_ind(df['Agroup'], df['Bgroup'], alternative="less", equal_var=False)

 

 

ㅇ 가설2
 - 귀무가설(H0):  μ 1 =  μ 2, A집단과 B집단 시험 평균 점수는 같다
 - 대립가설(H1):  μ 1 >  μ 2, A집단이 B집단 보다 평균 점수가 크다

stats.ttest_ind(df['Agroup'], df['Bgroup'], alternative="greater", equal_var=False)

 

 

ㅇ 가설3
 - 귀무가설(H0):  μ 1 =  μ 2, A집단과 B집단 시험 평균 점수는 같다
 - 대립가설(H1):  μ 1  ≠   μ 2, A집단이 B집단 보다 평균 점수가 다르다

stats.ttest_ind(df['Agroup'], df['Bgroup'], alternative="two-sided", equal_var=False)

 


3. 대응(쌍체) 표본 t-test (paried t-test) : ttest_rel
* 독립표본은 모집단이 다르나, 대응표본은 한 사람에게 2번 측정하는 것으로 전/후 비교 또는 같은 사람의 왼/오 비교
예1) 어떤 사람의 수학 점수가 "1타 강사" 수업을 들은 전후 비교
예2) 오른쪽과 왼쪽 눈 크기 비교

ㅇ 가설1
 - 귀무가설(H0):  μ  = 0
 - 대립가설(H1):  μ  < 0
 - μ  = (수업을 듣기 전 - 수업을 들은 후) 점수 평균
 - 유의수준: 0.05

import pandas as pd
from scipy import stats

# 정규분포를 따른 다는 가정
df = pd.DataFrame({
    "pre":[80,69,78,88,100,85,83,81,80,91,95,59,59,49,69,39,49,59,90,90,91,93,79,78,68,58,78,88,88],
    "post":[78,86,83,91,90,87,85,82,88,100,78,88,78,58,100,97,76,81,90,85,78,91,84,81,80,78,68,68,69]
})
df.head(3)

stats.ttest_rel(df['pre'],df['post'],alternative="less")


ㅇ 가설2
 - 귀무가설(H0):  μ  = 0
 - 대립가설(H1):  μ  > 0

stats.ttest_rel(df['pre'],df['post'],alternative="greater")


ㅇ 가설3
 - 귀무가설(H0):  μ  = 0
 - 대립가설(H1):  μ   ≠  0

stats.ttest_rel(df['pre'],df['post'],alternative="two-sided")

 

320x100


[ 독립성 검정 ] 두 범주형 변수의 관련성

A공장과 B공장 임직원 간의 근무기간 비율에 차이가 있는가?

근무지 1년 이상 1년 미만 합계
A공장 50 60 110
B공장 25 40 65
합계 75 100 175

1. 위 가설에 대한 독립성 검정(카이제곱)의 검정 통계량 값?
2. 위 통계량에 대한 p값을 구하시오
3. 유의수준 0.05하에서 가설검정의 결과(채택/기각) 중 하나를 선택하시오.

H0(귀무가설) : '근무지'와 '근무기간'은 독립이다.
H1(대립가설) : '근무지'와 '근무기간'은 독립이 아니다.

import pandas as pd
from scipy.stats import chi2_contingency

# 데이터
df = pd.DataFrame([[50, 60], [25, 40]])
df

# 독립성 검정
stat, p, dof, expected_freq = chi2_contingency(df)
print(round(stat,2))
print(round(p,4)) 
# 0.05보다 크므로 귀무가설 채택 : 근무지와 근무기각이 독립이 아니라고 할 수 없다.

# 연속성 수정(Yates's correction for continuity): 기본값 True
# chi2_contingency(df, correction=False)

 

반응형



[ 일원배치법 ] 관측치가 3개 이상일 때 활용 

stats.f_oneway(df['group_A'], df['group_B'], df['group_C'])

그룹 간의 평균 차이를 비교하기 위해 사용되는 통계적 검정
한개의 변수(그룹)에 따라 평균의 차이가 통계적으로 유의미한지 검정
양측 검정만 있음 (방향이 없음)

빅데이터 분석기사 실기를 세 가지 다른 교육 방법(A, B, C)을 도입하여 수험생들의 실기시험 성적을 비교하고자 합니다. 40명의 학생들을 무작위로 12명씩 세 그룹으로 나누어 교육을 시행한 후, 시험을 실시하였습니다. 다음은 각 그룹의 수험생들의 실기시험 성적 데이터입니다.
1. F값 (반올림하여 소수 둘째자리까지 계산)
2. P값 (반올림하여 소수 여섯째자리까지 계산)
3. 검정결과 (유의수준 0.05 하)

귀무가설(H0): 세 그룹 간의 평균 실기시험 성적 차이가 없다. (모평균의 차이가 없다)
대립가설(H1): 세 그룹 간의 평균 실기시험 성적 차이가 있다. (모평균이 모두 같지는 않다)

단, 각 그룹의 데이터는 정규성을 만족하고 그룹간의 등분산성은 동일하다.

import pandas as pd
import scipy.stats as stats
df = pd.read_csv('oneway.csv')

# 일원배치법 수행
fstatistic, pvalue = stats.f_oneway(df['group_A'], df['group_B'], df['group_C'])

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

# p-value
print(format(pvalue,'.6f')) #부동소수점 표기를 소수점자리 표기 포맷으로 바꾸기

# 검정결과
print("귀무가설 기각. 교육방법에 따라 시험결과의 차이가 있다고 할 수 있다.")


문제에서 정규성 검정과 등분산성 p값 또는 만족하는지를 묻는다면

import pandas as pd
import scipy.stats as stats
df = pd.read_csv('oneway.csv')

# 정규성/등분산검정은 유의수준보다 커야 만족하는것(0.05보다 커야함)
# [정규성 검정] shapiro (H0: 정규분포를 따른다. H1: 정규분포를 따르지 않는다.)
# 주어진 데이터가 정규 분포를 따르는지를 확인 : 0.05보다 크므로 정규분포를 따른다.
print(stats.shapiro(df['group_A']))
print(stats.shapiro(df['group_B']))
print(stats.shapiro(df['group_C']))

# [등분산 검정] levene (H0: 각 그룹 데이터는 등분산을 가진다. H1: 하나 이상의 그룹이 등분산을 가지지 않는다.)
# 그룹 간 분산이 동일한지를 확인하기 위한 검정 : 0.05보다 크므로 등분산을 따른다.
print(stats.levene(df['group_A'], df['group_B'], df['group_C']))

# 정규성/등분산을 만족하므로 일원배치법 수행 가능
# 일원배치법 수행
f_statistic, p_value = stats.f_oneway(df['group_A'], df['group_B'], df['group_C'])

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

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

# 검정결과
print('귀무가설 기각, 교육방법에 따라 시험결과의 차이가 있다고 할 수 있다.')

* 출력결과
ShapiroResult(statistic=0.9519118666648865, pvalue=0.6650832295417786)
ShapiroResult(statistic=0.9926441311836243, pvalue=0.9999779462814331)
ShapiroResult(statistic=0.9600766897201538, pvalue=0.7849239110946655)
LeveneResult(statistic=2.437300743889479, pvalue=0.10297619038422344)
15.57
0.000017
귀무가설 기각, 교육방법에 따라 시험결과의 차이가 있다고 할 수 있다.

 

 

2023.06.12 - [자격증공부/빅데이터분석기사] - [빅데이터분석기사] 작업형1 판다스 문법 활용 요약

 

[빅데이터분석기사][작업형1] 판다스 문법 활용 요약

1. 라이브러리 및 데이터 읽어오기 ㅇ 컬럼명 확인할 수 있도록 세팅하기 import pandas as pd df = pd.read_csv('ㅇㅇㅇㅇ.csv') pd.set_option('display.max_columns', None) #컬럼명 전부 확인할 수 있도록 셋팅하기 2.

inform.workhyo.com

 

2023.06.12 - [자격증공부/빅데이터분석기사] - [빅데이터분석기사] 작업형2 머신러닝 이론 및 프로세스 요약

 

[빅데이터분석기사][작업형2] 머신러닝 이론 및 프로세스 요약

* 퇴근후딴짓 님의 강의를 참고하였습니다. * 1. 머신러닝 ㅇ기존에는 데이터/규칙을 Rule Base로 결과를 도출하였지만, 머신러닝은 데이터와 결과(해답)을 기반으로 학습을 통해 규칙을 도출하고

inform.workhyo.com

 

320x100
반응형