가령 운영중인 사이트가 **고객고유번호(user_id)**를 임의의 정수로 관리되고 있는 상태다.
상품 소개 화면에서 구매버튼을 누르면 결제화면으로 넘어가는데,
버튼 색깔에 변화를 줘서 테스트 하고 싶다.
10%의 사용자에게는 빨간버튼 을 보여주고,
또 다른 10%의 사용자에게는 파란버튼 을 보여주고,
나머지 사용자에게는 원래버튼을 보여주고 싶다. 고객을 어떻게 나눌까?
**고객고유번호(user_id)**를 10으로 나눈 나머지는 0부터 9까지다.
이 나머지 값이 같은 사용자끼리 같은 그룹 으로 묶는다. 그룹0, 그룹1, ..., 그룹9.
그룹0은 테스트 A
로 그룹1는 테스트 B
로 지정하고 싶다고 가정하자.
def ab_test_target :
group = user_id % 10
if group == 0 :
return 'A'
elif group == 1 :
return 'B'
else :
return 'C'
사용자의 액션을 tracking 할 수 있는 환경이 필요한데,
보통 특정 서버에 로그를 남긴다.
function tracking ( params ) {
var i = new Image ( ) ;
i . src = 'http://tracking.example.com/beacon.gif' +
'?uid' + params . user_id + '&grp=' + params . group + '&page' + params . page ;
}
그룹별로 분기처리하여 콘텐츠를 보여주고 그에 따른 트래킹 코드를 심는다.
<!-- 상품소개화면 -->
< p >
< img src ="상품_이미지.jpg " alt ="상품 이미지 " />
</ p >
{% if ab_test_target is 'A' %}
< button > 빨간구매버튼</ button >
{% elif ab_test_target is 'B' %}
< button > 파란구매버튼</ button >
{% else %}
< button > 원래구매버튼</ button >
{% endif %}
< script >
var user_id = { { user. id } } ,
group = { { ab_test_target } } ;
tracking ( { user_id :user_id , group :group , page :'view' } ) ;
</ script >
<!-- 결제화면 -->
< p >
< button > 결제버튼</ button >
</ p >
< script >
var user_id = { { user. id } } ,
group = { { ab_test_target } } ;
tracking ( { user_id :user_id , group :group , page :'pay' } ) ;
</ script >
count(*).where(grp='A', page='view') => viewA
count(*).where(grp='B', page='view') => viewB
count(*).where(grp='A', page='pay') => payA
count(*).where(grp='B', page='pay') => payB
한 사용자가 여러번 본 것에 대한 중복을 제거하고 싶다면
count(distinct uid).where(grp='A', page='view') => viewA
count(distinct uid).where(grp='B', page='view') => viewB
count(distinct uid).where(grp='A', page='pay') => payA
count(distinct uid).where(grp='B', page='pay') => payB
빨간버튼과 파란버튼 중 상대적으로 구매를 많이 유도하는 것은
payA / viewA
와 payB / viewB
를 비교하여 높은 것이라고 할 수 있을까?
트래킹 코드 심고 분석하는 과정이 좀 더 편해진다.