Menu
CoddyTech

Segmenti di clientela

Fa parte della sezione Apprendimento non supervisionato del percorso Machine Learning di Coddy. Lezione 39 di 51.

In questo capitolo mettiamo al lavoro i cluster, fino a creare una playlist organizzata per umore:

80 canzoni rappresentate da punti, la valenza sull’asse orizzontale e l’energia su quello verticale, in quattro gruppi individuati e denominati da k-means: teso in alto a sinistra, felice in alto a destra, triste in basso a sinistra, calmo in basso a destra

Per prima cosa, i segmenti: gruppi su cui è possibile agire. Un ostello ha scalato due caratteristiche e suddiviso i suoi ospiti in gruppi:

150 ospiti dell'ostello, notti per soggiorno sull'asse orizzontale e giorni di anticipo sulla prenotazione sull'asse verticale, in tre segmenti: gite scolastiche prenotate con mesi di anticipo, ospiti del fine settimana con soggiorni brevi, viaggiatori zaino in spalla con soggiorni lunghi prenotati all'ultimo momento

Le unità reali descrivono com'è un segmento. Il suo centro scalato mostra cosa lo distingue: ogni caratteristica in deviazioni standard rispetto all'ospite medio.

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))

Questo stampa:

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

Il numero di ogni riga più distante da 0 indica il suo segmento. La riga 0 resta 1.3 deviazioni standard più a lungo: viaggiatori con lo zaino in spalla. La riga 2 prenota 1.4 deviazioni standard prima: gite scolastiche.

challenge icon

Sfida

Medio

Un teatro vuole conoscere i suoi 166 membri. Il programma legge le caratteristiche in base alle quali suddividerli, come age,ticket_price.

  1. Scala quelle colonne, raggruppa in segmenti usando best_k(X) dell'helper fornito nel codice iniziale e stampa quanti sono.
  2. Partendo dal più grande, stampa la dimensione e il nome di ogni segmento: la caratteristica del suo centro più lontana da 0, high o low, e di quanto.

Per un altro 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)

Provalo tu

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 riga per ogni membro del teatro
members = pd.read_csv("theatre.csv")
# Le caratteristiche in base alle quali effettuare la segmentazione, come age,ticket_price
features = input().split(",")


# Dai punteggi di silhouette: il valore di k da 2 a 6 con la silhouette migliore per 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


# Scrivi il tuo codice qui sotto
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Apprendimento non supervisionato

Esercitati da solo: Compilatore Python online