정규성검정? 꼭 필요한 걸까?

거친코딩·2023년 1월 8일
0
post-thumbnail

오늘은 실제 현업 AB Test할 때, 통계검정방법 중 t-Test를 많이 쓰게 되는데,
이러한 t-Test를 정확하게 우리가 잘 쓰고 있는지?에 대해서
한번 얘기 해보려고 합니다.

우리가 맨처음 통계학에서 t-Test를 배울 때,
"독립표본 T 검정 사용의 조건"으로 아래의 조건들이 만족해야지만
Two-Sample t-Test를 진행할 수 있다고 배웠습니다.

  • 독립성
  • 등분산성
  • 정규성

독립성

  • A그룹과 B그룹으로 나눌 수 있는 Treatment 자체가, 서로 그룹간에 영향을 주지 않고 MECE(칼로 무를 반으로 딱!)하게 나눌 수 있게, 그룹 간 서로 독립적으로 만들어야 합니다.
  • MECE(=Mutually Exclusive Collectively Exhaustive)
    -> 서로 항목들이 상호 배타적이면서 모였을 때는 완전히 전체를 이루는 것을 의미

등분산성

  • A그룹과 B그룹의 분포의 분산이 동일해야 한다는 것을 의미하고,
    등분산성의 검정 방법으로 Python 라이브러리로 대표적으로 아래 3가지가 있습니다.
  • 바틀렛 검정(bartlett) : scipy.stats.bartlett
  • 플리그너 검정(fligner) : scipy.stats.fligner
  • 레빈 검정(levene) : scipy.stats.levene

보통 등분산성의 가설 검정으로 다음과 같이 세워볼 수 있다.
귀무가설(H0) : 두 그룹 A와 B의 분포의 분산은 같다.
대립가설(H1) : 두 그룹 A와 B의 분포의 분산은 같지 않다.

실제 현업에서는 이러한 등분산성을 검정하게 되면,
물론 귀무가설이 채택되는 경우도 있고, 오히려 대립가설이 채택되는 경우도 수두룩 한 것 같습니다.

하지만 2 Sample t-Test에서 이처럼 등분산성 조건을 만족하지 않는,
"이분산"일 경우에도 이분산t검정(=Welch's test)을 대체로 할 수 있습니다.

정규성

마지막으로 정규성 검정을 어떨까요?

사실 오늘 내용에서 가장 다루고 싶은 부분이 정규성에 대한 내용입니다.

우리가 정규성 검정을 한다고 하면 Python 라이브러리로도 여러가지가 있습니다.
scipy 라이브러리 (정규성 검정)

  • 콜모고로프-스미르노프 검정(Kolmogorov-Smirnov test) : scipy.stats.ks_2samp
  • 샤피로-윌크 검정(Shapiro–Wilk test) : scipy.stats.shapiro
  • 앤더스-달링 검정(Anderson–Darling test) : scipy.stats.anderson
  • 다고스티노 K-제곱 검정(D'Agostino's K-squared test) : scipy.stats.mstats.normaltest

StatsModels 라이브러리 (정규성 검정)

  • 콜모고로프-스미르노프 검정(Kolmogorov-Smirnov test) : statsmodels.stats.diagnostic.kstest_normal
  • 옴니버스 검정(Omnibus Normality test) : statsmodels.stats.stattools.omni_normtest
  • 자크-베라 검정(Jarque–Bera test) : statsmodels.stats.stattools.jarque_bera
  • 릴리포스 검정(Lilliefors test) : statsmodels.stats.diagnostic.lillifors

그런데 여러분 실제 비즈니스 데이터가 정규성을 따르는게 얼마나 될까요?

위 통계검정에서 정규성 검정하는 방식만 조금씩 다르지
하나의 공통점은 매우 보수적이고 엄격하게 정규성을 검정한다는 것입니다.

기본적으로 우리가 가지고 있는 매출데이터, 전환데이터, 클릭 스트림데이터같은 로그성 데이터에는 노이즈가 심하고,
편포 즉, 치우침이 심한 데이터들이 아주 많습니다.

이러한 엄격한 정규성 검정방식에서 살아남을 수 있는 실제 우리의 비즈니스 데이터는 얼마나 많이 있을까요?

그렇다고 t-test에서 말하는 정규성 검정을 안할 수도 없기때문에
우리는 이러한 딜레마에 빠질 수도 있게 됩니다.

그런데 다행히도
1995년에 발표한 skewness and kurtosis를 활용한 정규성 평가 - West 연구논문에 의하면
"skewness(=왜도)는 2, kurtosis(=첨도)는 7보다 작으면 정규분포에서 크게 벗어나지 않고 정규성을 보인다" 라고 말해도 된다고 합니다.

여기서 말하는 skewness(=왜도)는 "분포의 비대칭 정도"를 의미하는 통계량이며,
정규분포나, t 분포의 경우 skewness가 0입니다.

그리고 kurtosis(=첨도)는 "분포의 꼬리부분의 길이와 중앙부분의 뾰족함에 대한 정도"를 의미하는 통계량이며,
정규분포의 kurtosis는 0입니다.


그래서 오늘 내용을 간단하게 다시 정리해보겠습니다.

우리가 현업에서 AB Test처럼 두 집단을 서로 비교하는 t-test를 사용해야 한다면,
아래의 전제조건을 반드시 고려해야 합니다.

두 그룹을 정확히 반으로 나누면서, 서로간 영향을 안주게, 그룹이 독립적인지?,
두 그룹의 분포가 서로 동일한 분산의 형태를 가지게, 등분산성 인지?,
두 그룹의 정규성은 엄격한 통계적 방법을 사용하여 나눌 수 있지만,

skewness(=왜도), kurtosis(=첨도)를 사용하여
skewness(=왜도)는 2이고, kurtosis(=첨도)는 7보다 작으면 정규분포에서 크게 벗어나지 않게, 정규성인지?

이 내용을 보는 혹자는 "이렇게 쉽게 정규성 판별해도 돼?"라고 생각할 수 있지만,
비즈니스에서 중요한 것은 복잡한 데이터분석 방식보다는,
목표를 빠르게 달성할 수 있도록 "쉽고 빠른 대체재"를 찾는 것이
오히려 더 나은 선택일 수 있다라고 말해볼 수 있겠습니다.

다음 내용에서도 더욱 유익한 내용으로 찾아오도록 하겠습니다.
감사합니다.

profile
데이터 분석 유튜버 "거친코딩"입니다.

0개의 댓글