Padronanza della segmentazione dei clienti utilizzando i dati delle transazioni con carta di credito

Segmentazione clienti tramite dati transazioni carta di credito.

Usare i Punteggi RFM per Creare i Segmenti di Clientela

Immagine di Andrea Piacquadio su Pexels

La segmentazione dei clienti è il processo di identificazione dei segmenti di clientela basati sui modelli di acquisto storici. Ad esempio, può riguardare l’identificazione di clienti fedeli/ripetitivi, clienti con elevata spesa, clienti che effettuano acquisti occasionali o sporadici e molto altro. I segmenti possono essere creati utilizzando informazioni come la frequenza degli acquisti, gli importi delle transazioni, le date degli acquisti e altro ancora. Tutte queste caratteristiche possono essere utilizzate per generare cluster ben definiti con caratteristiche facili da interpretare.

Le caratteristiche di questi segmenti possono fornire molte informazioni e valore aziendale per le aziende. Ad esempio, le aziende possono utilizzare questi segmenti per aumentare il fatturato attraverso messaggi promozionali mirati, campagne di fidelizzazione dei clienti, programmi di fedeltà, vendita incrociata di prodotti e altro ancora. Le aziende possono mirare ai segmenti di clientela con messaggi personalizzati che risultino pertinenti per ciascun segmento. Inoltre, questi segmenti possono fornire informazioni su quali canali i clienti rispondono maggiormente, che si tratti di e-mail, social media o applicazioni esterne. Le aziende possono anche effettuare up-selling o cross-selling utilizzando i segmenti di consumatori. Ad esempio, possono offrire opzioni a prezzi elevati per articoli acquistati frequentemente o prodotti complementari a articoli precedentemente acquistati. Tutte queste tattiche possono essere utilizzate per aumentare il fatturato e la fidelizzazione dei clienti.

Esistono una vasta varietà di tecniche utilizzate per la segmentazione dei clienti. Una tecnica popolare per la generazione di segmenti di clientela è quella dei punteggi RFM (Recency, Frequency, Monetary).

Recency, Frequency e Monetary

  1. Recency è il numero di giorni trascorsi dall’ultimo acquisto effettuato da un cliente e una data di riferimento, di solito l’attuale data o la data massima disponibile nei dati.
  2. Frequency è il numero di acquisti tra la data del loro ultimo acquisto e la data attuale o massima disponibile nei dati.
  3. Monetary è l’importo totale di denaro speso tra la data del loro primo e ultimo acquisto.

Puoi utilizzare questi valori per costruire i punteggi RFM che possono essere utilizzati per segmentare e identificare clienti ad alto e basso valore. Questi punteggi possono essere utilizzati per una vasta varietà di casi d’uso aziendali, inclusi il marketing personalizzato, l’analisi dell’abbandono, l’ottimizzazione dei prezzi e altro ancora.

Qui vedremo come calcolare i punteggi RFM utilizzando un dataset di transazioni con carta di credito. A tale scopo lavoreremo con i dati sintetici di transazioni con carta di credito disponibili su DataFabrica. La versione gratuita può essere scaricata, modificata e condivisa secondo la licenza Apache 2.0.

Per questo lavoro, scriverò il codice in Deepnote, che è un quaderno collaborativo per la scienza dei dati che rende molto facile eseguire esperimenti riproducibili.

Esplorazione dei Dati

Per iniziare, andiamo su Deepnote e creiamo un nuovo progetto (puoi registrarti gratuitamente se non hai già un account).

Installiamo i pacchetti necessari:

Embedding creato dall’autore

E importiamo i pacchetti che utilizzeremo:

Embedding creato dall’autore

Successivamente, leggiamo i nostri dati in un dataframe pandas e visualizziamo le prime cinque righe di dati:

Embedding creato dall’autore

Successivamente, filtriamo il nostro dataframe includendo solo i clienti che hanno acquistato da Chick-fil-A:

Embedding creato dall’autore

Successivamente, possiamo guardare il numero di clienti per stato. Per fare ciò, dobbiamo mappare il merchant_state alle abbreviazioni degli stati, che ci permetterà di visualizzare il conteggio dei clienti per ogni stato in Plotly:

Embedding creato dall’autore

Successivamente, mappiamo le abbreviazioni degli stati e definiamo la nostra tabella state_count. Facciamo ciò eseguendo un’operazione groupby nunique() per ciascun titolare di carta per ogni stato:

df['merchant_state_abbr'] = df['merchant_state'].map(state_abbreviations)state_counts = df.groupby('merchant_state_abbr')['cardholder_name'].nunique().reset_index()state_counts.columns = ['Stato', 'Conteggio_Clienti']

Successivamente, possiamo utilizzare il metodo chloropleth di Plotly Express per generare una mappa geografica del conteggio dei clienti per ogni stato:

fig = px.choropleth(state_counts, locations='State', locationmode='USA-states',                    color='Customer_Count', scope='usa',                    color_continuous_scale='Blues',                    title='Numero di clienti per stato')fig.show()

La logica completa è:

Incorporazione creata dall’autore

Generazione dei punteggi RFM

Ora definiamo la logica per la creazione dei punteggi RFM. Iniziamo convertendo la nostra transaction_date in un oggetto datetime di pandas e una variabile NOW che corrisponde alla data massima di transaction_date:

df['transaction_date'] = pd.to_datetime(df['transaction_date'])NOW = df['transaction_date'].max()

Successivamente, eseguiamo un’operazione di aggregazione groupby che ci permette di calcolare recency, frequency e monetary value.

  1. Recency – data massima complessiva meno data massima del cliente: df.groupby('cardholder_name').agg({'transaction_date': lambda x: (NOW — x.max()).days})
  2. Frequency – numero di ID di transazione per ogni cliente: df.groupby('cardholder_name').agg({'transaction_id': lambda x: len(x)})
  3. Monetary value – somma dell’importo della transazione per ogni cliente: df.groupby('cardholder_name').agg({'transaction_amount': lambda x: x.sum()})

Convertiamo anche transaction_date, che viene trasformata in recency, in un intero:

rfmTable = df.groupby('cardholder_name').agg({'transaction_date': lambda x: (NOW - x.max()).days, 'transaction_id': lambda x: len(x), 'transaction_amount': lambda x: x.sum()})rfmTable['transaction_date'] = rfmTable['transaction_date'].astype(int)

Successivamente, rinominiamo correttamente le nostre colonne.

  1. transaction_date diventa recency
  2. transaction_id diventa frequency
  3. transaction_amount diventa monetary_value
rfmTable.rename(columns={'transaction_date': 'recency',                          'transaction_id': 'frequency',                         'transaction_amount': 'monetary_value'}, inplace=True)rfmTable = rfmTable.reset_index()

La logica completa è:

Incorporazione creata dall’autore

Possiamo osservare la distribuzione in recency:

Incorporazione creata dall’autore

Frequency:

Incorporazione creata dall’autore

E monetary value:

Incorporazione creata dall’autore

Successivamente, possiamo calcolare i quartili utilizzando il metodo qcut di Pandas per recency, frequency e monetary value:

rfmTable['r_quartile'] = pd.qcut(rfmTable['recency'], q=4, labels=range(1,5), duplicates='raise')rfmTable['f_quartile'] = pd.qcut(rfmTable['frequency'], q=4, labels=range(1,5), duplicates='drop')rfmTable['m_quartile'] = pd.qcut(rfmTable['monetary_value'], q=4, labels=range(1,5), duplicates='drop')rfm_data = rfmTable.reset_index()

Successivamente, possiamo visualizzare la heatmap di recency/frequency, in cui ogni cella mostra la percentuale di clienti con i valori di recency e frequency corrispondenti. Prima calcoliamo le percentuali:

heatmap_data = rfm_data.groupby(['r_quartile', 'f_quartile']).size().reset_index(name='Percentage')heatmap_data['Percentage'] = heatmap_data['Percentage'] / heatmap_data['Percentage'].sum() * 100

Successivamente, generiamo la nostra matrice heatmap:

heatmap_matrix = heatmap_data.pivot('r_quartile', 'f_quartile', 'Percentage')

Generiamo la mappa e etichettiamo/il nome della nostra heatmap utilizzando Seaborn e Matplotlib:

sns.set()sns.heatmap(heatmap_matrix, annot=True, fmt=".2f", cmap="YlGnBu")plt.title("Heatmap di segmentazione dei clienti")plt.xlabel("Frequency Quartile")plt.ylabel("Recency Quartile")plt.show()

La logica completa è:

Embedding Creato dall’Autore

Possiamo vedere i seguenti dettagli dal nostro heatmap:

  1. Il 16,21% dei clienti ha acquistato di recente ma raramente.
  2. Il 3,45% dei clienti è frequente e recente.
  3. Il 10% dei clienti ha acquistato frequentemente ma non per molto tempo.
  4. Il 5,86% dei nostri clienti non ha acquistato di recente e non acquista frequentemente.

Stiamo considerando solo il singolo commerciante Chick-fil-A, ma ti incoraggio a ripetere questa analisi per alcuni altri ristoranti casual e di lusso.

Successivamente possiamo generare i nostri punteggi RFM concatenando i quartili in termini di recente, frequenza e valore monetario:

Embedding Creato dall’Autore

E possiamo visualizzare la distribuzione dei nostri punteggi RFM:

Embedding Creato dall’Autore

Qui vediamo che il punteggio RFM più comune è ‘411’, che corrisponde a un cliente recente che spende raramente e molto poco.

Generazione e Visualizzazione dei Segmenti Clienti utilizzando i punteggi RFM

Successivamente possiamo generare i nostri segmenti clienti. Questo passaggio è un po’ soggettivo, ma definiamo i nostri segmenti come segue:

  1. Cliente Premium: r, f e m tutti ≥ 3
  2. Cliente Ripetitore: f ≥ 3 e r o m ≥3
  3. Cliente Top Spender: m ≥ 3 e f o r ≥3
  4. Cliente a Rischio: due o più di r, f e m ≤ 2
  5. Cliente Inattivo: due o più = 1
  6. Altro: tutto il resto

Embedding Creato dall’Autore

In seguito possiamo vedere la distribuzione dei segmenti:

Embedding Creato dall’Autore

Qui vediamo che il segmento di clienti più grande è quello degli inattivi, seguito da quelli a rischio, i top spender, i clienti ripetitori e i clienti premium.

E visualizzare anche la distribuzione:

Embedding Creato dall’Autore

Possiamo anche analizzare il valore monetario medio per ogni segmento di clienti:

Embedding Creato dall’Autore

Vediamo che il valore monetario medio è più alto per i clienti premium, i clienti ripetitori e i top spender. Inoltre, i clienti inattivi e quelli a rischio hanno valori monetari bassi.

La frequenza media per ogni segmento di clienti:

Embedding Creato dall’Autore

Vediamo che i clienti premium, i clienti ripetitori e i top spender sono i più frequenti, mentre i clienti a rischio e quelli inattivi hanno una bassa frequenza.

Infine, il valore di recente medio per ogni segmento di clienti:

Embedding Creato dall’Autore

Vediamo che la categoria ‘altro’ ha gli acquisti più recenti. Questo potrebbe essere un buon segmento per i clienti “nuovi” i cui modelli di acquisto sono inconcludenti.

Utilizzo dei Segmenti Clienti per il Marketing Personalizzato

Puoi utilizzare questi segmenti clienti per generare messaggi di marketing personalizzati rilevanti per ogni segmento. Ad esempio, puoi premiare i clienti premium con promozioni speciali e offerte fedeltà. Puoi anche promuovere altri prodotti che potrebbero interessare loro in base alla loro cronologia degli acquisti. Per i clienti ripetitori e fedeli, puoi sviluppare campagne di email automatizzate per mantenere la loro fedeltà. I clienti a rischio sono tipicamente disimpegnati. Possiamo sviluppare campagne basate su questi clienti per coinvolgerli di nuovo e farli riprendere gli acquisti. Una campagna simile può essere sviluppata anche per i clienti inattivi. Infine, per i top spender, possiamo offrire promozioni speciali e offerte su prodotti molto costosi che sono probabilmente inclini a ricomprare.

Utilizzando questi dati, possiamo approfondire ulteriormente la nostra analisi e utilizzare i campi “items” e “prices” per creare queste campagne di marketing personalizzate per questi segmenti.

Ti incoraggio a scaricare il codice da GitHub e ripetere questa analisi autonomamente per altri ristoranti.

Conclusioni

In questo articolo abbiamo discusso come effettuare la segmentazione dei clienti utilizzando dati sintetici sulle transazioni con carte di credito. Abbiamo iniziato eseguendo una semplice esplorazione dei dati in cui abbiamo osservato il conteggio dei clienti in ciascuno stato per il commerciante Chick-fil-A. Successivamente abbiamo calcolato le colonne necessarie per generare i punteggi RFM, cioè recente, frequenza e valore monetario. Poi abbiamo mostrato come generare i quartili in termini di recente, frequenza e valore monetario per ogni cliente, che abbiamo poi utilizzato per costruire i punteggi RFM. Successivamente abbiamo utilizzato il punteggio RFM per generare i segmenti clienti “Cliente Premium”, “Cliente Ripetitore”, “Cliente Top Spender”, “Cliente a Rischio” e “Cliente Inattivo”. Successivamente abbiamo generato alcune visualizzazioni che ci hanno permesso di analizzare la distribuzione dei segmenti clienti nei dati.

Utilizzare i punteggi RFM per generare segmenti di clienti informativi è una competenza preziosa per qualsiasi data scientist che desideri fornire valori aziendali. Costruire segmenti interpretabili ed estrarre informazioni da questi segmenti può aiutare le aziende a progettare strategie di campagne di marketing che possono aumentare il fatturato e la fidelizzazione dei clienti. Comprendere il comportamento di acquisto dei clienti consente alle aziende di personalizzare offerte promozionali per gruppi di clienti appropriati. Questo articolo fornisce le basi necessarie per iniziare!

La versione gratuita dei dati sintetici della carta di credito è disponibile qui . L’intero set di dati può essere trovato qui .