Para este ejercisio se utilzó la base de datos seguros.csv. El objetivo consiste en construir una red bayesiana para la cual se deben considerar algunas reglas propuestas por un experto en seguros y reglas propuestas por el usuario en caso de ser necesario.
El experto en seguros ha establecido para la construcción e interpretación de la red, las siguientes reglas:
La base de datos seguros.csv esta compuesta de la siguiente forma
seguros <- read.csv("seguros.csv")
attach(seguros)
head(seguros)
## Age SocioEcon RiskAversion VehicleYear Accident MakeModel
## 14494 Adult Middle Normal Current Severe Economy
## 18950 Senior Prole Normal Older None SportsCar
## 13705 Adult UpperMiddle Cautious Current None Luxury
## 17328 Senior Prole Cautious Older None Economy
## 19036 Adult UpperMiddle Normal Current None SportsCar
## 16971 Senior Prole Normal Older None Economy
## DrivQuality Antilock CarValue MedCost Airbag DrivHist
## 14494 Poor False TenThou Thousand True Many
## 18950 Normal False TenThou Thousand False Zero
## 13705 Excellent True FiftyThou Thousand True Zero
## 17328 Normal False FiveThou Thousand False Zero
## 19036 Normal True TenThou Thousand True Zero
## 16971 Normal False FiveThou Thousand False One
Para la construcción de la red de tal manera que considere las restricciones impuestas por el experto en seguros, es necesario crear una blacklist que prohiba la existencia de arcos entre ciertos nodos y usar la función hill climbing para encontrar una posible estructura de la red a partir de los datos.
library("bnlearn")
black <- data.frame(from = c("Airbag", "Airbag", "Airbag", "Accident", "Accident",
"Age", "SocioEcon", "RiskAversion", "Accident", "RiskAversion", "DrivQuality"),
to = c("DrivQuality", "DrivHist", "Accident", "MakeModel", "VehicleYear",
"MedCost", "MedCost", "SocioEcon", "SocioEcon", "Age", "Age"))
net.seguros <- hc(seguros, score = "aic", blacklist = black)
net.seguros
##
## Bayesian network learned via Score-based methods
##
## model:
## [Age][SocioEcon|Age][VehicleYear|SocioEcon][MakeModel|SocioEcon]
## [Antilock|VehicleYear:MakeModel][CarValue|VehicleYear:MakeModel]
## [Airbag|VehicleYear:MakeModel][Accident|Age:Antilock]
## [DrivQuality|Age:Accident][MedCost|Accident:MakeModel]
## [RiskAversion|Age:SocioEcon:DrivQuality]
## [DrivHist|RiskAversion:DrivQuality]
## nodes: 12
## arcs: 20
## undirected arcs: 0
## directed arcs: 20
## average markov blanket size: 4.00
## average neighbourhood size: 3.33
## average branching factor: 1.67
##
## learning algorithm: Hill-Climbing
## score: AIC (disc.)
## penalization coefficient: 1
## tests used in the learning procedure: 314
## optimized: TRUE
La estructura que se obtuvo es la siguiente:
graphviz.plot(net.seguros)
La misma estructura representada de otra forma esta dada por:
plot(net.seguros)
Una vez incorporada la información del experto en la estimación de la red, vale la pena incorporar una restricción adiconal, debido a que es razonable pesnar que el historial de manejo DrivHist de una persona debe depender de la edad de la persona, por esta razón al incluir esta nueva restricción la red bayesiana que se obtiene es la siguiente:
white <- data.frame(from = c("Age"), to = c("DrivHist"))
net.seguros <- hc(seguros, score = "aic", blacklist = black, whitelist = white)
net.seguros
##
## Bayesian network learned via Score-based methods
##
## model:
## [Age][SocioEcon|Age][RiskAversion|Age:SocioEcon][VehicleYear|SocioEcon]
## [MakeModel|SocioEcon][Antilock|VehicleYear:MakeModel]
## [CarValue|VehicleYear:MakeModel][Airbag|VehicleYear:MakeModel]
## [DrivHist|Age:RiskAversion][DrivQuality|Age:RiskAversion:DrivHist]
## [Accident|DrivQuality:Antilock][MedCost|Accident:MakeModel]
## nodes: 12
## arcs: 20
## undirected arcs: 0
## directed arcs: 20
## average markov blanket size: 3.83
## average neighbourhood size: 3.33
## average branching factor: 1.67
##
## learning algorithm: Hill-Climbing
## score: AIC (disc.)
## penalization coefficient: 1
## tests used in the learning procedure: 334
## optimized: TRUE
cuya gráfica es
graphviz.plot(net.seguros)
Ya que se ha definido una posible estructura de la red que represente los datos, es factible pensar en la construcción de modelos locales que permitan tener mejores estimaciones de las probabilidades condicionales. Para ello, se propone usar un modelo logístico multinomial para describir la relación VehicleYear-> CarValue <- MakeModel pues la variable CarValue tiene más de dos niveles.