Documento 9 Soporte y confianza de reglas
9.1 Objetivo y ejemplo de ejecución
## Apriori
##
## Parameter specification:
## confidence minval smax arem aval originalSupport maxtime support minlen
## 1 0.1 1 none FALSE TRUE 5 0.1 1
## maxlen target ext
## 10 rules FALSE
##
## Algorithmic control:
## filter tree heap memopt load sort verbose
## 0.1 TRUE TRUE FALSE TRUE 2 TRUE
##
## Absolute minimum support count: 4884
##
## set item appearances ...[0 item(s)] done [0.00s].
## set transactions ...[115 item(s), 48842 transaction(s)] done [0.08s].
## sorting and recoding items ... [31 item(s)] done [0.01s].
## creating transaction tree ... done [0.06s].
## checking subsets of size 1 2 3 4 5 6 7 8 9 done [0.20s].
## writing ... [72 rule(s)] done [0.00s].
## creating S4 object ... done [0.01s].
## set of 1 rules
Dado el dataset Adult del que se han generado reglas de asociación,
A reg1 por error le hemos borrado el soporte y la confianza
## support confidence lift count
## 10 0 0 1.495926 6674
Escribir una función computer_suppport_confidence que dado un dataset y una regla de asociación obtenida a partir del dataset con el comando apriori, obtenga:
- soporte(\(X \cup Y\)) (soporte de la unión de X e Y)
- confianza(X -> Y)
Y estos valores calculados visto en en clase se almacenen en la regla.
La función tendría el siguiente formato:
computer_suppport_confidence <- function(Dataset, Rule1){
....
return(list( my.soporte=....., my.confidence=..... ))
}
Un ejemmplo de uso, por ejemplo con el dataset Adult:
9.2 Mi solución:
computer_suppport_confidence <- function(Dataset, Rule1){
soporte <- Rule1@quality$count/nrow(Dataset)
sopY <- itemFrequency(Dataset)[Dataset@itemInfo$variables=="sex"][[2]]
confianza <- Rule1@quality$lift*sopY
return(list(my.soporte = soporte, my.confidence = confianza))
}
computer_suppport_confidence(Adult, reglas[10])
## $my.soporte
## [1] 0.1366447
##
## $my.confidence
## [1] 1
## lhs rhs support confidence lift count
## [1] {relationship=Husband,
## hours-per-week=Over-time,
## native-country=United-States} => {sex=Male} 0.1366447 1 1.495926 6674
9.3 Solución profesor:
9.3.1 1ª FORMA
computer_suppport_confidence <- function(ds, R1){
nr <- dim(ds)[1] # 48842
# Convertimos el dataframe en una matriz booleana
if(class(ds) == "data.frame"){
ds <- as.matrix(ds)
}else if(class(Adult)[[1]] == "transactions"){
ds <-as(ds,"matrix")
}
#Regla R1: X -> Y
lt <- t(as(lhs(R1),"matrix")) # Parte izquierda de la regla (X) como una matriz lógica (columna)
# Sacas todos los levels de todos los factors
lhs <- ds%*%lt == sum(lt) # La multiplicación de la matriz lógica del dataset
# por la parte izquierda de la regla nos da como
# resultado un vector columna de tantas filas(f) como tenga
# el dataset, en cada f del vector el resultado indica cu?ntos
# elementos de la regla(rt) aparecen en cada fila, por lo que
# si coincide con la suma de elementos TRUE de la parte derecha,
# significa que todos los elementos de la regla aparecen en dicha regla
n.lhs <- sum(lhs) # n.rhs es el numero de filas del ds que aparece la parte izda
sop.x <- n.lhs/nr # numero de filas con X / numero de filas tabla -> SOPORTE
# Para calcular confianza:
r.lhs <- which(lhs) # indices de las filas del ds que contienen X, necesario para sop(X U Y)
rt <- t(as(rhs(R1),"matrix")) #parte DCHA de la regla X como una matriz l?gica(columna)
lhs.rhs <- ds[r.lhs,]%*%rt == sum(rt) #al igual que antes, con la excepci?n de que
# ahora s?lo se toman las reglas que contienen
# parte derecha, se obtienen las reglas que
#tambi?n contienen la parte derecha
n.lhs.rhs <- sum(lhs.rhs) #numero de filas con X e Y
sop.x <- n.lhs/nr # numero de filas con X / numero de filas tabla
sop.xy <- n.lhs.rhs/nr # Sop(X U Y)
conf <- sop.xy/sop.x
return(list( my.soporte= sop.xy, my.confidence=conf ))
}
## Apriori
##
## Parameter specification:
## confidence minval smax arem aval originalSupport maxtime support minlen
## 0.8 0.1 1 none FALSE TRUE 5 0.1 1
## maxlen target ext
## 10 rules FALSE
##
## Algorithmic control:
## filter tree heap memopt load sort verbose
## 0.1 TRUE TRUE FALSE TRUE 2 TRUE
##
## Absolute minimum support count: 4884
##
## set item appearances ...[0 item(s)] done [0.00s].
## set transactions ...[115 item(s), 48842 transaction(s)] done [0.08s].
## sorting and recoding items ... [31 item(s)] done [0.01s].
## creating transaction tree ... done [0.06s].
## checking subsets of size 1 2 3 4 5 6 7 8 9 done [0.21s].
## writing ... [6137 rule(s)] done [0.00s].
## creating S4 object ... done [0.02s].
## $my.soporte
## [1] 0.3656279
##
## $my.confidence
## [1] 0.9057618
## lhs rhs support confidence lift count
## [1] {relationship=Husband} => {race=White} 0.3656279 0.9057618 1.059318 17858
Coinciden.
9.3.2 2ª FORMA
computer_support_confidence <- function(Dataset, Rule1){
vector_items <- unlist(as(items(Rule1), "list")) # Sacamos los items de la regla: tipo (c())
vector_izq <- unlist(as(lhs(Rule1), "list")) # Antecedentes de la regla
filtrado_transacciones_soporte <- subset(x = Dataset,
subset = items %ain% vector_items)
# %ain% : returns a logical vector indicating if a row (itemset) in x contains all of the items specified in table
soporteXUY <- length(filtrado_transacciones_soporte)/length(Dataset)
filtrado_transacciones_confidence <- subset(x = Dataset,
subset = items %ain% vector_izq)
soporteX <- length(filtrado_transacciones_confidence)/length(Dataset)
confidence <- soporteXUY/soporteX
return(list( my.soporte=soporteXUY,
my.confidence=confidence))
} #end of computer_support_confidence
library(arules)
data("Adult")
reglas <- apriori(Adult, parameter = list(supp = 0.7, conf = 0.9,
target = "rules"))
## Apriori
##
## Parameter specification:
## confidence minval smax arem aval originalSupport maxtime support minlen
## 0.9 0.1 1 none FALSE TRUE 5 0.7 1
## maxlen target ext
## 10 rules FALSE
##
## Algorithmic control:
## filter tree heap memopt load sort verbose
## 0.1 TRUE TRUE FALSE TRUE 2 TRUE
##
## Absolute minimum support count: 34189
##
## set item appearances ...[0 item(s)] done [0.00s].
## set transactions ...[115 item(s), 48842 transaction(s)] done [0.08s].
## sorting and recoding items ... [4 item(s)] done [0.01s].
## creating transaction tree ... done [0.01s].
## checking subsets of size 1 2 3 4 done [0.00s].
## writing ... [17 rule(s)] done [0.00s].
## creating S4 object ... done [0.00s].
## lhs rhs support confidence
## [1] {race=White,capital-loss=None} => {capital-gain=None} 0.7404283 0.9099693
## lift count
## [1] 0.9919147 36164
## $my.soporte
## [1] 0.7404283
##
## $my.confidence
## [1] 0.9099693