Segmentos de compras
Parte de la sección Aprendizaje no supervisado del Journey de Machine Learning de Coddy. Lección 48 de 51.
Una tienda de plantas en línea solo conoce a sus 240 clientes por lo que hacen: pedidos al año, tamaño de la cesta, proporción de compras en oferta y días desde el último pedido.
Nadie los ha etiquetado. La propietaria quiere unos cuantos segmentos que pueda describir con palabras sencillas y un correo electrónico para recuperar al que se alejó.
Haz que dos métodos coincidan en k: un árbol de ward lo sugiere y la silueta lo comprueba frente a sus vecinos. Después, lee cada segmento en unidades reales.
Desafío
DifícilEl programa lee dónde cortar el árbol; el código inicial configura un gráfico con título.
- Escala las características y corta un árbol de Ward ahí. Imprime cuántos segmentos produce.
- Imprime la silueta de k-means (3 decimales) para ese k y cada valor vecino, y luego el mejor k.
- Vuelve a ajustar con ese valor en
plants["segment"]. Primero el más grande; asigna una letra a cada segmento e imprime sus medias en unidades reales; luego, el segmento cuya última compra sea la más antigua. - Representa cada segmento con un diagrama de dispersión y etiquétalo con su letra; muestra la leyenda y el gráfico.
Para otra tienda, corta en 8:
Tree cut at 8.0: 3 segments
Silhouette at k = 2: 0.573
Silhouette at k = 3: 0.675
Silhouette at k = 4: 0.630
Best k: 3
A (70): 8.6 orders a year, 29 EUR baskets, 15% on sale, last order 23 days ago
B (50): 3.1 orders a year, 22 EUR baskets, 60% on sale, last order 53 days ago
C (30): 1.8 orders a year, 89 EUR baskets, 10% on sale, last order 148 days ago
Win-back email: segment Cy su gráfico:
Después, Coddy describe tu tienda.
Pruébalo tú mismo
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
from scipy.cluster.hierarchy import linkage, fcluster
# Una fila por cada cliente de la tienda de plantas
plants = pd.read_csv("plants.csv")
features = ["orders_per_year", "avg_basket_eur", "sale_share_pct", "days_since_order"]
# La altura a la que el propietario corta el árbol de la tienda, determinada a partir de su dendrograma (3 o más segmentos)
cut = float(input())
fig, ax = plt.subplots()
ax.set_title("Plant Shop Segments")
ax.set_xlabel("Orders per year")
ax.set_ylabel("Average basket (EUR)")
# Escribe tu código a continuación
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Aprendizaje no supervisado
1Encontrar grupos
Aprender sin etiquetasMedir la similitudK-Means a manoK-Means en scikit-learnRepaso: miembros del gimnasio7PCA en la práctica
Visualizar 64 dimensionesComponentes como patronesComprimir y reconstruirPCA antes de un modeloRepaso: escáner facial10Proyecto: Explorador de dígitos
Observa los dígitosReduce con PCAAgrupa los dígitosPon nombre a los gruposEncuentra los diferentes2Elegir k
InerciaEl método del codoPuntuaciones de siluetaEscalar antes de agruparRepaso: zonas de entrega8Detección de anomalías
Encontrar los casos atípicosIsolation ForestLocal Outlier FactorPuntuaciones de anomalíaRepaso: vigilancia del servidor11Desafíos finales
Segmentos de comprasVigilancia del fraude con tarjetasCúmulos de estrellasDos tipos de células3Interpretación de los clústeres
Perfilado de clústeresCentros en unidades realesClústeres frente a etiquetas conocidasCuándo falla K-MeansRepaso: cata de téPractica por tu cuenta: Compilador de Python online