Intelligenza Artificiale

A un certo punto non fu più la biologia a dominare il destino dell'uomo, ma il prodotto del suo cervello: la cultura.
Cosicché: "Le uniche leggi della materia sono quelle che la nostra mente deve architettare e le uniche leggi della mente sono architettate per essa dalla materia".
JAMES CLERK MAXWELL

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)