RFM(Recency, Frequency, Monetary) 세분화

Python을 활용한 고객 세분화

Karolis Urbonas

Head of Data Science, Amazon

RFM 세분화란?

세 가지 지표에 기반한 고객 행동 세분화:

  • Recency(R)
  • Frequency(F)
  • Monetary Value(M)
Python을 활용한 고객 세분화

RFM 값 그룹화

RFM 값은 여러 방식으로 그룹화할 수 있습니다:

  • 백분위수(예: 분위수)
  • 파레토 80/20 컷
  • 사용자 지정 - 비즈니스 지식 기반

이 강의에서는 백분위수 기반 그룹화를 구현합니다.

Python을 활용한 고객 세분화

백분위수 요약

백분위수 계산 절차:

  1. 해당 지표로 고객 정렬
  2. 동일 크기의 사전 정의된 그룹으로 분할
  3. 각 그룹에 라벨 할당
Python을 활용한 고객 세분화

Python으로 백분위수 계산

8개의 CustomerID와 임의로 계산된 Spend 값이 있는 데이터입니다.

dummy_percentile_data

Python을 활용한 고객 세분화

Python으로 백분위수 계산

spend_quartiles = pd.qcut(data['Spend'], q=4, labels=range(1,5))

data['Spend_Quartile'] = spend_quartiles
data.sort_values('Spend')

Python을 활용한 고객 세분화

라벨 지정

  • 최고 점수를 최상의 지표에 부여 - 최상이 항상 높음은 아님(예: 최근성)
  • 이 경우 라벨은 반대임 - 더 최근일수록 더 좋음

Python을 활용한 고객 세분화

라벨 지정

# 번호 라벨 생성
r_labels = list(range(4, 0, -1))

# 분위수로 그룹 분할 recency_quartiles = pd.qcut(data['Recency_Days'], q=4, labels=r_labels)
# 새 열 생성 data['Recency_Quartile'] = recency_quartiles
# 최근성 값을 오름차순 정렬 data.sort_values('Recency_Days')
Python을 활용한 고객 세분화

라벨 지정

보시다시피, 더 최근일수록 가치가 높으므로 분위수 라벨이 반대로 매겨집니다.

recency_quartiles

Python을 활용한 고객 세분화

사용자 지정 라벨

사용 사례에 따라 문자열 등 원하는 값으로 목록을 정의할 수 있습니다.

# 문자열 라벨 생성
r_labels = ['Active', 'Lapsed', 'Inactive', 'Churned']

# 분위수로 그룹 분할 recency_quartiles = pd.qcut(data['Recency_Days'], q=4, labels=r_labels) # 새 열 생성 data['Recency_Quartile'] = recency_quartiles # 오름차순 정렬 data.sort_values('Recency_Days')
Python을 활용한 고객 세분화

사용자 지정 라벨

각 분위수에 사용자 지정 라벨이 할당됨

Recency_quartiles

Python을 활용한 고객 세분화

백분위수로 연습해 봅시다!

Python을 활용한 고객 세분화

Preparing Video For Download...