본문 바로가기
통계 찔금찔끔/A|B Test

A/B Test 시리즈(2) - 애자일하게 A/B Test 진행하는 법

by 히민히 2024. 2. 18.

🚩 프로그래머스 실리콘밸리에서 날아온 A/B테스트 올인원 키트를 수강하고 일부 정리한 내용입니다.

 

 

많은 회사에서는 A/B Test 실험을 애자일하게 진행하는 것이 큰 과제라고 합니다.

그렇다면 애자일하게 하는 실험은 어떤 것을 뜻할까요?

 

1. A/B Test란 무엇인가

간략하게 설명하면, 서비스의 유저를 임의로 두 집단으로 나누고, 기존버전과 테스트 버전(여러개)을 비교하여 평가하는 방법입니다.

A/B Test 시리즈 1편에서 실제 활용사례를 확인할 수 있어요 : )

 

👉🏻 A/B Test 가 필요한 이유

  • 비지니스 관련 지표를 개선되는 지 객관적으로 측정하기 위함
  • 위험을 최소화 하기 위함
    • 사용자 설문 등이 좋아도 실제 반응을 예측할 수 없음 (거짓 설문)
    • 처음에는 작은 퍼센트의 사용자들에게만 새 기능을 노출시키고 문제가 없으면 퍼센트 증가형태
  • 주로 UI , ML 에 많이 활용된다고 함

 

👉🏻 A/B Test가 불가능한 경우

  • 버그를 수정하는 경우 → 그냥 빠르게 고치자
  • 구체적이지 않은 아이디어 테스트
    • 가설없는 AB Test는 불가!
      • 예) 새로운 추천방식이 기존의 추천방식보다 매출을 증대시키는 가?
  • 윤리적인 문제가 있을 경우
  • AB Test를 하지 않아도 될 정도의 작은 규모

 

 

2. 왜 A/B Test는 애자일해야 하는가?

AB Test 를 하기 위한 기간이 길다면?

해당 기간 동안(1년, 6개월 등) 많아야 한 두개의 ab test 만 진행할 수 있다면?

A/B Test을 세팅하고 실행할 수 있는 기간을 줄여 더 효율적으로 작업할 수 있도록 해야합니다.

(기존 몇 달 -> 몇 주로 변화하여 많은 테스트 실험 가능하게 해야함)

 ➡️ A/B Test 실행할 수 있는 기간을 줄여서 세팅해야 합니다.

 

  • 코딩 없이 A/B Test 를 진행가능하게 하는 것이 목표
    • 자주하는 테스트들은 템플릿화 하는 것이 좋음!

그렇다면, A/B test를 애자일하게 잘 실험하고 있는 회사가 있을까?

당근마켓 미다움 블로그

→ 당근마켓은 1주에 1개의 실험을 진행한다고 합니다. 굉장히 애자일하게 테스트하고 있죠

해당 프로세스를 정착하기까지는 3년이 걸렸지만, 그 이후에 빠른 개선을 통해 성장에 가속화가 걸렸다고 유추합니다 (소근)

3. A/B Test Configuration

최종적으로 애자일한 AB Test 프로세스가 적용된다면, 예로 아래와 같은 형태로 제공됩니다.

  • 코딩 없이 A/B Test를 진행가능하게 하는 것이 목표 → 템플릿화
  • 보통 테스트하는 기능을 백엔드단의 flag로 관리하는 것이 일반적
    • flag : 해당 동작의 수행여부를 판단하는 (true, false)
  • link를 통해 해당 실험의 대시보드로 연결, 유효성 검증, 실험 수치 등을 확인

 

3. 전체적인 A/B Test 프로세스 구성

아주 간단한 예시로 생각해보아요 ! 

그전에 하나의 궁금증이 있습니다.

🤔 왜 A/B Test를 내재화 시키고 싶을까?

보통 SaaS를 쓰다가 직접 구현하는 식으로 프로세스를 고도화한다고 합니다. 실험을 많이 하기 위해서는 실험이 정말 쉬워지도록! 만들어서(실험 설계, 개발부분, 분석 부분 등) 실험에 대한 회사 내 리소스를 줄이고자 하는 욕망이 커지면 자체 플랫폼 구축단계로 넘어갑니다.

보통 실험 플랫폼을 구축하는 데에는 6개월 ~ 1년 정도 걸린다고 합니다.

🔎 AB Test 프로세스

가정) 이미 실험설계를 완료하여 어떤 실험을 통해 어떤 지표가 어느정도 차이를 보이는 것이 성공적인 결과인지 명확하게 정의한 상태라고 가정합니다.

1. 유저를 실험환경에 할당하기

일부 유저는 A환경으로 일부 유저는 B환경으로 보내는 로직을 태웁니다. (백엔드)

  • AB Test 사용자 버킷 정보 
    Experiment ID variant_id id timestamp
    실험 id (어떤실험인지) 0 유저 id  
      1 유저 id  

 


1. 미리 모든 사용자를 A/B로 나누기

  • 로그인한 사용자들을 대상으로 하는 경우
  • 비로그인한 사용자들은 활용 X, 테스트 중에 신규 유입된 사용자들 적용 X
  • 다양한 상태에서 bias를 제거가능

이 방법은 넷플릭스가 활용하는 방법이라고 합니다.

 

2. 동적으로 A/B Test 진행 중에 나누기

  • 일반적으로 많이 사용되는 방법
  • bias 생길가능성 있음

🔎 유저를 나누는 연산 수행 과정 (예)

  • input : user_id
  • output : 결과값

 MD5숫자나머지값 을 활용하는 것이 기본

  • MD5 : 임의 값을 입력받아서 128비트 해시값을 출력하는 알고리즘

다만, 이렇게만 진행한다면 항상 A만 할당되고 B만 할당되는 문제 있을 수 있음

(다른 실험에서도 동일하게 계속 A 유저들은 A만 할당)

 

따라서 아래와 같이 바꿔서 적용을 많이 합니다.

  • input : user_id + Experiment ID(실험 id)
  • output : 결과값

 

2. 각종 이벤트 데이터와 연계하여 대시보드화 진행

  • 현재 가지고 있는 A/B Test 사용자 버킷 정보와 각종 이벤트 데이터, 마케팅 데이터를 연합하여 데이터 마트 구성
  • 데이터마트에서 필요한 지표들을 뽑아 대시보드 시각화

 

🚀 대시보드에서 확인해야 할 것들

대시보드에 해당 내용을 녹여서 실험 진행과정이 제대로 되고 있는지, 결과값은 어떻게 볼 수 있는지 바로바로 확인하는 것이 좋을 것 같습니다!

 

  • 실험 측면 빠르게 확인하기
    • 우선 제대로 유저들이 비슷한 비율로 할당되었는지 확인이 필요
    • 색깔로 명시하여 실험단계에 잘못된 부분을 체크
      • 만일 해당단계에서 잘못된 부분이 보였다면 어느 부분인지 체크 필요
        1. 데이터추출 부분
        2. 개발 쪽 설계 부분

 

예시)

각 A환경 ,B 환경에 0.5 비율로 들어갔는지 비율검정(Z검정)을 진행

H1 : pa = 0.5

H1 : pa != 0.5

Z-score = (pa - 0.5) /sqrt(pa(1-pa)/N)

 

이 값을 대시보드에서 유저 수(user cnt)에 따른 Z검정 결과값을 색깔로 표현하면 결과값을 더 빠르게 확인할 수 있습니다!

 

예)

색깔을 통해 어떤 부분에서 차이가 있는 지 빠르게 확인

 

동일한 로직으로 Impression, Click, 결과값에도 적용한다면 대시보드에서 바로 실험에 대한 결과를 확인할 수 있습니다.

반응형

댓글