Menu
CoddyTech

Segmentos de clientes

Parte da seção Aprendizado não supervisionado do Journey de Machine Learning da Coddy. Lição 39 de 51.

Neste capítulo, você vai colocar os agrupamentos em prática, até chegar a uma playlist organizada por humor:

80 músicas como pontos, com a valência no eixo horizontal e a energia no vertical, em quatro grupos encontrados e nomeados pelo k-means: tenso no canto superior esquerdo, feliz no canto superior direito, triste no canto inferior esquerdo, calmo no canto inferior direito

Primeiro, segmentos: grupos sobre os quais as pessoas podem agir. Um hostel escalou duas características e agrupou seus hóspedes:

150 hóspedes de um hostel, noites por estadia no eixo horizontal e dias de antecedência da reserva no eixo vertical, em três segmentos: viagens escolares reservadas com meses de antecedência, pessoas que viajam nos fins de semana com estadias curtas, mochileiros com estadias longas reservadas em cima da hora

As unidades reais dizem como é um segmento. Seu centro padronizado mostra o que o diferencia: cada característica em desvios padrão em relação à média dos hó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))

Isso imprime:

[[ 1.3 -0.7]
 [-0.7 -0.7]
 [-0.7  1.4]]

O número de cada linha mais distante de 0 identifica seu segmento. A linha 0 fica 1.3 desvios padrão a mais: mochileiros. A linha 2 reserva 1.4 desvios padrão antes: viagens escolares.

challenge icon

Desafio

Médio

Um teatro quer conhecer seus 166 membros. O programa lê as características usadas para segmentar, como age,ticket_price.

  1. Escale essas colunas, agrupe em best_k(X) segmentos com a função auxiliar fornecida no código inicial e imprima quantos são.
  2. Do maior para o menor, imprima o tamanho e o nome de cada segmento: a característica do centro mais distante de 0, high ou low, e a distância.

Para outro teatro e 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)

Experimente você mesmo

import numpy as np
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score

# Uma linha para cada membro do teatro
members = pd.read_csv("theatre.csv")
# As características usadas para a segmentação, como age,ticket_price
features = input().split(",")


# Com base nos Silhouette Scores: o k de 2 a 6 com a melhor silhueta 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


# Escreva seu código abaixo
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Aprendizado não supervisionado

Pratique por conta própria: Compilador de Python online