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.
Notas:
Para métricas de mayor especificidad, ver Referencia No.3
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
Hola,
ResponderEliminarEl archivo no esta disponible para la decarga, lo podrías cargar otra ves?
Gracias
Ya esta actualizado el archivo. Gracián por la observación.
Eliminarhay forma de dejar el resultado en una tabla de posgrest?
ResponderEliminarHola Francisco. Existe la libreria "RPostgreSQL" para esto, pero no la he usado. Te dejo un link con un ejemplo que quizas te sirva:
Eliminarhttps://claudiavitolo.com/2012/07/05/writing-tables-into-a-postgresql-database-using-r/
Este comentario ha sido eliminado por el autor.
ResponderEliminarlibreria arules no me aparece, aparece arulesNBminer
ResponderEliminar