[멋사 SQL 3day] AARRR, 매출분석, 고객세분화분석
💡 AARRR
서비스 성장 분석 방법론
- A(Acquisition, 획득): 광고 등의 방법으로 새로운 사용자를 얻어오는 단계
- A(Activation, 활성화): 회원 가입, 튜토리얼 등 사용자를 활성화 시키는 단계
- R(Retention, 리텐션): 지속적으로 서비스를 사용하게 만드는 단계
- R(Revenue, 매출): 매출을 만드는 단계
- R(Referral, 추천): 다른 사용자에게 제품을 추천하는 단계
ARPU = 매출 / 전체 유저 수
- 유저 한명 당 매출액
ARPPU = 매출 / 결제 유저 수
- 결제 유저 한명 당 매출액
당연히 ARPU < ARPPU이다!!
따라서 매출은 아래와 같이 계산할 수 있다.
매출 = 결제 유저 수 X ARPPU
매출 = 유저 수 X 결제자 비율 X ARPPU
📍 회사의 “전체 매출이 증가”하고 있는 상황이라면 여러가지 시나리오가 있을 수 있다.
- 결제 유저와 미결제 유저 비율은 똑같은데 전체 유저가 증가할 수 있다.
- 전체 유저의 숫자는 똑같은데 결제 유저의 비율이 증가할 수 있다. 구매를 안하던 사람들이 구매를 하기 시작한다.
- 전체 유저 숫자도 똑같고, 결제 유저 숫자도 똑같은데 인당 결제액이 늘어나고 있다. 사람들이 한번에 결제를 더 많이 하거나, 같은 기간 내에 더 자주 주문하고 있다.
위에 시나리오는 사후 분석이었지만, 매출 증대를 위한 전략을 짜는데에도 위와 같은 분석 방법론을 똑같이 적용할 수 있습니다.
- “지금까지 한 번도 결제를 안 한 사람들을 대상으로, 첫 구매 할인 혜택을 제공하자”는 전체 유저의 비율에서 결제 유저의 비율을 늘리는 전략
- “현재 고객들에게 Up-selling(구독 업그레이드 등 더 비싼 제품을 구매하게 하는 것)을 하자"는 ARPPU, 즉 인당 결제액을 늘리는 전략
✅데이터 셋 및 EDA(탐색적 데이터 분석)
데이터셋: Brazilian E-Commerce Public Dataset by Olist
- olist_orders_dataset → orders
- olist_order_payments_dataset → payments
- olist_customers_dataset → customers
💰 매출 트렌드
✏️2017년 5월 1일부터 2017년 11월 19일까지 이 쇼핑몰의 일일 매출액
select date(orders.order_purchase_timestamp) dt,
round(sum(payments.payment_value),2) revenu_daily
from olist_orders_dataset as orders
inner join olist_order_payments_dataset as payments on orders.order_id = payments.order_id
where orders.order_purchase_timestamp between '2017-05-01 00:00:00' and '2017-11-19 23:59:59'
group by 1
✏️2017년 5월 1일부터 2017년 11월 19일까지 이 쇼핑몰의 일별 결제 유저(PU; Paying User)수, 매출액, ARPPU(Average Revenue Per Paying User)
select date(orders.order_purchase_timestamp) dt,
count(distinct orders.customer_id) as PU,
round(sum(payments.payment_value),2) as 매출액,
round(sum(payments.payment_value) / count(distinct orders.customer_id),2) as APRRU
from olist_orders_dataset as orders
inner join olist_order_payments_dataset as payments on orders.order_id = payments.order_id
where orders.order_purchase_timestamp between '2017-05-01 00:00:00' and '2017-11-19 23:59:59'
group by dt
분석 결론
- 결제 유저와 미결제 유저의 비율은 똑같은데, 전체 유저가 증가하고 있다.
- 전체 유저의 숫자는 똑같은데, 결제 유저의 비율이 증가하고 있다. (구매를 안 하던 사람들이 구매하기 시작)
- 전체 유저 숫자도 똑같고, 결제 유저 숫자도 똑같은데 인 당 결제액이 늘어나고 있다. (사람들이 한 번에 결제를 더 많이 하거나, 같은 기간 내에 더 자주 주문하고 있음)
👉 1과 2 중 하나이므로 이에 대한 추가분석이 필요하다.
📊고객 세분화(Customer Segmentation) 분석
👩🏻💻 “매출이 오르고 있습니다. 이유는 결제 유저가 늘었기 때문입니다”
🤔 ”그러면 앞으로 매출을 더 늘리려면 어떻게 해야합니까?”
고객 세분화 분석이란, 전체 유저를 여러 그룹으로 나누어 각 그룹의 특성을 보는 것을 말한다. 즉 좀더 추가적으로 보는 분석이다.
고객 세분화를 할 수 있는 다양한 기준들👇
- 성, 연령, 사는 지역(customer_state), 국가 등 유저의 demography
- 유저 engagement 정도로 구분 (결제유저, 미결제유저 / 신규구매, 재구매 / 특정 기능 N회 이상 경험, N회 미만 경험 등)
- 가입 시기별로 구분 👈🏼 이 기준으로 나누는걸 Cohort 분석이라고 특별하게 부르기도 합니다.
- 유입 경로에 따른 구분
✏️ 2017년 매출 Top 3 지역이었던 ‘SP’, ‘RJ’, ‘MG’ 주 각각의 일일 매출액과 일일 전체 매출액에서 차지하는 비중을 계산해주세요
select date(orders.order_purchase_timestamp) as dt,
round(sum(if (customer_state="SP", payments.payment_value,"")),2) as SP,
ROUND((sum(if (customer_state="SP", payments.payment_value,"")) / sum(payment_value))*100,2) as SP_total,
round(sum(if (customer_state="RJ", payments.payment_value,"")),2) as RJ,
ROUND((sum(if (customer_state="RJ", payments.payment_value,"")) / sum(payment_value))*100,2) as RJ_total,
round(sum(if (customer_state="MG", payments.payment_value,"")),2) as MG,
ROUND((sum(if (customer_state="MG", payments.payment_value,"")) / sum(payment_value))*100,2) as MG_total
from olist_orders_dataset as orders
inner join olist_customers_dataset as customers on orders.customer_id = customers.customer_id
inner join olist_order_payments_dataset as payments on orders.order_id = payments.order_id
where orders.order_purchase_timestamp between '2017-05-01 00:00:00' and '2017-11-19 23:59:59'
group by dt
order by dt
- 딱히 어떤 주가 매출에 견인을 하고 있지는 않은 것 같다.
👉그러면은 매출에 영향을 주는 원인은 주가 아님을 알 수 있다! 다른 원인을 찾아볼 필요가 있다!