Segmentação RFM (recência, frequência e valor)

Segmentação de Clientes em Python

Karolis Urbonas

Head of Data Science, Amazon

O que é segmentação RFM?

Segmentação comportamental de clientes com base em três métricas:

  • Recência (R)
  • Frequência (F)
  • Valor monetário (M)
Segmentação de Clientes em Python

Agrupando valores de RFM

Os valores de RFM podem ser agrupados de várias formas:

  • Percentis, ex.: quantis
  • Corte de Pareto 80/20
  • Personalizado — baseado no conhecimento do negócio

Vamos implementar o agrupamento por percentis.

Segmentação de Clientes em Python

Revisão rápida de percentis

Processo para calcular percentis:

  1. Ordenar clientes por essa métrica
  2. Dividir em um número predefinido de grupos de mesmo tamanho
  3. Atribuir um rótulo a cada grupo
Segmentação de Clientes em Python

Calcular percentis com Python

Dados com oito CustomerID e valores de Spend calculados aleatoriamente.

dummy_percentile_data

Segmentação de Clientes em Python

Calcular percentis com Python

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

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

Segmentação de Clientes em Python

Atribuindo rótulos

  • Maior pontuação para a melhor métrica — nem sempre é o maior valor (ex.: recência)
  • Aqui, o rótulo é inverso — quanto mais recente o cliente, melhor

Segmentação de Clientes em Python

Atribuindo rótulos

# 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')
Segmentação de Clientes em Python

Atribuindo rótulos

Como dá para ver, os rótulos dos quartis são invertidos, já que clientes mais recentes valem mais.

recency_quartiles

Segmentação de Clientes em Python

Rótulos personalizados

Podemos definir uma lista com strings ou outros valores, conforme o caso de uso.

# 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')
Segmentação de Clientes em Python

Rótulos personalizados

Rótulos personalizados atribuídos a cada quartil

Recency_quartiles

Segmentação de Clientes em Python

Vamos praticar com percentis!

Segmentação de Clientes em Python

Preparing Video For Download...