들어가기 전에
최근 ADP 실기 시험을 준비하면서 통계분석과 기계학습에 대해서 차근차근 다시 공부해보고 있는 와중에 처음 들어보는 검정 방법을 알게 되면서 이 글을 작성하게 되었습니다. 아무래도 우리에게 친숙한 T검정이나 ANOVA 등 모수검정에 활용되는 방법들은 많이 알고 있지만, 맥니마 검정, 코크란 Q검정 등에 대해 작성해보고자 합니다. 실제 회사의 데이터들을 활용해서 가설검정을 하다보면, 표본은 작고, 모수검정을 활용하기엔 정규성 만족을 안하던가, 등분산성 만족을 하지 못해 비모수검정을 해야할 때가 종종 발생하는데, 이 기회에 새로운 검정방법에 대해서 공부하고, 이를 잘 써먹어보고자 글을 작성합니다.
이 글에서는 모수 검정과 비모수 검정의 정의, 한 가지 예시를 들어 동일한 데이터에 대해 모수와 비모수 검정 적용 과정에 대해 설명합니다.
모수 vs 비모수
우선, 가설 검정을 진행하다보면 모수검정과 비모수검정으로 많이 나뉘게 됩니다. 모수 검정은 모집단의 분포에 대한 가정을 하고 표본을 활용하여 가설 검정하는 것을 말합니다. 비모수 검정은 앞에서 말한 모수 검정과는 다르게 모집단의 분포에 대해 가정하지 않고 검정하는 것을 말합니다. 보통, 비모수 검정은 주어진 자료가 정규분포가 아니거나, 표본의 크기가 작거나 데이터가 서열척도나 명목척도인 경우에 사용합니다.
만약에 동일한 데이터에 대해서 모수검정과 비모수검정을 활용해보면 어떻게 될지 한번 살펴보겠습니다. 예를 들어, 한 회사에서 직원의 업무 성과 향상을 위해 새로운 교육 프로그램을 도입한다고 해봅시다. A 그룹에는 새로운 교육 프로그램을 이수하도록 하고, B 그룹에는 기존의 교육 프로그램을 이수하도록 했습니다. 그 결과 A, B 그룹의 점수는 아래와 같다고 해봅시다.
모수 검정을 진행하기 전에는 가장 먼저 각 그룹이 정규성을 만족하는 지 확인이 필요합니다. 정규성 만족하는 지 확인하기 위해서 Shapiro, Anderson-Darling, 콜모고르프 스미르노프, Jarque-Bera, QQ plot 등을 활용할 수 있습니다. 위의 예시는 표본이 작으므로, Shapiro-Wilk 정규성 검정을 진행해보겠습니다.
from scipy import stats
# 데이터
group1 = [80, 82, 85, 87, 89, 89, 88, 90, 92, 95]
group2 = [72, 75, 78, 80, 82, 84, 86, 88, 90, 92]
# Shapiro-Wilk 정규성 검정
statistic1, p_value1 = stats.shapiro(group1)
statistic2, p_value2 = stats.shapiro(group2)
print("Shapiro-Wilk 정규성 검정 결과:")
print("Group1 - Statistic:", statistic1, "p-value:", p_value1)
print("Group2 - Statistic:", statistic2, "p-value:", p_value2)
# Shapiro-Wilk 정규성 검정 결과:
# Group 1 - Statistic: 0.9752228260040283 p-value: 0.9346035718917847
# Group 2 - Statistic: 0.9767458438873291 p-value: 0.9454076290130615
검정 결과 group1, group2 모두 p-value 0.05보다 높으므로, 정규성을 가진다고 볼 수 있습니다. 정규성을 만족했으면 등분산 검정이 필요합니다. 등분산 검정을 위해서는 Bartlett 검정, Levene 검정을 사용할 수 있는데, Bartlett은 표본의 크기가 비슷한 경우에 적합하고, Levene은 표본의 크기가 크게 다르거나 정규 분포를 따르지 않는 경우에 적합한 방법이라고 볼 수 있습니다. 위의 예시는 그룹 간 표본의 수가 동일하고 정규성을 만족하기에 bartlett 검정을 활용해볼 수 있습니다.
from scipy import stats
# 데이터
group1 = [80, 82, 85, 87, 89, 89, 88, 90, 92, 95]
group2 = [72, 75, 78, 80, 82, 84, 86, 88, 90, 92]
# bartlett의 등분산성 검정
statistic, p_value = stats.bartlett(group1, group2)
# bartlett의 등분산성 검정 결과:
# Statitistic: 1.194605466005553 p-value: 0.2744025437929206
등분산 검정 결과 p-value 0.05 보다 크므로, 등분산성을 만족한다고 볼 수 있으므로, 독립표본 T검정을 활용해볼 수 있습니다.
from scipy import stats
# 독립표본 t-검정을 위한 데이터
group1 = [80, 82, 85, 87, 89, 89, 88, 90, 92, 95]
group2 = [72, 75, 78, 80, 82, 84, 86, 88, 90, 92]
# 독립표본 t-검정 수행
t_statistic, p_value = stats.ttest_ind(group1, group2, equal_var=True)
# 결과 출력
print("t-statistic:", t_statistic)
print("p-value:", p_value)
# 유의수준 0.05에서의 검정
alpha = 0.05
if p_value < alpha:
print("두 그룹 간에는 통계적으로 유의미한 차이가 있습니다.")
else:
print("두 그룹 간에는 통계적으로 유의미한 차이가 없습니다.")
# t-statistic: 1.9969846109408635
# p-value: 0.061175022383100935
# 두 그룹 간에는 통계적으로 유의미한 차이가 없습니다.
위 결과를 바탕으로 우리가 0.05를 유의수준으로 잡았으므로, p-value 0.05보다 작으면, 새로운 프로그램 적용이 유의미한 차이가 있다고 볼 수 있습니다. 하지만, 위의 결과는 0.06으로 아주 미세하게 유의수준보다 높으므로, 새로운 프로그램 적용이 유의미한 차이가 없다고 결론을 내릴 수 있습니다.
만약, 위와 동일한 데이터로 비모수 검정을 진행하면 어떻게 될까요? 독립표본 T검정과 대응되는 검정방법에는 만위트니 U검정이 있습니다. 만 위트니 U 검정은 독립된 두 집단 간의 평균 차이를 확인하기 위한 비모수 검정입니다.
from scipy import stats
# 독립표본 t-검정을 위한 데이터
group1 = [80, 82, 85, 87, 89, 89, 88, 90, 92, 95]
group2 = [72, 75, 78, 80, 82, 84, 86, 88, 90, 92]
# mannwhitneyu 검정 수행
t_statistic, p_value = stats.mannwhitneyu(group1, group2)
# 결과 출력
print("t-statistic:", t_statistic)
print("p-value:", p_value)
# 유의수준 0.05에서의 검정
alpha = 0.05
if p_value < alpha:
print("두 그룹 간에는 통계적으로 유의미한 차이가 있습니다.")
else:
print("두 그룹 간에는 통계적으로 유의미한 차이가 없습니다.")
# t-statistic: 27.5
# p-value: 0.04777632953927463
# 두 그룹 간에는 통계적으로 유의미한 차이가 있습니다.
비모수 검정을 적용했을 때에는 오히려 p-value가 낮아져서 새로운 프로그램의 적용이 유의미한 결과를 낸다고 결론낼 수 있게 됩니다.
이처럼, 동일한 데이터에 대해 모수검정과 비모수검정은 서로 다른 결과를 만들어 낼 수 있습니다. 그러므로, 데이터에 대한 특징과 가정 등을 반드시 점검해야 올바른 통계검정을 진행할 수 있습니다. 아무거나 내 맘대로 썼다간 큰 코 다칠 수 있습니다. 다음 글에서는 비모수 검정 방법과 맥니마 검정, 코크란 Q 검정을 함께 대응표본T검정과 Paired 일원배치 분산분석과 비교하며 다뤄보겠습니다.
3줄 정리하기
- 모수 검정은 모집단의 분포에 대한 가정(정규성, 등분산성)이 필요, 비모수 검정은 모집단의 분포에 대한 가정없이 사용합니다.
- 비모수 검정은 자료가 정규분포가 아니거나 표본이 크거나 서열척도나 명목척도일 때 주로 사용합니다.
- 가설 검정은 검정방법에 따라 의견이 바뀔 수 있으므로 반드시 데이터에 대한 특징과 가정을 점검하고 올바른 통계 검정 방법을 사용해야 합니다.