Segmentace recency, frekvence, hodnoty (RFM)

Segmentace zákazníků v Pythonu

Karolis Urbonas

Head of Data Science, Amazon

Co je RFM segmentace?

Behaviorální segmentace zákazníků na základě tří metrik:

  • Recency (R)
  • Frekvence (F)
  • Peněžní hodnota (M)
Segmentace zákazníků v Pythonu

Seskupování hodnot RFM

Hodnoty RFM lze seskupit několika způsoby:

  • Percentily, např. kvantily
  • Paretovo pravidlo 80/20
  • Vlastní – na základě obchodních znalostí

Budeme implementovat seskupování na základě percentilů.

Segmentace zákazníků v Pythonu

Stručný přehled percentilů

Postup výpočtu percentilů:

  1. Seřazení zákazníků podle dané metriky
  2. Rozdělení zákazníků do předem stanoveného počtu stejně velkých skupin
  3. Přiřazení štítku každé skupině
Segmentace zákazníků v Pythonu

Výpočet percentilů v Pythonu

Data s osmi CustomerID a náhodně vypočítanými hodnotami Spend.

dummy_percentile_data

Segmentace zákazníků v Pythonu

Výpočet percentilů v Pythonu

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

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

Segmentace zákazníků v Pythonu

Přiřazování štítků

  • Nejvyšší skóre pro nejlepší metriku – nejlepší není vždy nejvyšší, např. recency
  • V tomto případě je označení inverzní – čím novější zákazník, tím lepší

Segmentace zákazníků v Pythonu

Přiřazování štítků

# Create numbered labels
r_labels = list(range(4, 0, -1))

# Divide into groups based on quartiles recency_quartiles = pd.qcut(data['Recency_Days'], q=4, labels=r_labels)
# Create new column data['Recency_Quartile'] = recency_quartiles
# Sort recency values from lowest to highest data.sort_values('Recency_Days')
Segmentace zákazníků v Pythonu

Přiřazování štítků

Jak vidíte, štítky kvartilů jsou obrácené, protože novější zákazníci jsou hodnotnější.

recency_quartiles

Segmentace zákazníků v Pythonu

Vlastní štítky

Lze definovat seznam s řetězcovými nebo jinými hodnotami podle potřeby.

# Create string labels
r_labels = ['Active', 'Lapsed', 'Inactive', 'Churned']

# Divide into groups based on quartiles recency_quartiles = pd.qcut(data['Recency_Days'], q=4, labels=r_labels) # Create new column data['Recency_Quartile'] = recency_quartiles # Sort values from lowest to highest data.sort_values('Recency_Days')
Segmentace zákazníků v Pythonu

Vlastní štítky

Vlastní štítky přiřazené každému kvartilu

Recency_quartiles

Segmentace zákazníků v Pythonu

Procvičme si percentily!

Segmentace zákazníků v Pythonu

Preparing Video For Download...