본문 바로가기
부트캠프 - 패캠 데이터분석

a/b test (첫 도전, 패캠 강의)

by yj-data 2025. 6. 11.

목차


    a/b test를 진행하는 이유: 가설을 대조해서 효과적인 방법을 확인하기

    자료: 패스트캠퍼스 데이터 분석 마스터클래스 강의

     

    • 실무사례: 배너위치를 변경하면 CTR(클릭전환율)이 증가할것이다.
      • 배너위치 - 독립변수, 클릭전환율 - 종속변수(측정가능해야함)
      • 단점:
        • 가설을 설계 후 결과를 얻더라도 그 결과가 유의미한 결과인지 신뢰하기 어려운 경우가 있음. 따라서 샘플 사이즈 및 실험기간 계산, 유의성 검증 등 고급 통계지식을 사용하게 되는데, 실무에서는 이런 고급 통계지식을 적용하기 어려운 경우가 있음
        • 설정한 독립변수 외 변수의 완벽한 통제가 어려움
        • 경우에 따라 테스트 비용이 많이 든다.
      • 그 단점에도 불구하고, 사용하는 이유는 a/b 테스트를 하지 않으면 더 많은 비용이 들 수 있기 때문
    • 독립변수와 종속변수
      • 독립변수: 종속변수 변화에 대해 부분적으로 설명할 수 있는 요소로, 다른 변수의 영향을 받지 않음
      • 종속변수: 독립 변수의 영향을 받아서 변화하는 변수. 종속변수의 변화에 양에 따라서 가설에 효용성이 결정되기 때문에, 종속 변수는 셀 수 있어야 함. 어떠한 기준으로 측정할 것인지에 대해서 미리 기획을 해야 함.
        • 실무에서는 종속 변수에게 유의한 독립 변수를 찾아내는 것 또한 매우 어려운 과제임.
    • 이중차분법: 독립변수와 종속변수 간 인과효과를 측정하기 위한 인과추론법
      • 실험자가 지정한 독립변수 이외에 다른 독립변수의 개입을 최대한 막는 것이 목적
      • 실험군(treatment) vs 대조군(control): (종속변수와 상관성이 높아보이는) 독립변수에 변화를 주는 그룹 vs 대조군은 처치하지 않는 그룹.
      • 측정방법: 처치전과 처치 후의 결과를 확인함(실험군 대조군 둘다)
      • 이 경우, 이중차분 = (A-a) - (B-b) 


    문제 풀어보기

     

    주제: 5천원 할인쿠폰 vs 5% 할인쿠폰, 주문전환율이 높은것은?

    목표: 이탈고객복귀 프로젝트 (테스트 기반의 고효율 쿠폰 발굴 및 이탈고객 복귀율 제고)

    쿠폰상세:

    • 정액쿠폰: 오천원할인쿠폰, 최소주문금액 십만원, 최대할인금액 오천원
    • 정율쿠폰: 오프로 할인쿠폰, 최소주문금액 십만원, 최대할인금액 칠천원

    프로젝트 상세

    • 가설수립: 정액이 기재되어 있는 할인쿠폰의 주문 전환율이 더 높을 것이다
    • 종속변수: 주문전환율(1: 실험기간중 주문이 한번이라도 있는 경우)
    • 독립변수: 쿠폰유형
    • 대조그룹: 쿠폰 미지급 100명
    • 실험그룹: 할인쿠폰 각 100명
    • 관찰기간: 처치이전 6/5 - 6/11, 쿠폰발급 6/12, 처치이후 6/12-6/18

     

    기본 데이터는 강의에서 제공함.

    table1: coupon_target_table - 회원번호, 지급한 쿠폰, 속하는 그룹(컨트롤, test1, test2) 등

    table2: order_master_did - 회원번호, 주문번호, 주문일

     

     

    1. 표 살펴보기

    --target table
    select *
    from coupon_target_table ctt 
    
    -- order master table
    select *
    from order_master_did omd

    2. 테이블 조인해서 살펴보기

    select *
    from coupon_target_table ctt
    	left join order_master_did omd
    	on ctt.mem_no = omd.mem_no

    3. 그룹핑해서 데이터가 잘 있는지 확인

    --sample size by group
    	select "group", count(mem_no) as mem_cnt --무조건 큰따옴표
    	from coupon_target_table ctt 
    	group by 1

    4. 이중차분법을 위한 데이터 집계

    #my version
    	select "group",
    		case
    			when ord_dt between '2023-06-05' and '2023-06-11' then '처치 전'
    			when ord_dt between '2023-06-12' and '2023-06-18' then '처치 후'
    			else null
    	end as "period", count(DISTINCT mem_no) as ord_cnt
    	from (
    		select *
    		from coupon_target_table ctt 
    		left join order_master_did omd 
    		on ctt.mem_no = omd.mem_no )
    	GROUP BY "group", period
    	having period is not null;
    #강의에서 배운 버전, 내가 처음 만든 버전에 비해 생각의 흐름이 더 확실해보임
    WITH
    T1 as(
    	select ctt.mem_no
    			, "group"
    			, ord_no
    			, case
    				when ord_dt between '2023-06-05' and '2023-06-11' then '처치 전'
    				when ord_dt between '2023-06-12' and '2023-06-18' then '처치 후'
    			end as period
    	from coupon_target_table ctt
    	left join order_master_did omd on ctt.mem_no = omd.mem_no 
    )
    	select "group"
    			, period
    			, count(distinct mem_no) as ord_cnt
    	from T1
    	where period is not null
    	group by 1,2

    5. 이중차분법으로 데이터 확인

      이중차분
    CONTROL 62 56 -6 -
    TEST1 36 40 4 4-(-6) = 10%
    TEST2 61 62 1 7

     

    결론: 

    • TEST1과 TEST2가 각각 10, 7 즉 총 3%밖에 차이가 안 나서 실무적으로는 의미가 없을 확률이 높음. 
      • (내생각) 실무에서는 업무를 하다보면 쌓인 나만의 빅데이터에 기반하여, 이 결과가 의미가 있는지 없는지를 판단할 때도 있겠지만, 최종적으로 어떤 차이가 데이터에서 보였을 때 이것이 유의한 차이가 있는지에 대해서 검증을 하게 되는 것이 아닌가 싶다. 다만 그 부분은 이 강의에서는 일단 다루지 않았음(추후 강의에는 나올지도?). 아니면 현실에서는 검증은 잘 안하는건가, 그 부분을 잘 모르겠다.

     

    첫 초미니 AB테스트 소감:

    너무 기대를 했어서 그런가 ㅎㅎㅎ 생각보다 김빠지는 느낌이 있지만 그래도 첫 AB테스트를 진행해보니 신이 난다ㅎㅎㅎ 같은 강의에 다른 분석 기법들도 더 배울수 있고 최종적으로 미니 프로젝트도 해볼 수 있는 듯 한데, 이 부분은 언제 할지 계획을 짜봐야겠다. 꼭 한번 해봐야할듯. 그리고 SQL 놓은지 몇달 되었다고 다 까먹었네ㅠㅠ 그래도 프로그래머스 레벨 2까지 손쉽게 완료하던 나였는데..흑흑.. 다음주에 MYSQL 사전강의 들으면서 다시 복기하고, 블로그에도 차근차근 SQL 위키도 만들어야겠다.