Julie의 Tech 블로그

A/B Test in Data Science - (1) 가설검정, 순열검정에 대해 본문

Tech/ML, DL

A/B Test in Data Science - (1) 가설검정, 순열검정에 대해

Julie's tech 2022. 4. 3. 17:28
728x90

이번 글 시리즈는 데이터과학에서 A/B테스트를 설계하고 풀어나가는 방법에 대해 다뤄볼 것이다.

데이터 분석가는 여러 가지 이유로 실험을 하게된다.

통상적으로 어떤 가정을 세우고 그 가정을 증명하기 위해서 실험을 설계한뒤 데이터를 수집하여 그 가정을 검정한다.

* 가설은 검정(test)하는 것이 맞다. 검증은 verify, 즉 증명한다는 의미로 사용되어 사실인지 아닌지 모르는 가설을 검증하는 것은 맞지 않다.

그 중에서도 두 가지 대안, 과정, 혹은 상품 중 어떤 것이 더 우세한가를 밝히는 실험을 A/B 테스트라고 한다.

두 대안 중에서 가장 흔한, 보편적인 기준을 '대조군(control)'이라고 한다.

우리는 보통 웹 디자인, UI를 수정할 때 A/B테스트를 자주 한다.

예를 들어 AI기반 추천 웹페이지를 제작했을 때, 그 페이지를 노출할 것인가 아닌가도 A/B테스트 소재로 이용할 수 있다.

실제로 우리가 사용하는 큰 규모의 웹사이트들은 하루에도 수십개의 A/B테스트를 통해 UI를 최적화해나간다.

A/B테스트를 할 때에는 여러 가지 고민을 해야한다.

가장 중요하게는 A안보다 B안이 낫다는 것을 검정해줄 '지표(metric)'를 선정하는 것이다.

둘째는 두 안을 놓고 비교하기 위한 '대조군'을 적절히 선정하는 것이다.

이 때 대조군은 실험군과 비교하였을 때 실험하고자 하는 가설 외에는 모든 특징이 동일해야한다.

즉 변인 통제가 된 대조군으로 설정되어야한다.

실제로 현업에서도 A/B 테스트 설계시 위 두 가지 중 하나라도 잘못될 경우 실험이 부질없어지는 경우가 허다하다.

예를 들어 지표를 적절하게 선정하지 않을 경우 실험 결과가 나오더라도 해석을 제대로 못하는 경우가 있다.

해당 지표에 변인이 제대로 통제되지 않았을 경우 좋은 지표성과가 나오더라도 신뢰할 수 없게 되는 일도 있다.

가설 (Hypothesis)

우리는 두 가지 가설을 세워야한다.

첫째는 귀무가설(Null Hypothesis)로 흔히 일반적인 사실을 가설로 세운다. 둘째는 대립가설(Alternative Hypothesis)이다.

쉽게 생각하면 대립가설이 우리가 증명하고자 하는, 사실이길 바라는 가설이고 그 반대가 귀무가설이다.

일례로 A와 B간의 차이가 없는 것이 일반적인 관례라면 이 둘 간의 차이가 있다고 증명하는 것이 대립가설이 되는 것이다.

한 가지 유의할 점은 귀무가설과 대립가설은 두 가설을 합하면 모든 경우의 수를 설명할 수 있어야한다.

가설은 두 명제간 = 관계 혹은 >=, <=와 같은 관계도 가능하다.

= 관계일 때 우리는 양측검정이라고 부르고, <=, >=와 같은 크기비교 관계에서는 단측검정이라고 부른다.

실험을 통해 우리는 대립가설이 귀무가설에 비해 사전에 정의한 지표가 분명하게 개선되거나 나은 점이 있어야만 대립가설을 채택하게될 것이다.

Resampling - Permutation Test

통계학에서 Resampling이란 관측된 데이터에서 표본을 반복적으로 추출하는 것을 의미한다.

Resampling은 통계량의 random variablility, 즉 임의의 편차를 측정하기 위한 용도로 주로 사용된다.

말이 조금 복잡한데 풀어쓰자면, 관측된 데이터를 여러 번 샘플링하여 얼마만큼의 차이가 있는지를 측정할 때 사용된다.

Resampling의 기법은 크게 두 가지로 나뉜다. 다른 글에서 다루었던 'Bootstrap'과 'Permutation' 이다.

Bootstrap은 복원추출을 허용하고, Permutation은 비복원추출로 진행된다. 즉 Permutation이라는 단어가 의미하듯 순서가 있는 것이다.

Bootstrap은 복원추출성 때문에 측정치의 신뢰성을 테스트하기 위해서 사용된다.

반면 Permutation은 2개 이상의 그룹간의 가설을 검정할 때 사용된다.

좀 더 살펴보자.

Permutation Test, 순열검정법은 아래와 같은 과정으로 진행된다 :

1. 서로 다른 그룹에서부터 도출된 결과를 하나의 데이터셋으로 합친다.
2. 1번의 데이터를 셔플하여 비복원으로 A그룹의 사이즈만큼 표본 추출을 한다.
3. 남은 데이터에서 동일하게 B그룹의 사이즈만큼 표본을 추출한다.
4. A/B테스트가 아니라 다른 여러 그룹들이 더 있다면 동일하게 진행한다.
5. 본래 표본에서 산출했던 통계량을 재추출된 표본들로 동일하게 집계한다. 이 과정까지가 하나의 사이클이다.
6. 1~5번의 과정을 R번 반복하여 5에서 산출된 통계량의 분포를 만든다.

이 과정을 진행하는 이유를 쉽게 풀어 설명해보면, 우리가 A/B/C/D간의 그룹이 동일하다고 귀무가설을 세웠다고 하자.

그럼 A/B/C/D는 모두 동일한 모집단에서 추출된 표본일 것이라고 추론하는 것이다.

그렇다면 직관적으로 A/B/C/D간의 데이터를 서로 간 교환한다고 해서 통계량이 크게 달라지진 않을 것이다.

1~6까지 진행한 것 처럼, A/B/C/D를 모두 하나로 합쳐서 다시 사이즈만큼 나눈 뒤 평균을 매번 다시 계산한다고 했을 때,

다시 계산한 평균들의 통계값이 최초에 계산한 그룹들의 평균과 크게 다르지 않아야할 것이다.

예를 들어 설명해보자면, A = {58, 69, 64, 55}, B = {51, 41, 51, 71, 42} 라는 두 그룹을 가지고 있다.

두 그룹의 평균은 각각 61.5, 51.2 로 확인된다. 두 그룹 간의 평균차는 10.3인데, 이 10.3이 과연 큰 차이인지 아닌지를 알고 싶다.

우리는 순열검정법을 이용하여 A와 B그룹의 원소를 모두 섞은 후 각각 4개 5개씩 나누어본다.

첫번째 순열에서는 A = {64, 51, 41, 51}, B = {58, 69, 55, 71, 42}로 선택되었다. 두 그룹은 각각 51.75, 59로 차이는 -7.25만큼 난다.

2회차때도 마찬가지로 무작위로 섞은 뒤 4개 5개씩 나누어 평균을 계산한다.

이렇게 여러 차례 걸쳐 계산한 평균들을 X, Y축에 놓고 분포를 그린 후, 우리가 맨 처음 관측했던 차이를 기록한다.

앞서 두 그룹간의 평균 차가 얼마나 큰 차이인지 알고 싶었기 때문에 셔플링 결과로 나온 평균차가 더 큰 개수를 세어본다.

8회차 셔플링 결과가 [1, 3, 4, 5, 7, 8, 10, 18] 이라고 했을 때, 10.3보다 큰 값은 1개 밖에 없으므로 1/8을 p-value로 볼 수 있는 것이다.

* p-value란 귀무가설이 사실임을 보여주는 모델이 비정상적이고 아웃라이어 결과, 즉 대립가설이 맞다고 증명할 수 있는 결과를 보여줄 확률

정리하자면 순열검정은 주로 가설을 검정할 때 사용된다. 순열검정은 2개 이상의 그룹간의 차이를 볼 때 사용되기 때문이다.

반면 부트스트랩은 단일 데이터셋에서 복원추출을 허용하여 그룹을 별도로 나누지 않고 측정치를 계산한다.

이 측정치들의 분포는 원본 데이터셋의 측정치의 오차를 표현하게 된다. 즉 부트스트랩은 측정치의 신뢰구간을 계산할 때 사용된다.

반응형