Reglas de Asociacion
Este post fue publicado originalmente en Data Mining con R por noreply@blogger.com (Enmanuel Santana)
Si se quiere encontrar una asociación entre productos (o alguna otra cosa), puede usarse las Reglas de Asociación (también llamado Association Rule Learning), para identificar si la compra de unos productos está asociada con la compra de otros. A esto también le dicen Basket Analysis.
El resultado que se quiere seria este:
donde:
lhs: (left-hand-sides) es la parte izquierda de la regla, o antecedente (producto/s que “causa” la compra de otro producto)
rhs: ( right-hand-sides ) es la parte derecha de la regla, o resultado (producto comprado como “consecuencia” de otro producto)
Support: es la frecuencia relativa de una regla sobre el total de transacciones
Confidence: mide qué tan confiable es la suposición hecha por la regla, es decir: que tantas veces sucede el rhs cuando se presenta el lhs, para cada regla.
Lift: mide si la regla se debió al azar. Calcula el ratio entre la confianza de la regla y el consecuente de la regla o rhs.
Para métricas de mayor especificidad, ver Referencia No.3
El xls con los gráficos se puede descargar AQUI
El proceso conceptual en R sería así:
1. Transformación de datos
2. Generación de reglas y gráficos
# CARGA LIBRERIA Y DATOS # -------------------------------------------------------------- library(arulesViz);library(arules) url.data <- "https://www.dropbox.com/s/tub6vmcfb319uo3/groceries_4.csv?dl=1" groceries <- read.csv(url.data) # TRANSFORMA Data.Frame en TRANSACCIONAL # -------------------------------------------------------------- # Transforma data.frame en transaccional trx <- groceries trx <- split(trx$Item,trx$Id_Factura) # convierte datos en lista trx <- as(trx,"transactions") # convierte datos en transacciones # CREA REGLAS # -------------------------------------------------------------- reglas <- apriori(trx, parameter=list(support=0.01, confidence = 0.01)) # PRINT # -------------------------------------------------------------- # cantidad de reglas creadas print(reglas) # imprime todas las reglas inspect(reglas) # imprime las 3 reglas con mayor confianza reglas <-sort(reglas, by="confidence", decreasing=TRUE) # ordena regla inspect(head(reglas,3)) # data.frame con frecuencia porcentual de cada producto FreqProd <- data.frame(Producto=names(itemFrequency(trx)), Frecuencia=itemFrequency(trx), row.names=NULL) FreqProd <- FreqProd[order(FreqProd$Frecuencia, decreasing = T),] FreqProd #Print del data set de transacciones inspect(trx) # PLOT # -------------------------------------------------------------- reglas <-sort(reglas, by="confidence", decreasing=TRUE) # ordena reglas # grafica los 20 productos mas frecuente itemFrequencyPlot(trx,topN=20,type="absolute") # Grafico de red 20 reglas con mayor confianza plot(head(reglas,20), method="graph", control=list(type="items")) # Grafico de matriz de 100 regla con mayor confianza plot(head(reglas,100), method="grouped") # grafico de dispersion de todas las reglas plot(reglas)
Referencia:
1. http://www.r-bloggers.com/association-rule-learning-and-the-apriori-algorithm/
2. https://sivaanalytics.wordpress.com/2013/07/12/market-basket-analysis-retail-foodmart-example-step-by-step-using-r/#comments
3. https://hal.inria.fr/hal-00113594/document