본문 바로가기
IT/AB 테스트

[A/B 테스트] 5부 실험 분석을 위한 고급 주제_ch.19 A/A 테스트

by vulter3653 2023. 9. 5.

<A/B 테스트> 의 '5부 실험 분석을 위한 고급 주제_ch.19 A/A 테스트'의 내용을 요약 및 정리한 내용입니다.

 

https://product.kyobobook.co.kr/detail/S000060625360

 

A/B 테스트 | 론 코하비 - 교보문고

A/B 테스트 | 신뢰도 높은 실험을 설계하는 가이드를 제공한다. 특히 각각 과정이 더욱 정확하게 측정가능한 온라인을 대상으로 한다. 구글, 링크드인과 마이크로소프트의 빅테크 기업에서 전 세

product.kyobobook.co.kr


0. 주목해야 하는 이유

A/A 테스트는 실패했을 경우, 가정을 재평가하고 오류를 식별할 수 있게 해줍니다.

그렇기에 A/A 테스트 실행은 매우 유용하며, 실험 플랫폼에 대한 신뢰를 구축하는 데 중요한 부분에 해당합니다.

 

이러한 A/A 테스트의 개념은 간단합니다.

일반 A/B 테스트에서 같이 사용자를 두 그룹으로 나누지만 B를 A와 동일하게 만드는 것 외에는 차이점이 없습니다.

 

이때 시스템이 올바르게 작동하는 경우, 반복 시행에서 약 5%의 경우에 주어진 지표는 0.05 미만의 p값을 지니며 통계적으로 유의해야 하며, p값을 계산하기 위해 t-검정을 수행할 때 반복 시행에서 얻은 p값 분포는 균등분포에 가까워야 합니다.

 

1. A/A 테스트가 필요한 이유

종합 대조 실험의 이론은 잘 알려져 있지만 실제로 구현할 때에는 여러가지 문제가 발생합니다.

 

이때 Null 테스트라고도 하는 A/A 테스트는 실험 플랫폼에 대한 신뢰를 구축하는 데 매우 유용합니다.

 

A/A 테스트는 A/B테스트와 동일하지만 실험군 및 대조군의 사용자가 동일한 경험을 한다는 점에서 차이점을 보입니다.

 

1.1 A/A 테스트의 여러 목적

A/A 테스트는 아래와 같이 여러 목적으로 사용할 수 있습니다.

 

1. 1종 오류가 예상대로 통제되는지 확인하기 위해

예를 들어, 표준 분산 계산은 일부 지표에 대해 올바르지 않거나 정규성 가정이 유지되지 않을 수 있습니다. 예상 밖의 비율로 실패하는 A/A 테스트는 해결해야 할 문제가 있음을 암시합니다.

 

2. 지표의 변동성 평가를 위해

더 많은 사용자가 실험에 참여함에 따라 시간에 따른 지표 분산의 변화를 확인하기 위해 A/A 테스트의 데이터를 조사할 수 있으며, 평균 분산의 예측되는 감소가 일어나지 않음을 알게 될 수도 있습니다.

 

3. 실험군 사용자와 대조군 사용자 간에 편향이 없는지 확인하기 위해

A/A 테스트는 특히 플랫폼 수준에서 도입된 편향을 식별하는 데 매우 효과적입니다.

예 ) 빙은 이전 실험이 같은 사용자에 대해 실행되는 후속 실험에 영향을 미치는지를 확인하기 위해, 연속 A/A 테스트를 사용해서 이월 효과 혹은 잔여 효과를 식별합니다.

 

4. 기록 시스템과 데이터를 비교하기 위해

A/A 테스트는 보통 조직에서 종합 대조 실험을 사용하기 전에 첫 번째 단계로 사용됩니다.

별도의 로깅 시스템을 사용해서 데이터를 수집하는 경우 추천할 만한 검증 절차는 주요 지표가 기록 시스템과 일치하는지 확인하는 것입니다.

 

5. 실험 중 실험군과 대조군에 각각 동일한 비율로 할당했을 때, 실제로 해당 비율로 할당되는지 확인하기 위해

기록 시스템에 실험 중 X명의 사용자가 웹사이트를 방문하고 실험군과 대조군에 20% 씩 할당했을 때, 실제로 각각 약 20%의 사용자가 나타나는가? 놓치고 있는 사용자는 없는가?

 

6. 통계적 검정력 계산을 위한 분산을 추정하기 위해

A/A테스트는 최소한의 감지 가능한 효과를 얻기 위해 얼마나 오랫동안 A/B 테스트를 실행해야 하는지 결정하는데 도움이 되는 지표의 분산을 제공합니다.

 

따라 분포 불일치와 플랫폼 이상을 포함한 문제를 발견하기 위해 다른 실험과 병행해서 계속해서 A/A 테스트를 실행하는 것을 강력하게 추천합니다.

 

1.2 A/A 테스트를 하는 이유와 방법

다음으로 예시들을 통해 A/A 테스트를 하는 이유와 방법에 대해 자세히 살펴보겠습니다.

 

예시 1 : 분석 단위가 랜덤화 단위와 다르다

사용자 별로 랜덤화하고, 페이지 별로 분석을 하는 것이 필요한 실험이 있을 수 있습니다.

예를 들어, 경고 시스템은 일반적으로 거의 실시간으로 모든 페이지를 집계함으로써 페이지 로드 시간(PLT)과 클릭율(CTR)을 추적합니다. 따라서 페이지 별로 실험 효과를 추정해야 하는 경우가 흔하게 발생하게 됩니다.

 

CTR을 살펴보고 각각 다른 분석 단위를 사용해서 CTR을 계산하는 두 가지 방법을 모두 분석한 다음 결과를 비교해 보겠습니다.

 

여기서 각 의미는 아래와 같습니다.

 

$$ n : 사용자 수 $$ $$ K_{i}  : 사용자 i 의 페이지 뷰 수 $$ $$ N =  \sum_{i =1 }^n K_{i} : 총 페이지 뷰 수$$ $$ X_{i,j} : 사용자 i가 페이지 j를 클릭한 수 $$

 

CTR에 대한 두 가지 방법입니다.

 

1. 모든 클릭 수를 계산하고 총 페이지 뷰 수로 나누는 방법

 

$$CTR_{1} = \frac{ \sum_{i=1}^n   \sum_{j=1}^{K_{j}}  X_{i,j} }{N}   $$

 

두 명의 사용자가 있는데, 한 명은 클릭 없이 한 번의 페이지 뷰가 있으며, 다른 한 명은 두 페이지를 방문해서 각각 한 번씩 클릭한 경우의 예 :

 

$$ CTR_{1} =  \frac{\ 0+2}{\ 1+2} = \frac{\ 2}{\ 3} $$

 

2. 각 사용자의 CTR의 평균을 낸 다음 모든 CTR의 평균을 계산하는 방법

 

$$ CTR_{2} =  \frac {\sum_{i=1}^n {  \frac{ \sum_{j=1}^{K_{j}} {X_{i,j}} }{K_{i}} }}{n} $$

 

위와 동일한 경우의 예 :

 

$$ CTR_{2} =   \frac{ \frac{0}{1} + \frac{2}{2} }{2} =  \frac{1}{2}  $$

 

이러한 정의에는 옳고 그름이 없으며 둘 다 CTR에 유용한 정의이지만 평균하는 방법이 달라지면 다른 결과가 나오게 됩니다. 실제로는 두 지표 모두 스코어보드에 표시하는 경우가 흔하지만, 일반적으로 봇으로 인해 페이지 뷰나 클릭수가 큰 값을 가지는 이상치에 대해 영향을 덜 받는 두 번째 방법을 권장합니다.

 

다만 분산을 계산할 때 실수하기가 쉽다는 점을 유의해야 합니다.

A/B 테스트가 사용자 단위로 무작위 추출되면 첫 번째 방법을 사용해서 분산을 계산하면 다음과 같은 결과를 얻게 됩니다.

 

$$  VAR(CTR_{1})= \frac{\sum_{i=1}^{n}\sum_{j=1}^{K_{i}}(X_{ij}-CTR_{1})^2}{N^{2}} $$

 

다만 이러한 방법은 아래와 같이 가정하기에 올바르지 않은 방법입니다.

$$ X_{ij} : 독립적 $$

 

그렇기에 분산의 불편 추정치를 계산하려면 델타 방법 또는 부트스트랩을 사용해야 합니다. 

 

예시 2 : *옵티마이즐리(Optimizely)는 결과가 통계적으로 유의미할 때 종료하는 것을 권장했다

「A/B Testing」(Siroker, Koomen 2013) 책에서는 "테스트가 통계적으로 유의한 수준에 도달하면 답을 얻을 수 있다." 그리고 "테스트는 통계적으로 유의한 결론에 도달했을 때 ... "와 같이 실험 종료를 위한 잘못된 절차를 제안했습니다.

 

일반적으로 사용되는 통계학에서는 실험의 마지막에 한 번의 테스트가 수행하는 것을 전제로 합니다. 하지만 위의 절차는 중간 과정에서 테스트를 수행하는 것을 권장하였고 이는 전제를 위반하며 예상보다 많은 거짓 양성 결과를 도출했습니다.

 

그렇기에 옵티마이즐리의 초기 버전은 수많은 거짓 개선을 야기했습니다. 이러한 문제는 일부 실험자들에 의해 A/A 테스트를 통해 알아냈으며 이는 "어떻게 옵티마이즐리가 나를 해고당하게 하였는가"와 같은 기사로도 이어졌습니다.

 

이후, 옵티마이즐리는 해당 분야의 전문가와 협력해서 이들의 평가를 반영한 '옵티마이즐리의 새로운 통계 엔진'이라는 이름을 붙였고, 회사의 용어집에서 A/A 테스트를 다루게 되었습니다.

 

*옵티마이즐리 : A/B 테스트 솔루션 회사

 

예시 3 : 브라우저 리디렉션

웹사이트의 새 버전을 구축 중이고 이전 버전과 새 버전의 A/B 테스트를 실행하고 싶은 상황입니다.

변형군 B의 사용자는 새 웹사이트로 리디렉션됩니다. 하지만 이러한 B는 높은 확률로 실패하게 됩니다.

 

해당 접근 방식에는 아래와 같은 세 가지 문제가 있기 때문입니다.

 

1. 성능 차이

리디렉션 된 사용자는 추가적인 리디렉션을 겪습니다. 그렇기에 회사 내 테스트에서는 빠르게 보일 수 있지만 다른 지역의 사용자는 1-2초의 대기 시간을 겪을 수도 있습니다.

 

2. 봇

로붓은 리디렉션을 다르게 처리합니다. 일부는 리디렉션되지 않을 수도 있습니다. 일부는 이를 새로운 처음 보는 영역으로 판단해서 대량의 크롤링을 수행하며, 이는 사람이 발생시키지 않지만 주요 지표에 영향을 미칠 가능성 역시 존재합니다. 또한 일반적으로 소규모 활동 봇은 모든 변형군들에 균등하게 배포되므로 제거하는 것이 중요하지 않지만 새 사이트 또는 업데이트 된 사이트에서는 다른 행동을 일으킬 가능성 역시 존재합니다.

 

3. 북마크와 공유 링크는 오염을 유발합니다.

북마크를 사용하거나 공유 링크를 웹사이트로 이동하는 사용자는 계속 리디렉션돼야 합니다. 이러한 리디렉션은 변형군 간에 대칭이어야 하므로, 대조군의 사용자 역시도 사이트 A로 리디렉션돼야합니다.

 

리디렉션은 일반적으로 A/A 테스트에 실패합니다. 그렇기에 리디렉션이 없도록 구성하거나 대조군 및 실험군 모두에 대해 리디렉션을 실행해야 합니다.

 

예제 4 : 균등하지 않는 분할

균등하지 않은 분할(예 : 10% / 90% )을 할 경우 리소스의 분배가 더 큰 변형군에게 유리하게 적용될 수 있습니다.

특히 대조군과 실험군 간에 공유되는 LRU(Least Recently Used, 가장 오랫동안 사용되지 않은) 캐시는 보다 큰 변형군에 의해 더 큰 캐시 항목을 가지게 됩니다.

 

어떤 경우에는 LRU 캐싱 문제를 피하기 위해 10% / 10% 실험 (이론적으로 유용한 데이터의 80%를 활용하지 않습니다)을 실행하는 것이 더 쉽지만 이는 실행 시간에 수행해야 합니다. 즉, 10% / 90%를 실행하고 데이터를 버릴 수 없다는 의미입니다. 만약 50% / 50% A/A 테스트가 통과했더라도, 90% / 10% 로 실험을 실행하는 경우라면 실제로 이 조합의 A/A 테스트 실행을 권장합니다.

 

균등하지 않은 분할의 또 다른 문제는 정규 분포로의 수렴 속도가 다르다는 것입니다.

어떤 지표에서 한 쪽으로 과도하게 치우친 분포가 있는 경우 중심극한정리는 백분율이 다르면 평균은 정규분포로 수렴하지만 수렴 속도가 달라짐을 보입니다. A/B 테스트에서 중요한 것은 대조군 및 실험군에 대한 지표의 델타이며, 두 구성 요소의 분포가 같으면 정규분포가 아니더라도 델타가 더 정규분포에 가까울 수 있습니다.

 

예시 5 : 하드웨어 차이

페이스북은 소수의 컴퓨터에서 실행되는 서비스를 갖고 있었습니다.

이들은 새로운 V2 서비스를 구축하고 A/B 테스트를 수행하기를 원했습니다.

따라 신형과 구형 사이에서 A/A 테스트를 했는데, 그들은 하드웨어가 동일하다고 생각했지만 A/A 테스트에 실패했습니다. 이는 작은 하드웨어 차이로 인해 예상치 못한 차이가 발생할 수 있음을 보여줍니다.

 

2. A/A 테스트 실행 방법

A/B 테스트 시스템을 사용하기 전에 항상 일련의 A/A 테스트를 실행해야 합니다.

 

이상적으로는 1,000개의 A/A 테스트를 시뮬레이션하고 p값의 분포를 시각화하는 것을 권장합니다.

이때 분포가 균등하지 않으면 문제가 있는 것이며, 해당 문제를 해결하기 전에는 A/B 테스트 시스템을 신뢰할 수 없습니다.

 

관심 지표가 연속적이고 A/A 테스트 예시에서 "동일한 평균"과 같은 간단한 귀무가설의 경우 p값 분포는 균등해야 합니다.

 

보이는 것 처럼 위의 그림은 균등분포와는 거리가 먼 실제 히스토그램이다. 여기에 델타 방법을 적용하게 되면 아래의 그림 처럼 분포가 훨씬 더 균등하게 됩니다.

 

1000번의 A/A 테스트를 실행하는 것은 비용이 많이 발생합니다. 그렇기에 또 다른 방법은 관련 원시 데이터를 저장했을 경우, 지난 주의 실험을 반복하는 것입니다. 이는 향후 테스트를 실행하고 새로 개발된 지표를 적용하기 위해 데이터를 저장해야 하는 이유의 예이기도 합니다. 다만 해당 방법은 성능 문제를 포착하지 못하고, 위에서 언급한 LRU 캐시와 같이 리소스를 공유하지는 못한다는 한계가 존재합니다. 그러나 많은 문제를 식별하는 데 도움이 되는 매우 가치 있는 과정입니다.

 

해당 방법은 제품에 실제로 변경을 가하지 않아도 되고, 테스트할 변형군이 동일하기 때문에, A/A 테스트 시뮬레이션을 수행하기만 하면 됩니다. 매번 반복시행시 사용자 할당을 위해서 새로운 랜덤화 해서 시드를 선택하고, 지난 주의 데이터를 다시 사용해 사용자들을 두 그룹으로 분할합니다. 이후 관심 있는 각 지표에 대한 p값을 계산하고 각 지표별로 이 p값의 히스토그램을 생성합니다.

 

마지막으로 앤더슨 달링 검정 또는 콜모고로프-스미노프 검정과 같은 적합도 테스트를 실행해서 분포가 균등에 가까운지 평가합니다.

 

3. A/A 테스트가 실패한 경우

 

아래는 p-값의 균등분포에 대한 적합도 테스트가 실패하는 일반적인 경우들 입니다.  몇가지가 존재한다.

 

1. 분포가 치우쳐 있고 명백히 균등에 가깝지 않은 경우

이때 일반적인 문제는 지표의 분산 추정 문제입니다. 따라 다음 사항을 확인해야 합니다.

 

a. 랜덤화 단위가 분석단위와 다르기 때문에 독립성 가정이 위반됐나요? 그렇다면 델타 방법 또는 부트스트래핑을 사용해야 합니다.

b. 지표가 매우 치우친 분포를 갖고 있나요? 작은 샘플에서는 정규분포 근사가 실패할 수 있습니다. 몇몇 경우에는 최소 표본 크기가 100,000명 이상의 사용자여야 합니다. 제한된 지표 또는 최소 표본 크기 설정이 필요할 수도 있습니다.

 

2. p값이 0.32 주변에 몰려 있는 경우

이는 이상치 문제가 있는 경우 입니다.

 

예를 들어, 데이터에서 하나의 매우 큰 이상치 o가 있다고 가정하겠습니다.

 

t-통계량을 계산할 때 식 :

 

$$  T = \frac{\Delta}{\sqrt{var}}(\Delta) $$

 

특이값은 두 변수 중 하나에 속하고 평균의 델타는 o/n(또는 음(-))에 가까울 것입니다. 이 경우, 다른 모든 숫자는 이 특이값에 의해 휩쓸리게 됩니다. 해당 변수에 대한 평균의 분산도 마찬가지로  o^2 / n^2 에 가까울 것이므로 T값은 1에 가깝거나 -1에 가까워 약 0.32의 p값에 매핑되게 됩니다.

 

만약 해당 사항이라면 이상치의 원인을 조사하거나 데이터를 제한해야 합니다. 이러한 큰 이상치로 인해 t-검정은 통계적으로 유의한 결과로 이어지지 않을 수 있습니다.

 

3. 분포가 큰 간격으로 값이 몇 개의 점에 몰려있는 경우

이는 데이터가 대부분 단일값을 가지고 몇 개의 0이 아닌 값을 가질 때 발생합니다.

 

이러한 경우에 평균의 델타는 몇 개의 이상 값만 사용할 수 있으므로 p값도 몇 개의 값만 취할 수 있습니다. 여기서도 t-검정은 정확하지 않지만  2번째 경우만큼 심각하지는 않습니다. 왜냐하면 새로운 실험이 희소한 시건은 더 빈번하게 발생시키기 때문으로, 이러한 실험효과가 더 커지게 되면, 통계적으로 유의하게 됩니다.

 

A/A 테스트를 통과한 후에도 A/B 테스트와 동시에 정기적으로 A/A 테스트를 실행해서 시스템에 문제가 발생하는 것을 알아내거나 이상치의 등장으로 분포가 변경돼 실패한 새 지표가 있는지 확인하는 것을 권장합니다.


Q. 확인 문제

1. 다음 중 틀린 것은 무엇인가요? 틀린 부분까지 고쳐주세요 :)

 

A/A 테스트는 예상 밖의 비율로 실패하는 2종 오류를 확인하는데 도움을 준다.

② 지난 주의 실험을 반복하는 A/A 테스트는 성능 문제를 포착하지 못하고, LRU 캐시와 같이 리소스를 공유하지 못하는 한계가 존재한다.

A/B 테스트가 사용자 단위로 무작위로 추출된다면 이는 독립성을 보인다. 그렇기에 모든 클릭수를 계산하고 총 페이지 뷰 수로 나누는 방법에 해당 방법을 사용한다면 이는 독립성이 보장되어 불편추정량을 계산하는데 용이하다.

④ 하나의 매우 큰 특이값은 두 변수 중 하나에 속하고 이때 평균의 델타는 특이값을 해당 전체의 요소로 나눈 값에 가까워지며, 이러한 현상은 해당 변수에 대한 평균의 분산에도 영향을 미친다. 그렇기에 해당 t-검정은 통계적으로 유의하지 않다.

 

2. 다음 중 A/A 테스트가 실패하지 않는 경우는 무엇인가요?

 

 분석 단위와 랜덤화 단위가 다른 경우

 브라우저 리디렉션

 균등하지 않은 분할

 하드웨어 차이

 

A. 정답

번호의 아래를 드래그하면 정답이 나옵니다 :)

 

1.

① A/A 테스트는 예상 밖의 비율로 실패하는 2종 오류를 확인하는데 도움을 준다.

-> 2종 오류가 아니라 1종 오류를 확인하는데 도움을 줍니다.

③ A/B 테스트가 사용자 단위로 무작위로 추출된다면 이는 독립성을 보인다. 그렇기에 모든 클릭수를 계산하고 총 페이지 뷰 수로 나누는 방법에 해당 방법을 사용한다면 이는 독립성이 보장되어 불편추정치를 계산하는데 용이하다.

-> 독립적이라고 가정하는 것 자체가 해당 경우 올바르지 않기에 불편 추정치를 계산하기 위해선 델타 방법 또는 부트스트랩을 사용해야 한다.

2.

③ 균등하지 않은 분할 / 균등하지 않은 분할이더라도, 대조군과 실험군에 대한 지표의 델타는 분포가 같으면 델타가 더 정규 분포에 가까울 수 있습니다.