L’economista italiano Vilfredo Pareto afferma che l’80% degli effetti deriva dal 20% delle cause: è la cosiddetta regola 80/20 o principio di Pareto. Allo stesso modo, l’80% del business di un’azienda proviene dal 20% dei clienti. Le aziende devono individuare questi clienti top e coltivare il rapporto con loro per garantire entrate continue. Per mantenere una relazione di lungo periodo con i clienti, è necessario pianificare programmi di fidelizzazione come sconti, offerte, coupon, punti bonus e regali.
Acquisire un nuovo cliente costa più che trattenere quelli esistenti, perché non devi spendere risorse, tempo e fatica per convincerli. Devi solo mantenere soddisfatti i clienti attuali. Gli analisti di business calcolano con precisione il costo di acquisizione dei clienti usando il CLTV (Customer Lifetime Value). Il CLTV indica il ricavo totale generato dal cliente durante l’intera relazione. Il CLTV aiuta le aziende a concentrarsi su quei clienti potenziali che possono portare più ricavi in futuro.
Customer Lifetime Value (CLTV)
"Il Customer Lifetime Value è un valore monetario che rappresenta l’ammontare di ricavi o profitti che un cliente porterà all’azienda nell’arco della relazione". Il CLTV mostra le implicazioni dell’acquisizione di clienti di lungo periodo rispetto a quelli di breve periodo. Il Customer lifetime value (CLV) può aiutarti a rispondere alle domande più importanti sulle vendite per qualsiasi azienda:
Come identificare i clienti più redditizi?
Come può un’azienda offrire il prodotto migliore e massimizzare i profitti?
Come segmentare i clienti redditizi?
Quanto budget serve per acquisire clienti?
Calculate Customer Lifetime Value
Esistono molti approcci per calcolare il CLTV. Ognuno ha la propria visione. Per calcolare il CLTV servono dati storici dei clienti, ma non sarai in grado di calcolarlo per i nuovi clienti. Per risolvere questo problema, gli analisti di business sviluppano modelli di machine learning per prevedere il CLTV dei nuovi clienti. Vediamo alcuni approcci per il calcolo del CLTV:
1) Puoi calcolarlo sommando profitto/ricavo dai clienti in un dato periodo. Per esempio, se il cliente è con te da 3 anni, puoi sommare tutti i profitti in questi 3 anni. Puoi fare la media del profitto su base annuale, semestrale o mensile, ma con questo approccio non puoi costruire un modello predittivo per i nuovi clienti.
2) Costruisci un modello di regressione per i clienti esistenti. Prendi i dati degli ultimi sei mesi come variabili indipendenti e il ricavo totale su tre anni come variabile dipendente e costruisci un modello di regressione su questi dati.
3) Il CLTV può essere implementato anche usando i valori RFM (Recency, Frequency, Monetary). Per maggiori dettagli puoi fare riferimento al mio tutorial.
4) Usando la seguente equazione: CLTV = ((Average Order Value x Purchase Frequency)/Churn Rate) x Profit margin.
Customer Value = Average Order Value * Purchase Frequency
Offerto da
Average Order Value (AOV): L’Average Order Value è il rapporto tra il tuo ricavo totale e il numero totale di ordini. L’AOV rappresenta l’importo medio di ricavo che il cliente spende per un ordine.
Average Order Value = Total Revenue / Total Number of Orders
Offerto da
Purchase Frequency (PF): La Purchase Frequency è il rapporto tra il numero totale di ordini e il numero totale di clienti. Rappresenta il numero medio di ordini effettuati da ciascun cliente.
Purchase Frequency = Total Number of Orders / Total Number of Customers
Offerto da
Churn Rate: La Churn Rate è la percentuale di clienti che non hanno effettuato un nuovo ordine.
Customer Lifetime: Il Customer Lifetime è il periodo di tempo in cui il cliente ha effettuato ordini in modo continuativo.
Repeat Rate: La Repeat Rate è definita come il rapporto tra il numero di clienti con più di un ordine e il numero di clienti unici. Esempio: se in un mese hai 10 clienti, di cui 4 tornano, la tua repeat rate è del 40%.
Implementazione del CLTV in Python (usando la formula)
Importazione delle librerie necessarie
#import modulesimport pandas as pd # for dataframesimport matplotlib.pyplot as plt # for plotting graphsimport seaborn as sns # for plotting graphsimport datetime as dt
import numpy as np
Offerto da
Caricamento del dataset
Per prima cosa carichiamo il dataset Online Retail richiesto usando la funzione read CSV di pandas. Puoi scaricare i dati da qui.
data = pd.read_excel("Online_Retail.xlsx")Offerto da
A volte il dataset è disordinato. Potresti dover gestire duplicati, che alterano l’analisi. In Python, pandas offre la funzione drop_duplicates(), che elimina i record ripetuti o duplicati.
filtered_data=data[['Country','CustomerID']].drop_duplicates()Offerto da
Passiamo agli insight sui dati
#Top ten country's customer
filtered_data.Country.value_counts()[:10].plot(kind='bar')Offerto da
<matplotlib.axes._subplots.AxesSubplot at 0x7fe677a887f0>Offerto da
Nel dataset fornito, puoi osservare che la maggior parte dei clienti proviene dal "United Kingdom". Quindi, puoi filtrare i dati per i clienti del Regno Unito.
uk_data=data[data.Country=='United Kingdom']
uk_data.info()Offerto da
La funzione describe() in pandas è comoda per ottenere varie statistiche di sintesi. Questa funzione restituisce conteggio, media, deviazione standard, valori minimi e massimi e i quantili dei dati.
Qui puoi filtrare le colonne necessarie per calcolare il CLTV. Ti servono solo cinque colonne: CustomerID, InvoiceDate, InvoiceNo, Quantity e UnitPrice.
CustomerID identifica in modo univoco i tuoi clienti.
InvoiceDate ti aiuta a calcolare il numero di giorni in cui il cliente è rimasto con il tuo prodotto.
InvoiceNo ti aiuta a contare quante volte è stata effettuata una transazione (frequenza).
Quantity sono le unità acquistate in ogni transazione.
UnitPrice di ogni unità acquistata dal cliente ti aiuta a calcolare l’importo totale acquistato.
uk_data=uk_data[['CustomerID','InvoiceDate','InvoiceNo','Quantity','UnitPrice']]Offerto da
#Calulate total purchase
uk_data['TotalPurchase']= uk_data['Quantity']* uk_data['UnitPrice']Offerto da
Ora eseguirai le seguenti operazioni:
Calcolare il numero di giorni tra la data corrente e la data dell’ultimo acquisto per ciascun cliente.
Calcolare il numero di ordini per ciascun cliente.
Calcolare la somma degli importi acquistati per ciascun cliente.
uk_data_group=uk_data.groupby('CustomerID').agg({'InvoiceDate':lambda date:(date.max()- date.min()).days,'InvoiceNo':lambda num:len(num),'Quantity':lambda quant: quant.sum(),'TotalPurchase':lambda price: price.sum()})Offerto da
purchase_frequency,repeat_rate,churn_rate
Offerto da
(90.37107880642694,0.9818923743942872,0.018107625605712774)Offerto da
4. Calcola il profit margin
Il profit margin è il rapporto di redditività più usato. Indica quale percentuale delle vendite totali è guadagno. Supponiamo che il nostro business abbia circa il 5% di profitto sulle vendite totali.
# Profit Margin
uk_data_group['profit_margin']=uk_data_group['spent_money']*0.05Offerto da
Qui devi dividere le colonne fornite in due tipi di variabili: dipendente (o variabile target) e indipendenti (o feature). Seleziona gli ultimi 6 mesi come variabili indipendenti.
X=sale[['Dec-2011','Nov-2011','Oct-2011','Sep-2011','Aug-2011','Jul-2011']]
y=sale[['CLV']]Offerto da
Suddivisione dei dati
Per capire le prestazioni del modello, dividere il dataset in training set e test set è una buona strategia.
Dividiamo il dataset usando la funzione train_test_split(). Devi passare 3 parametri: feature, target e dimensione del test_set. Inoltre, puoi usare random_state come seed per mantenere la riproducibilità, il che significa che ogni volta che dividi i dati i risultati non cambieranno. Se random_state è None, il generatore di numeri casuali usa np.random per selezionare i record in modo casuale. Significa che se non imposti un seed, la divisione è diversa ogni volta.
#split training set and test setfrom sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y,random_state=0)Offerto da
Sviluppo del modello
Per prima cosa importa il modulo Linear Regression e crea un oggetto Linear Regression. Poi addestra il modello sul training set usando la funzione fit() ed effettua le previsioni sul test set usando predict().
# import modelfrom sklearn.linear_model import LinearRegression
# instantiate
linreg = LinearRegression()# fit the model to the training data (learn the coefficients)
linreg.fit(X_train, y_train)# make predictions on the testing set
y_pred = linreg.predict(X_test)Offerto da
# print the intercept and coefficientsprint(linreg.intercept_)print(linreg.coef_)Offerto da
[208.50969617][[0.998805510.803812541.602268291.674332281.528608132.87959449]]Offerto da
Quanto bene il modello si adatta ai dati?
Per valutare l’adattamento complessivo del modello lineare, usiamo il valore R-squared. R-squared è la proporzione di varianza spiegata dal modello. Il valore di R-squared è compreso tra 0 e 1. Un valore più alto di R-squared è considerato migliore perché indica che il modello spiega una porzione maggiore della varianza.
from sklearn import metrics
# compute the R Square for modelprint("R-Square:",metrics.r2_score(y_test, y_pred))Offerto da
Questo modello ha un R-squared elevato (0,96). Fornisce quindi un migliore adattamento ai dati.
Valutazione del modello
Per i problemi di regressione si usano le seguenti metriche di valutazione (Ritchie Ng):
Mean Absolute Error (MAE) è la media del valore assoluto degli errori.
Mean Squared Error (MSE) è la media degli errori al quadrato.
Root Mean Squared Error (RMSE) è la radice quadrata della media degli errori al quadrato.
# calculate MAE using scikit-learnprint("MAE:",metrics.mean_absolute_error(y_test,y_pred))#calculate mean squared errorprint("MSE",metrics.mean_squared_error(y_test, y_pred))# compute the RMSE of our predictionsprint("RMSE:",np.sqrt(metrics.mean_squared_error(y_test, y_pred)))Offerto da
MAE:595.0282284701234MSE2114139.8898678957RMSE:1454.0082151995896Offerto da
L’RMSE è più popolare di MSE e MAE perché è interpretabile rispetto a y, essendo espresso nelle stesse unità.
Pro e contro del CLTV
Il CLTV ti aiuta a progettare un piano di business efficace e offre anche l’opportunità di scalare la tua attività. Il CLTV traccia segmenti di clienti significativi: questi segmenti possono aiutarti a identificare le esigenze dei diversi gruppi.
Il Customer Lifetime Value è uno strumento, non una strategia. Il CLTV può individuare i clienti più redditizi, ma come trarre profitto da loro dipende dalla tua strategia. In generale, i modelli di CLTV sono spesso fraintesi e usati male. L’ossessione per il CLTV può creare paraocchi: le aziende si concentrano solo nel trovare il gruppo di clienti migliore e nel puntare su di esso per ripetere il business, ma è importante dare attenzione anche agli altri clienti.
Conclusione
Congratulazioni, sei arrivato alla fine di questo tutorial!
In questo tutorial, hai approfondito molti dettagli sul Customer Lifetime Value. Hai imparato cos’è il customer lifetime value, gli approcci per calcolare il CLTV, l’implementazione del CLTV da zero in Python, un modello predittivo per il CLTV e i pro e contro del CLTV. Inoltre, hai visto alcuni concetti base di pandas come groupby e pivot table per riassumere colonne e righe selezionate.
Si spera che ora tu possa utilizzare il concetto di CLTV per analizzare i tuoi dataset. Grazie per aver letto questo tutorial!
Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
L’economista italiano Vilfredo Pareto afferma che l’80% degli effetti deriva dal 20% delle cause: è la cosiddetta regola 80/20 o principio di Pareto. Allo stesso modo, l’80% del business di un’azienda proviene dal 20% dei clienti. Le aziende devono individuare questi clienti top e coltivare il rapporto con loro per garantire entrate continue. Per mantenere una relazione di lungo periodo con i clienti, è necessario pianificare programmi di fidelizzazione come sconti, offerte, coupon, punti bonus e regali.
Acquisire un nuovo cliente costa più che trattenere quelli esistenti, perché non devi spendere risorse, tempo e fatica per convincerli. Devi solo mantenere soddisfatti i clienti attuali. Gli analisti di business calcolano con precisione il costo di acquisizione dei clienti usando il CLTV (Customer Lifetime Value). Il CLTV indica il ricavo totale generato dal cliente durante l’intera relazione. Il CLTV aiuta le aziende a concentrarsi su quei clienti potenziali che possono portare più ricavi in futuro.
Customer Lifetime Value (CLTV)
"Il Customer Lifetime Value è un valore monetario che rappresenta l’ammontare di ricavi o profitti che un cliente porterà all’azienda nell’arco della relazione". Il CLTV mostra le implicazioni dell’acquisizione di clienti di lungo periodo rispetto a quelli di breve periodo. Il Customer lifetime value (CLV) può aiutarti a rispondere alle domande più importanti sulle vendite per qualsiasi azienda:
Calculate Customer Lifetime Value
Esistono molti approcci per calcolare il CLTV. Ognuno ha la propria visione. Per calcolare il CLTV servono dati storici dei clienti, ma non sarai in grado di calcolarlo per i nuovi clienti. Per risolvere questo problema, gli analisti di business sviluppano modelli di machine learning per prevedere il CLTV dei nuovi clienti. Vediamo alcuni approcci per il calcolo del CLTV:
1) Puoi calcolarlo sommando profitto/ricavo dai clienti in un dato periodo. Per esempio, se il cliente è con te da 3 anni, puoi sommare tutti i profitti in questi 3 anni. Puoi fare la media del profitto su base annuale, semestrale o mensile, ma con questo approccio non puoi costruire un modello predittivo per i nuovi clienti.
2) Costruisci un modello di regressione per i clienti esistenti. Prendi i dati degli ultimi sei mesi come variabili indipendenti e il ricavo totale su tre anni come variabile dipendente e costruisci un modello di regressione su questi dati.
3) Il CLTV può essere implementato anche usando i valori RFM (Recency, Frequency, Monetary). Per maggiori dettagli puoi fare riferimento al mio tutorial.
4) Usando la seguente equazione: CLTV = ((Average Order Value x Purchase Frequency)/Churn Rate) x Profit margin.
Average Order Value (AOV): L’Average Order Value è il rapporto tra il tuo ricavo totale e il numero totale di ordini. L’AOV rappresenta l’importo medio di ricavo che il cliente spende per un ordine.
Purchase Frequency (PF): La Purchase Frequency è il rapporto tra il numero totale di ordini e il numero totale di clienti. Rappresenta il numero medio di ordini effettuati da ciascun cliente.
Churn Rate: La Churn Rate è la percentuale di clienti che non hanno effettuato un nuovo ordine.
Customer Lifetime: Il Customer Lifetime è il periodo di tempo in cui il cliente ha effettuato ordini in modo continuativo.
Repeat Rate: La Repeat Rate è definita come il rapporto tra il numero di clienti con più di un ordine e il numero di clienti unici. Esempio: se in un mese hai 10 clienti, di cui 4 tornano, la tua repeat rate è del 40%.
Implementazione del CLTV in Python (usando la formula)
Importazione delle librerie necessarie
Caricamento del dataset
Per prima cosa carichiamo il dataset Online Retail richiesto usando la funzione read CSV di pandas. Puoi scaricare i dati da qui.
Rimozione dei duplicati
A volte il dataset è disordinato. Potresti dover gestire duplicati, che alterano l’analisi. In Python, pandas offre la funzione drop_duplicates(), che elimina i record ripetuti o duplicati.
Passiamo agli insight sui dati
Nel dataset fornito, puoi osservare che la maggior parte dei clienti proviene dal "United Kingdom". Quindi, puoi filtrare i dati per i clienti del Regno Unito.
La funzione describe() in pandas è comoda per ottenere varie statistiche di sintesi. Questa funzione restituisce conteggio, media, deviazione standard, valori minimi e massimi e i quantili dei dati.
Qui puoi notare che alcuni clienti hanno ordinato quantità negative, il che non è possibile. Quindi, devi filtrare Quantity maggiore di zero.
Filtra le colonne necessarie
Qui puoi filtrare le colonne necessarie per calcolare il CLTV. Ti servono solo cinque colonne: CustomerID, InvoiceDate, InvoiceNo, Quantity e UnitPrice.
Ora eseguirai le seguenti operazioni:
Rinomina delle colonne
Calcola il CLTV usando la seguente formula:
1. Calcola l’Average Order Value
2. Calcola la Purchase Frequency
3. Calcola Repeat Rate e Churn Rate
4. Calcola il profit margin
Il profit margin è il rapporto di redditività più usato. Indica quale percentuale delle vendite totali è guadagno. Supponiamo che il nostro business abbia circa il 5% di profitto sulle vendite totali.
5. Calcola il Customer Lifetime Value
Modello predittivo per il CLTV
Costruiamo il modello di previsione del CLTV.
Qui prevederai il CLTV usando un modello di regressione lineare.
Per prima cosa usiamo i dati caricati e filtrati sopra.
Estrai mese e anno da InvoiceDate.
La pivot table prende le colonne in input e raggruppa le voci in una tabella bidimensionale in modo da fornire una sintesi multidimensionale dei dati.
Sommiamo le vendite di tutti i mesi.
Selezione delle feature
Qui devi dividere le colonne fornite in due tipi di variabili: dipendente (o variabile target) e indipendenti (o feature). Seleziona gli ultimi 6 mesi come variabili indipendenti.
Suddivisione dei dati
Per capire le prestazioni del modello, dividere il dataset in training set e test set è una buona strategia.
Dividiamo il dataset usando la funzione train_test_split(). Devi passare 3 parametri: feature, target e dimensione del test_set. Inoltre, puoi usare random_state come seed per mantenere la riproducibilità, il che significa che ogni volta che dividi i dati i risultati non cambieranno. Se random_state è None, il generatore di numeri casuali usa np.random per selezionare i record in modo casuale. Significa che se non imposti un seed, la divisione è diversa ogni volta.
Sviluppo del modello
Per prima cosa importa il modulo Linear Regression e crea un oggetto Linear Regression. Poi addestra il modello sul training set usando la funzione fit() ed effettua le previsioni sul test set usando predict().
Quanto bene il modello si adatta ai dati?
Per valutare l’adattamento complessivo del modello lineare, usiamo il valore R-squared. R-squared è la proporzione di varianza spiegata dal modello. Il valore di R-squared è compreso tra 0 e 1. Un valore più alto di R-squared è considerato migliore perché indica che il modello spiega una porzione maggiore della varianza.
Questo modello ha un R-squared elevato (0,96). Fornisce quindi un migliore adattamento ai dati.
Valutazione del modello
Per i problemi di regressione si usano le seguenti metriche di valutazione (Ritchie Ng):
L’RMSE è più popolare di MSE e MAE perché è interpretabile rispetto a y, essendo espresso nelle stesse unità.
Pro e contro del CLTV
Il CLTV ti aiuta a progettare un piano di business efficace e offre anche l’opportunità di scalare la tua attività. Il CLTV traccia segmenti di clienti significativi: questi segmenti possono aiutarti a identificare le esigenze dei diversi gruppi.
Il Customer Lifetime Value è uno strumento, non una strategia. Il CLTV può individuare i clienti più redditizi, ma come trarre profitto da loro dipende dalla tua strategia. In generale, i modelli di CLTV sono spesso fraintesi e usati male. L’ossessione per il CLTV può creare paraocchi: le aziende si concentrano solo nel trovare il gruppo di clienti migliore e nel puntare su di esso per ripetere il business, ma è importante dare attenzione anche agli altri clienti.
Conclusione
Congratulazioni, sei arrivato alla fine di questo tutorial!
In questo tutorial, hai approfondito molti dettagli sul Customer Lifetime Value. Hai imparato cos’è il customer lifetime value, gli approcci per calcolare il CLTV, l’implementazione del CLTV da zero in Python, un modello predittivo per il CLTV e i pro e contro del CLTV. Inoltre, hai visto alcuni concetti base di pandas come groupby e pivot table per riassumere colonne e righe selezionate.
Si spera che ora tu possa utilizzare il concetto di CLTV per analizzare i tuoi dataset. Grazie per aver letto questo tutorial!
Se vuoi approfondire l’analisi dei dati dei clienti in Python, segui il corso di DataCamp Customer Analytics & A/B Testing in Python.