Menu
CoddyTech

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:

80 canciones representadas como puntos, con la valencia en el eje horizontal y la energía en el vertical, en cuatro grupos encontrados y nombrados por k-means: tenso arriba a la izquierda, feliz arriba a la derecha, triste abajo a la izquierda, tranquilo abajo a la derecha

Primero, segmentos: grupos sobre los que se puede actuar. Un hostal escaló dos características y agrupó a sus huéspedes:

150 huéspedes del hostal, noches por estancia en el eje horizontal y días de antelación de la reserva en el vertical, en tres segmentos: viajes escolares reservados con meses de antelación, turistas de fin de semana con estancias cortas, mochileros con estancias largas reservadas a última hora

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.

challenge icon

Desafío

Intermedio

Un 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.

  1. Escala esas columnas, agrúpalas en best_k(X) segmentos con la función auxiliar proporcionada y muestra cuántos hay.
  2. 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, high o low, 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
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Aprendizaje no supervisado

Practica por tu cuenta: Compilador de Python online