Marketing CLV
Il valore economico del Cliente
💡 Cos'è il CLV nel Marketing
Il Customer Lifetime Value (CLV) è una metrica che rappresenta il valore economico totale che un cliente genera per un’azienda durante l’intera relazione commerciale.
Formula base del CLV
Una versione semplificata della formula del CLV è:
CLV = Valore Medio Ordine × Frequenza Acquisto × Durata della Relazione
Esempio:
Valore medio ordine = 100
Frequenza annua = 5
Durata relazione = 3 anni
CLV = 100 × 5 × 3 = 1500
✅ Perché il CLV è Cruciale nel Marketing
Calcolare e prevedere il CLV aiuta a:
- Identificare i clienti più redditizi
- Ottimizzare i budget pubblicitari
- Misurare la redditività a lungo termine
- Stabilire un costo di acquisizione cliente sostenibile
- Migliorare le strategie di fidelizzazione
🔍 Prevedere il CLV con Python e Random Forest
Di seguito un esempio pratico di come prevedere il CLV utilizzando Python e Random Forest, un algoritmo non lineare molto efficace.
Dataset simulato
Supponiamo di avere un file CSV clv_dataset.csv
con le seguenti colonne:
Colonna | Descrizione |
---|---|
cliente_id | ID del cliente |
total_spent | Spesa totale |
num_transactions | Numero di transazioni |
recency_days | Giorni dall'ultimo acquisto |
clv | Valore vita cliente (target) |
Modello Python
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error, r2_score
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.read_csv("clv_dataset.csv")
df = df.dropna(subset=['clv', 'total_spent', 'num_transactions', 'recency_days'])
df['avg_order_value'] = df['total_spent'] / df['num_transactions']
df['recency_freq_ratio'] = df['recency_days'] / (df['num_transactions'] + 1e-5)
features = ['avg_order_value', 'num_transactions', 'recency_days', 'recency_freq_ratio']
X = df[features]
y = df['clv']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = RandomForestRegressor(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f"MSE: {mse:.2f}, R²: {r2:.2f}")
Visualizzazione Risultati
importances = model.feature_importances_
importance_df = pd.DataFrame({
'Feature': features,
'Importanza': importances
}).sort_values(by='Importanza', ascending=False)
plt.figure(figsize=(14, 5))
plt.subplot(1, 2, 1)
sns.scatterplot(x=y_test, y=y_pred, alpha=0.5)
plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], 'r--')
plt.xlabel("CLV Reale")
plt.ylabel("CLV Predetto")
plt.title("Random Forest - CLV Reale vs Predetto")
plt.subplot(1, 2, 2)
sns.barplot(x="Importanza", y="Feature", data=importance_df)
plt.title("Importanza delle Variabili Predittive")
plt.tight_layout()
plt.show()
📈 Interpretazione dei Risultati
Alcuni indicatori chiave per valutare il modello:
- MSE basso indica errore medio quadratico ridotto
- R² alto mostra una buona capacità predittiva
- Importanza delle variabili per identificare le feature decisive
🔄 Come Migliorare il Modello
- Aggiungere variabili demografiche o comportamentali
- Trasformare le variabili skewed (log)
- Ottimizzare gli iperparametri con GridSearchCV
- Provare altri modelli: XGBoost, LightGBM
⛽ Conclusione
Il CLV nel marketing è una metrica fondamentale per ottimizzare il ROI, identificare i clienti più preziosi e pianificare strategie di fidelizzazione efficaci.
Usare un modello come Random Forest in Python permette previsioni affidabili e insights utili per guidare le decisioni aziendali.