Julie의 Tech 블로그

A/B Test in Data Science - (2) ANOVA 본문

Tech/ML, DL

A/B Test in Data Science - (2) ANOVA

Julie's tech 2022. 4. 4. 22:28
728x90

이번 글에서는 지난번 순열검정에 이어 여러 그룹간 차이의 유의미성을 따질 때 사용할 수 있는 모델인 ANOVA를 다룰 것이다.

ANOVA는 3개 이상의 집단일 때 적합한 테스트로 알려져있다.

 

ANOVA/분산분석은 ANalysis Of VAriance의 약자이다.

본격적으로 ANOVA에 대해 알아보기 전에 제약사항을 하나 짚고 넘어가자.

ANOVA는 독립적인 표본에 적용할 수 있는 기법이다. 즉 표본이 서로 의존적이라면 테스트에 적합하지 않다.

 

ANOVA는 다음과 같은 절차로 이루어진다 :

1. 데이터를 하나의 박스에 모두 넣는다.
2. 1에서 서로 무작위로 섞은 뒤 각각 본래 그룹사이즈대로 나눈다. (ex. 5그룹 2사이즈씩이었다면 2에서 동일하게 다시 배분)
3. 각 그룹의 통계량을 계산한다. (ex. 평균)
4. 각 그룹의 통계량간의 분산을 구한다. (ex. 평균의 분산)
5. 1-4번 과정을 반복한다.

지난 글에서 순열검정과 1, 2, 3번 과정이 유사하다. 차이점이라면 통계량의 분산을 구하는 것이다.

ANOVA(ANalysis Of VAriance)라는 이름에서도 유추할 수 있듯 이번엔 분산에 초점을 둔다고 기억하고 있자.

 

ANOVA는 앞서 말했듯 여러 집단간 유의미한 차이를 밝힐 때 사용된다.

예를 들어 A, B, C라는 학생이 각각 자신들만의 공부방법이 있다고 하자.

이들의 각 공부방법에 따른 성적의 유의미성을 찾으려할 때 ANOVA를 적용할 수 있다.

 

ANOVA는 F분포로 검정통계량을 계산한다.

F분포는 집단간분산(variance between groups) / 집단내분산(variance between groups) 로 분산비검정을 한다.

좌측은 ANOVA 결과 유의미한 차이가 없는 집단, 우측은 유의미한 차이가 있는 집단

R은 ANOVA 라이브러리를 이용하여 간단하게 집단간 차이에 대한 유의미성을 따져볼 수 있다.

> summary(aov(Y ~ x, data=data))
               Df  Sum Sq  Mean Sq  F value  Pr(>F)
x              3    831.4    277.1     2.74  0.0776
Residuals      16  1618.4    101.2
---
Signif. codes : ...
 

Python 도 마찬가지이다.

import statsmodels.api as sm

model = smf.ols('Y ~ x', data = data).fit()

aov_table = sm.stats.anoval_lm(model)
aov_table
 

 

 

반응형