Sie sind auf Seite 1von 76

Guión práctica 06

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

• Tomar los datos contenidos en la tabla casos1 de la database


reglas y encontrar todas las reglas de asociación que tengan
más de 10 casos y una confianza superior al 80%
4

Paso 1

• Importar los datos a un SQL Server


5

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

Vamos a hacerlo con R


library("arules")

setwd("C:/Users/Ignacio/Dropbox/Curso Elearning Diplo en


BI/Ejercicios y Clases agregadas/Ejercicio Reglas de Asociación")

h<-read.csv("DatosEjercicio221.csv",sep=";")
11

Vamos convertir a factores


h$Atributo.1<-factor(h$Atributo.1)
h$Atributo.2<-factor(h$Atributo.2)
h$Atributo.3<-factor(h$Atributo.3)
h$Atributo.4<-factor(h$Atributo.4)
h$Atributo.5<-factor(h$Atributo.5)
h$Atributo.6<-factor(h$Atributo.6)
h$Resultado<-factor(h$Resultado)
12

Vamos a generar reglas


reglas <-
apriori
(
h,parameter=list(support = .001, confidence =.8),
appearance = list(rhs = c("Resultado=1","Resultado=0"))
)

OJO: todo en el mismo renglón!!!


13

¿Qué nos dio?


Apriori

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

Absolute minimum support count: 10

set item appearances ...[1 item(s)] done [0.00s].


set transactions ...[14 item(s), 10000 transaction(s)] done [0.00s].
sorting and recoding items ... [14 item(s)] done [0.04s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 3 4 5 6 7 done [0.00s].
writing ... [1462 rule(s)] done [0.00s].
creating S4 object ... done [0.00s].
14

¿Con que se come?


Ordeno las reglas:
reglas <- sort(reglas, by="confidence", decreasing = TRUE)

inspect(head(reglas,5))

lhs rhs support confidence lift


[1] {Atributo.1=0,Atributo.4=1,Atributo.5=0,Atributo.6=1} => {Resultado=0} 0.1042 1 1.115573
[2] {Atributo.1=0,Atributo.2=0,Atributo.5=0,Atributo.6=1} => {Resultado=0} 0.1443 1 1.115573
[3] {Atributo.1=0,Atributo.3=1,Atributo.4=1,Atributo.6=1} => {Resultado=0} 0.1747 1 1.115573
[4] {Atributo.1=0,Atributo.2=0,Atributo.3=1,Atributo.5=1} => {Resultado=0} 0.2110 1 1.115573
[5] {Atributo.1=0,Atributo.2=0,Atributo.3=1,Atributo.6=1} => {Resultado=0} 0.2359 1 1.115573
15

¿Con que se come?


Ordeno las reglas:
reglas <- sort(reglas, by="confidence", decreasing = TRUE)

inspect(head(reglas,5))

lhs rhs support confidence lift


[1] {Atributo.1=0,Atributo.4=1,Atributo.5=0,Atributo.6=1} => {Resultado=0} 0.1042 1 1.115573
[2] {Atributo.1=0,Atributo.2=0,Atributo.5=0,Atributo.6=1} => {Resultado=0} 0.1443 1 1.115573
[3] {Atributo.1=0,Atributo.3=1,Atributo.4=1,Atributo.6=1} => {Resultado=0} 0.1747 1 1.115573
[4] {Atributo.1=0,Atributo.2=0,Atributo.3=1,Atributo.5=1} => {Resultado=0} 0.2110 1 1.115573
[5] {Atributo.1=0,Atributo.2=0,Atributo.3=1,Atributo.6=1} => {Resultado=0} 0.2359 1 1.115573
16

Tengo que filtrar…


rhsv <- inspect(reglas)$rhs

rhsvv <- as.data.frame(rhsv)

inspect(reglas[which(rhsvv$rhsv=='{Resultado=1}'),])

Para ver las 10 primeras:

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.

Las reglas más independientes son las que tienen un lift en la


zona de 1 y las más dependientes son las que tienen un lift muy
alto (o muy bajo)
20

Matriz de interés
Para cada regla podemos definir:

Probabilidad de que se cumpla la regla == confianza


Probabilidad del antecedente == cobertura
Probabilidad de obtener el consecuente en el universo: PB

Definimos:

I(Regla) = confianza /(cobertura * PB)


21

Matriz de interés
Para cada regla podemos definir:

Probabilidad de que se cumpla la regla == confianza


Probabilidad del antecedente == cobertura
Probabilidad de obtener el consecuente en el universo: PB

Definimos:

I(Regla) = confianza /(cobertura * PB)


22

Matriz de interés
Para cada regla podemos definir:

Dado que:
I(Regla) = confianza /(cobertura * PB)

El calculo de confianza y cobertura está ya resuelto en SQL,


agregar el Lift es sólo una cuenta…
23

Matriz de interés en R
Vamos entonces a agrupar cuatro valores

I(Regla) = confianza /(cobertura * PB)


I(~Regla) = (1-confianza)/(cobertura * (1-PB))

I(Regla) 1-I(Regla)

I(~Regla) 1-I(~Regla)
24

Matriz de interés en R
Recordamos que una regla es:

lhs => rhs

Vamos entonces a agrupar cuatro valores

I(lhs => rhs) = confianza /(cobertura * PB)


I(lhs => ~rhs) = (1-confianza) /(cobertura * (1-PB))
I(~lhs => rhs) = confianza /((1-cobertura) * PB)
I(~lhs => ~rhs) = (1-confianza) /((1-cobertura) * (1-PB))
25

Matriz de interés en R
Para empezar nos quedamos con las reglas que implican 1

reglas1 <- reglas[which(rhsvv$rhsv=='{Resultado=1}'),]

ahora necesitamos un vector para la confianza y otro para la


cobertura de las reglas:

confianza <- inspect(reglas1)$confidence


cobertura <- inspect(reglas1)$support
26

Matriz de interés en R
Exploremos lo que obtuvimos
hist(confianza)
Histogram of confianza
15
Frequency

10
5
0

0.80 0.85 0.90 0.95 1.00

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

0.00 0.02 0.04 0.06 0.08

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))

a <- confianza /(cobertura * PB)


b <- (1-confianza) /(cobertura * (1-PB))
c <- confianza /((1-cobertura) * PB)
d <- (1-confianza) /((1-cobertura) * (1-PB))
29

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))

a <- confianza /(cobertura * PB)


b <- (1-confianza) /(cobertura * (1-PB))
c <- confianza /((1-cobertura) * PB)
d <- (1-confianza) /((1-cobertura) * (1-PB))
30

El problema de la selección de TMKs


Datos que tenemos:
empleados.csv
Datos de socio-económicos
Perfil de personalidad en 20 variables
Rendimiento en Ventas x Hora

candidatos.csv
Datos de socio-económicos
Perfil de personalidad en 20 variables
31

El problema de la selección de TMKs


Primer paso: Carga

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

El problema de la selección de TMKs


Primer paso: Carga

Reviso:
head(e)
head(c)

nrow(e)
nrow(c)
33

El problema de la selección de TMKs


Segundo paso: Discretizo las variables

e$PIngFam <- discretize(e$PIngFam,categories = c(0,.2,.4,.6,.8,1),method = "fixed")


e$IngFam <- discretize(e$IngFam,categories = c(0,.2,.4,.6,.8,1),method = "fixed"))
e$Exitable <- discretize(e$Exitable,categories = c(0,.2,.4,.6,.8,1),method = "fixed"))
e$Extravagante <- discretize(e$Extravagante,categories = c(0,.2,.4,.6,.8,1),method = "fixed"))
e$Pesimista <- discretize(e$Pesimista,categories = c(0,.2,.4,.6,.8,1),method = "fixed"))
e$Timido <- discretize(e$Timido,categories = c(0,.2,.4,.6,.8,1),method = "fixed"))
e$Sentimental <- discretize(e$Sentimental,categories = c(0,.2,.4,.6,.8,1),method = "fixed"))
e$Dependiente <- discretize(e$Dependiente,categories = c(0,.2,.4,.6,.8,1),method = "fixed"))
e$Responsable <- discretize(e$Responsable,categories = c(0,.2,.4,.6,.8,1),method = "fixed"))
e$Capaz <- discretize(e$Capaz,categories = c(0,.2,.4,.6,.8,1),method = "fixed"))
e$Sociable <- discretize(e$Sociable,categories = c(0,.2,.4,.6,.8,1),method = "fixed"))
e$Servicial <- discretize(e$Servicial,categories = c(0,.2,.4,.6,.8,1),method = "fixed"))
34

El problema de la selección de TMKs


Segundo paso: Discretizo las variables

e$Etico <- discretize(e$Etico,categories = = c(0,.2,.4,.6,.8,1),method = "fixed")


e$Conciente <- discretize(e$Conciente,categories = = c(0,.2,.4,.6,.8,1),method = "fixed")
e$Espiritual <- discretize(e$Espiritual,categories = c(0,.2,.4,.6,.8,1),method = "fixed")
e$Impulsivo <- discretize(e$Impulsivo,categories = = c(0,.2,.4,.6,.8,1),method = "fixed")
e$Desordenado <- discretize(e$Desordenado,categories = = c(0,.2,.4,.6,.8,1),method = "fixed")
e$Temeroso <- discretize(e$Temeroso,categories = = c(0,.2,.4,.6,.8,1),method = "fixed")
e$Vago <- discretize(e$Vago,categories = c(0,.2,.4,.6,.8,1),method = "fixed")
e$Apego <- discretize(e$Apego,categories = c(0,.2,.4,.6,.8,1),method = "fixed")
e$Empatia <- discretize(e$Empatia,categories = c(0,.2,.4,.6,.8,1),method = "fixed")
e$Compasivo <- discretize(e$Compasivo,categories = c(0,.2,.4,.6,.8,1),method = "fixed")
e$Hijos <- discretize(e$Hijos,categories = c(0,1,2,3,4,5,6),method = "fixed")
35

El problema de la selección de TMKs


Segundo paso: Discretizo las variables

aceptable <- ifelse(e$VxH >= .75,1,0)


e <- cbind(e, aceptable)
e$aceptable <- as.factor(e$aceptable)

e$VxH <- NULL


e$X <- NULL
e$Id <- NULL
36

El problema de la selección de TMKs


Tercer paso: Separo en entrenamiento y prueba

x <- runif(nrow(e))
e.train <- e[which(x<.7),]
e.test <- e[which(x>=.7),]

nrow(e.train)
nrow(e.test)
37

El problema de la selección de TMKs


Cuarto paso: Creo las reglas y las ordeno

reglas <- apriori(e.train,parameter=list(support = .05, confidence


=.8), appearance = list(rhs = c("aceptable=1","aceptable=0")))

reglas <- sort(reglas, by="confidence", decreasing = TRUE)

r <- inspect(reglas)
38

El problema de la selección de TMKs


Quinto paso: Exploro las reglas

rhsv <- as.data.frame(r)$rhs

rhsvv <- as.data.frame(rhsv)

table(rhsvv)

rhsvv
{aceptable=0}
441
39

El problema de la selección de TMKs


Sexto paso: Separo las reglas que indican un TMK aceptable y las
que indican un TMK no aceptable

r.aceptable <- r[which(r$rhs == '{aceptable=1}'),]


nrow(r.aceptable)
[1] 6

r.no.aceptable <- r[which(r$rhs == '{aceptable=0}'),]


nrow(r.no.aceptable)
[1] 76745
40

El problema de la selección de TMKs


Sexto paso: Separo las reglas que indican un TMK aceptable y las
que indican un TMK no aceptable

r.aceptable <- r[which(r$rhs == '{aceptable=1}'),]


nrow(r.aceptable)
[1] 6

r.no.aceptable <- r[which(r$rhs == '{aceptable=0}'),]


nrow(r.no.aceptable)
[1] 76745
41

El problema de la selección de TMKs


Séptimo paso: Rebalanceo las clases:

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

El problema de la selección de TMKs


Octavo paso: Creo las reglas y las ordeno

reglas <- apriori(e.train.r,parameter=list(support = .05,


confidence =.8), appearance = list(rhs =
c("aceptable=1","aceptable=0")))

reglas <- sort(reglas, by="confidence", decreasing = TRUE)

r <- inspect(reglas)
43

El problema de la selección de TMKs


Noveno paso: Exploro las reglas

rhsv <- as.data.frame(r)$rhs

rhsvv <- as.data.frame(rhsv)

table(rhsvv)
44

El problema de la selección de TMKs


Décimo paso: Separo las reglas que indican un TMK aceptable y
las que indican un TMK no aceptable

r.aceptable <- r[which(r$rhs == '{aceptable=1}'),]


nrow(r.aceptable)
[1] 5

r.no.aceptable <- r[which(r$rhs == '{aceptable=0}'),]


nrow(r.no.aceptable)
[1] 19
45

El problema de la selección de TMKs


Onceavo paso: Reviso lo que me dio para los no aceptables

head(r.aceptable,10)
46

El problema de la selección de TMKs


Sexto paso: Reviso lo que me dio para los no aceptables

head(r.no.aceptable,10)
47

El problema de la selección de TMKs


Posibles optimizaciones:

1. Variar la cantidad de divisiones al discretizar


2. Variar el tamaño relativo de las clases (aceptables/ no
aceptables)
3. Bootstrap
48

El problema de la selección de TMKs


Aplicamos las reglas al conjunto de prueba:

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

El problema de la selección de TMKs


Aplicamos las reglas al conjunto de prueba:

Segundo paso:
Para cada candidato me fijo cuantas reglas de aceptables cumple

Necesito definir una función que me separe las reglas en los


tramos tramos que deberá cumplir:
50

El problema de la selección de TMKs


Necesito definir una función que me separe las reglas en los tramos tramos que deberá cumplir:
parteReglas <- function(r)
{
x <- substring(r,2,nchar(r)-1)
## reemplazo las comas que no están entre []() por |
fuera = TRUE
for(i in 1:nchar(x))
{
if(substring(x,i,i)=="[") { fuera = FALSE }
if(substring(x,i,i)==")") { fuera = TRUE }
if(fuera & substring(x,i,i) == ",")
{ x <- paste(substring(x,1,i-1),"|",substring(x,i+1,nchar(x)), sep="") }
}
y <- read.table(text = x,sep = "|", colClasses = "character")
y <- t(y)
z <- matrix(nrow = nrow(y), ncol = 2, "")
for(i in 1:length(y))
{
w <- t(read.table(text=y[i],sep = "=", colClasses = "character"))
z[i,1] <- w[1]
z[i,2] <- w[2]
}z}
51

El problema de la selección de TMKs


Aplicamos las reglas al conjunto de prueba:

Veamos que hace:

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

El problema de la selección de TMKs


Aplicamos las reglas al conjunto de prueba:

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

El problema de la selección de TMKs


Aplicamos las reglas al conjunto de prueba:

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

El problema de la selección de TMKs


cmp <- function(reglas,casos)
{
## recorro los casos con k
cumplimiento <- vector(length = nrow(casos), "numeric")
for(k in 1:nrow(casos))
{
## recorro las reglas con j
v.r <- as.vector(reglas$lhs)
for(j in 1:length(v.r))
{
cumple <- TRUE
## recorro los términos w de la regla con i
ww <- parteReglas(as.vector(reglas[j,]$lhs))
for(i in 1:nrow(ww))
{
if(casos[k,which(colnames(casos)==ww[i,1])] == ww[i,2])
{ cumple <- cumple & TRUE }
else
{ cumple <- FALSE }
}
if(cumple)
{
## sumo 1 al vector de cumplimento de los prospectos
cumplimiento[k] <- cumplimiento[k]+1
}}}
cumplimiento
}
55

El problema de la selección de TMKs


Aplicamos las reglas al conjunto de prueba:

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

El problema de la selección de TMKs


Aplicamos las reglas al conjunto de prueba:

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

El problema de la selección de TMKs


Aplicamos las reglas al conjunto de prueba:

Histogram of cmp(r.aceptable, e.test) - cmp(r.no.aceptable, e.test)


150
100
Frequency

50
0

-10 -8 -6 -4 -2 0 2

cmp(r.aceptable, e.test) - cmp(r.no.aceptable, e.test)


58

El problema de la selección de TMKs


Aplicamos las reglas al conjunto de prueba:

Histogram of cmp(r.aceptable, e.test) - cmp(r.no.aceptable, e.test)


150
100
Frequency

50
0

-10 -8 -6 -4 -2 0 2

cmp(r.aceptable, e.test) - cmp(r.no.aceptable, e.test)


59

El problema de la selección de TMKs


Aplicamos las reglas al conjunto de prueba:
Quedémonos con los que dan mayores que cero…

TP <- length(which(x>0 & e.test$aceptable==1))


FP <- length(which(x>0 & e.test$aceptable==0))
TN <- length(which(x<=0 & e.test$aceptable==0))
FN <- length(which(x<=0 & e.test$aceptable==1))
60

El problema de la selección de TMKs


Aplicamos las reglas al conjunto de prueba:
Quedémonos con los que dan mayores que cero…

> TP
[1] 34
> TN
[1] 489
> FP
[1] 20
> FN
[1] 76
61

El problema de la selección de TMKs


Aplicamos las reglas al conjunto de prueba:
Quedémonos con los que dan mayores que cero…

> TP
[1] 34
> TN
[1] 489
> FP
[1] 20
> FN
[1] 76
62

El problema de la selección de TMKs


Aplicamos las reglas al conjunto de prueba:
Quedémonos con los que dan mayores que cero…

> TP
[1] 34
> TN
[1] 489
> FP
[1] 20
> FN
[1] 76
63

El problema de la selección de TMKs


Aplicamos las reglas al conjunto de prueba:

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

El problema de la selección de TMKs


Segundo paso: Discretizo las variables de los candidatos

c$PIngFam <- discretize(c$PIngFam,categories = c(0,.2,.4,.6,.8,1),method = "fixed")


c$IngFam <- discretize(c$IngFam,categories = c(0,.2,.4,.6,.8,1),method = "fixed")
c$Exitable <- discretize(c$Exitable,categories = c(0,.2,.4,.6,.8,1),method = "fixed")
c$Extravagante <- discretize(c$Extravagante,categories = c(0,.2,.4,.6,.8,1),method = "fixed")
c$Pesimista <- discretize(c$Pesimista,categories = c(0,.2,.4,.6,.8,1),method = "fixed")
c$Timido <- discretize(c$Timido,categories = c(0,.2,.4,.6,.8,1),method = "fixed")
c$Sentimental <- discretize(c$Sentimental,categories = c(0,.2,.4,.6,.8,1),method = "fixed")
c$Dependiente <- discretize(c$Dependiente,categories = c(0,.2,.4,.6,.8,1),method = "fixed")
c$Responsable <- discretize(c$Responsable,categories = c(0,.2,.4,.6,.8,1),method = "fixed")
c$Capaz <- discretize(c$Capaz,categories = c(0,.2,.4,.6,.8,1),method = "fixed")
c$Sociable <- discretize(c$Sociable,categories = c(0,.2,.4,.6,.8,1),method = "fixed")
c$Servicial <- discretize(c$Servicial,categories = c(0,.2,.4,.6,.8,1),method = "fixed")
65

El problema de la selección de TMKs


Segundo paso: Discretizo las variables

c$Etico <- discretize(c$Etico,categories = c(0,.2,.4,.6,.8,1),method = "fixed")


c$Conciente <- discretize(c$Conciente,categories = c(0,.2,.4,.6,.8,1),method = "fixed")
c$Espiritual <- discretize(c$Espiritual,categories = c(0,.2,.4,.6,.8,1),method = "fixed")
c$Impulsivo <- discretize(c$Impulsivo,categories = c(0,.2,.4,.6,.8,1),method = "fixed")
c$Desordenado <- discretize(c$Desordenado,categories = c(0,.2,.4,.6,.8,1),method = "fixed")
c$Temeroso <- discretize(c$Temeroso,categories = c(0,.2,.4,.6,.8,1),method = "fixed")
c$Vago <- discretize(c$Vago,categories = c(0,.2,.4,.6,.8,1),method = "fixed")
c$Apego <- discretize(c$Apego,categories = c(0,.2,.4,.6,.8,1),method = "fixed")
c$Empatia <- discretize(c$Empatia,categories = c(0,.2,.4,.6,.8,1),method = "fixed")
c$Compasivo <- discretize(c$Compasivo,categories = c(0,.2,.4,.6,.8,1),method = "fixed")
c$Hijos <- discretize(c$Hijos,categories = c(0,1,2,3,4,5,6),method = "fixed")
66

El problema de la selección de TMKs


Segundo paso: Discretizo las variables

aceptable <- numeric(nrow(c),0)


c <- cbind(c, aceptable)
c$aceptable <- as.factor(c$aceptable)

c$X <- NULL


c$Id <- NULL
67

El problema de la selección de TMKs


Aplicamos las reglas al conjunto de candidatos:

Segundo paso:
Aplico las reglas que tengo:

cmp(r.aceptable,c)
68

El problema de la selección de TMKs


Aplicamos las reglas al conjunto de candidatos:

Tercer paso:
Para cada candidato me fijo cuantas reglas de aceptables cumple

c.si <- cmp(r.aceptable,c)


69

El problema de la selección de TMKs


Aplicamos las reglas al conjunto de candidatos:

Cuarto paso:
Para cada candidato me fijo cuantas reglas de no aceptables
cumple:

c.no <- cmp(r.no.aceptable,c)


70

El problema de la selección de TMKs


Aplicamos las reglas al conjunto de candidatos:

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

El problema de la selección de TMKs


Aplicamos las reglas al conjunto de candidatos:
Histogram of c.si - c.no
2000
1500
Frequency

1000
500
0

-10 -5 0

c.si - c.no
72

El problema de la selección de TMKs


Aplicamos las reglas al conjunto de candidatos:
Histogram of c.si - c.no
2000
1500

Estos sirven
Frequency

1000
500
0

-10 -5 0

c.si - c.no
73

El problema de la selección de TMKs


Aplicamos las reglas al conjunto de candidatos:

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

El problema de la selección de TMKs


Aplicamos las reglas al conjunto de candidatos:
¿Alguna pregunta?
Muchas Gracias

Das könnte Ihnen auch gefallen