CausalInferenceLab / causal-inference-practice

가짜연구소 <인과추론과 실무> 프로젝트
https://chanrankim.notion.site/fbedd72840044519a50c35c312fbebe2
37 stars 2 forks source link

Week 4&5_Summary_RCT와 실험 플랫폼 #4

Open fenzhantw opened 2 months ago

fenzhantw commented 2 months ago

무작위 실험의 순서

(0) 가설 및 실험 디자인 – Sample Size(how long?), OEC, Guardrail Metric, Data Quality etc.. (1) 실험 할당 – 고유 식별자에 기반하여, 사용자를 그룹으로 나누고, 제품 변형(variant) 하나로 할당 (2) 실험 실행 – 사용자의 행동 데이터를 Logging (3) 실험 로그 처리 - Log 데이터를 저장소로 업로드하여 처리 (e.g., 서버 로그와 실험 metadata 결합) (4) 실험 분석 - variant로 영향을 받은 사용자로 필터링 처리된 로그를 분석하는 단계 (5) Ship or Abort – 실험한 Feature를 반영? or 실험 Reproduce? or Abort ?

무작위 실험의 패턴 (Engineering) image

  1. Assignment : Hash Function

    • Randomize 요청에 따라 Deterministic하게 응답 관리자가 설정한 비율대로 올바르게 배정
    • Murmur Hash3, SHA1(Facebook PlanOut), SHA256, MD5
    • Bucket(Slot)은 물리적으로 존재하는 저장 공간이 아니며, 논리적으로 존재하는 개념

    Assignment 샘플 모집단 목록을 재사용 한다면? Carryover Effect (Kohavi et al. 2012)

    • 동일한 사용자 그룹이 여러 테스트에서 지속적으로 변경 사항을 경험할 때 발생

    • 버킷 할당에 사용되는 일관된 시드 때문에 버킷은 이전 A/B 테스트를 "기억"하여 후속 테스트 결과에 영향

  2. Release :

  1. Architecture:

무작위 실험의 패턴 (Analytics)

  1. Randomization Unit = Analysis Unit ->Independence of randomization units -> User Level Randomization

  2. 실험군과 대조군의 간섭 Interference (Network Effect) -> 네트워크 클러스터 생성 [Detecting interference: An A/B test of A/B tests] -> 클러스터에 따라 사용자를 무작위로 처리하여 동일한 클러스터의 모든 사용자가 동일한 치료 그룹에 속하도록 처리

image

  1. Selection Bias 처리 하기 위한 패턴 A/A Testing(Randomization Check) & SRM(Sample Ratio Mismatch) -> A/A Testing : 부스트트랩된 A/A 테스트에서 P값 분포가 균일한지 테스트

    • H0: average metric in group A = average metric in group B
    • H1: average metric in group A ≠ average metric in group B

    -> SRM: A와 B에서 계산된 사용자 비율과 실험이 시작되기 전에 구성된 비율(예: 50/50 분할) 사이에 통계적으로 유의미한 차이

    SRM은 Microsoft에서 지난 1년 동안 수행된 실험에서 약 6%를 자치할 만큼 일반적인 Data Quality 문제

    기본적인 접근은 세그먼트 하위 모집단에 대해 카이제곱 테스트를 통해서, 비율의 불균형을 파악

  2. Variance와 민감도(Conditional Triggering & CUPED)

    -> Conditional Triggering: A/B 테스트가 진행되는 화면에 접근하기 어려울 때, Treatment를 받지 못한 사용자를 실험에 포함 시키면 오버트래킹 현상 (ATE가 0 -> Variance 증가) 작은 변화를 감지하기 어려움

    • 트리거 분석은 트리거 조건을 충족하지 못한 사용자의 이벤트를 제외

    -> Variance Reduction 방법 중 CUPED는 실험 전 공변량을 활용

    • Low Traffic에서 작은 효과를 탐지하기 위해서 CUPED-adjustment 필수 CUPED-adjusted metric =metric - (covariate - mean(covariate)) x theta
  3. Novelty & Primary effect

    -> 초두 효과 (Primacy Effect) 사용자들이 기존 제품/방식에 익숙하고 변화를 꺼려하여 발생하는 효과

    -> 신기 효과 (Novelty Effect) 변화를 좋아하고 기존 제품/방식보다 새로운 기능을 선호하여 발생하는 효과

    • 처치 효과가 언제 안정화되는지 확인하려면 (1) 실험을 오래 실행 (2) Novelty & Primary에 영향을 받지 않는 신규 사용자를 통해 실험

    • 신규 사용자는 제품을 처음 사용하기 때문에, 두 효과에 영향을 받지 않음 / 제품 사용 기간에 따라 가중치를 줄 수도 있음

표본의 수 고려

  1. 테스트 수행 기간을 정하기 위해서는 테스트를 위한 샘플 사이즈를 알아야 하며, 요구되는 파라미터 (1) Type II 에러율 β 또는 Power (1−β) -> 업계 표준 0.8 (2) 유의 수준 α -> 업계 표준 0.05 (3) 최소 검출 가능 효과 (Minimum detectable effect, MDE)

  2. 샘플 사이즈를 알게 되었다면 샘플 사이즈를 사용자 수로 나눠 테스트 수행 기간을 구할 수 있음

    • 일반적으로 2주 정도는 테스트하길 권장하지만 데이터를 더 수집할 수 있다면 길 수록 좋음 일주일 미만인 경우에는 주간 패턴을 포착하기 위해 최소 7일 동안 실험
  3. 추가적 고려 사항

    • 온라인 실험의 상황에서 데이터의 왜도나 첨도가 높은 경우, 표준 정규 분포로의 근사가 완벽하지 않을 수 있음 Alex Deng은 데이터 비대칭 상황에서 엄밀한 표본크기 결정과 정규 분포 근사를 위해 n > 100*s^2를 경험적 규칙으로 제안 (s는 왜도)
    • Kohavi et al. (2014)는 유사당 수익 지표가 17.9의 왜도를 가져, 30,000개의 표본 크기가 필요하다고 주장 → Capping으로 필요한 표본을 줄이기
    • 베르누이 분포와 같이 0과 1로 데이터가 구성된 경우 Capping이 불가능 한데, 이때, 라플라스 스무딩으로 인위적으로 새롭게 평균을 계산하여 신뢰 구간 개선
jsshin2022 commented 2 months ago

와 자료 퀄리티.... 감동이네요!

sim-so commented 1 month ago

좋은 자료를 만들어주셔서 정말 감사합니다! 자료 다시 읽어보면서 현재 실험 환경이 마련되어 있지는 않지만 업무를 하면서 여기서 RCT를 진행한다면 어떻게 할 수 있을까 고민해 볼 수 있었습니다. 그러다 관찰 단위와 관련하여 궁금한 점이 생겨 질문 드립니다!

  1. 분석할 단위에 맞춰 무작위 할당을 수행하는 것이 첫 번째 단계인데요, 주로 사용하는 '사용자'라는 단위의 조작적 정의가 어려운 경우도 많을 것 같아요. 이를테면 사용자 대부분이 로그인하지 않은 채로 서비스를 이용하여서 계정이 아닌 세션 등의 정보로 사용자를 식별해야 하는 경우도 있고, 회원가입과 로그인이 필수인 서비스이지만 한 계정을 여러 사용자가 이용하거나 한 사용자가 여러 계정을 가지는 경우도 떠오릅니다. 조작적으로 정의된 관찰 단위가 적절한지 어떻게 확인할 수 있을까요?
  2. 특히 비회원의 규모가 커서 사용자 식별이 어려운 경우에 RCT는 어떻게 이루어질 수 있을까요? 식별 가능한 사용자만 대상으로 실험군/대조군을 구성하고 실험한다면, 그 실험의 결과로 알게 된 인과효과가 식별되지 못한 사용자에게도 적용되는지/어느 정도로 적용되는지 검토할 수 있는 방법이 있을까요? 비회원 사용자와 회원 사용자 간 interference도 존재할 수 있을 것 같은데요, 이 경우 어떻게 다룰 수 있을지도 궁금해요. (이러한 어려움 때문에 사용자를 식별할 수 있도록 애쓰거나 반대로 관찰 단위를 바꾸어 실험해야 할 것 같기도 하고, RCT 외에 다른 방법을 사용할 수밖에 없을 것 같기도 하네요.)

질문을 정리하다 보니 RCT 뿐만 아니라 대부분의 실험에서 고려할 점 같아요. 다른 분들은 '사용자'(혹은 주 관찰 단위)를 주로 어떻게 정의하여 실험하시는지, 관찰 단위를 설정하는 데에 큰 어려움이 없으셨을지도 궁금합니다. 😃