728x90
728x90
제3유형: 가설 검정 연습 문제
들어가며
- 빅데이터분석기사 실기 제3유형 가설 검정 파트의 연습 문제를 정리해본다.
단일 표본 T-검정(One Sample T-Test)
개념
- 표본 평균이 모평균과 다른지를 검정하는 통계적 방법
☑️ 귀무 가설($H_0$) : 표본의 평균은 특정값(모집단 평균)과 같다.
☑️ 대립 가설($H_1$) : 표본의 평균은 특정값(모집단 평균)과 다르다.
- 단일 표본 T-검정은 1가지를 만족한다고 가정한다.
- 단일 표본 T-검정은 표본이 정규 분포를 따른다고 가정한다. (정규성 가정 만족)
- 표본의 크기가 작은 경우 (30개 미만) 데이터가 정규 분포를 따르는지 확인한다.
- 정규성 가정을 확인하기 위해서는 샤피로-윌크 검정을 이용한다.
- @scipy.stats@ 패키지의 @shapiro@ 함수를 이용한다.
- 정규성 가정을 만족할 경우, 단일 표본 T-검정을 이용한다.
- @scipy.stats@ 패키지의 @ttest_1samp@ 함수를 이용한다.
- 정규성 가정을 불만족할 경우, 윌콕슨 부호 순위 검정을 이용한다.
- @scipy.stats@ 패키지의 @wilcoxon@ 함수를 이용한다.
- 정규성 가정을 만족할 경우, 단일 표본 T-검정을 이용한다.
- @scipy.stats@ 패키지의 @shapiro@ 함수를 이용한다.
- 단일 표본 T-검정은 표본이 정규 분포를 따른다고 가정한다. (정규성 가정 만족)
- 가설 검정과 관련된 함수는 @scipy.stats@ 패키지의 함수들을 이용한다.
from scipy.stats import shapiro, ttest_1samp, wilcoxon
연습 문제
문제 1
- 한 학교에서 10명의 학생들의 평균 키가 160cm인지 아닌지 검정하려고 한다. 학생들의 키는 다음과 같다.
- 유의수준 0.05일 때, 이 학생들의 평균 키가 160cm인지 아닌지 검정하라.
학생들의 키 (cm): [162, 159, 158, 160, 165, 163, 157, 161, 159, 160]
더보기
귀무 가설($H_0$) : 학생들의 평균 키는 160cm이다. 대립 가설($H_1$) : 학생들의 평균 키는 160cm가 아니다. |
from scipy.stats import ttest_1samp, shapiro, wilcoxon
# 학생들의 키
data = [162, 159, 158, 160, 165, 163, 157, 161, 159, 160]
# 평균값
avg_value = 160
# [1] 정규성 검정 (표본의 개수가 30개 미만인 경우)
stat, pvalue = shapiro(data)
alpha = 0.05 # 유의수준
if pvalue > alpha:
print("정규성 만족")
# [2] 단일 표본 T-검정
stats, pvalue = ttest_1samp(data, avg_value)
if pvalue > alpha:
print("귀무 가설 채택")
else:
print("귀무 가설 기각")
else:
print("정규성 불만족")
# [3] 윌콕슨 부호 순위 검정
stats, pvalue = wilcoxon(data - avg_value, alternative="two-sided") # 양측 검정
if pvalue > alpha:
print("귀무 가설 채택")
else:
print("귀무 가설 기각")
문제 2
- 한 회사에서 최근 10명의 직원들의 연봉을 조사한 결과, 직원들의 연봉은 다음과 같다. (단위: 만원)
- 유의수준 0.05일 때, 이 회사의 직원들의 평균 연봉이 4700만원인지 아닌지 검정하라.
직원들의 연봉(만원): [4500, 4800, 4700, 5000, 4600, 4900, 4850, 4700, 4550, 4800]
더보기
귀무 가설($H_0$) : 직원들의 평균 연봉이 4700만원이다. 대립 가설($H_1$) : 직원들의 평균 연봉이 4700만원이 아니다. |
from scipy.stats import ttest_1samp, shapiro, wilcoxon
# 학생들의 키
data = [4500, 4800, 4700, 5000, 4600, 4900, 4850, 4700, 4550, 4800]
# 평균값
avg_value = 4700
# [1] 정규성 검정 (표본의 개수가 30개 미만인 경우)
stat, pvalue = shapiro(data)
alpha = 0.05 # 유의수준
if pvalue > alpha:
print("정규성 만족")
# [2] 단일 표본 T-검정
stats, pvalue = ttest_1samp(data, avg_value)
if pvalue > alpha:
print("귀무 가설 채택")
else:
print("귀무 가설 기각")
else:
print("정규성 불만족")
# [3] 윌콕슨 부호 순위 검정
stats, pvalue = wilcoxon(data - avg_value, alternative="two-sided") # 양측 검정
if pvalue > alpha:
print("귀무 가설 채택")
else:
print("귀무 가설 기각")
독립 표본 T-검정 (Independent Sample T-Test)
개념
- 두 표본의 평균이 같은지 혹은 다른지를 검정하는 통계적 방법
☑️ 귀무 가설($H_0$): 두 표본의 평균은 같다.
☑️ 대립 가설($H_1$): 두 표본의 평균은 다르다.
- 독립 표본 T-검정은 2가지를 만족한다고 가정한다.
- 각 표본이 정규 분포를 따른다고 가정한다. (정규성 가정 만족)
- 표본의 크기가 작은 경우 (30개 미만) 데이터가 정규 분포를 따르는지 확인한다.
- 정규성 가정을 확인하기 위해서는 주로 샤피로-윌크 검정을 이용한다.
- @scipy.stats@ 패키지의 @shapiro@ 함수를 이용한다.
- 정규성 가정을 만족할 경우, 독립 표본 T-검정을 이용한다.
- @scipy.stats@ 패키지의 @ttest_ind@ 함수를 이용한다.
- 정규성 가정을 불만족할 경우, 맨-휘트니 U 검정을 이용한다.
- @scipy.stats@ 패키지의 @mannwhitneyu@ 함수를 이용한다.
- 정규성 가정을 만족할 경우, 독립 표본 T-검정을 이용한다.
- @scipy.stats@ 패키지의 @shapiro@ 함수를 이용한다.
- 각 표본의 분산이 동일하다고 가정한다. (등분산성 가정 만족)
- 등분산성 가정을 확인하기 위해서는 Levene 검정을 이용한다.
- @scipy.stats@ 패키지의 @levene@ 함수를 이용한다.
- 등분산성 가정을 만족할 경우, 독립 표본 T-검정을 이용한다.
- @ttest_ind(data1, data2, equal_var=True)@ 또는 @ttest_ind(data1, data2)@
- 등분산성 가정을 불만족할 경우, Welch T-검정을 이용한다.
- @ttest_ind(data1, data2, equal_var=False)@
- 등분산성 가정을 만족할 경우, 독립 표본 T-검정을 이용한다.
- @scipy.stats@ 패키지의 @levene@ 함수를 이용한다.
- 등분산성 가정을 확인하기 위해서는 Levene 검정을 이용한다.
- 가설 검정과 관련된 함수는 @scipy.stats@ 패키지의 함수들을 이용한다.
from scipy.stats import shapiro, levene, ttest_ind, mannwhitneyu
연습 문제
문제 1
- 한 학교에서 10명의 남학생과 10명의 여학생의 평균 키 차이를 비교하려고 한다. 남학생과 여학생들의 키는 다음과 같다.
- 유의수준 0.05일 때, 남학생과 여학생들의 평균 키가 같은지 아닌지 검정하라.
남학생들의 키 (cm): [162, 159, 158, 160, 165, 163, 157, 161, 159, 160]
여학생들의 키 (cm): [150, 155, 153, 160, 162, 158, 157, 154, 155, 152]
더보기
귀무 가설($H_0$): 남학생과 여학생의 평균 키는 같다. 대립 가설($H_1$): 남학생과 여학생의 평균 키는 다르다. |
from scipy.stats import ttest_ind, shapiro, mannwhitneyu, levene
male_data = [162, 159, 158, 160, 165, 163, 157, 161, 159, 160]
female_data = [150, 155, 153, 160, 162, 158, 157, 154, 155, 152]
# [1] 정규성 검정 (표본의 개수가 30개 미만인 경우)
stat_male, pvalue_male = shapiro(male_data)
stat_female, pvalue_female = shapiro(female_data)
alpha = 0.05 # 유의수준
# 정규성 검정
if pvalue_male > alpha and pvalue_female > alpha:
print("정규성 만족")
# [2] 등분산성 검정 (Levene 검정)
stat, pvalue = levene(male_data, female_data)
if pvalue > alpha:
print("등분산성 만족")
# [3] 독립 표본 T-검정
stats, pvalue = ttest_ind(male_data, female_data) # equal_var=True
if pvalue > alpha:
print("귀무 가설 채택")
else:
print("귀무 가설 기각")
else:
print("등분산성 불만족")
# [4] Welch의 T-검정
stats, pvalue = ttest_ind(male_data, female_data, equal_var=False)
if pvalue > alpha:
print("귀무 가설 채택")
else:
print("귀무 가설 기각")
else:
print("정규성 불만족")
# [5] 맨-휘트니 U 검정
stats, pvalue = mannwhitneyu(male_data, female_data, alternative="two-sided") # 양측 검정
if pvalue > alpha:
print("귀무 가설 채택")
else:
print("귀무 가설 기각")
문제 2
- 두 가지 다른 다이어트 프로그램이 사람들의 체중 변화에 미치는 영향을 비교하려고 한다. 첫 번째 프로그램을 진행한 사람들과 두 번째 프로그램을 진행한 사람들의 체중 변화는 다음과 같다.
- 유의수준 0.05일 때, 두 프로그램의 평균 체중 변화가 같은지 아닌지 검정하라.
첫 번째 프로그램 참가자들의 체중 변화 (kg): [1.2, 1.5, 1.0, 1.1, 1.3, 1.4, 1.2, 1.0, 1.3, 1.1]
두 번째 프로그램 참가자들의 체중 변화 (kg): [0.8, 1.0, 1.2, 0.7, 1.1, 0.9, 0.8, 1.0, 0.9, 1.0]
더보기
귀무 가설($H_0$): 첫 번째 프로그램과 두 번째 프로그램의 평균 체중 변화는 같다. 대립 가설($H_1$): 첫 번째 프로그램과 두 번째 프로그램의 평균 체중 변화는 다르다. |
from scipy.stats import ttest_ind, shapiro, mannwhitneyu, levene
program_1_data = [1.2, 1.5, 1.0, 1.1, 1.3, 1.4, 1.2, 1.0, 1.3, 1.1]
program_2_data = [0.8, 1.0, 1.2, 0.7, 1.1, 0.9, 0.8, 1.0, 0.9, 1.0]
# [1] 정규성 검정 (표본의 개수가 30개 미만인 경우)
stat_program_1, pvalue_program_1 = shapiro(program_1_data)
stat_program_2, pvalue_program_2 = shapiro(program_2_data)
alpha = 0.05 # 유의수준
# 정규성 검정
if pvalue_program_1 > alpha and pvalue_program_2 > alpha:
print("정규성 만족")
# [2] 등분산성 검정 (Levene 검정)
stat, pvalue = levene(program_1_data, program_2_data)
if pvalue > alpha:
print("등분산성 만족")
# [3] 독립 표본 T-검정
stats, pvalue = ttest_ind(program_1_data, program_2_data) # equal_var=True
if pvalue > alpha:
print("귀무 가설 채택")
else:
print("귀무 가설 기각")
else:
print("등분산성 불만족")
# [4] Welch의 T-검정
stats, pvalue = ttest_ind(program_1_data, program_2_data, equal_var=False)
if pvalue > alpha:
print("귀무 가설 채택")
else:
print("귀무 가설 기각")
else:
print("정규성 불만족")
# [5] 맨-휘트니 U 검정
stats, pvalue = mannwhitneyu(program_1_data, program_2_data, alternative="two-sided") # 양측 검정
if pvalue > alpha:
print("귀무 가설 채택")
else:
print("귀무 가설 기각")
대응 표본 T-검정 (Paired Sample T-Test)
개념
- 같은 집단에서 두 시점이나 두 조건에서 나온 데이터를 비교하여 평균의 차이를 검정하는 통계적 방법
☑️ 귀무 가설($H_0$): 두 시점 혹은 조건에서 평균 차이가 없다.
☑️ 대립 가설($H_1$): 두 시점 혹은 조건에서 평균 차이가 있다.
- 대응 표본 T-검정은 1가지를 만족한다고 가정한다.
- 각 표본이 정규 분포를 따른다고 가정한다. (정규성 가정 만족)
- 표본의 크기가 작은 경우 (30개 미만) 데이터가 정규 분포를 따르는지 확인한다.
- 정규성 가정을 확인하기 위해서는 샤피로-윌크 검정을 이용한다.
- @scipy.stats@ 패키지의 @shapiro@ 함수를 이용한다.
- 정규성 가정을 만족할 경우, 독립 표본 T-검정을 이용한다.
- @scipy.stats@ 패키지의 @ttest_rel@ 함수를 이용한다.
- 정규성 가정을 불만족할 경우, 윌콕슨 부호 순위 검정을 이용한다.
- @scipy.stats@ 패키지의 @wilcoxon@ 함수를 이용한다.
- 정규성 가정을 만족할 경우, 독립 표본 T-검정을 이용한다.
- @scipy.stats@ 패키지의 @shapiro@ 함수를 이용한다.
- 가설 검정과 관련된 함수는 @scipy.stats@ 패키지의 함수들을 이용한다.
from scipy.stats import shapiro, ttest_rel, wilcoxon
연습 문제
문제 1
- 한 학생이 다이어트를 시작하기 전과 후의 체중을 측정한 결과, 다이어트 전과 후의 체중 변화는 다음과 같다.
- 유의수준 0.05일 때, 체중 변화가 유의미한지 검정하라.
다이어트 시작 전의 체중 변화 (kg) : [0.5, 0.7, 0.6, 0.4, 0.3, 0.8, 0.5, 0.6, 0.7, 0.4]
다이어트 시작 후의 체중 변화 (kg) : [0.6, 0.8, 0.7, 0.5, 0.4, 0.9, 0.6, 0.7, 0.8, 0.5]
더보기
귀무 가설($H_0$): 다이어트 전후의 평균 체중 차이는 없다. 대립 가설($H_1$): 다이어트 전후의 평균 체중 차이는 있다. |
from scipy.stats import ttest_rel, shapiro
before_diet = [0.5, 0.7, 0.6, 0.4, 0.3, 0.8, 0.5, 0.6, 0.7, 0.4]
after_diet = [0.6, 0.8, 0.7, 0.5, 0.4, 0.9, 0.6, 0.7, 0.8, 0.5]
# [1] 정규성 검정 (표본의 개수가 30개 미만인 경우)
stat_before, pvalue_before = shapiro(before_diet)
stat_after, pvalue_after = shapiro(after_diet)
alpha = 0.05 # 유의수준
# 정규성 검정
if pvalue_before > alpha and pvalue_after > alpha:
print("정규성 만족")
# [2] 대응 표본 T-검정
stats, pvalue = ttest_rel(before_diet, after_diet)
if pvalue > alpha:
print("귀무 가설 채택")
else:
print("귀무 가설 기각")
else:
print("정규성 불만족")
# [3] 윌콕슨 부호 순위 검정
stat, pvalue = wilcoxon(before_diet, after_diet)
if pvalue > alpha:
print("귀무 가설 채택")
else:
print("귀무 가설 기각")
문제 2
- 두 가지 치료 방법을 받은 환자들의 치료 전후의 혈압 차이를 비교하려고 한다. 두 치료 방법의 혈압 변화는 다음과 같다.
- 유의수준 0.05일 때, 두 치료 방법의 평균 혈압 변화가 같은지 아닌지 검정하라.
첫 번째 치료 방법 전후 혈압 변화 (mmHg): [5, 3, 4, 6, 2, 3, 5, 4, 3, 4]
두 번째 치료 방법 전후 혈압 변화 (mmHg): [2, 4, 3, 5, 4, 3, 5, 6, 2, 3]
더보기
귀무 가설($H_0$): 첫 번째 치료 방법과 두 번째 치료 방법의 평균 혈압 차이는 같다. 대립 가설($H_1$): 첫 번째 치료 방법과 두 번째 치료 방법의 평균 혈압 차이는 다르다. |
from scipy.stats import ttest_rel, shapiro
treatment_1_data = [5, 3, 4, 6, 2, 3, 5, 4, 3, 4]
treatment_2_data = [2, 4, 3, 5, 4, 3, 5, 6, 2, 3]
# [1] 정규성 검정 (표본의 개수가 30개 미만인 경우)
stat_treatment_1, pvalue_treatment_1 = shapiro(treatment_1_data)
stat_treatment_2, pvalue_treatment_2 = shapiro(treatment_2_data)
alpha = 0.05 # 유의수준
# 정규성 검정
if pvalue_treatment_1 > alpha and pvalue_treatment_2 > alpha:
print("정규성 만족")
# [2] 대응 표본 T-검정
stats, pvalue = ttest_rel(treatment_1_data, treatment_2_data)
if pvalue > alpha:
print("귀무 가설 채택")
else:
print("귀무 가설 기각")
else:
print("정규성 불만족")
# [3] 윌콕슨 부호 순위 검정
stat, pvalue = wilcoxon(treatment_1_data, treatment_2_data)
if pvalue > alpha:
print("귀무 가설 채택")
else:
print("귀무 가설 기각")
ANOVA 분산 분석 (Analysis of Variance)
개념
- 3개 이상의 표본의 평균이 같은지 혹은 다른지를 검정하는 통계적 방법
☑️ 귀무 가설($H_0$): 3개 이상의 표본의 평균은 모두 같다.
☑️ 대립 가설($H_1$): 3개 이상의 표본의 평균은 적어도 하나가 다르다.
- ANOVA 분삭 분석은 2가지를 만족한다고 가정한다.
- 각 표본이 정규 분포를 따른다고 가정한다. (정규성 가정 만족)
- 정규성 가정을 확인하기 위해서는 주로 샤피로-윌크 검정을 이용한다.
- @scipy.stats@ 패키지의 @shapiro@ 함수를 이용한다.
- 정규성 가정을 만족할 경우, ANOVA 분산 분석을 이용한다.
- @scipy.stats@ 패키지의 @f_oneway@ 함수를 이용한다.
- 정규성 가정을 불만족할 경우, Kruskal-Wallis 검정을 이용한다.
- @scipy.stats@ 패키지의 @kruskal@ 함수를 이용한다.
- @kruskal(data1, data2, data3)@
- @scipy.stats@ 패키지의 @kruskal@ 함수를 이용한다.
- 정규성 가정을 만족할 경우, ANOVA 분산 분석을 이용한다.
- @scipy.stats@ 패키지의 @shapiro@ 함수를 이용한다.
- 정규성 가정을 확인하기 위해서는 주로 샤피로-윌크 검정을 이용한다.
- 각 표본의 분산이 동일하다고 가정한다. (등분산성 가정 만족)
- 등분산성 가정을 확인하기 위해서는 Levene 검정을 이용한다.
- @scipy.stats@ 패키지의 @levene@ 함수를 이용한다.
- 등분산성 가정을 만족할 경우, ANOVA 분산 분석을 이용한다.
- @f_oneway(data1, data2, data3)@
- 등분산성 가정을 불만족할 경우, Kruskal-Wallis 검정을 이용한다.
- @scipy.stats@ 패키지의 @kruskal@ 함수를 이용한다.
- @kruskal(data1, data2, data3)@
- @scipy.stats@ 패키지의 @kruskal@ 함수를 이용한다.
- 등분산성 가정을 만족할 경우, ANOVA 분산 분석을 이용한다.
- @scipy.stats@ 패키지의 @levene@ 함수를 이용한다.
- 등분산성 가정을 확인하기 위해서는 Levene 검정을 이용한다.
- 가설 검정과 관련된 함수는 @scipy.stats@ 패키지의 함수들을 이용한다.
from scipy.stats import shapiro, levene, f_oneway, kruskal
연습 문제
문제 1
- 세 가지 다이어트 프로그램이 사람들의 체중 변화에 미치는 영향을 비교하려고 한다. 각 프로그램 참가자들의 체중 변화는 다음과 같다.
- 유의수준 0.05일 때, 세 프로그램의 평균 체중 변화가 같은지 아닌지 검정하라.
첫 번째 프로그램 참가자들의 체중 변화 (kg): [1.2, 1.5, 1.0, 1.1, 1.3, 1.4, 1.2, 1.0, 1.3, 1.1]
두 번째 프로그램 참가자들의 체중 변화 (kg): [0.8, 1.0, 1.2, 0.7, 1.1, 0.9, 0.8, 1.0, 0.9, 1.0]
세 번째 프로그램 참가자들의 체중 변화 (kg): [1.0, 1.3, 1.2, 1.1, 1.4, 1.2, 1.1, 1.3, 1.0, 1.2]
더보기
귀무 가설($H_0$): 세 프로그램의 평균 체중 변화는 같다. 대립 가설($H_1$): 세 프로그램의 평균 체중 변화는 다르다. |
from scipy.stats import f_oneway, shapiro, mannwhitneyu, levene
program_1_data = [1.2, 1.5, 1.0, 1.1, 1.3, 1.4, 1.2, 1.0, 1.3, 1.1]
program_2_data = [0.8, 1.0, 1.2, 0.7, 1.1, 0.9, 0.8, 1.0, 0.9, 1.0]
program_3_data = [1.0, 1.3, 1.2, 1.1, 1.4, 1.2, 1.1, 1.3, 1.0, 1.2]
# [1] 정규성 검정
stat_program_1, pvalue_program_1 = shapiro(program_1_data)
stat_program_2, pvalue_program_2 = shapiro(program_2_data)
stat_program_3, pvalue_program_3 = shapiro(program_3_data)
alpha = 0.05 # 유의수준
if pvalue_program_1 > alpha and pvalue_program_2 > alpha and pvalue_program_3 > alpha:
print("정규성 만족")
# [2] 등분산성 검정 (Levene 검정)
stat, pvalue = levene(program_1_data, program_2_data, program_3_data)
if pvalue > alpha:
print("등분산성 만족")
# [3] ANOVA 분산 분석
stats, pvalue = f_oneway(program_1_data, program_2_data, program_3_data)
if pvalue > alpha:
print("귀무 가설 채택")
else:
print("귀무 가설 기각")
else:
print("등분산성 불만족")
# [4] Kruskal-Wallis 검정
stats, pvalue = kruskal(program_1_data, program_2_data, program_3_data)
if pvalue > alpha:
print("귀무 가설 채택")
else:
print("귀무 가설 기각")
else:
print("정규성 불만족")
# [5] Kruskal-Wallis 검정
stats, pvalue = kruskal(program_1_data, program_2_data, program_3_data)
if pvalue > alpha:
print("귀무 가설 채택")
else:
print("귀무 가설 기각")
문제 2
- 세 가지 품종의 아이리스 꽃에서 꽃받침의 너비(sepal width)가 품종에 따라 차이가 있는지 분석하려고 한다. 각 품종별 꽃받침 너비는 다음과 같다.
- 유의수준 0.05일 때, 세 품종의 꽃받침 너비의 평균이 같은지 아닌지 검정하라.
- 해당 데이터는 정규성과 등분산성을 만족한다고 가정한다.
첫 번째 품종 (setosa)의 꽃받침 너비: [3.5, 3.6, 3.9, 3.4, 3.4, 3.3, 3.6, 3.7, 3.2, 3.1]
두 번째 품종 (versicolor)의 꽃받침 너비: [2.8, 2.9, 3.0, 2.8, 3.2, 2.9, 3.1, 2.7, 2.8, 2.9]
세 번째 품종 (virginica)의 꽃받침 너비: [3.0, 3.2, 3.3, 3.1, 3.0, 3.4, 3.3, 3.2, 3.1, 3.2]
더보기
귀무 가설($H_0$): 세 품종의 평균 꽃받침 너비는 같다. 대립 가설($H_1$): 세 품종의 평균 꽃받침 너비는 다르다. |
import pandas as pd
from scipy.stats import f_oneway
df = pd.read_csv('/datasets/iris.csv')
# 그룹 설정
group1 = df.loc[df['species'] == 'setosa', 'sepal_width']
group2 = df.loc[df['species'] == 'versicolor', 'sepal_width']
group3 = df.loc[df['species'] == 'virginica', 'sepal_width']
# 일원 분산 분석 수행
statistics, pvalue = f_oneway(group1, group2, group3)
alpha = 0.05 # 유의수준
if pvalue >= alpha:
print("귀무가설 채택")
else:
print("대립가설 채택")
카이제곱 적합도 검정 (Chi-Square Goodness of Fit Test)
개념
- 관찰된 빈도가 예상되는 빈도와 유의미하게 차이가 나는지를 검정하는 통계적 방법
☑️ 귀무 가설($H_0$): 관찰된 빈도와 예상된 빈도는 차이가 없다.
☑️ 대립 가설($H_1$): 관찰된 빈도와 예상된 빈도는 차이가 있다.
- 카이제곱 적합도 검정은 다음과 같은 조건을 만족한다고 가정한다.
- 각 범주의 예상 빈도가 5 이상이다. (빈도수 조건 만족)
- 즉, 각 데이터는 독립적이어야 한다. (독립성 조건 만족)
- 카이제곱 적합도 검정을 위해서는 카이제곱 통계량을 계산하고, 이를 이용하여 p-value를 구한 뒤 귀무 가설을 채택할지 기각할지를 판단합니다.
- 가설 검정과 관련된 함수는 @scipy.stats@ 패키지의 함수들을 이용한다.
from scipy.stats import chisquare
연습 문제
문제
- 어떤 마트에서 상품 3종류(A, B, C)에 대한 구매 비율이 각각 50%, 30%, 20%라고 예상된다. 실제로 마트에서 상품 3종류의 구매 횟수를 조사한 결과, 각 상품에 대한 구매 횟수는 다음과 같다.
- 유의수준 0.05일 때, 구매 비율이 예상과 다른지 검정하라.
상품 A 구매 횟수: 55
상품 B 구매 횟수: 35
상품 C 구매 횟수: 10
더보기
귀무 가설($H_0$) : 상품 3종류(A, B, C)의 구매 비율은 예상한 비율(50%, 30%, 20%)과 동일하다. 대립 가설($H_1$) : 상품 3종류(A, B, C)의 구매 비율은 예상한 비율(50%, 30%, 20%)과 다르다. |
from scipy.stats import chisquare
observed = [55, 35, 10]
expected_ratio = [0.5, 0.3, 0.2]
total_count = sum(observed)
expected = [int(ratio * total_count) for ratio in expected_ratio]
# 카이제곱 적합도 검정
stat, pvalue = chisquare(observed, f_exp=expected)
alpha = 0.05 # 유의수준
if pvalue > alpha:
print("귀무 가설 채택")
else:
print("귀무 가설 기각")
카이제곱 독립성 검정 (Chi-Square Test of Independence)
개념
- 두 범주형 변수 간의 독립성을 검정하는 통계적 방법
☑️ 귀무 가설($H_0$): 두 변수는 독립적이다.
☑️ 대립 가설($H_1$): 두 변수는 독립적이지 않다.
- 카이제곱 독립성 검정은 주로 교차표(Contingency Table)를 이용하여 수행한다.
- 판다스(Pandas)를 이용하여 교차표를 쉽게 만들 수 있다.
- @pd.crosstab(df['변수1'], df['변수2'])@
- @DataFrame.set_index('컬럼명')@를 이용하여 교차표 형태로 만들 수 있다.
- 판다스(Pandas)를 이용하여 교차표를 쉽게 만들 수 있다.
- 카이제곱 통계량은 기대 빈도와 관찰 빈도의 차이를 기반으로 계산된다.
- 카이제곱 독립성 검정을 수행하기 위해서는 아래의 조건을 만족해야 한다.
- 각 셀의 기대 빈도가 5 이상이어야 한다.
- 표본이 충분히 커야 한다.
- 가설 검정과 관련된 함수는 @scipy.stats@ 패키지의 함수들을 이용한다.
from scipy.stats import chi2_contingency
연습 문제
문제
- 한 회사의 직급(A, B, C)과 부서(영업, 마케팅)에 대한 직원 수는 다음과 같다.
- 직급과 부서가 독립적인지 검정하라.
직급 | 영업 | 마케팅 |
A | 30 | 20 |
B | 40 | 30 |
C | 10 | 10 |
더보기
귀무 가설($H_0$): 직급과 부서는 독립적이다. 대립 가설($H_1$): 직급과 부서는 독립적이지 않다. |
import pandas as pd
from scipy.stats import chi2_contingency
df = pd.DataFrame({
'직급': ['A', 'A', 'B', 'B', 'C', 'C'],
'부서': ['영업', '마케팅', '영업', '마케팅', '영업', '마케팅'],
'직원수': [30, 20, 40, 30, 10, 10]
})
# 교차표 만들기
table = pd.crosstab(
df['직급'],
df['부서'],
aggfunc='sum'
values=df['직원수']
)
print(table)
"""
부서 마케팅 영업
직급
A 20 30
B 30 40
C 10 10
"""
# 카이제곱 독립성 검정
stat, pvalue, dof, expected = chi2_contingency(table)
alpha = 0.05 # 유의수준
if p_value > alpha:
print("\n귀무 가설 채택")
else:
print("\n귀무 가설 기각")
⇒ 문제에서 주어진 표를 교차표 형태로 직접 만들면 아래와 같다. 문제에서 주어진 표를 만든 후 변수에 넣고, 해당 변수를 @chi2_contingency()@ 함수의 인자로 넘겨준다.
data = {
'과목': ['수학', '수학', '영어', '영어', '과학', '과학'],
'성별': ['남학생', '여학생', '남학생', '여학생', '남학생', '여학생'],
'인원수': [30, 35, 40, 30, 20, 35]
}
df = pd.DataFrame(data)
print(df)
"""
과목 성별 인원수
0 수학 남학생 30
1 수학 여학생 35
2 영어 남학생 40
3 영어 여학생 30
4 과학 남학생 20
5 과학 여학생 35
"""
table = pd.crosstab(
df['과목'],
df['성별'],
aggfunc='sum',
values=df['인원수']
)
print(table)
"""
성별 남학생 여학생
과목
과학 20 35
수학 30 35
영어 40 30
"""
카이제곱 동질성 검정 (Chi-Square Test of Homogeneity)
개념
- 여러 집단에서 동일한 분포를 가지고 있는지 확인하는 검정 방법
- 주로 2개 이상의 집단에 대해 각 집단의 분포가 동일한지 검정하는데 사용된다.
☑️ 귀무 가설($H_0$): 모든 집단은 동일한 분포를 가진다.
☑️ 대립 가설($H_1$): 모든 집단은 동일한 분포를 가지지 않는다.
- 카이제곱 동질성 검정은 교차표(Contingency Table)를 이용하여 검정한다.
- 판다스(Pandas)를 이용하여 교차표를 쉽게 만들 수 있다.
- @pd.crosstab(df['변수1'], df['변수2'])@
- @DataFrame.set_index('컬럼명')@를 이용하여 교차표 형태로 만들 수 있다.
- 판다스(Pandas)를 이용하여 교차표를 쉽게 만들 수 있다.
- 검정 통계량은 각 집단의 기대 빈도와 관찰 빈도의 차이를 기반으로 계산된다.
- 카이제곱 동질성 검정을 수행하기 위해서는 아래의 조건을 만족해야 한다.
- 각 셀의 기대 빈도가 5 이상이어야 한다.
- 각 집단이 충분히 크고 독립적이어야 한다.
- 가설 검정과 관련된 함수는 @scipy.stats@ 패키지의 함수들을 이용한다.
from scipy.stats import chi2_contingency
연습 문제
문제
- 유의 수준이 0.05일 때, 남학생과 여학생의 각 과목에 대한 데이터는 다음과 같다.
- 남학생과 여학생 두 그룹을 대상으로 선호하는 과목이 동일한지 여부를 검정하라.
과목 \ 성별 | 남학생 | 여학생 |
수학 | 30 | 35 |
영어 | 40 | 30 |
과학 | 20 | 35 |
더보기
귀무 가설($H_0$): 남학생과 여학생의 선호 과목 분포는 서로 차이가 없다. 대립 가설($H_1$): 남학생과 여학생의 선호 과목 분포는 서로 차이가 있다. |
import pandas as pd
from scipy.stats import chi2_contingency
data = {
'과목': ['수학', '영어', '과학'],
'남학생': [30, 40, 20],
'여학생': [35, 30, 35]
}
df = pd.DataFrame(data)
print(df)
""" 출력 결과
과목 남학생 여학생
0 수학 30 35
1 영어 40 30
2 과학 20 35
"""
table = df.set_index('과목') # <과목> 컬럼을 인덱스로 설정
print(table)
""" 출력 결과
남학생 여학생
과목
수학 30 35
영어 40 30
과학 20 35
"""
stat, pvalue, dof, expected = chi2_contingency(table)
alpha = 0.05 # 유의수준
if pvalue > alpha:
print("귀무 가설 채택")
else:
print("귀무 가설 기각")
⇒ @DataFrame.set_index('컬럼명')@을 이용하여 교차표 형태로 만들었다.
728x90
728x90
'Certificate > 빅데이터분석기사' 카테고리의 다른 글
[빅데이터분석기사 실기] 피어슨 상관 계수 구하기 (2) | 2024.11.30 |
---|---|
[빅데이터분석기사 실기] 시험장에서 알아두면 좋은 팁 (0) | 2024.11.29 |
[빅데이터분석기사 실기] 제2유형 시험 준비 (0) | 2024.11.26 |
[빅데이터분석기사 실기] 제1유형 시험 준비 (0) | 2024.11.25 |
[빅데이터분석기사 실기] help(), dir() 활용하기 (0) | 2024.11.25 |
[빅데이터분석기사 실기] corr() 함수와 numeric_only 옵션 (0) | 2024.11.25 |
[빅데이터분석기사 실기] 시험장 들어가기 전에 보기 빠르게 보기 좋은 강의 모음 (1) | 2024.11.17 |
[빅데이터분석기사 실기] 제6회 기출 변형 문제 (제3유형) (0) | 2024.11.16 |