* 퇴근후딴짓 님의 강의를 참고하였습니다. *
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")
[ 독립성 검정 ] 두 범주형 변수의 관련성
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 판다스 문법 활용 요약
2023.06.12 - [자격증공부/빅데이터분석기사] - [빅데이터분석기사] 작업형2 머신러닝 이론 및 프로세스 요약
'자격증공부 > 빅데이터분석기사' 카테고리의 다른 글
[빅데이터분석기사] 작업형2 문제유형 (분류) (0) | 2023.06.15 |
---|---|
[빅데이터분석기사] 작업형2 문제유형 (회귀) (0) | 2023.06.14 |
[빅데이터분석기사] 작업형1 판다스 문법 활용 요약 (0) | 2023.06.12 |
[빅데이터분석기사] 작업형2 머신러닝 이론 및 프로세스 요약 (0) | 2023.06.12 |
[빅데이터분석기사] 작업형2 문제유형 (분류) (0) | 2023.06.12 |