Segmentare i Clienti
I metodi K-means e Silhouette
📊 Segmentazione dei Clienti nel Marketing: Guida Completa con Esempio in Python
La segmentazione dei clienti e' una tecnica di marketing che consiste nel suddividere la clientela in gruppi (cluster) omogenei in base a caratteristiche comuni come comportamento di acquisto, valore economico, frequenza, eta, e altri parametri.
Questa analisi consente alle aziende di:
- Personalizzare le campagne di marketing
- Aumentare la fidelizzazione
- Migliorare l'esperienza utente
💡 Perche usare K-means per la segmentazione?
K-means e' un algoritmo di clustering non supervisionato che suddivide un insieme di dati in K gruppi sulla base della distanza tra i punti. E' uno degli algoritmi piu usati per la segmentazione dei clienti grazie alla sua velocita, semplicita ed efficacia.
🔬 Esempio in Python: Segmentazione con K-means
Utilizzeremo il dataset segmento.csv
con dati reali. Seguiremo questi passaggi:
- Pulizia dei dati
- Codifica delle variabili
- Normalizzazione
- Divisione in training e test set
- Calcolo del numero ottimale di cluster con il Silhouette Score
- Segmentazione dei clienti
- Assegnazione di nuovi clienti a un cluster
1. Preparazione del dataset
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
# Caricamento dati
df = pd.read_csv("segmento.csv")
# Rimozione valori mancanti
df = df.dropna()
# Selezione solo delle colonne numeriche
df = df.select_dtypes(include=['float64', 'int64'])
# Standardizzazione dei dati
scaler = StandardScaler()
df_scaled = scaler.fit_transform(df)
# Suddivisione in training e test
X_train, X_test = train_test_split(df_scaled, test_size=0.2, random_state=42)
2. Trovare il numero ottimale di cluster con il Silhouette Score
Il Silhouette Score misura quanto ogni punto e' simile al proprio cluster rispetto agli altri. Il valore varia da -1 a 1: piu e' alto, migliore e' la segmentazione.
import matplotlib.pyplot as plt
silhouette_scores = []
k_values = range(2, 11)
for k in k_values:
kmeans = KMeans(n_clusters=k, random_state=42)
kmeans.fit(X_train)
score = silhouette_score(X_train, kmeans.labels_)
silhouette_scores.append(score)
# Visualizzazione
plt.plot(k_values, silhouette_scores, marker='o')
plt.xlabel('Numero di Cluster (k)')
plt.ylabel('Silhouette Score')
plt.title('Scelta del numero ottimale di cluster')
plt.grid(True)
plt.show()
3. Segmentazione finale con K-means
# Supponiamo che il miglior valore sia k=4
optimal_k = 4
kmeans_final = KMeans(n_clusters=optimal_k, random_state=42)
kmeans_final.fit(X_train)
# Aggiungiamo le etichette dei cluster
clusters_train = kmeans_final.predict(X_train)
clusters_test = kmeans_final.predict(X_test)
print("Silhouette Score finale:", silhouette_score(X_train, clusters_train))
4. Classificare nuovi clienti
# Esempio di nuovi clienti
nuovi_clienti = pd.DataFrame([
[40, 3500, 3],
[22, 1000, 1],
[55, 5000, 5]
], columns=df.columns)
# Standardizzazione
nuovi_clienti_scaled = scaler.transform(nuovi_clienti)
# Assegnazione ai cluster
cluster_nuovi = kmeans_final.predict(nuovi_clienti_scaled)
print("Cluster assegnati ai nuovi clienti:", cluster_nuovi)
📈 Conclusioni
La segmentazione dei clienti con K-means e' uno strumento fondamentale per:
- Identificare gruppi di clienti simili
- Ottimizzare le strategie di marketing
- Aumentare il ritorno sugli investimenti (ROI)