I tuoi clienti tendono a fare più acquisti solo nei periodi di promozione o… sono sempre fedeli?
Altro insight prezioso per l’e-commerce è rappresentato dall’Analisi Avanzata della Frequenza di Acquisto. Questo insight aiuta a capire se i tuoi clienti tornano spesso per effettuare nuovi acquisti sul tuo e-commerce, oppure sono solo procacciatori di affari nei giorni di promozioni o eventi. Analizzeremo 2 metriche frequency_per_day
e frequency_per_active_day
utili per avere indicazioni sulla fedeltà del cliente e sull’efficacia delle tue strategie di retention.
Obiettivo dell’analisi
L’obiettivo di questa analisi è determinare la frequenza media di acquisto dei clienti in un determinato periodo, per identificare pattern di ritorno e valutare l’efficacia delle iniziative di fidelizzazione.
Essa offre insight critici riguardanti quanto spesso i clienti effettuano acquisti:
- Valutazione della Fedeltà del Cliente: Una frequenza di acquisto elevata può indicare un alto livello di fedeltà del cliente e una soddisfazione generale con il tuo e-commerce.
- Miglioramento delle Strategie di Retention: Identificare i clienti con bassa frequenza di acquisto può aiutare a sviluppare strategie mirate per aumentare la retention, come email di riacquisto o offerte speciali.
- Personalizzazione delle Offerte: Utilizza i dati sulla frequenza di acquisto per personalizzare le comunicazioni e le offerte per diversi segmenti di clienti, ottimizzando così le tue campagne di marketing.
Query per l’Analisi della Frequenza di Acquisto
WITH customer_activity AS (
SELECT
user_pseudo_id,
COUNT(DISTINCT PARSE_DATE('%Y%m%d', event_date)) AS total_purchase_days,
DATE_DIFF(MAX(PARSE_DATE('%Y%m%d', event_date)), MIN(PARSE_DATE('%Y%m%d', event_date)), DAY) AS days_active,
COUNT(*) AS total_purchases
FROM
`your_project.your_dataset.events_*`
WHERE
event_name = 'purchase'
AND _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 60 DAY)) AND FORMAT_DATE('%Y%m%d', CURRENT_DATE())
GROUP BY
user_pseudo_id
),
purchase_frequency AS (
SELECT
user_pseudo_id,
total_purchase_days,
days_active,
total_purchases,
IF(days_active > 0, ROUND(total_purchases / days_active, 2), 0) AS frequency_per_day,
IF(total_purchase_days > 0, ROUND(total_purchases / total_purchase_days, 2), 0) AS frequency_per_active_day
FROM
customer_activity
)
SELECT
ROUND(AVG(frequency_per_day),2) AS avg_frequency_per_day,
ROUND(AVG(frequency_per_active_day),2) AS avg_frequency_per_active_day
FROM
purchase_frequency
PS. Ricorda di sostituire your_project
, your_dataset
e your_table
con i tuoi identificativi di progetto, dataset e tabella effettivi. Queste query sono solo punti di partenza e potrebbero necessitare di personalizzazioni per adattarsi alle tue esigenze specifiche e alla struttura dei tuoi dati.
La query genererà il seguente report:
Esaminiamo più in dettaglio la differenza tra frequency_per_day
e frequency_per_active_day
nella nostra analisi della frequenza di acquisto:
frequency_per_day
- Definizione: Questo valore rappresenta la media di acquisti per giorno calcolata su tutto il periodo di attività del cliente, dal suo primo all’ultimo acquisto.
- Calcolo: Si ottiene dividendo il numero totale di acquisti (
total_purchases
) per il numero totale di giorni tra il primo e l’ultimo acquisto (days_active
). - Interpretazione: Indica quanto spesso, in media, un cliente fa un acquisto, considerando tutti i giorni dal suo primo al suo ultimo acquisto. Questo include tutti i giorni nel periodo, indipendentemente dal fatto che il cliente abbia effettivamente fatto acquisti in quei giorni o meno. Se un cliente ha fatto acquisti solo in alcuni giorni specifici ma il lasso di tempo dall’inizio alla fine è ampio, questo abbasserà la
frequency_per_day
poiché stiamo diluendo il numero totale di acquisti su un periodo più esteso.
frequency_per_active_day
- Definizione: Questo valore rappresenta la media di acquisti per giorno, ma solo nei giorni in cui il cliente ha effettivamente effettuato un acquisto.
- Calcolo: Si ottiene dividendo il numero totale di acquisti (
total_purchases
) per il numero di giorni in cui il cliente ha effettivamente effettuato almeno un acquisto (total_purchase_days
). - Interpretazione: Mostra quanto spesso, in media, un cliente fa acquisti nei giorni in cui è attivamente impegnato a comprare. Questa metrica fornisce un’idea di quanto sia intensa l’attività del cliente nei giorni in cui sceglie di fare acquisti, ignorando i giorni in cui non è attivo.
Esempio per Distinguere le Due Metriche
Immagina un cliente che ha fatto acquisti in tre giorni distinti nel corso di un anno (365 giorni):
- Ha effettuato un totale di 9 acquisti.
- I giorni in cui ha effettuato gli acquisti sono stati distribuiti durante l’anno.
Per frequency_per_day
:
- Calcoliamo 9 acquisti diviso 365 giorni = 0.025 acquisti al giorno.
Questo numero è relativamente basso perché considera tutti i giorni dell’anno, anche quelli in cui il cliente non ha fatto acquisti.
Per frequency_per_active_day
:
- Calcoliamo 9 acquisti diviso 3 giorni (i giorni in cui ha effettuato acquisti) = 3 acquisti per giorno attivo.
Questo numero è più alto perché consideriamo solo i giorni in cui il cliente è stato attivamente impegnato in acquisti.
In sintesi, frequency_per_day
dà un senso della frequenza di acquisto diluita su tutto il periodo considerato, mentre frequency_per_active_day
fornisce una misura della frequenza di acquisto nei giorni in cui il cliente è effettivamente attivo. Quest’ultima può essere particolarmente utile per capire l’intensità di acquisto quando un cliente decide di interagire con il tuo e-commerce.
Esaminiamo nel dettaglio la spiegazione della query per l’analisi della frequenza di acquisto, inclusa un’esemplificazione pratica.
Spiegazione della Query
La query è divisa in diverse sezioni per calcolare come i clienti interagiscono col tempo con il tuo e-commerce in termini di acquisti:
customer_activity
CTE (Common Table Expression):
- Obiettivo: Raccogliere informazioni sulle attività di acquisto di ciascun cliente.
- Calcoli:
total_purchase_days
: Conta il numero di giorni unici in cui ogni cliente ha effettuato almeno un acquisto. Questo è indicativo della frequenza con cui il cliente ritorna per fare acquisti.days_active
: Calcola la differenza in giorni tra il primo e l’ultimo acquisto di ogni cliente, fornendo una misura della durata dell’attività del cliente.total_purchases
: Conteggia il numero totale di acquisti fatti da ciascun cliente.
- Nuovo esempio: Se un cliente ha effettuato acquisti il 1° gennaio, il 15 gennaio e il 1° marzo, avrà
total_purchase_days = 3
,days_active = 59
(assumendo che l’ultimo acquisto sia il 1° marzo e il primo il 1° gennaio), etotal_purchases
uguale al numero di acquisti fatti in quei giorni.
purchase_frequency
CTE
- Obiettivo: Calcolare la frequenza di acquisto per ciascun cliente.
- Calcoli:
frequency_per_day
: Stabilisce la media di acquisti al giorno nel periodo compreso tra il primo e l’ultimo acquisto. È una misura di quanto spesso, in media, un cliente effettua un acquisto.frequency_per_active_day
: Calcola il numero medio di acquisti per giorno in cui è stato effettuato almeno un acquisto, che indica quanto spesso il cliente acquista quando è attivo.
- Nuovo Esempio: Utilizzando i dati dell’esempio precedente, se il cliente ha effettuato 6 acquisti in totale, la
frequency_per_day
sarebbe6 / 59 = 0.10
(arrotondato) acquisti al giorno su tutti i giorni attivi, mentre lafrequency_per_active_day
sarebbe6 / 3 = 2
acquisti per giorno di attività effettiva.
Selezione Finale
- Obiettivo: Fornire una visione complessiva della frequenza di acquisto media tra tutti i clienti.
- Calcoli:
avg_frequency_per_day
: La media difrequency_per_day
per tutti i clienti.avg_frequency_per_active_day
: La media difrequency_per_active_day
per tutti i clienti.
- Esempio: Se tutti i tuoi clienti hanno simili pattern di acquisto, otterrai la media di questi valori. Per esempio, se tutti i clienti acquistano 0.10 volte al giorno e 2 volte nei giorni in cui sono effettivamente attivi, questi saranno i valori medi.
Analisi della frequenza di acquisto suddivisa per mese
Per trasformare la tua query in un’analisi della frequenza di acquisto suddivisa per mese, dobbiamo prima aggiungere una componente che ci permetta di identificare in quale mese ogni acquisto è stato fatto. Questo può essere realizzato estraendo l’anno e il mese dalla event_date
e poi aggregando i dati su questa base.
Vediamo come modificare la tua query:
WITH monthly_customer_activity AS (
SELECT
user_pseudo_id,
FORMAT_DATE('%Y%m', PARSE_DATE('%Y%m%d', event_date)) AS year_month,
COUNT(DISTINCT event_date) AS total_purchase_days,
COUNT(*) AS total_purchases
FROM
`your_project.your_dataset.events_*`
WHERE
event_name = 'purchase'
AND _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 4 MONTH)) AND FORMAT_DATE('%Y%m%d', CURRENT_DATE())
GROUP BY
user_pseudo_id, year_month
),
monthly_purchase_frequency AS (
SELECT
year_month,
ROUND(AVG(total_purchase_days),2) AS avg_total_purchase_days,
ROUND(AVG(total_purchases),2) AS avg_total_purchases,
ROUND(AVG(total_purchases) / AVG(total_purchase_days), 2) AS avg_frequency_per_active_day
FROM
monthly_customer_activity
GROUP BY
year_month
)
SELECT
year_month,
avg_total_purchase_days,
avg_total_purchases,
avg_frequency_per_active_day
FROM
monthly_purchase_frequency
ORDER BY
year_month DESC
Spiegazione della Query:
monthly_customer_activity
CTE:
- Aggiunge
year_month
, estratto dall’event_date
, per raggruppare le attività di acquisto non solo peruser_pseudo_id
ma anche per mese. - Mantiene il conteggio dei giorni distinti di acquisto (
total_purchase_days
) e il totale degli acquisti (total_purchases
) per ogni cliente, suddivisi per mese.
monthly_purchase_frequency
CTE:
- Calcola la media dei giorni di acquisto (
avg_total_purchase_days
) e la media totale degli acquisti (avg_total_purchases
) per mese. - Determina la frequenza media di acquisto per giorno attivo (
avg_frequency_per_active_day
) per mese, che è la media degli acquisti divisa per la media dei giorni di acquisto effettivi per quel mese.
Selezione Finale:
- Estrae la media dei giorni di acquisto, la media totale degli acquisti, e la frequenza media di acquisto per giorno attivo, per ogni mese, ordinati dal più recente al meno recente.
Ecco un esempio pratico basato sulla struttura modificata della query per l’analisi della frequenza di acquisto mensile:
Esempio di Analisi
Immaginiamo di eseguire la query per i mesi di Gennaio e Febbraio 2024, e otteniamo i seguenti risultati:
year_month | avg_total_purchase_days | avg_total_purchases | avg_frequency_per_active_day |
---|---|---|---|
202402 | 2.5 | 5 | 2.00 |
202401 | 3 | 6 | 2.00 |
Interpretazione del report
Gennaio 2024 (202401
):
avg_total_purchase_days
: In media, i clienti hanno effettuato acquisti in 3 giorni distinti nel mese di Gennaio.avg_total_purchases
: Il numero medio di acquisti per cliente in Gennaio è stato 6.avg_frequency_per_active_day
: In media, ogni cliente ha effettuato 2 acquisti per ogni giorno in cui ha fatto shopping (6 acquisti divisi per 3 giorni).
Febbraio 2024 (202402
):
avg_total_purchase_days
: In media, i clienti hanno effettuato acquisti in 2.5 giorni distinti nel mese di Febbraio, indicando che alcuni clienti potrebbero aver fatto acquisti solo in 2 giorni, mentre altri in 3.avg_total_purchases
: Il numero medio di acquisti per cliente in Febbraio è stato 5, leggermente inferiore rispetto a Gennaio.avg_frequency_per_active_day
: In media, ogni cliente ha effettuato 2 acquisti per ogni giorno in cui ha fatto shopping in Febbraio, il che è consistente con la frequenza di Gennaio.
Utilità dell’Esempio
Questo esempio mostra come l’analisi della frequenza di acquisto mensile può fornire insight preziosi:
- Tendenze di Acquisto: Notiamo che la frequenza di acquisto per giorno attivo è rimasta costante tra Gennaio e Febbraio, suggerendo che, nonostante le variazioni nel numero totale di acquisti o nei giorni di acquisto, la propensione all’acquisto nei giorni attivi è stabile.
- Strategie di Marketing: Se notiamo che i giorni medi di acquisto sono diminuiti, potremmo voler indagare il motivo e considerare strategie per incoraggiare più giorni di shopping attivo, come offerte speciali distribuite durante il mese.
- Pianificazione delle Scorte: La conoscenza del numero medio di acquisti può aiutare a prevedere la domanda e a gestire meglio l’inventario in base alle tendenze mensili.
Utilità dell’analisi mensile
L’ analisi mensile ti permette di vedere come cambiano nel tempo la frequenza e il volume degli acquisti, offrendo una visione chiara delle tendenze di acquisto nel tuo e-commerce. Puoi identificare i periodi dell’anno in cui i clienti sono più attivi, valutare l’efficacia delle campagne promozionali mensili e adeguare le strategie di stock e marketing in base ai pattern stagionali di acquisto.
Conclusione
Questa analisi fornisce insight preziosi sulla frequenza e sulla regolarità con cui i clienti ritornano per fare nuovi acquisti. Ad esempio, una bassa frequency_per_day
ma alta frequency_per_active_day
potrebbe indicare che i clienti tendono a fare più acquisti in pochi giorni selezionati, suggerendo che le promozioni o gli eventi speciali potrebbero essere molto efficaci. Al contrario, valori elevati in entrambi i parametri potrebbero indicare una forte fedeltà dei clienti e un’interazione costante con il tuo e-commerce.
Data Scientist
Sono un Data Scientist con esperienza nell’applicazione di tecniche avanzate di Machine Learning per l’analisi di complessi set di dati nel campo del marketing digitale. Specializzato nell’uso di Python, sviluppo modelli predittivi e di analisi dei dati che permettono di identificare e risolvere criticità nei progetti.