Segmentos de clientes
Parte de la sección Aprendizaje no supervisado del Journey de Machine Learning de Coddy. Lección 39 de 51.
Este capítulo pone en práctica los clústeres, hasta llegar a una lista de reproducción organizada por estado de ánimo:
Primero, segmentos: grupos sobre los que se puede actuar. Un hostal escaló dos características y agrupó a sus huéspedes:
Las unidades reales describen cómo es un segmento. Su centro escalado muestra qué lo distingue: cada característica en desviaciones estándar respecto al promedio de los huéspedes.
X = StandardScaler().fit_transform(guests[["nights", "days_ahead"]])
km = KMeans(n_clusters=3, n_init=10, random_state=0).fit(X)
print(km.cluster_centers_.round(1))Esto imprime:
[[ 1.3 -0.7]
[-0.7 -0.7]
[-0.7 1.4]]El número de cada fila más alejado de 0 nombra su segmento. La fila 0 se queda 1.3 desviaciones estándar más: mochileros. La fila 2 reserva 1.4 desviaciones estándar antes: viajes escolares.
Desafío
IntermedioUn teatro quiere conocer mejor a sus 166 miembros. El programa lee las características en las que se basará la segmentación, como age,ticket_price.
- Escala esas columnas, agrúpalas en
best_k(X)segmentos con la función auxiliar proporcionada y muestra cuántos hay. - Empezando por el más grande, muestra el tamaño y el nombre de cada segmento: la característica de su centro más alejada de 0,
higholow, y a qué distancia.
Para otro teatro y age,shows_per_year:
4 segments
57 members: high shows_per_year (1.2 std from average)
52 members: low shows_per_year (1.0 std from average)
40 members: low age (1.4 std from average)
32 members: high age (1.5 std from average)Pruébalo tú mismo
import numpy as np
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
# Una fila por cada miembro del teatro
members = pd.read_csv("theatre.csv")
# Las características por las que segmentar, como age,ticket_price
features = input().split(",")
# A partir de las puntuaciones de silueta: el k de 2 a 6 con la mejor puntuación de silueta para X
def best_k(X):
best, best_score = 2, -1
for k in range(2, 7):
labels = KMeans(n_clusters=k, n_init=10, random_state=0).fit_predict(X)
score = silhouette_score(X, labels)
if score > best_score:
best, best_score = k, score
return best
# 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 entrega3Interpretación de los clústeres
Perfilado de clústeresCentros en unidades realesClústeres frente a etiquetas conocidasCuándo falla K-MeansRepaso: cata de té9Clústeres en acción
Segmentos de clientesClústeres como característicasColores de imágenesRepaso: estados de ánimo de listas de reproducciónPractica por tu cuenta: Compilador de Python online