Nell’era digitale, offrire un’esperienza utente generica è diventato obsoleto. Gli utenti si aspettano interazioni su misura, contenuti pertinenti e offerte che rispondano alle loro specifiche esigenze e preferenze. È qui che entra in gioco la personalizzazione dinamica, una strategia potente che adatta i contenuti di un sito web, le raccomandazioni di prodotti, i messaggi di marketing e l’intera esperienza utente in tempo reale, in base al comportamento, alle caratteristiche e al contesto di ogni singolo visitatore.
👉 L’Evoluzione del Targeting: Dalle Buyer Personas alle Dynamic Personas, un Imperativo del Marketing Moderno
Questo articolo si propone di esplorare il mondo della personalizzazione dinamica attraverso un approccio pratico e accessibile. Inizieremo il nostro percorso con la creazione di un dataset simulato che riproduce le dinamiche dei dati di un tipico report di Google Analytics. Questa fase iniziale ci permetterà di lavorare con dati realistici ma non sensibili, fornendo una base solida per lo sviluppo e il test del nostro modello.
Successivamente, ci immergeremo nell’implementazione di un modello di personalizzazione dinamica utilizzando il linguaggio di programmazione Python e tecniche di machine learning. Attraverso l’analisi del comportamento degli utenti simulati, segmenteremo il nostro pubblico in gruppi con caratteristiche simili e genereremo raccomandazioni personalizzate per ciascun segmento. Questo approccio ibrido, che combina l’analisi dei dati con la logica di raccomandazione, ci fornirà un sistema flessibile e scalabile per migliorare l’engagement degli utenti, aumentare le conversioni e, in definitiva, ottimizzare l’esperienza complessiva sul nostro sito web.
Il codice Python per simulare i dati
L’obiettivo di questo codice è generare un dataset simulato che rappresenti dati simili a quelli di un report di Google Analytics. Questo dataset può essere utilizzato per:
- Testare strumenti di analisi dati.
- Creare visualizzazioni (es. grafici, dashboard).
- Sviluppare e testare modelli di machine learning.
- Simulare scenari reali senza utilizzare dati sensibili o reali.
Il file CSV generato (reportgoogle.csv) può essere importato in altri strumenti (es. Excel, Tableau, Python) per ulteriori analisi.
Struttura del report Google Analytics 4 simulato con le seguenti metriche e dimensioni:
-
Dimensioni:
user_id→ Identificativo dell’utentesession_source→ Fonte della sessione (Google, Facebook, Direct, etc.)session_medium→ Mezzo della sessione (CPC, Organic, Referral, etc.)device_category→ Tipo di dispositivo (Desktop, Mobile, Tablet)page_path→ URL delle pagine visitateevent_name→ Eventi registrati (click, acquisti, visualizzazioni)product_id→ ID del prodotto visualizzato/acquistatogeo_country→ Paese dell’utente
-
Metriche:
session_count→ Numero di sessioni dell’utentetotal_revenue→ Totale speso (se e-commerce)engagement_time_seconds→ Tempo di interazione con il sitoconversion_rate→ Tasso di conversione per utente
Creazione del dataset simulato
import pandas as pd
import numpy as np
# Creiamo un dataset simulato con dati simili a quelli di un report personalizzato di Google Analytics
np.random.seed(42)
num_users = 1000
data = {
"user_id": [f"U{str(i).zfill(4)}" for i in range(num_users)],
"session_count": np.random.randint(1, 30, num_users), # Numero di sessioni per utente
"total_revenue": np.random.choice([0, 50, 100, 200, 500, 1000], num_users, p=[0.5, 0.2, 0.1, 0.1, 0.05, 0.05]),
"engagement_time_seconds": np.random.randint(30, 5000, num_users), # Tempo di interazione
"conversion_rate": np.round(np.random.uniform(0, 5, num_users), 2), # Tasso di conversione (%)
"session_source": np.random.choice(["Google", "Facebook", "Direct", "Referral", "Instagram"], num_users),
"session_medium": np.random.choice(["Organic", "CPC", "Referral", "Email", "Social"], num_users),
"device_category": np.random.choice(["Desktop", "Mobile", "Tablet"], num_users),
"geo_country": np.random.choice(["USA", "UK", "Italy", "Germany", "France", "India"], num_users)
}
# Creiamo il DataFrame
df_simulated = pd.DataFrame(data)
# Salviamo il file CSV simulato
file_path = "reportgoogle.csv"
df_simulated.to_csv(file_path, index=False)
# Restituiamo il percorso del file generato
file_path
data: Un dizionario che contiene le colonne del dataset. Ogni chiave rappresenta una colonna, e i valori sono i dati generati casualmente.user_id: Un ID univoco per ogni utente, nel formato “U0001”, “U0002”, ecc.session_count: Numero di sessioni per utente, generato casualmente tra 1 e 30.total_revenue: Ricavo totale generato da ogni utente, scelto casualmente tra 0, 50, 100, 200, 500 e 1000, con probabilità specifiche.engagement_time_seconds: Tempo di interazione in secondi, generato casualmente tra 30 e 5000.conversion_rate: Tasso di conversione in percentuale, generato casualmente tra 0 e 5, arrotondato a 2 decimali.session_source: Fonte della sessione (es. Google, Facebook, ecc.), scelta casualmente da una lista.session_medium: Mezzo della sessione (es. Organic, CPC, ecc.), scelto casualmente da una lista.device_category: Categoria del dispositivo (es. Desktop, Mobile, Tablet), scelta casualmente.geo_country: Paese dell’utente, scelto casualmente da una lista.
Modello di dynamic personalization in Python
Utilizzeremo questi dati per creare un modello che genera dynamic personalization (personalizzazione dinamica) per un sito web basato su dati simulati. Per imlementare questo modello possiamo utilizzare un approccio di machine learning o regole basate su dati.
In questo esempio, utilizzeremo un approccio ibrido: un modello di machine learning per prevedere il comportamento degli utenti e regole basate su dati per generare raccomandazioni personalizzate.
Obiettivo del Codice
L’obiettivo del codice è creare un sistema di personalizzazione dinamica per un sito web, utilizzando dati simulati simili a quelli che potresti ottenere da Google Analytics o altri strumenti di tracciamento. Questo sistema analizza il comportamento degli utenti e genera raccomandazioni personalizzate in tempo reale, con l’obiettivo di migliorare l’esperienza dell’utente, aumentare l’engagement e massimizzare le conversioni.
- Analisi del comportamento degli utenti:
- Il codice analizza dati come il numero di sessioni, il tempo di interazione, il tasso di conversione e il ricavo generato da ogni utente.
- Questi dati vengono utilizzati per comprendere il comportamento degli utenti e identificare pattern comuni.
- Segmentazione degli utenti:
- Utilizzando un algoritmo di clustering (KMeans), gli utenti vengono raggruppati in cluster basati su caratteristiche simili.
- Ogni cluster rappresenta un gruppo di utenti con comportamenti o interessi simili.
- Generazione di raccomandazioni personalizzate:
- Per ogni cluster, vengono generate raccomandazioni specifiche, come offerte speciali, suggerimenti di prodotti o messaggi personalizzati.
- Queste raccomandazioni sono progettate per migliorare l’esperienza dell’utente e spingerlo verso azioni desiderate (es. acquistare, esplorare contenuti).
- Output delle raccomandazioni:
- Le raccomandazioni vengono associate a ogni utente e salvate in un file CSV, che può essere utilizzato per integrare la personalizzazione dinamica in un sito web o in una campagna di marketing.
Valenza in Ambito Reale
Questo codice ha un’applicazione pratica molto forte in diversi contesti reali, soprattutto nel campo del digital marketing, dell’e-commerce e dell’ottimizzazione dell’esperienza utente. Ecco alcuni esempi concreti:
1. E-commerce
- Raccomandazioni di prodotti: Un negozio online può utilizzare questo sistema per suggerire prodotti in base al comportamento di navigazione degli utenti. Ad esempio, utenti con un alto tasso di conversione potrebbero ricevere offerte esclusive, mentre nuovi visitatori potrebbero essere guidati verso prodotti popolari.
- Aumento delle conversioni: Personalizzando i messaggi e le offerte, è possibile aumentare la probabilità che gli utenti completino un acquisto.
2. Content Marketing
- Suggerimenti di contenuti: Un sito di notizie o un blog può utilizzare questo sistema per consigliare articoli o video in base agli interessi degli utenti. Ad esempio, utenti che passano molto tempo a leggere articoli di tecnologia potrebbero ricevere suggerimenti su nuovi post in quella categoria.
- Miglioramento dell’engagement: Consigliando contenuti rilevanti, è possibile aumentare il tempo di permanenza degli utenti sul sito e ridurre il tasso di abbandono.
3. Marketing Digitale
- Campagne personalizzate: Le aziende possono utilizzare questo sistema per inviare email o notifiche push personalizzate in base al comportamento degli utenti. Ad esempio, utenti che hanno abbandonato un carrello potrebbero ricevere un messaggio con uno sconto per incentivare il completamento dell’acquisto.
- Ottimizzazione delle campagne: Analizzando i cluster, è possibile identificare segmenti di utenti con un alto potenziale di conversione e indirizzare risorse di marketing verso di loro.
4. Ottimizzazione dell’Esperienza Utente (UX)
- Interfacce personalizzate: Un sito web può adattare la sua interfaccia in base al cluster di appartenenza dell’utente. Ad esempio, utenti che preferiscono dispositivi mobili potrebbero vedere una versione ottimizzata per mobile con pulsanti più grandi e navigazione semplificata.
- Riduzione dell’attrito: Personalizzando l’esperienza, è possibile ridurre l’attrito e migliorare la soddisfazione degli utenti.
Vantaggi del Sistema
- Scalabilità:
- Il sistema può essere applicato a un numero elevato di utenti, rendendolo adatto a siti web di grandi dimensioni.
- Flessibilità:
- Le regole di personalizzazione possono essere modificate in base alle esigenze specifiche del business.
- Automazione:
- Una volta implementato, il sistema funziona in modo automatico, generando raccomandazioni in tempo reale senza intervento manuale.
- Data-Driven:
- Le decisioni di personalizzazione sono basate sui dati, riducendo il rischio di errori e migliorando l’efficacia delle strategie.
Esempi Pratici di Applicazione
- Amazon:
- Utilizza un sistema di raccomandazione personalizzato per suggerire prodotti in base alla cronologia di navigazione e agli acquisti precedenti.
- Netflix:
- Consiglia film e serie TV in base ai gusti dell’utente, migliorando l’engagement e la soddisfazione.
- Spotify:
- Crea playlist personalizzate in base alle preferenze musicali degli utenti.
- Siti di notizie:
- Suggeriscono articoli in base agli interessi degli utenti, aumentando il tempo di permanenza sul sito.
Codice Python
import pandas as pd
import numpy as np
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
# 1. Caricamento dei dati simulati
file_path = "reportgoogle.csv"
df = pd.read_csv(file_path)
# 2. Preprocessing dei dati
# Selezioniamo le feature rilevanti per la personalizzazione
features = ["session_count", "total_revenue", "engagement_time_seconds", "conversion_rate"]
X = df[features]
# Normalizzazione dei dati
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 3. Creazione di un modello di clustering (KMeans)
# Utilizziamo il clustering per raggruppare utenti con comportamenti simili
kmeans = KMeans(n_clusters=4, random_state=42)
df["cluster"] = kmeans.fit_predict(X_scaled)
# 4. Generazione di raccomandazioni personalizzate
def generate_recommendations(cluster):
if cluster == 0:
return "Offerta speciale: Sconto del 10% sui prodotti più popolari!"
elif cluster == 1:
return "Consigliato: Guarda i nuovi arrivi nella tua categoria preferita."
elif cluster == 2:
return "Messaggio personalizzato: Completa il tuo acquisto e ottieni la spedizione gratuita!"
elif cluster == 3:
return "Suggerimento: Scopri i contenuti esclusivi per te."
else:
return "Benvenuto! Esplora il nostro sito."
# Aggiungiamo le raccomandazioni al DataFrame
df["recommendation"] = df["cluster"].apply(generate_recommendations)
# 5. Output delle raccomandazioni
print(df[["user_id", "cluster", "recommendation"]].head(10))
# Salva i risultati in un nuovo file CSV
output_file_path = "personalized_recommendations.csv"
df.to_csv(output_file_path, index=False)
print(f"Raccomandazioni salvate in {output_file_path}")
Output:
user_id cluster recommendation
0 U0000 0 Offerta speciale: Sconto del 10% sui prodotti ...
1 U0001 2 Messaggio personalizzato: Completa il tuo acqu...
2 U0002 2 Messaggio personalizzato: Completa il tuo acqu...
3 U0003 2 Messaggio personalizzato: Completa il tuo acqu...
4 U0004 1 Consigliato: Guarda i nuovi arrivi nella tua c...
5 U0005 1 Consigliato: Guarda i nuovi arrivi nella tua c...
6 U0006 0 Offerta speciale: Sconto del 10% sui prodotti ...
7 U0007 3 Suggerimento: Scopri i contenuti esclusivi per...
8 U0008 1 Consigliato: Guarda i nuovi arrivi nella tua c...
9 U0009 2 Messaggio personalizzato: Completa il tuo acqu...
Raccomandazioni salvate in personalized_recommendations.csv
Spiegazione del codice
- Caricamento dei dati:
- Il dataset simulato (
reportgoogle.csv) viene caricato in un DataFrame pandas.
- Il dataset simulato (
- Preprocessing:
- Selezioniamo le feature rilevanti per la personalizzazione:
session_count,total_revenue,engagement_time_seconds, econversion_rate. - Normalizziamo i dati per garantire che tutte le feature abbiano la stessa scala.
- Selezioniamo le feature rilevanti per la personalizzazione:
- Modello di clustering:
- Utilizziamo l’algoritmo KMeans per raggruppare gli utenti in 4 cluster basati sul loro comportamento.
- Ogni cluster rappresenta un gruppo di utenti con caratteristiche simili.
- Generazione di raccomandazioni:
- Definiamo una funzione
generate_recommendationsche assegna una raccomandazione personalizzata in base al cluster. - Le raccomandazioni sono basate su regole predefinite (es. offerte speciali, suggerimenti di prodotti).
- Definiamo una funzione
- Output:
- Le raccomandazioni vengono aggiunte al DataFrame e visualizzate.
- I risultati vengono salvati in un nuovo file CSV (
personalized_recommendations.csv).
Estensioni possibili
- Modelli avanzati: Utilizzare modelli di raccomandazione come collaborative filtering o content-based filtering.
- Integrazione con un sito web: Le raccomandazioni possono essere inviate in tempo reale a un sito web tramite API.
- A/B testing: Testare diverse raccomandazioni per ottimizzare l’engagement e le conversioni.
Questo modello è un punto di partenza per creare un sistema di personalizzazione dinamica basato sui dati degli utenti.
Dettagli Tecnici Aggiuntivi sul Clustering
Il clustering è una tecnica di machine learning non supervisionato che raggruppa dati simili in cluster. Tuttavia, uno degli aspetti più critici è la scelta del numero ottimale di cluster (k). Nel codice precedente, abbiamo scelto k=4 a scopo illustrativo, ma in un contesto reale, la scelta di k richiede un’analisi più approfondita. Di seguito, spiego alcune tecniche comuni per determinare il numero ottimale di cluster e valutare la qualità del clustering.
1. Scelta del Numero di Cluster: Metodo del Gomito (Elbow Method)
Cos’è il Metodo del Gomito?
Il metodo del gomito è una tecnica grafica per determinare il numero ottimale di cluster. Si basa sull’analisi della Within-Cluster Sum of Squares (WCSS), ovvero la somma delle distanze al quadrato tra ogni punto e il centroide del suo cluster. L’idea è che all’aumentare del numero di cluster (), la WCSS diminuisce, ma a un certo punto, il tasso di diminuzione rallenta significativamente, formando un “gomito” nel grafico.
Come Funziona?
- Esegui l’algoritmo di clustering (es. KMeans) per diversi valori di (ad esempio, da 1 a 10).
- Calcola la WCSS per ogni valore di .
- Traccia un grafico con k sull’asse delle ascisse e la WCSS sull’asse delle ordinate.
- Identifica il punto “gomito” nel grafico, dove la diminuzione della WCSS rallenta. Questo punto è spesso considerato il numero ottimale di cluster.
Esempio di Codice per il Metodo del Gomito
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
# Calcolo della WCSS per diversi valori di k
wcss = []
k_values = range(1, 11)
for k in k_values:
kmeans = KMeans(n_clusters=k, random_state=42)
kmeans.fit(X_scaled)
wcss.append(kmeans.inertia_) # inertia_ è la WCSS
# Plot del metodo del gomito
plt.figure(figsize=(8, 5))
plt.plot(k_values, wcss, marker='o', linestyle='--')
plt.xlabel("Numero di Cluster (k)")
plt.ylabel("WCSS")
plt.title("Metodo del Gomito")
plt.show()
Output:

Interpretazione del Grafico
- Se il grafico mostra un gomito chiaro (ad esempio, a k=4), quel valore è un buon candidato per il numero di cluster.
- Se il grafico non mostra un gomito chiaro, potrebbe essere necessario utilizzare altre tecniche.
Analisi della Silhouette
Cos’è il Coefficiente di Silhouette?
Il coefficiente di silhouette è una metrica che misura quanto un punto è ben clusterizzato rispetto ad altri cluster. Varia tra -1 e +1:
- +1: Il punto è ben clusterizzato e assegnato al cluster corretto.
- 0: Il punto è vicino al confine tra due cluster.
- -1: Il punto potrebbe essere assegnato al cluster sbagliato.
Come Funziona?
- Calcola il coefficiente di silhouette per ogni punto.
- Calcola la media dei coefficienti per ogni cluster.
- Traccia un grafico della silhouette per valutare la qualità complessiva del clustering.
Esempio di Codice per l’Analisi della Silhouette
from sklearn.metrics import silhouette_score
# Calcolo del coefficiente di silhouette per diversi valori di k
silhouette_scores = []
k_values = range(2, 11) # silhouette_score richiede almeno 2 cluster
for k in k_values:
kmeans = KMeans(n_clusters=k, random_state=42)
cluster_labels = kmeans.fit_predict(X_scaled)
silhouette_avg = silhouette_score(X_scaled, cluster_labels)
silhouette_scores.append(silhouette_avg)
# Plot dei coefficienti di silhouette
plt.figure(figsize=(8, 5))
plt.plot(k_values, silhouette_scores, marker='o', linestyle='--')
plt.xlabel("Numero di Cluster (k)")
plt.ylabel("Coefficiente di Silhouette")
plt.title("Analisi della Silhouette")
plt.show()
Output:

Interpretazione del Grafico
- Un valore di silhouette vicino a +1 indica una buona qualità del clustering.
- Il valore di con il coefficiente di silhouette più alto è spesso considerato il numero ottimale di cluster.





