Beruflich Dokumente
Kultur Dokumente
Reglas de Asociación
2
Agenda
1. Ejercicio 2.2.1
1. Resolución SQL
2. Resolución R
2. Ejercicio 2.2.2
1. Resolución en SQL
2. Resolución en R
3. Aplicación a la selección de TMKs
3
Enunciado 2.2.1
Paso 1
Paso 2
• Cuento la cantidad de ocurrencias
6
Paso 3
• Lo guardo como tabla reglas
7
Paso 4
• Cuento los aciertos
8
Paso 5
• Lo guardo como tabla aciertos
9
Paso 6
• Calculo cobertura y confianza
10
h<-read.csv("DatosEjercicio221.csv",sep=";")
11
Parameter specification:
confidence minval smax arem aval originalSupport maxtime support minlen maxlen target ext
0.8 0.1 1 none FALSE TRUE 5 0.001 1 10 rules FALSE
Algorithmic control:
filter tree heap memopt load sort verbose
0.1 TRUE TRUE FALSE TRUE 2 TRUE
inspect(head(reglas,5))
inspect(head(reglas,5))
inspect(reglas[which(rhsvv$rhsv=='{Resultado=1}'),])
head(,5)
17
¿Qué me da?
lhs rhs support confidence lift
{Atributo.1=1,Atributo.2=1,Atributo.3=1,Atributo.5=1,Atributo.6=0} => {Resultado=1} 0.0104 1 9.65251
{Atributo.1=1,Atributo.2=1,Atributo.3=0,Atributo.4=1,Atributo.5=0,Atributo.6=0} => {Resultado=1} 0.0075 1 9.65251
{Atributo.1=1,Atributo.2=1,Atributo.3=1,Atributo.4=0,Atributo.5=1,Atributo.6=0} => {Resultado=1} 0.0059 1 9.65251
{Atributo.1=1,Atributo.2=1,Atributo.3=1,Atributo.4=1,Atributo.5=1,Atributo.6=0} => {Resultado=1} 0.0045 1 9.65251
{Atributo.1=1,Atributo.2=1,Atributo.3=1,Atributo.4=0,Atributo.6=0} => {Resultado=1} 0.0262 0.9961977 9.615808
{Atributo.1=1,Atributo.2=1,Atributo.3=1,Atributo.4=0,Atributo.5=0,Atributo.6=0} => {Resultado=1} 0.0203 0.995098 9.605193
{Atributo.1=1,Atributo.2=1,Atributo.3=1,Atributo.6=0} => {Resultado=1} 0.0429 0.9930556 9.585478
{Atributo.1=1,Atributo.2=1,Atributo.3=1,Atributo.5=0,Atributo.6=0} => {Resultado=1} 0.0325 0.9908537 9.564225
{Atributo.1=1,Atributo.2=1,Atributo.4=0,Atributo.5=0,Atributo.6=0} => {Resultado=1} 0.032 0.9907121 9.562858
{Atributo.1=1,Atributo.2=1,Atributo.5=0,Atributo.6=0} => {Resultado=1} 0.0517 0.9904215 9.560053
18
¿Qué es el lift?
El indicador lift expresa cuál es la proporción de aciertos de la
regla respecto de las coincidencias casuales (supuesto de
independencia)
Ejemplo:
Tengo 10000 casos de los cuales el 5% tiene resultado 1
Mi regla tiene una cobertura del 2% (se aplica a 200 casos)
Tiene una confianza del 80% (160 aciertos)
En mis 200 casos cabría esperar 10 aciertos
El lift es 160/10 = 16!!!
19
Ejercicio 2.2.2
Tomar las reglas obtenidas en el ejercicio 2.2.1 y ordenarlas
desde las más dependientes a las más independientes.
Matriz de interés
Para cada regla podemos definir:
Definimos:
Matriz de interés
Para cada regla podemos definir:
Definimos:
Matriz de interés
Para cada regla podemos definir:
Dado que:
I(Regla) = confianza /(cobertura * PB)
Matriz de interés en R
Vamos entonces a agrupar cuatro valores
I(Regla) 1-I(Regla)
I(~Regla) 1-I(~Regla)
24
Matriz de interés en R
Recordamos que una regla es:
Matriz de interés en R
Para empezar nos quedamos con las reglas que implican 1
Matriz de interés en R
Exploremos lo que obtuvimos
hist(confianza)
Histogram of confianza
15
Frequency
10
5
0
confianza
27
Matriz de interés en R
Exploremos lo que obtuvimos
hist(cobertura)
Histogram of cobertura
30
25
20
Frequency
15
10
5
0
cobertura
28
Matriz de interés en R
Ahora tenemos que calcular los cuatro elementos de la matriz
para cada regla:
PB <- sum(as.integer(as.vector(h$Resultado)))/length(as.vector(h$Resultado))
Matriz de interés en R
Ahora tenemos que calcular los cuatro elementos de la matriz
para cada regla:
PB <- sum(as.integer(as.vector(h$Resultado)))/length(as.vector(h$Resultado))
candidatos.csv
Datos de socio-económicos
Perfil de personalidad en 20 variables
31
library(arules)
setwd("C:/Users/Ignacio/Dropbox/Curso Elearning Diplo en
BI/Ejercicios y Clases agregadas/Ejercicio Reglas de Asociación")
e <- read.csv("empleados.csv")
c <- read.csv("candidatos.csv")
32
Reviso:
head(e)
head(c)
nrow(e)
nrow(c)
33
x <- runif(nrow(e))
e.train <- e[which(x<.7),]
e.test <- e[which(x>=.7),]
nrow(e.train)
nrow(e.test)
37
r <- inspect(reglas)
38
table(rhsvv)
rhsvv
{aceptable=0}
441
39
table(e.train$aceptable)
e.si <- e[which(e$aceptable==1),]
e.no <- e[which(e$aceptable==0),]
e.no.r <- e.no[which(runif(nrow(e.no))<.25),]
e.r <- rbind(e.si,e.no.r)
x <- runif(nrow(e.r))
e.train.r <- e.r[which(x<.7),]
e.test.r <- e.r[which(x>=.7),]
table(e.r$aceptable)
42
r <- inspect(reglas)
43
table(rhsvv)
44
head(r.aceptable,10)
46
head(r.no.aceptable,10)
47
Primer paso:
Aplicar las transformaciones al data frame de candidatos:
(Ya lo hice pues lo hice sobre e y luego construí e.train y e.test!)
49
Segundo paso:
Para cada candidato me fijo cuantas reglas de aceptables cumple
as.vector(r.aceptable[1,]$lhs)
[1] "{Propio=S,Hijos=4}"
parteReglas(as.vector(r.aceptable[1,]$lhs))
[,1] [,2]
[1,] "Propio" "S"
[2,] "Hijos" "4"
52
Segundo paso:
Para cada candidato me fijo cuantas reglas de aceptables cumple
Necesito definir otra función que vea cuantas reglas cumple cada
caso:
53
Segundo paso:
Para cada candidato me fijo cuantas reglas de aceptables cumple
Necesito definir otra función que vea cuantas reglas cumple cada
caso:
54
Tercer paso:
Para cada candidato obtengo su puntaje como diferencia entre la
cantidad de reglas de aceptable que cumple y la cantidad de
reglas de no aceptable que cumple (votación de reglas)
56
cmp(r.aceptable,e.test)
cmp(r.no.aceptable,e.test)
hist(cmp(r.aceptable,e.test))
hist(cmp(r.no.aceptable,e.test))
hist(cmp(r.aceptable,e.test)-cmp(r.no.aceptable,e.test))
57
50
0
-10 -8 -6 -4 -2 0 2
50
0
-10 -8 -6 -4 -2 0 2
> TP
[1] 34
> TN
[1] 489
> FP
[1] 20
> FN
[1] 76
61
> TP
[1] 34
> TN
[1] 489
> FP
[1] 20
> FN
[1] 76
62
> TP
[1] 34
> TN
[1] 489
> FP
[1] 20
> FN
[1] 76
63
Mejoras al modelo:
• cambiar la cantidad de niveles en la discretización
• mover el umbral
• cambiar los límites de confianza y cobertura
• darle más peso a las reglas con mayor confianza
• variar la proporción en el rebalanceo de la muestra
• recurrir al bootstrap
64
Segundo paso:
Aplico las reglas que tengo:
cmp(r.aceptable,c)
68
Tercer paso:
Para cada candidato me fijo cuantas reglas de aceptables cumple
Cuarto paso:
Para cada candidato me fijo cuantas reglas de no aceptables
cumple:
Quinto paso:
Para cada candidato obtengo su puntaje como diferencia entre la
cantidad de reglas de aceptable que cumple y la cantidad de
reglas de no aceptable que cumple (votación de reglas)
hist(c.si-c.no)
71
1000
500
0
-10 -5 0
c.si - c.no
72
Estos sirven
Frequency
1000
500
0
-10 -5 0
c.si - c.no
73
Sexto paso:
Identifiquemos cuantos son:
length(which(c.si-c.no>0))
[1] 708
Y quienes:
head(c[which(c.si-c.no>0),])
74