Segmentos de compras
Parte da seção Aprendizado não supervisionado do Journey de Machine Learning da Coddy. Lição 48 de 51.
Uma loja de plantas on-line conhece seus 240 clientes apenas pelo que eles fazem: pedidos por ano, valor do carrinho, proporção de compras em promoção e dias desde o último pedido.
Ninguém os rotulou. A proprietária quer alguns segmentos que possa descrever com palavras simples e um e-mail de reconquista para aquele que se afastou.
Faça dois métodos concordarem em k: uma árvore de ward sugere esse valor, e o silhouette o confere em relação aos seus vizinhos. Depois, leia cada segmento em unidades reais.
Desafio
DifícilO programa lê onde cortar a árvore; o código inicial configura um gráfico com título.
- Escale as características e corte uma árvore de Ward nesse ponto. Imprima quantos segmentos ela gera.
- Imprima a silhueta do k-means (3 casas decimais) para esse k e cada valor vizinho, depois o melhor k.
- Ajuste novamente com ele em
plants["segment"]. Do maior para o menor, atribua uma letra a cada segmento e imprima suas médias em unidades reais; depois, o segmento cujo último pedido é o mais antigo. - Faça um gráfico de dispersão de cada segmento, identificado por sua letra; adicione a legenda e exiba o gráfico.
Para outra loja, corte em 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 Ce o gráfico dela:
Então, Coddy descreve a sua.
Experimente você mesmo
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
# Uma linha por cliente da loja de plantas
plants = pd.read_csv("plants.csv")
features = ["orders_per_year", "avg_basket_eur", "sale_share_pct", "days_since_order"]
# A altura em que a proprietária corta a árvore da loja, obtida a partir do dendrograma (3 ou mais 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)")
# Escreva seu código abaixo
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
1Encontrando Grupos
Aprendendo sem RótulosMedindo a SimilaridadeK-Means à MãoK-Means no scikit-learnRevisão: Frequentadores da Academia4Clustering Hierárquico
Mesclando passo a passoModelos aglomerativosDendrogramasRevisão: raças de cães7PCA na prática
Visualizando 64 dimensõesComponentes como padrõesComprimir e reconstruirPCA antes de um modeloRecapitulação: scanner facial10Projeto: Explorando os Dígitos
Observe os DígitosReduza com PCAAgrupe os DígitosDê Nome aos GruposEncontre os Diferentes2Escolhendo k
InérciaO método do cotoveloPontuações de silhuetaEscale antes de agruparRecapitulando: zonas de entrega8Detecção de Anomalias
Encontrando os DiferentõesIsolation ForestLocal Outlier FactorPontuações de AnomaliaRevisão: Monitoramento do Servidor11Desafios finais
Segmentos de comprasMonitoramento de fraudes em cartõesAglomerados de estrelasDois tipos de célulasPratique por conta própria: Compilador de Python online