세그먼트 프로파일링과 해석

Python을 활용한 고객 세분화

Karolis Urbonas

Head of Data Science, Amazon

고객 페르소나 구축 접근법

  • 클러스터별 요약 통계(예: 평균 RFM)
  • 스네이크 플롯(마케팅 리서치)
  • 전체 대비 클러스터 속성의 상대적 중요도
Python을 활용한 고객 세분화

클러스터별 요약 통계

  • 권장값 주변의 여러 k로 k-평균 세분화 실행
  • 원본 DataFrame에 클러스터 레이블 컬럼 생성:

    datamart_rfm_k2 = datamart_rfm.assign(Cluster = cluster_labels)
    

    클러스터별 평균 RFM과 크기 계산:

    datamart_rfm_k2.groupby(['Cluster']).agg({
       'Recency': 'mean',
       'Frequency': 'mean',
       'MonetaryValue': ['mean', 'count'],
    }).round(0)
    
    • k=3에도 동일하게 수행
Python을 활용한 고객 세분화

클러스터별 요약 통계

  • 각 클러스터링 해의 평균 RFM 비교
Python을 활용한 고객 세분화

세그먼트 이해·비교를 위한 스네이크 플롯

  • 세그먼트 비교를 위한 마케팅 리서치 기법
  • 세그먼트별 속성의 시각적 표현
  • 먼저 정규화(센터링·스케일링) 필요
  • 각 클러스터의 속성별 정규화 평균을 플롯
Python을 활용한 고객 세분화

스네이크 플롯을 위한 데이터 준비

datamart_normalized를 DataFrame으로 변환하고 Cluster 컬럼 추가

datamart_normalized = pd.DataFrame(datamart_normalized, 
                                   index=datamart_rfm.index, 
                                   columns=datamart_rfm.columns)
datamart_normalized['Cluster'] = datamart_rfm_k3['Cluster']

데이터를 롱 포맷으로 melt하여 RFM 값과 지표명이 각각 1개 컬럼에 저장되도록 함

datamart_melt = pd.melt(datamart_normalized.reset_index(), 
                    id_vars=['CustomerID', 'Cluster'],
                    value_vars=['Recency', 'Frequency', 'MonetaryValue'], 
                    var_name='Attribute', 
                    value_name='Value')
Python을 활용한 고객 세분화

스네이크 플롯 시각화

plt.title('Snake plot of standardized variables')
sns.lineplot(x="Attribute", y="Value", hue='Cluster', data=datamart_melt)

Python을 활용한 고객 세분화

세그먼트 속성의 상대적 중요도

  • 각 세그먼트 속성의 상대적 중요도 파악에 유용함
  • 각 클러스터의 평균 계산
  • 전체 집단의 평균 계산
  • 중요도 점수 = 두 값을 나누고 1을 빼기(클러스터 평균=집단 평균이면 0)
cluster_avg = datamart_rfm_k3.groupby(['Cluster']).mean()

population_avg = datamart_rfm.mean()
relative_imp = cluster_avg / population_avg - 1
Python을 활용한 고객 세분화

상대적 중요도 분석 및 플로팅

  • 비율이 0에서 멀어질수록, 해당 세그먼트의 속성 중요도(전체 대비)가 커집니다.
relative_imp.round(2)
         Recency  Frequency  MonetaryValue
Cluster                                   
0          -0.82       1.68           1.83
1           0.84      -0.84          -0.86
2          -0.15      -0.34          -0.42
# Plot heatmap
plt.figure(figsize=(8, 2))
plt.title('Relative importance of attributes')
sns.heatmap(data=relative_imp, annot=True, fmt='.2f', cmap='RdYlGn')
plt.show()
Python을 활용한 고객 세분화

상대적 중요도 히트맵

         Recency  Frequency  MonetaryValue
Cluster                                   
0          -0.82       1.68           1.83
1           0.84      -0.84          -0.86
2          -0.15      -0.34          -0.42
Python을 활용한 고객 세분화

이제 다양한 고객 프로파일링 기법을 직접 실험해 보세요!

Python을 활용한 고객 세분화

Preparing Video For Download...