Uber Experimentation Platform(XP) 이해
in Data on Engineering
- 우버 테크 블로그에 있는 Under the Hood of Uber’s Experimentation Platform 을 읽고 정리한 글입니다
- 제가 관심있는 부분 위주로 정리했기 때문에 자세한 이해를 하고 싶은 분들은 원문을 읽어보길 추천합니다!
Uber’s Experimentation Platform
- 우버에선 실험을 통해 고객 경험(UX)를 향상
- 새로운 기능 테스트 및 앱 디자인 향상시 사용
- 새로운 아이디어, 제품 feature, 마케팅 캠페인, promotion 및 기계학습 모델의 효과를 측정, 디버깅, 측정 및 모니터링 가능
- Uber Rider, Ubet Eats, uber Freight 앱 전반에서 지원
- A/B/N Test, 인과 분석, Multi-armed Bandit(MAB)에 기반한 지속적 실험
- 통계 방법을 크게 4가지로 사용
- 1) 고정된 horizon A/B/N Test(t-test, 카이제곱, rank-sum test)
- 2) Sequential probability ratio tests(SPRT)
- 3) causal inference test (synthetic control and diff-in-diff tests)
- 4) continuous A/B/N test using bandit algorithms(톰슨 샘플링, upper confidence bounds, contextual multi armed bandit test를 통한 베이지안 최적화)
- 유형 1, 유형 2 오류의 확률을 계산시 편차 보정을 측정하는 회귀 방법을 사용하고, standard error를 측정하기 위해 block bootstrap와 delta methods를 사용
Classic AB Test
- 실험군과 대조군을 설정한 후, 그룹간 metric을 측정해 실험 효과를 측정
- Feature release 실험시 주로 사용
- 측정값의 평균, lift(treatment effect)가 중요한지, 샘플 사이즈는 충분히 큰지 등을 나타냄
- (역자) 이런 기능은 통계적 모델링에서 항상 필요하기 때문에, 한번 만들면 계속 재사용 가능! 이 부분 추가 학습하기
통계 엔진
- Data validation -> check metric type -> Data preprocessing -> 각 방법론 적용 -> P value calculation -> A/B/N test -> Lift 계산 -> 검정력, sample 사이즈 계산
- 무작위 실험할 때 첫 단계 : 의사 결정(decision) metric 결정
- decision metric 예 : 라이더 총 예약 수
- 측정 항목에 따라 Google 통계 엔진은 다양한 통계 가설 테스트 절차를 적용해 보고서 생성
- (역자) 아키텍쳐 참고할 수 있을듯
- 데이터가 들어와서 각 과정을 check
- 이렇게 거대하지 않아도 되고, simple하게 먼저 구축 시작해도 좋을듯
통계적 방법의 핵심 구성요소
- 데이터를 수집하고 2가지 주요 문제를 감지
- 표본 크기의 불균형
- 실험군과 대조군의 표본 크기 비율이 예상한 것과 크게 다를 경우
- 이런 시나리오는 무작위 추출 메커니즘을 2번 확인해야 함
- Flickers(깜빡임?)
- 실험군에서 대조군으로 전환된 경우
- 예 : 안드로이드에서 아이폰으로 바꾼 사람
- 이럴 경우 우버는 분석에서 제외한다고 함
- (역자) 아예 실험군/대조군을 전환될 수 없도록 설정하면 될 듯
- 표본 크기의 불균형
- User level의 metrics
- 1) Continuous metrics
- 유저당 예약 비율같은 1가지 숫자로 나타낼 수 있는 지표
- 2) Proportion metrics
- 회원가입을 하고 어떤 여행을 완료한 비율을 Test, binary
- 3) Ratio metrics
- 2개의 숫자 값을 사용한 metric
- 예를 들면 (총 트립 요구수/완료된 트립의 수)
- 1) Continuous metrics
- AB Test의 퍼포먼스를 증대시키기 위한 전처리
- 1) Outlier detection
- clustering-based 알고리즘을 사용해 아웃라이어를 탐지하고 제거
- 2) Variance reduction
- 분산 감소는 가설 테스트의 통계 능력을 향상시킬 때 도움이 됨
- 사용자가 적거나 정확성을 희생하지 않고 조기에 실험 끝낼 경우 유용
- CUPED 방법 사용
- 3) Pre-experiment bias
- 다양한 유저가 존재하기 때문에 그룹간 실험 편향을 교정할 필요가 있음
- diff-in-diff를 사용
- 어떤 내용인지는 설명 안나옴
- 1) Outlier detection
- P value 계산이 핵심
- p value는 결과가 중요한지 여부를 판별 - p value와 오 탐지율(Type 1 오류, 0.05)을 비교
- 상황마다 다른 방법을 활용
- 1) Welch’s t test
- 연속 측정과 같은 기본 Test
- 예 : 완료된 트립
- 2) Mann-Whitney U test
- 데이터의 극심한 skewness를 탐지할 때 사용되는 rank sum에서 효과적(?)
- 3) Chi-squared test
- 라이더 리텐션, propertion metric을 사용할 경우
- 4) Delta method and bootstrap methods
- 샘플 크기가 작거나 ratio metrics 실험일 경우
- standard error estimation
- 좀 더 검색 필요
- 1) Welch’s t test
- 검정력(power)를 위해 2종 오류도 check
Metrics management
- 사용 가능한 메트릭 추천
- 1000개 이상의 측정 항목이 있음. 사용자가 측정 항목 결정하는게 점점 어려워짐
- Item-item collabortive filtering 방법 사용
- 2가지 score를 측정해서 제일 높은 것을 추천
- Popularity score
- 함께 선택될수록 해당 측정 항목에 대한 점수가 높아짐
- Jaccard_index 사용
- Absolute score
- 피어슨 상관 점수
Sequential testing
- 전통적인 AB Test는 샘플을 반복적으로 가져와 1종 오류를 부추김
- 순차적 테스트는 핵심 비즈니스 메트릭을 지속적으로 모니터링 하는 방법 제공
- 1종 오류를 부풀리지 않으며 confidence를 조절
- 진행중인 실험에 대한 모니터링
Methodologies
- Metrics 모니터링 목적으로 mSPRT(mixed Sequential Probability Ratio Test)와 FDR을 사용한 분산 추정을 위한 테스팅을 활용
- Mixture Sequential Probability Ratio Test
- 모니터링할 때 가장 보편적으로 사용하는 방법
- (역자) 추가 공부 필요
- Variance estimation with FDR control
- 순차 테스트를 올바르게 적용하기 위해 가능한 정확한 분산을 추정해야 함
- 비교군 대조군 그룹의 누적 차이를 모니터링
- delete-a-group jackknife variance estimation과 block bootstrap 방법을 사용해 연관된 데이터에서 mSPRT 테스트를 일반화
Continuous experiments
- driver, rider, eater, restaurant, delivery-partner 경험을 지속적 실험을 통해 최적화하려고 함
- bandit과 최적화에 초점을 둔 강화학습 방법을 구현해 실험
- 최근 컨텐츠 최적화를 위한 기술을 사용해 고객 engagement(참여)를 향상
Case Study
Moving forward
- 점점 더 지능적인 실험 플랫폼을 구축하려고 함
- (역자) 아마 지금은 더 좋아졌을 것 같음
- 머신러닝 관련은 글에 안나와서 아쉬움
- 다른 블로그 글 도 읽어볼만함! 단, 2017년 글
Reference
카일스쿨 유튜브 채널을 만들었습니다. 데이터 사이언스, 성장, 리더십, BigQuery 등을 이야기할 예정이니, 관심 있으시면 구독 부탁드립니다 :)
PM을 위한 데이터 리터러시 강의를 만들었습니다. 문제 정의, 지표, 실험 설계, 문화 만들기, 로그 설계, 회고 등을 담은 강의입니다
이 글이 도움이 되셨거나 다양한 의견이 있다면 댓글 부탁드립니다 :)