베이지안 AB 테스트
AB 테스트 라고도 하는 무작위 실험 은 인과 관계를 추정하기 위해 업계에서 확립된 표준입니다. 인구의 하위 집합(사용자, 환자, 고객 등)에 치료(신제품, 기능, UI 등)를 무작위로 할당하여 평균적으로 결과(수익, 방문, 클릭 등)의 차이가 치료에 기인합니다. Booking.com 과 같은 기존 회사 는 동시에 수천 개의 AB 테스트를 지속적으로 실행한다고 보고합니다. 그리고 Duolingo 와 같이 새롭게 성장하는 회사 는 성공의 큰 부분을 대규모 실험 문화 덕분이라고 생각합니다.
실험이 너무 많으면 자연스럽게 한 가지 질문이 생깁니다. 하나의 특정 실험에서 이전 테스트의 정보를 활용할 수 있습니까? 어떻게? 이 게시물에서는 AB 테스트에 대한 베이지안 접근 방식을 소개하여 이러한 질문에 답하려고 합니다 . 베이지안 프레임워크는 새로운 데이터를 사용하여 기존 지식(이전)을 자연스럽게 업데이트할 수 있기 때문에 이러한 유형의 작업에 매우 적합합니다. 그러나 이 방법은 함수형 가정에 특히 민감하며 이전 분포의 왜도와 같은 분명히 무해한 모델 선택이 매우 다른 추정치로 변환될 수 있습니다.
검색 및 무한 스크롤
기사의 나머지 부분에서는 Azavedo et al.에서 느슨하게 영감을 받은 장난감 예제를 사용할 것입니다. (2019) : 검색 품질을 희생하지 않고 광고 수익 을 늘리려는 검색 엔진 . 우리는 실험 문화가 확립된 회사이며 랜딩 페이지를 개선하는 방법에 대한 새로운 아이디어를 지속적으로 테스트합니다. 우리가 새로운 기발한 아이디어를 생각해냈다고 가정해 봅시다: 무한 스크롤 ! 별개의 페이지 순서를 갖는 대신 사용자가 더 많은 결과를 보려면 계속 아래로 스크롤할 수 있습니다.
무한 스크롤이 작동하는지 알아보기 위해 AB 테스트 를 실행했습니다. 즉, 사용자를 치료 그룹과 통제 그룹으로 무작위 추출하고 치료 그룹의 사용자에 대해서만 무한 스크롤을 구현합니다. 에서 데이터 생성 프로세스를 가져 dgp_infinite_scroll()옵니다 src.dgp. 이전 기사와 관련하여 무작위화 및 데이터 생성을 처리하는 새로운 DGP 상위 클래스를 생성했으며 하위 클래스에는 특정 사용 사례가 포함되어 있습니다. 또한 src.utils. 코드뿐만 아니라 데이터와 테이블을 포함하기 위해 Jupyter 와 같은 웹 기반 협업 노트북 환경인 Deepnote를 사용합니다.
우리는 10,000명의 웹사이트 방문자에 대한 정보를 가지고 있으며 ad_revenue그들이 생성한 월별, 그들이 치료 그룹에 할당되었는지 여부와 를 사용하고 있는지 여부 infinite_scroll및 월 평균 을 관찰합니다 past_revenue.
무작위 처리 할당은 평균 차이 추정기 를 편향되지 않게 만듭니다 . 처리 그룹과 제어 그룹이 평균적으로 비슷할 것으로 예상하므로 결과에서 관찰된 평균 차이를 처리 효과에 인과적으로 귀속시킬 수 있습니다. 선형 회귀로 치료 효과를 추정합니다. 의 계수를 infinite_scroll추정된 치료 효과로 해석할 수 있습니다.
정말 infinite_scroll좋은 생각이었고 월 평균 수익이 0.1524$ 증가한 것 같습니다. 더욱이 그 효과는 1% 신뢰 수준에서 0과 유의미하게 다릅니다.
past_revenue회귀에서 를 제어하여 추정기의 정확도를 더욱 향상시킬 수 있습니다. 우리는 추정된 계수에서 상당한 변화를 기대하지 않지만 정밀도는 향상되어야 합니다(제어 변수에 대해 더 알고 싶다면 CUPED 및 DAG 에 대한 저의 다른 기사를 확인하십시오 ).
실제로 past_revenue전류 ad_revenue를 예측할 수 있으며 추정 계수의 정확도는 infinite_scroll1/3로 감소합니다.
지금까지는 모든 것이 매우 표준적이었습니다. 그러나 처음에 말했듯이 이것이 브라우저(그리고 궁극적으로 광고 수익)를 개선하기 위해 실행한 유일한 실험이 아니라고 가정합니다. 무한 스크롤은 우리가 과거에 테스트한 수천 가지 아이디어 중 하나에 불과합니다. 이 추가 정보 를 효율적으로 사용할 수 있는 방법이 있습니까?
베이지안 통계
빈도주의적 접근법에 비해 베이지안 통계의 주요 장점 중 하나는 추가 정보를 모델에 쉽게 통합할 수 있다는 것입니다. 아이디어는 모든 베이지안 통계의 배후에 있는 주요 정리인 베이즈 정리 에서 직접 따릅니다 . Bayes 정리 는 추론 문제를 반전시켜 모델에 대한 추론을 수행할 수 있도록 합니다.
Bayes Theorem의 우변을 두 가지 구성 요소인 사전 및 가능성 으로 나눌 수 있습니다 . 우도는 데이터에서 오는 모델에 대한 정보이며, 사전은 모델에 대한 추가 정보입니다.
우선, 베이즈 정리를 우리의 맥락에 매핑해 봅시다. 데이터는 무엇이며 모델은 무엇이며 관심 대상은 무엇입니까?
- 결과 변수 y , 치료 , D 및 기타 변수 로 구성된 데이터 와 공동으로 X 로 표시하는 상수
ad_revenueinfinite_scrollpast_revenue - 모델 은 의 분포이고 특성
ad_revenue은 ypast_revenue| D,X 입니다.infinite_scroll - 우리 의 관심 대상 은 후방 Pr(model | data)
ad_revenue, 특히 와 사이의 관계입니다.infinite_scroll
베이지안 회귀
선형 모델을 사용하여 빈도주의적 접근 방식과 직접 비교할 수 있습니다.
이것은 선형 계수 β 및 τ 와 잔차 분산 σ 의 두 가지 매개변수 세트 가 있는 파라메트릭 모델입니다 . 동일하지만 더 베이지안적인 모델 작성 방법은 다음과 같습니다.
여기서 세미 컬럼은 모델 매개변수에서 데이터를 분리합니다. 빈도주의적 접근법과 달리 베이지안 회귀에서는 y 의 조건부 분포를 근사화하기 위해 중심 극한 정리 에 의존하지 않고 정규 분포 라고 직접 가정 합니다.
모델 매개변수 β , τ 및 σ 에 대한 추론에 관심이 있습니다. 빈도주의자와 베이지안 접근법의 또 다른 핵심 차이점 은 첫 번째는 모델 매개변수가 고정되어 알려지지 않은 것으로 가정하고 후자는 모델 매개변수를 임의의 변수로 허용한다는 것입니다.
이 가정에는 매우 실용적인 의미 가 있습니다. 모델 매개변수에 대한 이전 정보를 사전 분포의 형태로 쉽게 통합할 수 있습니다. 이름에서 알 수 있듯이 사전에는 데이터를 보기 전에 사용할 수 있었던 정보가 포함되어 있습니다 . 이는 베이지안 통계에서 가장 관련성이 높은 질문 중 하나로 이어집니다. 어떻게 사전을 선택 합니까?
사전
사전분포를 선택할 때 분석적으로 호소력 있는 한 가지 제한사항은 사후분포가 동일한 가족에 속하도록 사전 분포를 갖는 것입니다. 이러한 사전을 켤레 사전 이라고 합니다. 예를 들어, 데이터를 보기 전에 내 치료 효과가 정규 분포라고 가정하고 데이터에 포함된 정보를 통합한 후에도 정규 분포를 원합니다.
베이지안 선형 회귀의 경우 β , τ 및 σ 에 대한 켤레 사전 확률은 정규 분포이고 역 감마 분포입니다. 이전과 같이 표준 정규 및 역 감마 분포를 맹목적으로 사용하여 시작하겠습니다.
확률적 프로그래밍 패키지 PyMC 를 사용하여 추론을 수행합니다. 먼저 모델을 지정해야 합니다. 즉, 다양한 매개변수의 사전 분포와 데이터 가능성이 있습니다.
PyMC에는 모델을 그래프로 시각화할 수 있는 매우 멋진 기능이 있습니다 model_to_graphviz.
그래픽 표현에서 다양한 모델 구성 요소, 분포 및 서로 상호 작용하는 방식을 볼 수 있습니다.
이제 모델 사후 를 계산할 준비가 되었습니다. 어떻게 작동합니까? 요컨대, 우리는 모델 매개변수의 실현을 샘플링하고 해당 값이 주어진 데이터의 우도를 계산하고 해당 사후값을 도출합니다.
베이지안 추론이 샘플링 을 필요로 한다는 사실은 역사적으로 베이지안 통계의 주요 병목 현상 중 하나였습니다. 빈도주의적 접근 방식보다 상당히 느리게 만들기 때문입니다. 그러나 이것은 모델 컴퓨터의 계산 능력이 증가함에 따라 점점 더 문제가 되지 않습니다.
이제 결과를 검사할 준비가 되었습니다. 첫째, 방법 을 사용하여 선형 회귀에 사용한 패키지 summary()에서 생성된 것과 매우 유사한 모델 요약을 인쇄할 수 있습니다 .statsmodels
infinite_scroll추정된 매개변수는 0.157과 같은 추정 효과로 빈도주의적 접근법으로 얻은 것과 매우 유사합니다 .
샘플링이 느리다는 단점이 있다면 매우 투명 하다는 장점이 있습니다. 사후 분포를 직접 플롯할 수 있습니다. 치료 효과 τ 에 대해 해봅 시다 . PyMC 함수 plot_posterior는 95% 신뢰 구간에 해당하는 베이지안의 검정색 막대로 사후 분포를 표시합니다.
예상대로 켤레 사전분포를 선택했기 때문에 사후분포는 가우시안처럼 보입니다.
지금까지 우리는 많은 지침 없이 사전을 선택했습니다. 그러나 과거 실험 에 액세스할 수 있었다고 가정 합니다. 이 특정 정보를 어떻게 통합합니까?
과거 실험
무한 스크롤 아이디어 가 과거에 우리가 시도하고 테스트한 수많은 아이디어 중 하나라고 가정합니다 . 각 아이디어에 대해 해당 추정 계수와 함께 해당 실험에 대한 데이터가 있습니다.
과거 실험에서 1000개의 추정치를 생성했습니다. 이 추가 정보를 어떻게 사용합니까?
일반 사전
첫 번째 아이디어 는 과거의 데이터 분포를 반영하기 위해 사전 을 보정 하는 것일 수 있습니다. 정규성 가정을 유지하면서 과거 실험에서 얻은 추정치의 추정 평균 및 표준 편차를 사용합니다.
ad_revenue평균적 으로 0.0009의 평균 효과로 거의 영향을 미치지 않았습니다 .
그러나 표준 편차가 0.029로 실험 전반에 걸쳐 상당한 차이가 있었습니다.
τ 의 사전 분포에 대한 과거 추정치의 평균과 표준 편차를 사용하여 모델을 다시 작성해 보겠습니다 .
모델에서 샘플링하자
처리 효과 매개변수 τ 의 샘플 사후 분포를 플로팅합니다 .
추정된 계수는 눈에 띄게 작습니다: 이전 추정치인 0.16 대신 0.11입니다. 왜 그런가요?
사실은 이전 계수 0.16이 우리의 사전에 주어진 가능성이 극히 낮다는 것입니다. 사전이 주어졌을 때 같거나 더 극단적인 값을 얻을 확률을 계산할 수 있습니다.
이 값의 확률은 사실상 0입니다. 따라서 추정 계수는 이전 평균인 0.0009로 이동했습니다.
학생-t 사전
지금까지 모든 선형 계수에 대해 정규 분포를 가정했습니다. 적절합니까? 절편 계수 β₀ 부터 시작 하여 시각적으로 확인합시다( 분포를 비교하는 방법에 대한 다른 방법은 여기 에서 확인) .
분포는 꽤 정상적인 것 같습니다. 처리 효과 매개변수 τ 는 어떻습니까?
분포는 매우 무거운 꼬리 입니다! 중심에 있는 동안 정규 분포처럼 보이지만 꼬리는 훨씬 "더 뚱뚱하고" 몇 가지 매우 극단적인 값이 있습니다. 측정 오류를 제외하고 이것은 대부분의 아이디어가 매우 작거나 무효인 효과가 있고 극소수의 아이디어가 획기적인 아이디어인 업계에서 자주 발생하는 설정입니다.
이 분포를 모델링하는 한 가지 방법은 student-t 분포입니다. 특히 과거 추정치의 경험적 분포 모멘트를 일치시키기 위해 평균 0.0009, 분산 0.003, 자유도 1.3인 t-student를 사용합니다.
모델에서 샘플을 살펴보겠습니다.
그리고 처리 효과 매개변수 τ 의 샘플 사후 분포를 플로팅합니다 .
이제 추정된 계수는 이전의 표준 정규 0.11로 얻은 계수와 다시 유사합니다. 그러나 신뢰 구간이 [0.077, 0.016]에서 [0.065, 0.015]로 줄어들었기 때문에 추정치가 더 정확합니다.
무슨 일이 일어난?
축소
대답은 우리가 사용한 다양한 사전 분포 의 모양에 있습니다.
- 표준 정규, N(0,1)
- 모멘트가 일치하는 정상, N(0, 0.03)
- 모멘트가 일치하는 t-student, t₁.₃(0, 0.003)
보시다시피 모든 분포는 0을 중심으로 하지만 모양이 매우 다릅니다. 표준 정규 분포는 기본적으로 [-0.15, 0.15] 구간에서 평평합니다. 모든 값은 기본적으로 동일한 확률을 갖습니다. 대신 마지막 두 개는 평균과 분산이 같더라도 모양이 매우 다릅니다.
그것은 우리의 추정치로 어떻게 해석됩니까? 각 사전 분포에 대해 서로 다른 추정치에 대한 암시적 사후를 그릴 수 있습니다.
우리가 볼 수 있듯이, 서로 다른 사전 값은 매우 다른 방식으로 실험 추정치를 변환합니다. 표준 정규 사전은 본질적으로 [-0.15, 0.15] 간격의 추정치에 영향을 미치지 않습니다. 모멘트가 일치하는 일반 사전은 대신 각 추정치를 약 2/3로 줄입니다. 대신 t-학생 사전의 효과는 비선형적 입니다. 큰 추정치는 그대로 유지하면서 작은 추정치는 0으로 축소합니다. 점선 회색 선은 실험적 추정치 τ̂에 대해 서로 다른 사전의 효과를 표시합니다.
결론
이 기사에서는 AB 테스트 분석을 확장하여 과거 실험의 정보 를 통합하는 방법을 살펴보았습니다 . 특히 AB 테스트에 베이지안 접근 방식을 도입했으며 사전 분포 선택의 중요성을 확인했습니다. 동일한 평균과 분산이 주어지면 "두꺼운 꼬리"(매우 왜곡됨)가 있는 사전 분포를 가정하면 작은 효과의 축소가 더 크고 큰 효과의 축소가 더 낮음을 의미합니다.
직감 은 다음과 같습니다 . "두꺼운 꼬리"가 있는 사전 분포는 획기적인 아이디어가 드물지만 불가능하지는 않다고 가정하는 것과 같습니다. 이것은 우리가 이 게시물에서 보았듯이 실험 후 뿐만 아니라 실험 이전에도 실질적인 영향 을 미칩니다. 실제로 Azevedo et al. (2020) , 아이디어 효과의 분포가 더 "정상적"이라고 생각한다면 더 작은 효과를 발견할 수 있도록 소수지만 대규모 실험을 실행하는 것이 최적입니다. 대신 아이디어가 "획기적이거나 아무것도 아니다"라고 생각한다면, 즉 그 효과가 꼬리가 무거 우면 큰 효과를 탐지하기 위해 큰 크기가 필요하지 않기 때문에 작지만 많은 실험을 실행하는 것이 더 합리적입니다.
참조
- E. Azevedo, A. Deng, J. Olea, G. Weyl, 많은 A/B 테스트를 통한 치료 효과의 경험적 Bayes 추정: 개요 (2019). AEA 논문 및 절차 .
- E. Azevedo, A. Deng, J. Olea, J. Rao, G. Weyl, 뚱뚱한 꼬리를 사용한 AB 테스트 (2020). 정치경제학 저널 .
- A. Deng, 온라인 제어 실험을 위한 객관적인 베이지안 두 가지 샘플 가설 테스트 (2016). WWW '15 컴패니언.
원본 Jupyter 노트북은 여기에서 찾을 수 있습니다.
읽어 주셔서 감사합니다!
정말 감사! 포스팅 이 마음에 드셨고 더 보고 싶으시다면 저를 팔로우 해주세요 . 나는 인과 추론 및 데이터 분석과 관련된 주제에 대해 일주일에 한 번 게시합니다. 나는 게시물을 단순하지만 정확하게 유지하려고 노력하며 항상 코드, 예제 및 시뮬레이션을 제공합니다.
또한 작은 면책 조항 : 나는 배우기 위해 글을 쓰기 때문에 최선을 다하더라도 실수가 일반적입니다. 그들을 발견하면 알려주세요. 새로운 주제에 대한 제안도 감사합니다!

![연결된 목록이란 무엇입니까? [1 부]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































