Scopri la Market Basket Analysis e l’algoritmo APRIORI che la supporta. Vedrai come sta aiutando i retailer a far crescere il business prevedendo quali articoli i clienti acquistano insieme.
Sei un data scientist (o stai per diventarlo!) e ricevi un incarico da un cliente che gestisce un negozio al dettaglio. Il cliente ti fornisce i dati di tutte le transazioni, ovvero gli articoli acquistati in negozio da vari clienti in un certo periodo, e ti chiede di usare quei dati per aiutarlo a far crescere il business. Il cliente userà i tuoi risultati non solo per cambiare/aggiornare/aggiungere articoli a magazzino, ma anche per modificare il layout del negozio fisico o dell’e-commerce. Per ottenere risultati utili al tuo cliente, userai la Market Basket Analysis (MBA), che applica il Mining delle Regole di Associazione ai dati di transazione.
In questo tutorial imparerai:
Che cos’è il Mining delle Regole di Associazione e le sue applicazioni
Che cos’è l’algoritmo APRIORI
Come implementare MBA/Mining delle Regole di Associazione in R con visualizzazioni
Mining delle Regole di Associazione
Il Mining delle Regole di Associazione si usa quando vuoi trovare un’associazione tra oggetti diversi in un insieme, individuare pattern frequenti in un database di transazioni, in database relazionali o in qualsiasi altro repository informativo. Le applicazioni del Mining delle Regole di Associazione si trovano nel Marketing, nella Basket Data Analysis (o Market Basket Analysis) nel retail, nel clustering e nella classificazione. Può dirti quali articoli i clienti acquistano spesso insieme generando un insieme di regole chiamate Regole di Associazione. In parole semplici, restituisce regole del tipo se questo allora quello. I clienti possono usare queste regole per numerose strategie di marketing:
Modificare il layout del negozio in base ai trend
Analisi del comportamento dei clienti
Progettazione del catalogo
Cross marketing sugli store online
Quali articoli sono di tendenza negli acquisti dei clienti
Email personalizzate con vendite aggiuntive
Considera il seguente esempio:
È dato un insieme di dati di transazione. Vedi transazioni numerate da 1 a 5. Ogni transazione mostra gli articoli acquistati in quella transazione. Puoi vedere che il pannolino è acquistato con la birra in tre transazioni. Allo stesso modo, il pane è acquistato con il latte in tre transazioni, rendendoli entrambi insiemi di articoli frequenti. Le regole di associazione sono fornite nella forma seguente:
$A=>B[Support,Confidence]$
La parte prima di $=>$ è detta if (Antecedente) e la parte dopo $=>$ è detta then (Consequente).
Dove A e B sono insiemi di articoli nei dati di transazione. A e B sono insiemi disgiunti.
Il numero di transazioni che contengono sia A che B diviso per il numero totale di transazioni che contengono A.
$Confidence(Bread=>Milk)=\frac{3}{4}=0.75=75\%$
Ora trova la confidence per Latte=>Pannolino.
Nota: Support e Confidence misurano quanto una regola sia interessante. Sono fissati da soglie di support minimo e confidence minima. Queste soglie impostate dal cliente aiutano a confrontare la forza delle regole secondo le tue o le sue esigenze. Più vicina è alla soglia, più la regola è utile per il cliente.
Frequent Itemsets: Itemset il cui support è maggiore o uguale alla soglia di support minimo (min_sup). Nell’esempio sopra min_sup=3. È una scelta dell’utente.
Regole forti: Se una regola A=>B[Support, Confidence] soddisfa min_sup e min_confidence allora è una regola forte.
Lift: Il Lift dà la correlazione tra A e B nella regola A=>B. La correlazione mostra come un itemset A influisce sull’itemset B.
$Lift(A=>B)=\frac{Support}{Supp(A)Supp(B)}$
Ad esempio, per la regola {Bread}=>{Milk}, il lift è calcolato come:
$support(Bread)=\frac{4}{5}=0.8$
$support(Milk)=\frac{4}{5}=0.8$
$Lift(Bread=>Milk)=\frac{0.6}{0.8*0.8}=0.9$
Se la regola avesse un lift pari a 1, allora A e B sono indipendenti e non si può derivare alcuna regola.
Se il lift è > 1, allora A e B sono dipendenti tra loro, e il grado è dato dal valore di lift.
Se il lift è < 1, allora la presenza di A ha un effetto negativo su B.
Obiettivo del Mining delle Regole di Associazione
Quando applichi il Mining delle Regole di Associazione a un insieme di transazioni T il tuo obiettivo è trovare tutte le regole con:
Support maggiore o uguale a min_support
Confidence maggiore o uguale a min_confidence
Algoritmo APRIORI
In questa parte del tutorial imparerai l’algoritmo che sta dietro alle librerie R per la Market Basket Analysis. Questo ti aiuterà a comprendere meglio i tuoi clienti e a eseguire l’analisi con più attenzione. Se conosci già l’algoritmo APRIORI e come funziona, passa direttamente alla parte di codice.
Il Mining delle Regole di Associazione è visto come un approccio in due fasi:
Generazione degli itemset frequenti: Trova tutti gli itemset frequenti con supporto >= al min_support prefissato
Generazione delle regole: Elenca tutte le Regole di Associazione dagli itemset frequenti. Calcola Support e Confidence per tutte le regole. Elimina le regole che non soddisfano le soglie di min_support e min_confidence.
La generazione degli itemset frequenti è il passaggio computazionalmente più costoso perché richiede una scansione completa del database.
Tra i passaggi sopra, la generazione degli itemset frequenti è la più onerosa in termini di calcolo.
Sopra hai visto un esempio con sole 5 transazioni, ma nel mondo reale i dati di transazione nel retail possono arrivare a GB e TB, per cui serve un algoritmo ottimizzato che elimini gli itemset che non saranno utili nei passi successivi. A questo serve l’algoritmo APRIORI. Esso afferma:
Ogni sottoinsieme di un itemset frequente deve essere anch’esso frequente. In altre parole, non va generato o testato alcun sovrainsieme di un itemset non frequente
È rappresentato nel Reticolo degli itemset (Itemset Lattice), una rappresentazione grafica del principio dell’algoritmo APRIORI. È composto da nodi di k-itemset e dalle relazioni di sottoinsiemi di quel k-itemset.
Come vedi nella figura sopra, in basso ci sono tutti gli articoli nei dati di transazione e poi si sale creando sottoinsiemi fino all’insieme vuoto. Per un numero d di articoli la dimensione del reticolo diventa $2^d$. Questo mostra quanto sia difficile generare gli itemset frequenti calcolando il supporto per ogni combinazione. La figura seguente mostra quanto APRIORI aiuti a ridurre il numero di insiemi da generare:
Se l’itemset {a,b} non è frequente, allora non serve considerare tutti i suoi sovrainsiemi.
Capciamolo con un esempio. Nel seguente esempio vedrai perché APRIORI è un algoritmo efficace e genererai anche regole di associazione forti passo dopo passo. Segui con quaderno e penna!
Come puoi vedere, inizi creando la Lista dei candidati per l’1-itemset, che includerà tutti gli articoli presenti nei dati di transazione, presi singolarmente. Considerando dati retail reali, puoi immaginare quanto sia costosa questa generazione di candidati. Qui APRIORI entra in gioco e aiuta a ridurre il numero della lista dei candidati, e alla fine vengono generate regole utili. Nei passaggi seguenti vedrai come arriviamo alla fine della generazione degli itemset frequenti, che è il primo passo del mining delle regole di associazione.
Il passo successivo è elencare tutti gli itemset frequenti. Prenderai l’ultimo itemset frequente non vuoto, che in questo esempio è L2={I1, I2},{I2, I3}. Quindi crea tutti i sottoinsiemi non vuoti degli itemset presenti in quella lista di itemset frequenti. Segui come mostrato nell’illustrazione qui sotto:
Come vedi sopra, ci sono quattro regole forti. Ad esempio, prendi ${I2}=>I3$ con confidence pari al 75%: indica che il 75% delle persone che hanno acquistato I2 hanno acquistato anche I3.
Ora hai imparato l’algoritmo APRIORI completo, uno dei più usati nel data mining. Passiamo al codice, phewww!
Implementare MBA/Mining delle Regole di Associazione in R
In questo tutorial userai un dataset dal UCI Machine Learning Repository. Il dataset si chiama Online-Retail e puoi scaricarlo da qui. Il dataset contiene dati di transazione dal 01/12/2010 al 09/12/2011 per un retailer online registrato con sede nel Regno Unito senza negozio fisico. Il motivo per usare questo e non un dataset R è che è più probabile ricevere dati retail in questa forma, sui quali dovrai applicare il pre-processing.
Descrizione del dataset
Numero di righe:541909
Numero di attributi:08
Informazioni sugli attributi
InvoiceNo: Numero di fattura. Nominale, un numero intero a 6 cifre assegnato univocamente a ogni transazione. Se questo codice inizia con la lettera 'c', indica una cancellazione. +StockCode: Codice prodotto (articolo). Nominale, un numero intero a 5 cifre assegnato univocamente a ciascun prodotto distinto.
Description: Nome del prodotto (articolo). Nominale.
Quantity: Le quantità di ciascun prodotto (articolo) per transazione. Numerico.
InvoiceDate: Data e ora della fattura. Numerico, il giorno e l’ora in cui è stata generata ciascuna transazione. Esempio dal dataset: 12/1/2010 8:26
UnitPrice: Prezzo unitario. Numerico, prezzo per unità in sterline.
CustomerID: Numero cliente. Nominale, un numero intero a 5 cifre assegnato univocamente a ciascun cliente.
Country: Nome del paese. Nominale, il nome del paese di residenza di ciascun cliente.
Caricamento delle librerie
Per prima cosa caricherai le librerie necessarie. Una breve descrizione delle librerie (presa da qui) è data nella tabella seguente, così sai cosa fa ciascuna libreria:
Package
Description
arules
Fornisce l’infrastruttura per rappresentare, manipolare e analizzare dati di transazione e pattern (itemset frequenti e regole di associazione).
arulesViz
Estende il pacchetto 'arules' con varie tecniche di visualizzazione per regole di associazione e itemset. Il pacchetto include anche diverse visualizzazioni interattive per l’esplorazione delle regole.
tidyverse
Il tidyverse è una collezione di pacchetti R orientata al data science
readxl
Legge file Excel in R
plyr
Strumenti per suddividere, applicare e combinare dati
ggplot2
Creare grafici e chart
knitr
Generazione dinamica di report in R
lubridate
Lubridate è un pacchetto R che rende più semplice lavorare con date e orari.
#install and load package arules#install.packages("arules")
library(arules)#install and load arulesViz#install.packages("arulesViz")
library(arulesViz)#install and load tidyverse#install.packages("tidyverse")
library(tidyverse)#install and load readxml#install.packages("readxml")
library(readxl)#install and load knitr#install.packages("knitr")
library(knitr)#load ggplot2 as it comes in tidyverse
library(ggplot2)#install and load lubridate#install.packages("lubridate")
library(lubridate)#install and load plyr#install.packages("plyr")
library(plyr)
library(dplyr)Offerto da
Pre-processing dei dati
Usa read_excel(path to file) per leggere in R il dataset dal file scaricato. Fornisci il percorso completo del file, incluso il nome del file, in read_excel(path-to-file-with-filename)
#read excel into R dataframe
retail <- read_excel('D:/Documents/Online_Retail.xlsx')#complete.cases(data) will return a logical vector indicating which rows have no missing values. Then use the vector to get only rows that are complete using retail[,].
retail <- retail[complete.cases(retail),]#mutate function is from dplyr package. It is used to edit or add new columns to dataframe. Here Description column is being converted to factor column. as.factor converts column to factor column. %>% is an operator with which you may pipe values to another function or expression
retail %>% mutate(Description = as.factor(Description))Offerto da
retail %>% mutate(Country = as.factor(Country))Offerto da
#Converts character data to date. Store InvoiceDate as date in new variable
retail$Date <- as.Date(retail$InvoiceDate)#Extract time from InvoiceDate and store in another variable
TransTime<- format(retail$InvoiceDate,"%H:%M:%S")#Convert and edit InvoiceNo into numeric
InvoiceNo <- as.numeric(as.character(retail$InvoiceNo))Offerto da
#get a glimpse of your data
glimpse(retail)Offerto da
Nota: Pagina 1 di 100.
Observations:406,829
Variables:9$ InvoiceNo <chr>"536365","536365","536365","536365","536365","536365", "53...$ StockCode <chr>"85123A","71053","84406B","84029G","84029E","22752", "2173...$ Description <chr>"WHITE HANGING HEART T-LIGHT HOLDER","WHITE METAL LANTERN", "C...$ Quantity <dbl>6,6,8,6,6,2,6,6,6,32,6,6,8,6,6,3,2,3,3,4,4,...$ InvoiceDate <dttm>2010-12-0108:26:00,2010-12-0108:26:00,2010-12-0108:26:00,...$ UnitPrice <dbl>2.55,3.39,2.75,3.39,3.39,7.65,4.25,1.85,1.85,1.69,2.1...$ CustomerID <dbl>17850,17850,17850,17850,17850,17850,17850,17850,17850,...$ Country <chr>"United Kingdom","United Kingdom","United Kingdom", "United K...$ Date <date>2010-12-01,2010-12-01,2010-12-01,2010-12-01,2010-12-01,20...Offerto da
Ora il dataframe retail conterrà 10 attributi, con due attributi aggiuntivi Date e Time.
Prima di applicare MBA/Mining delle Regole di Associazione, dobbiamo convertire il dataframe in dati di transazione in modo che tutti gli articoli acquistati insieme in una fattura stiano su un’unica riga. Nel risultato di glimpse vedi che ogni transazione è in forma atomica, cioè tutti i prodotti appartenenti a una fattura sono atomici come nei database relazionali. Questo formato è chiamato anche formato singles.
Quello che devi fare è raggruppare i dati nel dataframe retail per CustomerID, CustomerID e Date oppure puoi anche raggruppare usando InvoiceNo e Date. Ci serve questo raggruppamento, applicare una funzione e salvare l’output in un altro dataframe. Questo si può fare con ddply.
Le righe di codice seguenti combineranno tutti i prodotti di uno stesso InvoiceNo e date e li uniranno in un’unica riga, con ciascun articolo separato da ,
library(plyr)#ddply(dataframe, variables_to_be_used_to_split_data_frame, function_to_be_applied)
transactionData <- ddply(retail,c("InvoiceNo","Date"),function(df1)paste(df1$Description,
collapse =","))#The R function paste() concatenates vectors to character and separated results using collapse=[any optional charcater string ]. Here ',' is usedOfferto da
Poi, dato che InvoiceNo e Date non saranno utili nel rule mining, puoi impostarli a NULL.
#set column InvoiceNo of dataframe transactionData
transactionData$InvoiceNo <-NULL#set column Date of dataframe transactionData
transactionData$Date <-NULL#Rename column to items
colnames(transactionData)<- c("items")#Show Dataframe transactionData
transactionDataOfferto da
Nota: Pagina 1 di 100.
Questo formato per i dati di transazione è chiamato formato basket. Ora devi salvare questi dati di transazione in un file .csv (Comma Separated Values). Per farlo, write.csv()
write.csv(transactionData,"D:/Documents/market_basket_transactions.csv", quote =FALSE, row.names =FALSE)#transactionData: Data to be written#"D:/Documents/market_basket.csv": location of file with file name to be written to#quote: If TRUE it will surround character or factor column with double quotes. If FALSE nothing will be quoted#row.names: either a logical value indicating whether the row names of x are to be written along with x, or a character vector of row names to be written.Offerto da
Controlla se i tuoi dati di transazione hanno la forma corretta:
Successivamente, devi caricare questi dati di transazione in un oggetto della classe transaction. Questo si fa usando la funzione R read.transactions del pacchetto arules.
La riga di codice seguente prenderà il file dei dati di transazione D:/Documents/market_basket_transactions.csv in formato basket e lo convertirà in un oggetto della classe transaction.
tr <- read.transactions('D:/Documents/market_basket_transactions.csv', format ='basket', sep=',')#sep tell how items are separated. In this case you have separated using ','Offerto da
Quando esegui le righe di codice sopra potresti ottenere molti EOF within quoted string in output, non preoccuparti.
Se hai già i dati di transazione in un dataframe, usa la riga di codice seguente per convertirli in un oggetto transaction:
`trObj<-as(dataframe.dat,"transactions")`Offerto da
transactions in sparse format with
22191 transactions (rows) and
7876 items (columns)
transactions as itemMatrix in sparse format with
22191 rows (elements/itemsets/transactions) and
7876 columns (items) and a density of 0.001930725
most frequent items:
WHITE HANGING HEART T-LIGHT HOLDER REGENCY CAKESTAND 3 TIER
18031709
JUMBO BAG RED RETROSPOT PARTY BUNTING
14601285
ASSORTED COLOUR BIRD ORNAMENT (Other)1250329938
element (itemset/transaction) length distribution:
sizes
12345678910111213141516173598159411419088617586966766635936245375165315515224641819202122232425262728293031323334441483419395315306272238253229213222215170159138142353637383940414243444546474849505113410911190113949387886563676360594964525354555657585960616263646566676840414943362939302728172525202724226970717273747576777879808182838485152019131616111512791415128911868788899091929394959697989910010110211148656116443652424103104105106107108109110111112113114116117118120121432263432131333121221231251261271311321331341401411421431451461471502132211211221121115415716817117717818020220422823624925028532040041932221111111111111
Min. 1st Qu. Median Mean 3rd Qu. Max.
1.003.0010.0015.2121.00419.00
includes extended item information - examples:
labels
11 HANGER
210 COLOUR SPACEBOY PEN
312 COLOURED PARTY BALLOONSOfferto da
summary(tr) è un comando molto utile che ci dà informazioni sul nostro oggetto transaction. Vediamo cosa dice l’output sopra:
Ci sono 22191 transazioni (righe) e 7876 articoli (colonne). Nota che 7876 è il numero di descrizioni prodotto coinvolte nel dataset e 22191 transazioni sono collezioni di questi articoli.
La densità indica la percentuale di celle non nulle in una matrice sparsa. Puoi intenderla come il numero totale di articoli acquistati diviso per il numero possibile di articoli in quella matrice. Puoi calcolare quanti articoli sono stati acquistati usando la densità: 22191x7876x0.001930725=337445
Informazione! Matrice sparsa: una matrice sparsa o array sparso è una matrice in cui la maggior parte degli elementi è zero. Al contrario, se la maggior parte degli elementi è diversa da zero, la matrice è considerata densa. Il numero di elementi pari a zero diviso per il numero totale di elementi è chiamato sparsità della matrice (che è uguale a 1 meno la densità della matrice).
Summary può anche indicarti gli articoli più frequenti.
Distribuzione della lunghezza dell’elemento (itemset/transazione): Indica quante transazioni ci sono per 1-itemset, per 2-itemset e così via. La prima riga indica il numero di articoli e la seconda riga indica il numero di transazioni.
Ad esempio, ci sono solo 3598 transazioni con un articolo, 1594 transazioni con 2 articoli, e ci sono 419 articoli in una transazione, che è la più lunga.
Puoi generare un itemFrequencyPlot per creare un grafico a barre delle frequenze degli articoli e visualizzare la distribuzione degli oggetti basata su itemMatrix (ad es., >transactions o articoli in >itemsets e >rules), che è il nostro caso.
# Create an item frequency plot for the top 20 itemsif(!require("RColorBrewer")){# install color package of R
install.packages("RColorBrewer")#include library RColorBrewer
library(RColorBrewer)}
itemFrequencyPlot(tr,topN=20,type="absolute",col=brewer.pal(8,'Pastel2'), main="Absolute Item Frequency Plot")Offerto da
In
itemFrequencyPlot(tr,topN=20,type="absolute")Offerto da
il primo argomento è l’oggetto transaction da plottare, cioè tr. topN ti permette di plottare gli N articoli con frequenza più alta. type può essere type="absolute" o type="relative". Se absolute plottarà le frequenze numeriche di ciascun articolo in modo indipendente. Se relative mostrerà quante volte questi articoli sono comparsi rispetto agli altri.
itemFrequencyPlot(tr,topN=20,type="relative",col=brewer.pal(8,'Pastel2'),main="Relative Item Frequency Plot")Offerto da
Questo grafico mostra che 'WHITE HANGING HEART T-LIGHT HOLDER' e 'REGENCY CAKESTAND 3 TIER' hanno le vendite maggiori. Quindi, per aumentare la vendita di 'SET OF 3 CAKE TINS PANTRY DESIGN' il retailer può posizionarlo vicino a 'REGENCY CAKESTAND 3 TIER'.
Puoi esplorare altre opzioni per itemFrequencyPlotqui.
Generare le regole!
Il passo successivo è estrarre le regole usando l’algoritmo APRIORI. La funzione apriori() è del pacchetto arules.
# Min Support as 0.001, confidence as 0.8.
association.rules <- apriori(tr, parameter = list(supp=0.001, conf=0.8,maxlen=10))Offerto da
Apriori
Parameter specification:
confidence minval smax arem aval originalSupport maxtime support minlen maxlen target
0.80.11 none FALSETRUE50.001110 rules
ext
FALSE
Algorithmic control:
filter tree heap memopt load sort verbose
0.1TRUETRUEFALSETRUE2TRUE
Absolute minimum support count:22
set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[30066 item(s),22191 transaction(s)] done [0.11s].
sorting and recoding items ...[2324 item(s)] done [0.02s].
creating transaction tree ... done [0.02s].
checking subsets of size 12345678910Offerto da
Mining stopped (maxlen reached). Only patterns up to a length of 10 returned!Offerto da
set of 49122 rules
rule length distribution (lhs + rhs):sizes
234567891010521116854164241485561021937613121
Min. 1st Qu. Median Mean 3rd Qu. Max.
2.0005.0005.0005.4996.00010.000
summary of quality measures:
support confidence lift count
Min. :0.001036 Min. :0.8000 Min. :9.846 Min. :23.001st Qu.:0.0010821st Qu.:0.83331st Qu.:22.2371st Qu.:24.00
Median :0.001262 Median :0.8788 Median :28.760 Median :28.00
Mean :0.001417 Mean :0.8849 Mean :64.589 Mean :31.453rd Qu.:0.0015323rd Qu.:0.92593rd Qu.:69.2003rd Qu.:34.00
Max. :0.015997 Max. :1.0000 Max. :715.839 Max. :355.00
mining info:
data ntransactions support confidence
tr 221910.0010.8Offerto da
apriori prenderà tr come oggetto transaction su cui applicare il mining. parameter ti permette di impostare min_sup e min_confidence. I valori di default per parameter sono support minimo 0.1, confidence minima 0.8, massimo 10 articoli (maxlen).
summary(association.rules) mostra quanto segue:
Parameter Specification: valori min_sup=0.001 e min_confidence=0.8 con massimo 10 articoli in una regola.
Numero totale di regole: L’insieme di 49122 regole
Distribuzione della lunghezza delle regole: Una lunghezza di 5 articoli ha il maggior numero di regole: 16424 e la lunghezza di 2 articoli ha il numero più basso: 105
Riepilogo delle misure di qualità: Valori min e max per Support, Confidence e Lift.
Informazioni usate per creare le regole: I dati, il support e la confidence che abbiamo fornito all’algoritmo.
Dato che ci sono 49122 regole, stampiamo solo le prime 10:
Il 100% dei clienti che hanno acquistato 'WOBBLY CHICKEN' ha acquistato anche 'METAL'.
Il 100% dei clienti che hanno acquistato 'BLACK TEA' ha acquistato anche 'SUGAR JARS'.
Limitare numero e dimensione delle regole
Come puoi limitare la dimensione e il numero di regole generate? Puoi farlo impostando i parameters in apriori. Imposti questi parametri per regolare il numero di regole che otterrai. Se vuoi regole più forti, puoi aumentare il valore di conf e per regole più lunghe dai un valore più alto a maxlen.
shorter.association.rules <- apriori(tr, parameter = list(supp=0.001, conf=0.8,maxlen=3))Offerto da
Rimuovere le regole ridondanti
Puoi rimuovere le regole che sono sottoinsiemi di regole più grandi. Usa il codice seguente per rimuovere tali regole:
subset.rules <- which(colSums(is.subset(association.rules, association.rules))>1)# get subset rules in vector
length(subset.rules)#> 3913Offerto da
subset.association.rules.<- association.rules[-subset.rules] # remove subset rules.Offerto da
which() restituisce la posizione degli elementi nel vettore per cui il valore è TRUE.
colSums() calcola somme per righe e colonne per data frame e array numerici.
is.subset() determina se gli elementi di un vettore contengono tutti gli elementi di un altro
Trovare regole relative a determinati articoli
A volte vuoi lavorare su un prodotto specifico. Se vuoi scoprire cosa influisce sull’acquisto dell’articolo X puoi usare l’opzione appearance nel comando apriori. appearance ci dà opzioni per impostare la LHS (parte IF) e la RHS (parte THEN) della regola.
Ad esempio, per scoprire cosa comprano i clienti prima di acquistare 'METAL' esegui la seguente riga di codice:
metal.association.rules <- apriori(tr, parameter = list(supp=0.001, conf=0.8),appearance = list(default="lhs",rhs="METAL"))Offerto da
Apriori
Parameter specification:
confidence minval smax arem aval originalSupport maxtime support minlen maxlen target
0.80.11 none FALSETRUE50.001110 rules
ext
FALSE
Algorithmic control:
filter tree heap memopt load sort verbose
0.1TRUETRUEFALSETRUE2TRUE
Absolute minimum support count:22
set item appearances ...[1 item(s)] done [0.00s].
set transactions ...[30066 item(s),22191 transaction(s)] done [0.21s].
sorting and recoding items ...[2324 item(s)] done [0.02s].
creating transaction tree ... done [0.02s].
checking subsets of size 12345678910Offerto da
Mining stopped (maxlen reached). Only patterns up to a length of 10 returned!Offerto da
# Here lhs=METAL because you want to find out the probability of that in how many customers buy METAL along with other items
inspect(head(metal.association.rules))Offerto da
lhs rhs support confidence lift count
[1]{WOBBLY CHICKEN}=>{METAL}0.0012617731443.8228[2]{WOBBLY RABBIT}=>{METAL}0.0015321531443.8234[3]{DECORATION}=>{METAL}0.0022531661443.8250[4]{DECORATION,WOBBLY CHICKEN}=>{METAL}0.0012617731443.8228[5]{DECORATION,WOBBLY RABBIT}=>{METAL}0.0015321531443.8234Offerto da
Allo stesso modo, per rispondere alla domanda I clienti che hanno acquistato METAL hanno acquistato anche... terrai METAL sulla lhs:
metal.association.rules <- apriori(tr, parameter = list(supp=0.001, conf=0.8),appearance = list(lhs="METAL",default="rhs"))Offerto da
Apriori
Parameter specification:
confidence minval smax arem aval originalSupport maxtime support minlen maxlen target
0.80.11 none FALSETRUE50.001110 rules
ext
FALSE
Algorithmic control:
filter tree heap memopt load sort verbose
0.1TRUETRUEFALSETRUE2TRUE
Absolute minimum support count:22
set item appearances ...[1 item(s)] done [0.00s].
set transactions ...[30066 item(s),22191 transaction(s)] done [0.10s].
sorting and recoding items ...[2324 item(s)] done [0.02s].
creating transaction tree ... done [0.02s].
checking subsets of size 12 done [0.01s].
writing ...[1 rule(s)] done [0.00s].
creating S4 object ... done [0.01s].Offerto da
# Here lhs=METAL because you want to find out the probability of that in how many customers buy METAL along with other items
inspect(head(metal.association.rules))Offerto da
lhs rhs support confidence lift count
[1]{METAL}=>{DECORATION}0.0022531661443.8250Offerto da
Visualizzare le Regole di Associazione
Poiché verranno generate centinaia o migliaia di regole in base ai dati, ti servono un paio di modi per presentare i risultati. ItemFrequencyPlot è già stato discusso sopra ed è anche un ottimo modo per ottenere gli articoli più venduti.
Qui discuteremo le seguenti visualizzazioni:
Scatter plot
Scatter plot interattivo
Rappresentazione della singola regola
Scatter plot
Una visualizzazione diretta delle regole di associazione è usare uno scatter plot con plot() del pacchetto arulesViz. Usa Support e Confidence sugli assi. Inoltre, una terza misura, il Lift, viene usata di default per colorare (livelli di grigio) i punti.
# Filter rules with confidence greater than 0.4 or 40%
subRules<-association.rules[quality(association.rules)$confidence>0.4]#Plot SubRules
plot(subRules)Offerto da
Il grafico sopra mostra che le regole con lift elevato hanno support basso. Puoi usare le seguenti opzioni per il plot:
plot(rulesObject, measure, shading, method)Offerto da
rulesObject: l’oggetto regole da plottare
measure: Misure di interessanza delle regole. Possono essere Support, Confidence, lift o una combinazione in base al valore di method.
shading: Misura usata per colorare i punti (Support, Confidence, lift). Il default è Lift.
method: Metodo di visualizzazione da usare (scatterplot, two-key plot, matrix3D).
Il two-key plot usa support e confidence rispettivamente su asse x e y. Usa order per la colorazione. Order è il numero di articoli nella regola.
Scatter plot interattivo
Un fantastico grafico interattivo può essere usato per presentare le tue regole usando arulesViz e plotly. Puoi passare il mouse su ciascuna regola e vedere tutte le misure di qualità (support, confidence e lift).
'plotly_arules' is deprecated.
Use 'plot' instead.
See help("Deprecated")plot: Too many rules supplied. Only plotting the best 1000 rules using measure lift (change parameter max if needed)To reduce overplotting, jitter is added! Use jitter =0 to prevent jitter.Offerto da
Visualizzazioni basate su grafi
Le tecniche basate su grafi visualizzano le regole di associazione usando vertici e archi, dove i vertici sono etichettati con i nomi degli articoli e gli itemset o le regole sono rappresentati come un secondo insieme di vertici. Gli articoli sono collegati a itemset/regole usando frecce direzionali. Le frecce dai singoli articoli ai vertici delle regole indicano gli elementi LHS e una freccia da una regola a un articolo indica la RHS. La dimensione e il colore dei vertici spesso rappresentano le misure di interesse.
I grafi sono un ottimo modo per visualizzare le regole ma tendono a diventare congestionati all’aumentare del numero di regole. Quindi è meglio visualizzare un numero ridotto di regole con visualizzazioni basate su grafi.
Selezioniamo 10 regole da subRules con la confidence più alta.
top10subRules <- head(subRules, n =10, by ="confidence")Offerto da
Ora, traccia un grafo interattivo:
Nota: Puoi rendere tutti i tuoi grafici interattivi usando il parametro engine=htmlwidget in plot
plot(top10subRules, method ="graph", engine ="htmlwidget")Offerto da
Da arulesViz i grafi per insiemi di regole di associazione possono essere esportati in formato GraphML o come file Graphviz dot per essere esplorati con strumenti come Gephi. Ad esempio, le 1000 regole con lift più alto si esportano con:
saveAsGraph(head(subRules, n =1000, by ="lift"), file ="rules.graphml")Offerto da
Rappresentazione della singola regola
Questa rappresentazione è detta anche Parallel Coordinates Plot. È utile per visualizzare quali prodotti, insieme a quali articoli, causano determinati tipi di vendite.
Come detto sopra, la RHS è il Consequente o l’articolo che proponiamo il cliente acquisterà; le posizioni sono nella LHS, dove 2 è l’aggiunta più recente al nostro carrello e 1 è l’articolo che avevamo in precedenza.
# Filter top 20 rules with highest lift
subRules2<-head(subRules, n=20, by="lift")
plot(subRules2, method="paracoord")Offerto da
Guarda la freccia più in alto. Mostra che quando ho 'CHILDS GARDEN SPADE PINK' e 'CHILDS GARDEN RAKE PINK' nel carrello, è probabile che acquisti anche 'CHILDS GARDEN RAKE BLUE' insieme a questi.
Conclusione
Congratulazioni! Hai imparato APRIORI, uno degli algoritmi più usati nel data mining. Hai imparato tutto sul Mining delle Regole di Associazione, le sue applicazioni e la sua applicazione nel retail chiamata Market Basket Analysis. Ora sei anche in grado di implementare la Market Basket Analysis in R e presentare le tue regole di associazione con ottimi grafici! Buono studio!
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.
Sei un data scientist (o stai per diventarlo!) e ricevi un incarico da un cliente che gestisce un negozio al dettaglio. Il cliente ti fornisce i dati di tutte le transazioni, ovvero gli articoli acquistati in negozio da vari clienti in un certo periodo, e ti chiede di usare quei dati per aiutarlo a far crescere il business. Il cliente userà i tuoi risultati non solo per cambiare/aggiornare/aggiungere articoli a magazzino, ma anche per modificare il layout del negozio fisico o dell’e-commerce. Per ottenere risultati utili al tuo cliente, userai la Market Basket Analysis (MBA), che applica il Mining delle Regole di Associazione ai dati di transazione.
In questo tutorial imparerai:
Mining delle Regole di Associazione
Il Mining delle Regole di Associazione si usa quando vuoi trovare un’associazione tra oggetti diversi in un insieme, individuare pattern frequenti in un database di transazioni, in database relazionali o in qualsiasi altro repository informativo. Le applicazioni del Mining delle Regole di Associazione si trovano nel Marketing, nella Basket Data Analysis (o Market Basket Analysis) nel retail, nel clustering e nella classificazione. Può dirti quali articoli i clienti acquistano spesso insieme generando un insieme di regole chiamate Regole di Associazione. In parole semplici, restituisce regole del tipo se questo allora quello. I clienti possono usare queste regole per numerose strategie di marketing:
Considera il seguente esempio:
È dato un insieme di dati di transazione. Vedi transazioni numerate da 1 a 5. Ogni transazione mostra gli articoli acquistati in quella transazione. Puoi vedere che il pannolino è acquistato con la birra in tre transazioni. Allo stesso modo, il pane è acquistato con il latte in tre transazioni, rendendoli entrambi insiemi di articoli frequenti. Le regole di associazione sono fornite nella forma seguente:
$A=>B[Support,Confidence]$
La parte prima di $=>$ è detta if (Antecedente) e la parte dopo $=>$ è detta then (Consequente).
Dove A e B sono insiemi di articoli nei dati di transazione. A e B sono insiemi disgiunti.
$Computer=>Anti-virus Software[Support=20\%,confidence=60\%]$
La regola sopra dice:
Nella sezione seguente imparerai i concetti di base del Mining delle Regole di Associazione:
Concetti di base del Mining delle Regole di Associazione
Itemset: Collezione di uno o più articoli. K-item-set significa un insieme di k articoli.
Support Count: Frequenza di occorrenza di un itemset
Support (s): Frazione di transazioni che contengono l’itemset "X"
$Support(X)=\frac{frequency(X)}{N}$
Per una regola A=>B, il Support è dato da:
$Support(A=>B)=\frac{frequency(A,B)}{N}$
Nota: P(AUB) è la probabilità che A e B si verifichino insieme. P indica la probabilità.
Avanti, prova a calcolare il support per Latte=>Pannolino come esercizio.
$Confidence(A=>B)=\frac{P(A\cap B)}{P(A)}=\frac{frequency(A,B)}{frequency(A)}$
Il numero di transazioni che contengono sia A che B diviso per il numero totale di transazioni che contengono A.
$Confidence(Bread=>Milk)=\frac{3}{4}=0.75=75\%$
Ora trova la confidence per Latte=>Pannolino.
Nota: Support e Confidence misurano quanto una regola sia interessante. Sono fissati da soglie di support minimo e confidence minima. Queste soglie impostate dal cliente aiutano a confrontare la forza delle regole secondo le tue o le sue esigenze. Più vicina è alla soglia, più la regola è utile per il cliente.
Frequent Itemsets: Itemset il cui support è maggiore o uguale alla soglia di support minimo (min_sup). Nell’esempio sopra min_sup=3. È una scelta dell’utente.
Regole forti: Se una regola A=>B[Support, Confidence] soddisfa min_sup e min_confidence allora è una regola forte.
Lift: Il Lift dà la correlazione tra A e B nella regola A=>B. La correlazione mostra come un itemset A influisce sull’itemset B.
$Lift(A=>B)=\frac{Support}{Supp(A)Supp(B)}$
Ad esempio, per la regola
{Bread}=>{Milk}, il lift è calcolato come:$support(Bread)=\frac{4}{5}=0.8$
$support(Milk)=\frac{4}{5}=0.8$
$Lift(Bread=>Milk)=\frac{0.6}{0.8*0.8}=0.9$
Se la regola avesse un lift pari a 1, allora A e B sono indipendenti e non si può derivare alcuna regola.
Se il lift è > 1, allora A e B sono dipendenti tra loro, e il grado è dato dal valore di lift.
Se il lift è < 1, allora la presenza di A ha un effetto negativo su B.
Obiettivo del Mining delle Regole di Associazione
Quando applichi il Mining delle Regole di Associazione a un insieme di transazioni T il tuo obiettivo è trovare tutte le regole con:
Algoritmo APRIORI
In questa parte del tutorial imparerai l’algoritmo che sta dietro alle librerie R per la Market Basket Analysis. Questo ti aiuterà a comprendere meglio i tuoi clienti e a eseguire l’analisi con più attenzione. Se conosci già l’algoritmo APRIORI e come funziona, passa direttamente alla parte di codice.
Il Mining delle Regole di Associazione è visto come un approccio in due fasi:
Generazione degli itemset frequenti: Trova tutti gli itemset frequenti con supporto >= al min_support prefissato
Generazione delle regole: Elenca tutte le Regole di Associazione dagli itemset frequenti. Calcola Support e Confidence per tutte le regole. Elimina le regole che non soddisfano le soglie di min_support e min_confidence.
La generazione degli itemset frequenti è il passaggio computazionalmente più costoso perché richiede una scansione completa del database.
Tra i passaggi sopra, la generazione degli itemset frequenti è la più onerosa in termini di calcolo.
Sopra hai visto un esempio con sole 5 transazioni, ma nel mondo reale i dati di transazione nel retail possono arrivare a GB e TB, per cui serve un algoritmo ottimizzato che elimini gli itemset che non saranno utili nei passi successivi. A questo serve l’algoritmo APRIORI. Esso afferma:
È rappresentato nel Reticolo degli itemset (Itemset Lattice), una rappresentazione grafica del principio dell’algoritmo APRIORI. È composto da nodi di k-itemset e dalle relazioni di sottoinsiemi di quel k-itemset.
Come vedi nella figura sopra, in basso ci sono tutti gli articoli nei dati di transazione e poi si sale creando sottoinsiemi fino all’insieme vuoto. Per un numero d di articoli la dimensione del reticolo diventa $2^d$. Questo mostra quanto sia difficile generare gli itemset frequenti calcolando il supporto per ogni combinazione. La figura seguente mostra quanto APRIORI aiuti a ridurre il numero di insiemi da generare:
Se l’itemset {a,b} non è frequente, allora non serve considerare tutti i suoi sovrainsiemi.
Capciamolo con un esempio. Nel seguente esempio vedrai perché APRIORI è un algoritmo efficace e genererai anche regole di associazione forti passo dopo passo. Segui con quaderno e penna!
Come puoi vedere, inizi creando la Lista dei candidati per l’1-itemset, che includerà tutti gli articoli presenti nei dati di transazione, presi singolarmente. Considerando dati retail reali, puoi immaginare quanto sia costosa questa generazione di candidati. Qui APRIORI entra in gioco e aiuta a ridurre il numero della lista dei candidati, e alla fine vengono generate regole utili. Nei passaggi seguenti vedrai come arriviamo alla fine della generazione degli itemset frequenti, che è il primo passo del mining delle regole di associazione.
Il passo successivo è elencare tutti gli itemset frequenti. Prenderai l’ultimo itemset frequente non vuoto, che in questo esempio è L2={I1, I2},{I2, I3}. Quindi crea tutti i sottoinsiemi non vuoti degli itemset presenti in quella lista di itemset frequenti. Segui come mostrato nell’illustrazione qui sotto:
Come vedi sopra, ci sono quattro regole forti. Ad esempio, prendi ${I2}=>I3$ con confidence pari al 75%: indica che il 75% delle persone che hanno acquistato I2 hanno acquistato anche I3.
Ora hai imparato l’algoritmo APRIORI completo, uno dei più usati nel data mining. Passiamo al codice, phewww!
Implementare MBA/Mining delle Regole di Associazione in R
In questo tutorial userai un dataset dal UCI Machine Learning Repository. Il dataset si chiama Online-Retail e puoi scaricarlo da qui. Il dataset contiene dati di transazione dal 01/12/2010 al 09/12/2011 per un retailer online registrato con sede nel Regno Unito senza negozio fisico. Il motivo per usare questo e non un dataset R è che è più probabile ricevere dati retail in questa forma, sui quali dovrai applicare il pre-processing.
Descrizione del dataset
Informazioni sugli attributi
Caricamento delle librerie
Per prima cosa caricherai le librerie necessarie. Una breve descrizione delle librerie (presa da qui) è data nella tabella seguente, così sai cosa fa ciascuna libreria:
arulesarulesViztidyversereadxlplyrggplot2knitrlubridatePre-processing dei dati
Usa
read_excel(path to file)per leggere in R il dataset dal file scaricato. Fornisci il percorso completo del file, incluso il nome del file, inread_excel(path-to-file-with-filename)Ora il dataframe retail conterrà 10 attributi, con due attributi aggiuntivi
DateeTime.Prima di applicare MBA/Mining delle Regole di Associazione, dobbiamo convertire il dataframe in dati di transazione in modo che tutti gli articoli acquistati insieme in una fattura stiano su un’unica riga. Nel risultato di
glimpsevedi che ogni transazione è in forma atomica, cioè tutti i prodotti appartenenti a una fattura sono atomici come nei database relazionali. Questo formato è chiamato anche formato singles.Quello che devi fare è raggruppare i dati nel dataframe
retailperCustomerID,CustomerIDeDateoppure puoi anche raggruppare usandoInvoiceNoeDate. Ci serve questo raggruppamento, applicare una funzione e salvare l’output in un altro dataframe. Questo si può fare conddply.Le righe di codice seguenti combineranno tutti i prodotti di uno stesso
InvoiceNoedatee li uniranno in un’unica riga, con ciascun articolo separato da,Poi, dato che InvoiceNo e Date non saranno utili nel rule mining, puoi impostarli a
NULL.Questo formato per i dati di transazione è chiamato formato basket. Ora devi salvare questi dati di transazione in un file .csv (Comma Separated Values). Per farlo,
write.csv()Controlla se i tuoi dati di transazione hanno la forma corretta:
Successivamente, devi caricare questi dati di transazione in un oggetto della classe transaction. Questo si fa usando la funzione R
read.transactionsdel pacchettoarules.La riga di codice seguente prenderà il file dei dati di transazione
D:/Documents/market_basket_transactions.csvin formato basket e lo convertirà in un oggetto della classe transaction.Quando esegui le righe di codice sopra potresti ottenere molti
EOF within quoted stringin output, non preoccuparti.Se hai già i dati di transazione in un dataframe, usa la riga di codice seguente per convertirli in un oggetto transaction:
Visualizza l’oggetto di transazione
tr:summary(tr)è un comando molto utile che ci dà informazioni sul nostro oggetto transaction. Vediamo cosa dice l’output sopra:Ci sono 22191 transazioni (righe) e 7876 articoli (colonne). Nota che 7876 è il numero di descrizioni prodotto coinvolte nel dataset e 22191 transazioni sono collezioni di questi articoli.
La densità indica la percentuale di celle non nulle in una matrice sparsa. Puoi intenderla come il numero totale di articoli acquistati diviso per il numero possibile di articoli in quella matrice. Puoi calcolare quanti articoli sono stati acquistati usando la densità: 22191x7876x0.001930725=337445
Summary può anche indicarti gli articoli più frequenti.
Distribuzione della lunghezza dell’elemento (itemset/transazione): Indica quante transazioni ci sono per 1-itemset, per 2-itemset e così via. La prima riga indica il numero di articoli e la seconda riga indica il numero di transazioni.
Ad esempio, ci sono solo 3598 transazioni con un articolo, 1594 transazioni con 2 articoli, e ci sono 419 articoli in una transazione, che è la più lunga.
Puoi generare un
itemFrequencyPlotper creare un grafico a barre delle frequenze degli articoli e visualizzare la distribuzione degli oggetti basata suitemMatrix(ad es.,>transactionso articoli in>itemsetse>rules), che è il nostro caso.In
il primo argomento è l’oggetto transaction da plottare, cioè
tr.topNti permette di plottare gli N articoli con frequenza più alta.typepuò esseretype="absolute"otype="relative". Se absolute plottarà le frequenze numeriche di ciascun articolo in modo indipendente. Se relative mostrerà quante volte questi articoli sono comparsi rispetto agli altri.Questo grafico mostra che 'WHITE HANGING HEART T-LIGHT HOLDER' e 'REGENCY CAKESTAND 3 TIER' hanno le vendite maggiori. Quindi, per aumentare la vendita di 'SET OF 3 CAKE TINS PANTRY DESIGN' il retailer può posizionarlo vicino a 'REGENCY CAKESTAND 3 TIER'.
Puoi esplorare altre opzioni per
itemFrequencyPlotqui.Generare le regole!
Il passo successivo è estrarre le regole usando l’algoritmo APRIORI. La funzione
apriori()è del pacchettoarules.aprioriprenderàtrcome oggetto transaction su cui applicare il mining.parameterti permette di impostare min_sup e min_confidence. I valori di default perparametersono support minimo 0.1, confidence minima 0.8, massimo 10 articoli (maxlen).summary(association.rules)mostra quanto segue:Parameter Specification: valori min_sup=0.001 e min_confidence=0.8 con massimo 10 articoli in una regola.
Numero totale di regole: L’insieme di 49122 regole
Distribuzione della lunghezza delle regole: Una lunghezza di 5 articoli ha il maggior numero di regole: 16424 e la lunghezza di 2 articoli ha il numero più basso: 105
Riepilogo delle misure di qualità: Valori min e max per Support, Confidence e Lift.
Informazioni usate per creare le regole: I dati, il support e la confidence che abbiamo fornito all’algoritmo.
Dato che ci sono 49122 regole, stampiamo solo le prime 10:
Usando l’output sopra, puoi fare analisi come:
Il 100% dei clienti che hanno acquistato 'WOBBLY CHICKEN' ha acquistato anche 'METAL'.
Il 100% dei clienti che hanno acquistato 'BLACK TEA' ha acquistato anche 'SUGAR JARS'.
Limitare numero e dimensione delle regole
Come puoi limitare la dimensione e il numero di regole generate? Puoi farlo impostando i
parametersinapriori. Imposti questi parametri per regolare il numero di regole che otterrai. Se vuoi regole più forti, puoi aumentare il valore diconfe per regole più lunghe dai un valore più alto amaxlen.Rimuovere le regole ridondanti
Puoi rimuovere le regole che sono sottoinsiemi di regole più grandi. Usa il codice seguente per rimuovere tali regole:
which()restituisce la posizione degli elementi nel vettore per cui il valore è TRUE.colSums()calcola somme per righe e colonne per data frame e array numerici.is.subset()determina se gli elementi di un vettore contengono tutti gli elementi di un altroTrovare regole relative a determinati articoli
A volte vuoi lavorare su un prodotto specifico. Se vuoi scoprire cosa influisce sull’acquisto dell’articolo X puoi usare l’opzione
appearancenel comandoapriori.appearanceci dà opzioni per impostare la LHS (parte IF) e la RHS (parte THEN) della regola.Ad esempio, per scoprire cosa comprano i clienti prima di acquistare 'METAL' esegui la seguente riga di codice:
Allo stesso modo, per rispondere alla domanda I clienti che hanno acquistato METAL hanno acquistato anche... terrai METAL sulla lhs:
Visualizzare le Regole di Associazione
Poiché verranno generate centinaia o migliaia di regole in base ai dati, ti servono un paio di modi per presentare i risultati.
ItemFrequencyPlotè già stato discusso sopra ed è anche un ottimo modo per ottenere gli articoli più venduti.Qui discuteremo le seguenti visualizzazioni:
Scatter plot
Una visualizzazione diretta delle regole di associazione è usare uno scatter plot con
plot()del pacchettoarulesViz. Usa Support e Confidence sugli assi. Inoltre, una terza misura, il Lift, viene usata di default per colorare (livelli di grigio) i punti.Il grafico sopra mostra che le regole con lift elevato hanno support basso. Puoi usare le seguenti opzioni per il plot:
rulesObject: l’oggetto regole da plottaremeasure: Misure di interessanza delle regole. Possono essere Support, Confidence, lift o una combinazione in base al valore dimethod.shading: Misura usata per colorare i punti (Support, Confidence, lift). Il default è Lift.method: Metodo di visualizzazione da usare (scatterplot, two-key plot, matrix3D).Il two-key plot usa support e confidence rispettivamente su asse x e y. Usa order per la colorazione. Order è il numero di articoli nella regola.
Scatter plot interattivo
Un fantastico grafico interattivo può essere usato per presentare le tue regole usando
arulesVizeplotly. Puoi passare il mouse su ciascuna regola e vedere tutte le misure di qualità (support, confidence e lift).Visualizzazioni basate su grafi
Le tecniche basate su grafi visualizzano le regole di associazione usando vertici e archi, dove i vertici sono etichettati con i nomi degli articoli e gli itemset o le regole sono rappresentati come un secondo insieme di vertici. Gli articoli sono collegati a itemset/regole usando frecce direzionali. Le frecce dai singoli articoli ai vertici delle regole indicano gli elementi LHS e una freccia da una regola a un articolo indica la RHS. La dimensione e il colore dei vertici spesso rappresentano le misure di interesse.
I grafi sono un ottimo modo per visualizzare le regole ma tendono a diventare congestionati all’aumentare del numero di regole. Quindi è meglio visualizzare un numero ridotto di regole con visualizzazioni basate su grafi.
Selezioniamo 10 regole da
subRulescon la confidence più alta.Ora, traccia un grafo interattivo:
Nota: Puoi rendere tutti i tuoi grafici interattivi usando il parametro
engine=htmlwidgetinplotDa
arulesVizi grafi per insiemi di regole di associazione possono essere esportati in formato GraphML o come file Graphviz dot per essere esplorati con strumenti come Gephi. Ad esempio, le 1000 regole con lift più alto si esportano con:Rappresentazione della singola regola
Questa rappresentazione è detta anche Parallel Coordinates Plot. È utile per visualizzare quali prodotti, insieme a quali articoli, causano determinati tipi di vendite.
Come detto sopra, la RHS è il Consequente o l’articolo che proponiamo il cliente acquisterà; le posizioni sono nella LHS, dove 2 è l’aggiunta più recente al nostro carrello e 1 è l’articolo che avevamo in precedenza.
Guarda la freccia più in alto. Mostra che quando ho 'CHILDS GARDEN SPADE PINK' e 'CHILDS GARDEN RAKE PINK' nel carrello, è probabile che acquisti anche 'CHILDS GARDEN RAKE BLUE' insieme a questi.
Conclusione
Congratulazioni! Hai imparato APRIORI, uno degli algoritmi più usati nel data mining. Hai imparato tutto sul Mining delle Regole di Associazione, le sue applicazioni e la sua applicazione nel retail chiamata Market Basket Analysis. Ora sei anche in grado di implementare la Market Basket Analysis in R e presentare le tue regole di associazione con ottimi grafici! Buono studio!
Riferimenti:
https://datascienceplus.com/a-gentle-introduction-on-market-basket-analysis%E2%80%8A-%E2%80%8Aassociation-rules/
https://en.wikipedia.org/wiki/Sparse_matrix
https://cran.r-project.org/web/packages/arulesViz/vignettes/arulesViz.pdf
Se vuoi imparare di più su R, segui il corso di DataCamp Importing and Managing Financial Data in R.