Perfila e interpreta segmentos

Segmentación de clientes en Python

Karolis Urbonas

Head of Data Science, Amazon

Enfoques para crear buyer personas

  • Estadísticas resumen por clúster, p. ej., valores RFM medios
  • Snake plots (de investigación de mercados)
  • Importancia relativa de atributos del clúster vs. población
Segmentación de clientes en Python

Estadísticas de cada clúster

  • Ejecuta k-means para varios valores de k cercanos al recomendado.
  • Crea una columna de etiquetas de clúster en el DataFrame original:

    datamart_rfm_k2 = datamart_rfm.assign(Cluster = cluster_labels)
    

    Calcula valores RFM medios y tamaños por clúster:

    datamart_rfm_k2.groupby(['Cluster']).agg({
       'Recency': 'mean',
       'Frequency': 'mean',
       'MonetaryValue': ['mean', 'count'],
    }).round(0)
    
    • Repite lo mismo para k=3
Segmentación de clientes en Python

Estadísticas de cada clúster

  • Compara los valores RFM medios de cada solución de clúster
Segmentación de clientes en Python

Snake plots para entender y comparar segmentos

  • Técnica de investigación de mercados para comparar segmentos
  • Visualiza los atributos de cada segmento
  • Primero normaliza los datos (centrar y escalar)
  • Grafica los valores medios normalizados por atributo y clúster
Segmentación de clientes en Python

Prepara datos para un snake plot

Transforma datamart_normalized a DataFrame y añade una columna Cluster

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

Reestructura a formato largo para guardar valores RFM y nombres de métricas en 1 columna cada uno

datamart_melt = pd.melt(datamart_normalized.reset_index(), 
                    id_vars=['CustomerID', 'Cluster'],
                    value_vars=['Recency', 'Frequency', 'MonetaryValue'], 
                    var_name='Attribute', 
                    value_name='Value')
Segmentación de clientes en Python

Visualiza un snake plot

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

Segmentación de clientes en Python

Importancia relativa de atributos del segmento

  • Técnica útil para ver la importancia relativa de cada atributo por segmento
  • Calcula los promedios de cada clúster
  • Calcula los promedios de la población
  • Calcula la importancia dividiendo y restando 1 (devuelve 0 si el promedio del clúster = promedio de la población)
cluster_avg = datamart_rfm_k3.groupby(['Cluster']).mean()

population_avg = datamart_rfm.mean()
relative_imp = cluster_avg / population_avg - 1
Segmentación de clientes en Python

Analiza y grafica la importancia relativa

  • Cuanto más se aleja la razón de 0, mayor la importancia del atributo para el segmento (vs. población total).
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()
Segmentación de clientes en Python

Mapa de calor de importancia relativa

         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
Segmentación de clientes en Python

¡Tu turno para probar técnicas de perfilado de clientes!

Segmentación de clientes en Python

Preparing Video For Download...