SQL/멋쟁이사자7기&데이터리안

[멋사 SQL 2day] RFM Segmentation, 테이블 피봇

dundunee 2022. 10. 4. 21:45

# RFM Segmentation

고객 세분화 모형 중 실무에서 자주 사용하는 모형이다.

 

  •  Recency: 얼마나 최근에 구매했는지
  • Frequency: 얼마나 자주 구매했는지
  • Monetary: 얼마나 많은 금액을 구매했는지

RFM segmentation은 RFM각 항목의 값을 기준으로 고객을 분류하는 방법이다. 단계를 나누는 기준은 서비스의 특정에 따라 다르게 정할 수 있다. 예를 들어 자주 일어나지 않는 이벤트(결혼, 채용 등)를 다루는 서비스의 경우 Recenct만점 기준을 길게 잡아야 할 수도 있고, 큰 의미가 없을 수도 있다.

 

 

보통 CRM 마케팅에 많이 사용된다.

보통 RFM으로 고객군을 나눌때에는 우리 서비스에 충성도가 높은 그룹과 낮은 그룹을 찾고, 리소스를 투입했을 때 비교적 성과가 좋을 것 같은 그룹과 그렇지 않을 것 같은 그룹을 찾아서 분류된 고객군의 특정에 맞게 CRM전략을 세우곤 한다.

 

- SQL의 CASE 또는 IF 조건문을 사용해 구할 수 있다. 

 


# 테이블 피봇

테이블 피봇은 행으로 나열되어 있던 데이터를 열방향으로 변환해서 좀 더 데이터를 한눈에 보고싶을 때 사용한다.

엑셀의 피봇테이블과 같이 볼 수 있으며, 실무에서 많이 쓰인다!

날짜별로, 카테고리별로 매출을 구하고싶다거나, 고객 분류별로 구매 상품 카테고리별로 데이터를 보고싶어할때도 사용한다. 즉, 한가지 기준으로 데이터를 집계해서 보고싶다 할때는 그룹핑으로 충분한데, 두 가지 기준으로 데이터를 확인해보고 싶다 하면 그룹핑한 데이터는 보기 불편하기에 피봇 테이블을 사용하는 것이 좋다.

 

테이블 피봇을 할 때도 조건문과 집계함수가 주로 쓰인다고 볼 수 있다. 아래는 테이블 피봇의 예시다. 

 

https://solvesql.com/의 플레이그라운드에서 US ECOMMERCE Records 2020 데이터의 records테이블을 사용해 지역별 가구 카테고리별 주문 수를 출력해보고자 한다. 

이를 구현하는 코드는 아래와 같다. 

select region as Region,
       count(distinct(case when category = "Furniture" then order_id end)) as Furniture,
       count(distinct(case when category = "Office Supplies" then order_id end)) as 'Office Supplies',
       count(distinct(case when category = "Technology" then order_id end)) as Technology
from records
group by Region
order by Region