현재 프로덕트가 성공적으로 운용되고 있음을 확인할 수 있는 지표에는 무엇이 있을까?
- 매출액
- 주문 고객 비중 / 전체 고객 수
- 주문 고객의 구매주기
- 구매당 단가
등등 상황에 맞는 다양한 지표들이 존재할텐데, 오늘은 주문 고객의 구매주기에 대해 알아보려고 한다.
프로모션을 진행할 때 신규 고객을 타겟팅하는 비용과 기존 주문 고객의 재주문을 촉진하는 비용 차이는 3~6배 정도 차이 난다고 한다. 따라서 기존에 주문 이력이 있는 고객을 관리해 주문 주기를 단축시키려는 노력이 필요하다. 구매주기가 짧은 충성고객의 비율이 늘어날수록 매출은 함께 성장한다.
먼저, lag() over 함수를 이용하여 customer_id(고객id)를 기준으로 order_date와 직전의 order_date의 날짜 차이를 구하는 방법이 있다.
with
temp_01 as (
select 주문id, 유저id, 주문일자
, lag(주문일자) over (partition by 유저id order by 주문일자) as 이전주문일자
from nw.orders
),
temp_02 as (
select 주문id, 유저id, 주문일자
, 주문일자 - 이전주문일자 as days_since_prev_order
from temp_01
where prev_ord_date is not null
)
select * from temp_02;
위의 경우는 서비스기간 전체를 대상으로 한 것이므로, 최근 유저의 행동 데이터를 파악하기 위해 기간을 90일로 조정하고자한다.
where절에 90일로 한정 짓는 조건만 주게 된다면,분석 기간으로 부터 일주일 전에 가입한 고객이 일주일 전에 1회 주문한 것과 분석 기간 90일간 1회 주문한 고객의 구매 주기를 같다고 보게된다.
이렇게 일회성 구매 고객을 제외하려면 분석 기간 중 2회 이상 구매가 있었던 고객만 대상으로 2회 이상 주문한 날짜와 날짜 사이의 거리만 구해 평균을 내면 된다. 최근 90일간 3회 주문을 했어도 최근 50일 동안 2회 주문만 있었던 고객이라면 평균 구매 주기가 30일이 아닌 25일이 된다.
(고객당 마지막 구매 일 - 고객당 첫 구매 일) / (주문 건수 - 1)
SELECT customer_id
,first_order_date
, last_order_date
,last_order_date::date - first_order_date::date as diff
,(last_order_date::date - first_order_date::date) / (cnt_order - 1) as purchasing_cycle
FROM (
SELECT customer_id
,MIN(order_date ) as first_order_date
,MAX(order_date ) AS last_order_date
,COUNT(order_id) AS cnt_order
FROM nw.orders
where order_date >='1998-02-06'
group BY customer_id
having count(order_id) >=2
)AS temper;
이렇게 고객의 평균 구매주기를 알아내면, 업계의 평균 구매주기가 30일이고, 현재 우리 프로덕트의 평균 구매주기가 40일일 경우 이러한 구매주기를 단축 시키기 위해 노력이 필요하다.
구매확률이 높은 고객, 충성고객에게 구매 주기보다 이르게 할인 쿠폰을 제공하는 방식으로 구매유인을 제공할 수 있고, 더 새롭고 비싼 신제품을 만들게 할 수도 있다. 필수재에 가까운 생수의 경우 단축시키는데 한계가 있지만, 콘텐츠, 외식, 의류의 경우 더 자주 구매하도록 만들 수 있다.