1. 들어가며
오늘 회사에서 실제로 있었던 일이었습니다. 회사의 한 분이 저에게 오더니, 샘플 수가 엄청 적을 때 어떻게 가설검정을 할 수 있는지? 물어보는 질문이었습니다. 저희 회사에서는 데이터를 주로 보는 분들이 거의 없다 보니, 주변 팀원분들로부터 이러한 질문을 종종 받게 됩니다. 이 질문에 대해 "당연하게도 샘플수가 적으면 보통은 비모수검정을 사용하는 것이 좋습니다. 그리고 가능하다면, 각 샘플들의 정규성 검정을 해보고 정규성을 갖는다면 모수검정을 해보는 것도 방법일 수는 있겠으나, 그것 또한 정규성을 가지는 지에 대해 신뢰하지 못하는 결과를 얻을 수 있습니다."라고 답변을 드렸습니다. 그리고 집으로 돌아오는 길에 이 내용에 대해서 왜 p-value만 보면 안 되는지에 대해 간략하게 알아보려고 합니다.
2. 가설검정에 대한 간략한 소개
기본적으로 가설검정에 대해서 간략하게 소개하면, 데이터를 기반으로 내가 세운 가설이 맞는지 틀린지를 통계적으로 판단하는 과정을 이야기합니다. 귀무가설, 대립가설을 세우고, 유의 수준(기각을 할지, 말지에 대한 기준), 다양한 통계방법을 통해 검정 통계량을 계산하여 p-value를 유의 수준과 비교하여 어떤 가설을 채택할지를 진행하게 됩니다.
여기서 유의수준은 보통 0.05로 설정하는 데, 이것의 의미는 5% 확률로 오판할 수 있다는 것을 의미합니다. 또한 이때, 해당 유의 수준과 비교하는 값으로 의사결정에 가장 중요한 요소인 p-value를 사용하게 되는데, p-value는 귀무가설이 참일 때, 현재 데이터보다 극단적인 결과가 나올 확률을 의미합니다. p-value가 작다고 해서 실제로 효과가 크다는 뜻은 아니기 때문에 effect size도 같이 고려가 필요합니다.
3. p-value를 신뢰하기 위해서 살펴봐야 되는 것들
effect size
위에서 말하는 effect size에 대해서 설명해보면, "두 개의 그룹 간 차이가 얼마나 큰지"를 나타내는 통계적 개념입니다. 단순히 유의미한지에 대한 차이만 보기보다는 그 차이가 실제로 얼마나 중요한지를 평가하는 데 사용하게 됩니다. 대표적으로는 Cohen's d(평균 차이를 표준편차로 나눈 값), Hedges' g(표본 크기가 작은 경우), Pearson's r(두 변수 간의 관계 크기), Eta-squared(ANOVA에서 그룹 간 차이의 크기를 측정) 하는 것을 예시로 들 수 있습니다.
Cohen's d
Cohen's d는 위에서 설명했듯이 두 그룹 간 평균 차이를 표준편차로 정규화한 값입니다. 주로, 독립표본 t-검정이나 대응표본 t-검정에서 사용합니다.
$$ d = \frac{M_{1} - M_{2}}{std_{pooled}} $$
위의 수식에서 $M_{1}$과 $M_{2}$는 각 그룹의 평균을 뜻하고 $std_{pooled}$는 공통 표준편차를 뜻하는 데, 여기서 $std_{pooled}$에 대해서 처음 들어보시는 분이 계실 것 같습니다. 공통 표준편차는 두 그룹의 표준편차와 표본의 크기를 활용해서 아래와 같이 계산하게 되는데, 이렇게 구하는 이유는 각 그룹 간 표본의 크기가 다를 수 있기 때문입니다. 만약, 두 그룹이 표본의 크기가 다르면, 단순 평균 냈을 때, 작은 그룹의 표준편차가 과대평가가 될 수 있습니다.
$$std_{pooled} = \sqrt{\frac{(n_{1} - 1)std_{1}^{2} + (n_{2} - 1) std_{2}^2}{(n_{1} + n_{2} - 2)}} $$
그러면 이렇게 $d$의 값을 구하면 어떻게 해석할 수 있을까요? 보통 0.2보다 작으면 아주 작은 효과, 0.2 ~ 0.5는 작은 효과, 0.5 ~ 0.8은 중간 효과, 0.8보다 크면 큰 효과라고 해석할 수 있습니다.
신뢰도(검정력)
보통 가설검정에서의 신뢰도는 검정력을 뜻하는데, 귀무가설이 거짓일 때, 올바르게 기각할 확률을 뜻합니다. 보통 통계에서 말하는 제 2종 오류를 활용하여 표현하면 $1-\beta$로 표현할 수 있습니다. 이 검정력은 표본의 크기, 위에서 언급한 effect size, 유의 수준이 클수록 검정력이 증가하게 됩니다. p-value의 값이 유의미하더라도 검정력이 낮으면 결과를 신뢰하기는 어렵습니다. 그렇기 때문에 단순히 p-value가 낮다고 차이가 있다고 결론 내리기보다는 검정력을 구해서 유의미한지를 봐야 합니다. 보통, 검정력은 0.8 이상이면 신뢰할만하다고 판단할 수 있습니다. 0.5보다 작으면 데이터가 부족해서 유의미한 차이를 발견하기 어려울 가능성이 높습니다.
예시로 표본의 크기 30개이고, effect size가 0.5, 유의수준이 0.05라고 가정했을 때 검정력은 아래와 같이 표현할 수 있습니다.
$$ Power = P(Z > Z_{\alpha} - \delta) $$
$$ \delta = d(effect size) * \sqrt{n} = 0.5 \times \sqrt{30} = 2.74 $$
위의 수식을 기반으로 단측 검정 시에 Z-score 를 구해보면 아래와 같은 값을 얻게 됩니다.$$ Z = Z_{0.05} - \delta = 1.645 - 2.74 = -1.095 $$
이때의 검정력은 구해보면 아래와 같은 값을 얻을 수 있습니다.
$$ Power = P( Z > -1.095) $$위의 값을 실제로 구해보면 아래와 같이 0.863의 검정력을 얻게 됩니다.
파이썬으로도 쉽게 구할 수 있는데, 아래의 코드를 포함해 놓겠습니다. 파이썬에서도 위의 값과 동일하게 검정력을 0.8630으로 얻을 수 있습니다.
from scipy.stats import norm
import numpy as np
n = 30 # 표본 크기
d = 0.5 # 효과 크기
alpha = 0.05 # 유의수준 (단측 검정)
delta = d * np.sqrt(n) # 표본 크기에 따른 효과 크기 조정
z_alpha = norm.ppf(1 - alpha) # 단측 검정의 Z값 (alpha)
power = 1 - norm.cdf(z_alpha - delta) # 검정력 계산
print(f"검정력 (Power) = {power:.4f}")
4. 그러면 결국 어떻게 해야하는가?
가설검정을 진행할 때, 표본 수에 대한 고려가 먼저 이뤄져야 되겠지만, 한번 하는데 엄청 고비용이 든다고 하면, 무작정 데이터 수집을 진행할 수는 없을 것입니다. 그런 경우에는 비모수검정을 진행하거나, Q-Q plot 등을 활용해서 정규성 가정을 만족하는 지를 확인 후 모수검정을 진행해야 합니다. 이때, 가설검정으로 얻은 p-value는 작다고 해서 실제로 효과가 큰 것은 아니므로, effect size와 검정력을 고려해야 합니다. p-value가 유의미하지만, 검정력이 높다면 실제 그룹 간 차이가 있을 가능성이 높습니다. 하지만, p-value가 크고, 검정력이 낮으면, 데이터를 더 수집하는 작업이 필요합니다.