domingo, 19 de julio de 2015

Reglas de Asociacion

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.

Notas:
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








6 comentarios:

  1. Hola,
    El archivo no esta disponible para la decarga, lo podrías cargar otra ves?
    Gracias

    ResponderEliminar
    Respuestas
    1. Ya esta actualizado el archivo. Gracián por la observación.

      Eliminar
  2. hay forma de dejar el resultado en una tabla de posgrest?

    ResponderEliminar
    Respuestas
    1. Hola Francisco. Existe la libreria "RPostgreSQL" para esto, pero no la he usado. Te dejo un link con un ejemplo que quizas te sirva:
      https://claudiavitolo.com/2012/07/05/writing-tables-into-a-postgresql-database-using-r/

      Eliminar
  3. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  4. libreria arules no me aparece, aparece arulesNBminer

    ResponderEliminar