Market Basket Analysis

Saper analizzare i dati consente di adottare strategie di marketing ad hoc per fidelizzare i Clienti o semplificare il loro processo di acquisto.

Quando si parla di MBA (Market Basket Analysis), l’esempio classico a cui si fa riferimento è quello del carrello della spesa.

Se all’interno di esso trovassimo dei pannolini, allora si dice che è ampiamente probabile che troveremmo anche della birra. Sarà vero?

Più precisamente, la MBA fa parte di una classe di algoritmi di data mining, denominata Association Analysis, che ha come scopo ultimo quello di determinare le correlazioni tra elementi diversi. In altri termini, l’idea è quella di svelare, all’interno di una base dati spesso molto articolata, delle regole del tipo “se c’è questo allora ci sarà anche quest’altro”.

Il risultato delle Association Analysis è generalmente rappresentato da un set di regole del tipo

{ Item X }  →  { Item Y }

per significare che se è presente l’elemento X (detto antecedente della regola),  allora ci sarà anche l’elemento Y (conseguente).

Il Dataset di Esempio

Per questo esempio, ho utilizzato il dataset Groceries in formato CSV, un set di dati presente tra l’altro nel pacchetto Dataset di R.

Questo file contiene quasi 10.000 righe del tipo:

agrumi, pane, margarina, zuppa in scatola
ananas, yogurt, caffè
latte intero
mele, yogurt, formaggio spalmabile, carne

Ogni riga rappresenta l’elenco dei prodotti acquistati da un cliente in un negozio di alimentari.

Il processo di Analisi

Per analizzare questi dati in RapidMiner dobbiamo completare i seguenti passi:

Passo 1 – Preparare i dati secondo il formato specifico di input per l’operatore RapidMiner

Passo 2 – Restringere l’insieme iniziale degli item set (le combinazioni di uno o più articoli acquistati insieme) selezionando solo le combinazioni più frequenti al fine di snellire il calcolo computazionale.
Come misura quantitativa si utilizza il Supporto, definito come la frequenza delle occorrenze di un item all’interno dell’insieme dei dati.

Passo 3 – Generare regole rilevanti dagli item set selezionati. In questo caso, due misure frequentemente utilizzate, sono la Confidenza e il Lift.

La Confidenza misura la probabilità che in tutte le transazioni in cui è presente l’item X compaia anche l’item Y. Nell’esempio iniziale – {Pannolini} → {Birra} – supponiamo che su 10 casi in cui vengano acquistati i pannolini, per 5 volte si ritrovi anche la birra allora la Confidenza sarà del 50% e si calcola dividendo il numero di transazioni in cui compaiono sia i pannolini che la birra rispetto al numero di volte in cui vengono acquistati solo i pannolini.

Una Confidenza prossima ad 1 è sicuramente un buon indice.

Un altro indicatore, il Lift, tiene in considerazione anche la probabilità del conseguente Y e si ottiene dividendo la Confidenza per la probabilità di Y.

Tornando al nostro caso iniziale, sappiamo che la probabilità che uno acquisti la birra, avendo già acquistato i pannolini, è del 50%. Supponendo che la birra sia un articolo molto frequente nel carrello dei consumatori (diciamo che venga acquistata nel 70% dei casi) allora:

Lift = Confidenza/P(Birra) = 0.5 / 0.7 = 0.71

Una misura inferiore a 1 è un indice negativo, infatti presuppone che la probabilità dell’acquisto di birra in generale sia maggiore della probabilità dell’acquisto di birra avendo già acquistato i pannolini.

Il processo MBA in RapidMiner

Procediamo ripercorrendo i 3 passi descritti in precedenza.

Passo 1 – Preparazione dei dati

La figura illustra i passi per la preparazione dei dati.

cs_rm preparazione dati 01

Per prima cosa, i dati nel file CSV sono stati importati in RapidMiner trascinando il file stesso all’interno del pannello centrale e completando il semplice wizard (Retrive groceries).

Per soddisfare il requisito di input dell’operatore FP-Growth, utilizzato in seguito, attraverso l’operatore Split, gli item, separati da virgola, sulla colonna iniziale sono stati distribuiti in forma matriciale definendo una colonna per ogni item dove, se nella riga della transazione i-esima è presente l’item A allora nella colonna A troveremo il valore true, altrimenti false.

cs_rm 02

Nell’operatore Split è necessario impostare correttamente il parametro split mode. Dato che gli item di ogni riga non sono ordinati, ho utilizzato il parametro unordered_split affinché venga creata una colonna per ogni item letto su ogni riga.

cs_rm 03

Gli ultimi 2 operatori servono rispettivamente per escludere il prefisso att1_ da ogni etichetta di riga e per convertire i valori di ciascuna cella da nominali in binomiali (così come richiesto per l’input dall’operatore FP_Growth).

Passo 2 – Restringere l’insieme iniziale degli item set

Per determinare gli item set più frequenti, in RapidMiner si utilizza l’operatore Frequent Pattern (FP-Growth) che utilizza internamente un algoritmo (diverso rispetto al più noto algoritmo APRIORI) per determinare gli item set più rilevanti.

cs_rm 04

Come parametri, ho scelto di selezionare il flag ‘find min number of itemses’. Con questa opzione RapidMiner ricercherà almeno 100 itemset (‘min number of itemsets’) a partire da quelli con un supporto pari a 0.1 (‘min support’) e ripetendo tale processo per 20 volte (‘max number of retries’), decrementando via via tale supporto del 20% per ogni ciclo.

Ho scelto di impostare a 100 il numero minimo di item set per avere in output circa il 10% di risultati rispetto al totale delle transazioni iniziali.

L’alternativa a questa strada è quella di impostare esclusivamente il supporto minimo, senza alcun controllo però sul numero di risultati ottenuti.

Passo 3 – Generare le regole associative

Una volta estratti gli item set più rilevanti, è facile ricavare le regole associative utilizzando l’operatore Create Association Rules.

In questo caso, come misura, ho utilizzato la confidenza impostando a 0.1 il valore minimo richiesto.

cs_rm 05

Le regole risultanti sono analizzabili nella finestra dei risultati attraverso varie viste interattive.

cs_rm 06

In questa immagine abbiamo ordinato le regole da quella con Confidenza più alta a quella con Confidenza più bassa. Abbiamo la Premises (ovvero l’antecedente della regola) e la Conclusion (ovvero il conseguente), seguiti dai vari indicatori visti in precedenza. Nella prima regola possiamo affermare che se un cliente acquista il burro (Butter) allora acquista anche il latte intero (Whole Milk) con una confidenza del 49 per cento.

cs_rm 07

Il secondo grafico ci permette di poter rappresentare graficamente le regole in modo che sia agevole trarre conclusioni globali. Abbiamo evidenziati in grassetto tutti i vari item presenti. Da questi item partono delle frecce che li collegano alle regole di cui sono antecedenti. Dalle regole partono altre frecce che li collegano al conseguente della regola. Ciò che si nota immediatamente è che latte intero (whole milk) è conclusione di moltissime regole (ci sono tante frecce entranti).

Conclusioni

Naturalmente quanto visto fin qui è molto approssimativo. Per ampliare l’analisi ed estenderla anche ad altri contesti, si potrebbero prendere in considerazione altri dati, per esempio, l’età dell’acquirente, il giorno della settimana in cui avviene l’acquisto, l’ora, la stagionalità dei prodotti, ecc. ottenendo risultati sempre più raffinati.

RapidMiner Studio consente di semplificare il processo di analisi di affinità e di analizzare le abitudini di acquisto dei clienti. Infatti, oltre a trovare associazioni sui diversi prodotti comprati, è possibile spostare l’attenzione anche sull’analisi dei dati riguardanti gli acquisti non ancora portati a termine, oppure i prodotti tolti dal carrello.

L’analisi agevola l’adozione strategie di marketing ad hoc per riportare ad esempio il potenziale cliente su un sito di e-commerce, consigliare l’aggiunta di prodotti che possono essere di suo interesse e portarlo a concludere l’acquisto.