목차
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 위키도 만들어야겠다.
'부트캠프 - 패캠 데이터분석' 카테고리의 다른 글
| OT날! 앞으로 작성해야 할 학습 블로그 상세사항 (0) | 2025.06.23 |
|---|---|
| 부트캠프에 들어가기 전, 5-6월 학습 내용 기록 (1) | 2025.06.19 |
| 드디어 사전 강의 1개 완료!!!!! (1) | 2025.06.06 |
| 패스트캠퍼스 부트캠프 합격!!!(Feat.패캠 선택 이유, 지원과정) (2) | 2025.05.19 |
| 비전공자의 데이터 분석 학습 루트 (1) | 2025.04.29 |