Lo primero que hacemos es cargar nuestra base de datos de los siniestros ocurridos de la aseguradora
Base_Siniestros <- read_excel("Documents/MASDFR/BASE_SINIESTROS_TAREA1.xlsx")
Base_Siniestros$MONTO_OCURRIDO <- round(Base_Siniestros$MONTO_OCURRIDO)
Base_Siniestros$SUMA_ASEGURADA <- round(Base_Siniestros$SUMA_ASEGURADA)
Base_Siniestros
Observamos que nuestros montos de los siniestros se encuentran en dos tipos de moneda, las cuales son MXN y USD, sabemos que el tipo de cambio al día de hoy es en promedio 20.60 MXN = 1 USD, por lo cual decidimos convertir los pesos mexicanos a dólares
#library(dplyr)
Base_Siniestros <- Base_Siniestros %>% mutate(MONTO_OCURRIDO = ifelse(MONEDA == "1-MXN",Base_Siniestros$MONTO_OCURRIDO / 20.6, MONTO_OCURRIDO))
Base_Siniestros$MONTO_OCURRIDO <- round(Base_Siniestros$MONTO_OCURRIDO)
Como tambien ocuparemos la Suma aseguradora para el cálculo de la prima, convertimos los pesos mexicanos a dólares para la variable SUMA_ASEGURADA
#library(dplyr)
Base_Siniestros <- Base_Siniestros %>% mutate(SUMA_ASEGURADA= ifelse(MONEDA == "1-MXN",Base_Siniestros$SUMA_ASEGURADA / 20.6, SUMA_ASEGURADA))
Base_Siniestros$SUMA_ASEGURADA <- round(Base_Siniestros$SUMA_ASEGURADA)
Base_Siniestros <- Base_Siniestros %>% mutate(MONEDA= ifelse(MONEDA == "1-MXN","2-USD", MONEDA)) #Esto es para poner la varible Moneda en termino de USD
Antes de realizar todo el proceso del cálculo de Primas, primero definire mis gastos para el cálculo de la Prima Tarifa, los cuales serán:
Gastos_de_Administracion = 0.15
Gastos_de_Adquisición = 0.05
Margen_de_Utilidad = 0.10
Ahora vamos a separar nuestros siniestros por RAMO, pero primero ocupamos la función as.factor() en la variable RAMO para transformarlos a tipo factor y poder graficarlos
Base_Siniestros$RAMO<- as.factor(Base_Siniestros$RAMO)
Checamos los tipos de RAMOS, los cuales son:
levels(Base_Siniestros$RAMO)
## [1] "Diversos" "Huracán" "Incendio"
## [4] "Marítimo y Trasnportes" "Responsabilidad Civil" "Terremoto"
El número de siniestros por RAMO es:
#Frecuencia relativa
Frec_abs_Ramos <-data.frame(table(Base_Siniestros$RAMO))
Frec_abs_Ramos
plot(Base_Siniestros$RAMO,col=c("lightseagreen","lightskyblue","lightskyblue1",
"lightskyblue3","lightskyblue4","lightcyan3"),main="Frecuencia por Ramo",
xlab="Ramos", ylab="Número de Siniestros")
legend("topright",legend=c("Diversos","Huracán","Incendio","Marítimo y Trasnportes","Responsabilidad Civil","Terremoto"),pch=19,col=c("lightseagreen","lightskyblue","lightskyblue1", "lightskyblue3","lightskyblue4","lightcyan3"),cex=0.8)
Frecuencia relativa:
Al contar solo con el número de polizas que sufrieron siniestro, la frecuencia lo determinamos de acuerdo a la base de datos, donde dividimos nuestras frecuencias por RAMOS entre el total de siniestro que tuvo la aseguradora
Frec_rel_Ramos <- data.frame(
"Ramos" = Frec_abs_Ramos$Var1,
"Frecuencia" = Frec_abs_Ramos$Freq/length(Base_Siniestros$RAMO))
Frec_rel_Ramos
A continuación analizaremos cada uno de los RAMOS
Filtramos los datos del RAMO Diversos
Diversos <- filter(Base_Siniestros,RAMO =="Diversos")
Diversos
Monto total:
Siniestralidad_Diversos <- sum(Diversos$MONTO_OCURRIDO)
Siniestralidad_Diversos
## [1] 2613689107
Severidad Promedio:
Se realiza un boxplot para observar si contamos con valores atípicos que puedan llegar a modificar drásticamente la severidad promedio
boxplot_Diversos <-boxplot(Diversos$MONTO_OCURRIDO,main="boxplot Diversos",outpch = 21,outbg = "lightseagreen")
length(boxplot_Diversos$out) #Cantidad de outliers
## [1] 16
Tenemos un total de 16 valores atípicos, pero podemos observar claramente que hay 2 en especifico que estan muy alejados del boxplot, por lo cual decidimos eliminar solo los 3 valores que estaban más alejados, a continuación podemos observar el boxplot antes y después de eliminar los 3 valores atípicos
par(mfrow = c(1, 2))
boxplot_Diversos <-boxplot(Diversos$MONTO_OCURRIDO,main="boxplot antes",outpch = 21,outbg = "lightseagreen")
Diversos_2 <-Diversos %>% filter(MONTO_OCURRIDO < 100000000)
boxplot(Diversos_2$MONTO_OCURRIDO,main="boxplot después",col = "lightseagreen",outpch = 21,outbg = "lightseagreen")
Al sacar la Severidad Promedio podemos notar una gran diferencia en eliminar y no eliminar los 3 valores atípicos
Severidad_Prom_Diversos = mean(Diversos$MONTO_OCURRIDO)
Severidad_Prom_Diversos
## [1] 29701013
Severidad_Prom_Diversos_2 = mean(Diversos_2$MONTO_OCURRIDO)
Severidad_Prom_Diversos_2
## [1] 4534711
Una diferencia de $25,166,302 dólares, una suma muy considerable que hay que tomar muy en cuenta
Severidad_Prom_Diversos- Severidad_Prom_Diversos_2
## [1] 25166302
En este caso yo me quedaría con la Severidad promedio sin contar los 3 valores atípicos
Cuota de riesgo
Cuota_Riesgo_Diversos=(Frec_rel_Ramos[2]$Frecuencia[1])*Severidad_Prom_Diversos_2
Cuota_Riesgo_Diversos
## [1] 51906.16
Prima de Riesgo
La Prima de Riesgo la calculamos por Ponderada por suma asegurada
Prima_Riesgo <-data_frame("PRIMA_RIESGO"=((Diversos$SUMA_ASEGURADA/(sum(Diversos$SUMA_ASEGURADA)))*Siniestralidad_Diversos)) #Calculo de la Prima de Riesgo
## Warning: `data_frame()` was deprecated in tibble 1.1.0.
## Please use `tibble()` instead.
Prima_Riesgo$PRIMA_RIESGO<-round(Prima_Riesgo$PRIMA_RIESGO)
Prima Tarifa
Prima_Tarifa <-data_frame("PRIMA_TARIFA"=(Prima_Riesgo$PRIMA_RIESGO/(1-(Gastos_de_Administracion + Gastos_de_Adquisición + Margen_de_Utilidad)))) #Calculo de la Prima Tarifa
Prima_Tarifa$PRIMA_TARIFA<-round(Prima_Tarifa$PRIMA_TARIFA)
En la siguiente tabla se muestra el número de siniestro, la suma asegurada, el monto ocurrido, la prima de Riesgo, la prima tarifa, el ramo y la Cobertura
datos_Diversos<-cbind(Diversos,Prima_Riesgo,Prima_Tarifa)
datos_Diversos<-select(datos_Diversos,NUM_SINIESTRO,SUMA_ASEGURADA,MONTO_OCURRIDO,PRIMA_RIESGO,PRIMA_TARIFA,RAMO,COBERTURA)
datos_Diversos
Ahora vamos a separar nuestros siniestros por COBERTURA dependiendo de cada RAMO, pero primero ocupamos la función as.factor() en la variable COBERTURA para transformarlos a tipo factor y poder graficarlos
Diversos$COBERTURA<- as.factor(Diversos$COBERTURA)
Checamos los tipos de COBERTURAS del RAMO Diversos, los cuales son:
levels(Diversos$COBERTURA)
## [1] "01-Calderas"
## [2] "02-Bienes almacenados fuera del sitio"
## [3] "02-Equipo electrónico"
## [4] "03-Equipo de contratistas"
## [5] "04-Rotura de maquinaria"
## [6] "05-Error de diseño / Riesgo del fabricante"
## [7] "07-Garantía"
## [8] "14-Cobertura básica de Montaje (Amparo A)"
## [9] "16-Obras civiles aseguradas, recibidas o puestas en operación"
## [10] "19-Pruebas maquinaria e instalaciones"
El número de siniestros por COBERTURA es:
# Frecuencia absoluta, de acuerdo al número de siniestros encontrados en el Ramo Diversos
Frec_abs_Cob_Div<-data.frame(table(Diversos$COBERTURA))
Frec_abs_Cob_Div
plot(Diversos$COBERTURA,col = terrain.colors(10),main="Frecuencia por Cobertura
del Ramo Diversos",xlab="Coberturas", ylab="Número de Siniestros")
legend("topright",legend=c("Calderas","Bienes almacenados","Equipo electrónico",
"Equipo de contratistas","Rotura de maquinaria",
"Error de diseño","Garantía","Cobertura básica","Obras civiles","Pruebas maquinaria"),pch=19,col = terrain.colors(10),cex=0.8)
Frec_rel_Cob_Div <- data.frame(
"Coberturas" = Frec_abs_Cob_Div$Var1,
"Frecuencia" = Frec_abs_Cob_Div$Freq/length(Diversos$RAMO))
Frec_rel_Cob_Div
Severidad Promedio
Estos valores lo calcularemos con Diversos_2 la base donde eliminamos 3 valores atípicos por lo que mencionamos anteriormente
Calderas <- filter(Diversos_2,COBERTURA =="01-Calderas")
Bienes <- filter(Diversos_2,COBERTURA =="02-Bienes almacenados fuera del sitio")
Eq_elect <- filter(Diversos_2,COBERTURA =="02-Equipo electrónico")
Eq_cont <- filter(Diversos_2,COBERTURA =="03-Equipo de contratistas")
Rotura <- filter(Diversos_2,COBERTURA =="04-Rotura de maquinaria")
Error <- filter(Diversos_2,COBERTURA =="05-Error de diseño / Riesgo del fabricante")
Garantia <- filter(Diversos_2,COBERTURA =="07-Garantía")
Cobertura <- filter(Diversos_2,COBERTURA =="14-Cobertura básica de Montaje (Amparo A)")
Obras <- filter(Diversos_2,COBERTURA =="16-Obras civiles aseguradas, recibidas o puestas en operación")
Pruebas <- filter(Diversos_2,COBERTURA =="19-Pruebas maquinaria e instalaciones")
data.frame("Coberturas_del_Ramo_Diversos"=Frec_abs_Cob_Div$Var1,"Severidad"=c(mean(Calderas$MONTO_OCURRIDO),mean(Bienes$MONTO_OCURRIDO),mean(Eq_elect$MONTO_OCURRIDO),mean(Eq_cont$MONTO_OCURRIDO),mean(Rotura$MONTO_OCURRIDO),mean(Error$MONTO_OCURRIDO),mean(Garantia$MONTO_OCURRIDO),mean(Cobertura$MONTO_OCURRIDO),mean(Obras$MONTO_OCURRIDO),mean(Pruebas$MONTO_OCURRIDO)))
Filtramos los datos del RAMO Huracán
Huracan <- filter(Base_Siniestros,RAMO =="Huracán")
Huracan
Monto total:
Siniestralidad_Huracan <- sum(Huracan$MONTO_OCURRIDO)
Siniestralidad_Huracan
## [1] 29756957840
Severidad Promedio:
Se realiza un boxplot para observar si contamos con valores atípicos que puedan llegar a modificar drásticamente la severidad promedio
boxplot_Huracan <-boxplot(Huracan$MONTO_OCURRIDO,main="boxplot Huracán",outpch = 21,outbg = "lightskyblue")
length(boxplot_Huracan$out) #Cantidad de outliers
## [1] 57
max(boxplot_Huracan$out) #Máximo outliers
## [1] 4475334738
Tenemos un total de 57 valores atípicos, pero a diferencia del Ramo Diversos estos no se encuentran tan alejados, podriamos eliminar solo el máximo y ver como se comporta nuestro promedio, para asi determinar cual escoger
par(mfrow = c(1, 2))
boxplot_Huracan <-boxplot(Huracan$MONTO_OCURRIDO,main="boxplot antes",outpch = 21,outbg = "lightskyblue")
Huracan_2 <-Huracan %>% filter(MONTO_OCURRIDO < 4400000000)
boxplot(Huracan_2$MONTO_OCURRIDO,main="boxplot después",col = "lightskyblue",outpch = 21,outbg = "lightskyblue")
Al sacar la Severidad Promedio podemos notar una diferencia considerable en eliminar y no eliminar solo el máximo de los valores atípicos
Severidad_Prom_Huracan= mean(Huracan$MONTO_OCURRIDO)
Severidad_Prom_Huracan
## [1] 107039417
Severidad_Prom_Huracan_2 = mean(Huracan_2$MONTO_OCURRIDO)
Severidad_Prom_Huracan_2
## [1] 91269397
Con una diferencia de $15,770,019 dólares, una suma considerable
Severidad_Prom_Huracan- Severidad_Prom_Huracan_2
## [1] 15770019
En este caso yo me quedaría con la Severidad promedio sin contar el máximo de los valores atípicos
Cuota de riesgo
Cuota_Riesgo_Huracan=(Frec_rel_Ramos[2]$Frecuencia[2])*Severidad_Prom_Huracan_2
Cuota_Riesgo_Huracan
## [1] 3300324
Prima de Riesgo
La Prima de Riesgo la calculamos por Ponderada por suma asegurada
Prima_Riesgo <-data_frame("PRIMA_RIESGO"=((Huracan$SUMA_ASEGURADA/(sum(Huracan$SUMA_ASEGURADA)))*Siniestralidad_Huracan)) #Calculo de la Prima de Riesgo
Prima_Riesgo$PRIMA_RIESGO<-round(Prima_Riesgo$PRIMA_RIESGO)
Prima Tarifa
Prima_Tarifa <-data_frame("PRIMA_TARIFA"=(Prima_Riesgo$PRIMA_RIESGO/(1-(Gastos_de_Administracion + Gastos_de_Adquisición + Margen_de_Utilidad)))) #Calculo de la Prima de Tarifa
Prima_Tarifa$PRIMA_TARIFA<-round(Prima_Tarifa$PRIMA_TARIFA)
En la siguiente tabla se muestra el número de siniestro, la suma asegurada, el monto ocurrido, la prima de Riesgo, la prima tarifa, el ramo y la Cobertura
datos_Huracan<-cbind(Huracan,Prima_Riesgo,Prima_Tarifa)
datos_Huracan<-select(datos_Huracan,NUM_SINIESTRO,SUMA_ASEGURADA,MONTO_OCURRIDO,PRIMA_RIESGO,PRIMA_TARIFA,RAMO,COBERTURA)
datos_Huracan
Ahora vamos a separar nuestros siniestros por COBERTURA dependiendo de cada RAMO, pero primero ocupamos la función as.factor() en la variable COBERTURA para transformarlos a tipo factor y poder graficarlos
Huracan$COBERTURA<- as.factor(Huracan$COBERTURA)
Checamos los tipos de COBERTURAS del RAMO Huracán, los cuales son:
levels(Huracan$COBERTURA)
## [1] "01-Riesgos Hidrometeorológicos" "18-MIGRACIÓN (POR VALIDAR)"
El número de siniestros por COBERTURA es:
# Frecuencia absoluta, de acuerdo al número de siniestros encontrados en el Ramo Huracán
Frec_abs_Cob_Hur<-data.frame(table(Huracan$COBERTURA))
Frec_abs_Cob_Hur
plot(Huracan$COBERTURA,col= c("brown3","cadetblue4"),main="Frecuencia por Cobertura
del Ramo Huracán",xlab="Coberturas", ylab="Número de Siniestros")
Frec_rel_Cob_Hur <- data.frame(
"Coberturas" = Frec_abs_Cob_Hur$Var1,
"Frecuencia" = Frec_abs_Cob_Hur$Freq/length(Huracan$RAMO))
Frec_rel_Cob_Hur
Severidad Promedio
Estos valores lo calcularemos con Huracan_2 la base donde eliminamos el máximo valor atípico
Riesgos_H <- filter(Huracan_2,COBERTURA =="01-Riesgos Hidrometeorológicos")
Migracion <- filter(Huracan_2,COBERTURA =="18-MIGRACIÓN (POR VALIDAR)")
data.frame("Coberturas_del_Ramo_Huracán"=Frec_abs_Cob_Hur$Var1,"Severidad"=c(mean(Riesgos_H$MONTO_OCURRIDO),mean(Migracion$MONTO_OCURRIDO)))
Filtramos los datos del RAMO Incendio
Incendio <- filter(Base_Siniestros,RAMO =="Incendio")
Incendio
Monto total:
Siniestralidad_Incendio <- sum(Incendio$MONTO_OCURRIDO)
Siniestralidad_Incendio
## [1] 60562843391
Severidad Promedio:
Se realiza un boxplot para observar si contamos con valores atípicos que puedan llegar a modificar drásticamente la severidad promedio
boxplot_Incendio <-boxplot(Incendio$MONTO_OCURRIDO,main="boxplot Incendio",outpch = 21,outbg = "lightskyblue1")
En el caso del Ramo Incendio considero dejar todos los siniestros, lo cual nos da una severidad promedio de:
Severidad_Prom_Incendio= mean(Incendio$MONTO_OCURRIDO)
Severidad_Prom_Incendio
## [1] 49887021
Cuota de riesgo
Cuota_Riesgo_Incendio=(Frec_rel_Ramos[2]$Frecuencia[3])*Severidad_Prom_Incendio
Cuota_Riesgo_Incendio
## [1] 7877581
Prima de Riesgo
La Prima de Riesgo la calculamos por Ponderada por suma asegurada
Prima_Riesgo <-data_frame("PRIMA_RIESGO"=((Incendio$SUMA_ASEGURADA/(sum(Incendio$SUMA_ASEGURADA)))*Siniestralidad_Incendio)) #Calculo de la Prima de Riesgo
Prima_Riesgo$PRIMA_RIESGO<-round(Prima_Riesgo$PRIMA_RIESGO)
Prima Tarifa
Prima_Tarifa <-data_frame("PRIMA_TARIFA"=(Prima_Riesgo$PRIMA_RIESGO/(1-(Gastos_de_Administracion + Gastos_de_Adquisición + Margen_de_Utilidad)))) #Calculo de la Prima de Tarifa
Prima_Tarifa$PRIMA_TARIFA<-round(Prima_Tarifa$PRIMA_TARIFA)
En la siguiente tabla se muestra el número de siniestro, la suma asegurada, el monto ocurrido, la prima de Riesgo, la prima tarifa, el ramo y la Cobertura
datos_Incendio<-cbind(Incendio,Prima_Riesgo,Prima_Tarifa)
datos_Incendio<-select(datos_Incendio,NUM_SINIESTRO,SUMA_ASEGURADA,MONTO_OCURRIDO,PRIMA_RIESGO,PRIMA_TARIFA,RAMO,COBERTURA)
datos_Incendio
Ahora vamos a separar nuestros siniestros por COBERTURA dependiendo de cada RAMO, pero primero ocupamos la función as.factor() en la variable COBERTURA para transformarlos a tipo factor y poder graficarlos
Incendio$COBERTURA<- as.factor(Incendio$COBERTURA)
Checamos los tipos de COBERTURAS del RAMO Incendio, los cuales son:
levels(Incendio$COBERTURA)
## [1] "01-Bienes en cuartos o aparatos refrigerados o en incubadoras"
## [2] "02-Combustión Espontánea"
## [3] "06-Ganancias Brutas"
## [4] "09-Huelgas o Alborotos Populares"
## [5] "10-Incendio, rayo y explosión"
## [6] "15-Pérdida de Utilidades, Gastos Fijos y Salarios"
## [7] "18-Todo Riesgo"
## [8] "99-Otra cobertura"
El número de siniestros por COBERTURA es:
# Frecuencia absoluta, de acuerdo al número de siniestros encontrados en el Ramo Incendio
Frec_abs_Cob_Inc<-data.frame(table(Incendio$COBERTURA))
Frec_abs_Cob_Inc
plot(Incendio$COBERTURA,col = cm.colors(8),main="Frecuencia por Cobertura
del Ramo Incendio",xlab="Coberturas", ylab="Número de Siniestros")
legend("topright",legend=c("Bienes en cuartos o aparatos ","Combustión Espontánea","Ganancias Brutas","Huelgas o Alborotos","Incendio, rayo y explosión",
"Pérdida de Utilidades","Todo Riesgo","Otra cobertura"),pch=19,col = cm.colors(8),cex=0.45)
Frec_rel_Cob_Inc <- data.frame(
"Coberturas" = Frec_abs_Cob_Inc$Var1,
"Frecuencia" = Frec_abs_Cob_Inc$Freq/length(Incendio$RAMO))
Frec_rel_Cob_Inc
Severidad Promedio
Estos valores lo calcularemos con la base original, Incendio
Bienes <- filter(Incendio,COBERTURA =="01-Bienes en cuartos o aparatos refrigerados o en incubadoras")
Combustion <- filter(Incendio,COBERTURA =="02-Combustión Espontánea")
GB <- filter(Incendio,COBERTURA =="06-Ganancias Brutas")
Huelgas <- filter(Incendio,COBERTURA =="09-Huelgas o Alborotos Populares")
IRE <- filter(Incendio,COBERTURA =="10-Incendio, rayo y explosión")
Perdida <- filter(Incendio,COBERTURA =="15-Pérdida de Utilidades, Gastos Fijos y Salarios")
T_Riesgo <- filter(Incendio,COBERTURA =="18-Todo Riesgo")
Otra_C <- filter(Incendio,COBERTURA =="99-Otra cobertura")
data.frame("Coberturas_del_Ramo_Incendio"=Frec_abs_Cob_Hur$Var1,"Severidad"=c(mean(Bienes$MONTO_OCURRIDO),mean(Combustion$MONTO_OCURRIDO),mean(GB$MONTO_OCURRIDO),mean(Huelgas$MONTO_OCURRIDO),mean(IRE$MONTO_OCURRIDO),mean(Perdida$MONTO_OCURRIDO),mean(T_Riesgo$MONTO_OCURRIDO),mean(Otra_C$MONTO_OCURRIDO)))
Filtramos los datos del RAMO Marítimo y Trasnporte
Maritimo_T <- filter(Base_Siniestros,RAMO =="Marítimo y Trasnportes")
Maritimo_T
Monto total:
Siniestralidad_Maritimo_T <- sum(Maritimo_T$MONTO_OCURRIDO)
Siniestralidad_Maritimo_T
## [1] 28303530260
Severidad Promedio:
Se realiza un boxplot para observar si contamos con valores atípicos que puedan llegar a modificar drásticamente la severidad promedio
boxplot_Maritimo_T <-boxplot(Maritimo_T$MONTO_OCURRIDO,main="boxplot Marítimo y Trasnporte",outpch = 21,outbg = "lightskyblue3")
En el caso del Ramo Marítimo y Trasnporte considero dejar todos los siniestros, lo cual nos da una severidad promedio de:
Severidad_Prom_Maritimo_T = mean(Maritimo_T$MONTO_OCURRIDO)
Severidad_Prom_Maritimo_T
## [1] 5672050
Cuota de riesgo
Cuota_Riesgo_Maritimo_T=(Frec_rel_Ramos[2]$Frecuencia[4])*Severidad_Prom_Maritimo_T
Cuota_Riesgo_Maritimo_T
## [1] 3681521
Prima de Riesgo
La Prima de Riesgo la calculamos por Ponderada por suma asegurada
Prima_Riesgo <-data_frame("PRIMA_RIESGO"=((Maritimo_T$SUMA_ASEGURADA/(sum(Maritimo_T$SUMA_ASEGURADA)))*Siniestralidad_Maritimo_T)) #Calculo de la Prima de Riesgo
Prima_Riesgo$PRIMA_RIESGO<-round(Prima_Riesgo$PRIMA_RIESGO)
Prima Tarifa
Prima_Tarifa <-data_frame("PRIMA_TARIFA"=(Prima_Riesgo$PRIMA_RIESGO/(1-(Gastos_de_Administracion + Gastos_de_Adquisición + Margen_de_Utilidad)))) #Calculo de la Prima Tarifa
Prima_Tarifa$PRIMA_TARIFA<-round(Prima_Tarifa$PRIMA_TARIFA)
En la siguiente tabla se muestra el número de siniestro, la suma asegurada, el monto ocurrido, la prima de Riesgo, la prima tarifa, el ramo y la Cobertura
datos_Maritimo_T<-cbind(Maritimo_T,Prima_Riesgo,Prima_Tarifa)
datos_Maritimo_T<-select(datos_Maritimo_T,NUM_SINIESTRO,SUMA_ASEGURADA,MONTO_OCURRIDO,PRIMA_RIESGO,PRIMA_TARIFA,RAMO,COBERTURA)
datos_Maritimo_T
Ahora vamos a separar nuestros siniestros por COBERTURA dependiendo de cada RAMO, pero primero ocupamos la función as.factor() en la variable COBERTURA para transformarlos a tipo factor y poder graficarlos
Maritimo_T$COBERTURA<- as.factor(Maritimo_T$COBERTURA)
Checamos los tipos de COBERTURAS del RAMO Marítimo y Trasnporte, los cuales son:
levels(Maritimo_T$COBERTURA)
## [1] "01-Riesgos Ordinarios de Tránsito (ROT) (básica)"
## [2] "02-Robo Total sin violencia"
## [3] "03-Robo Total con violencia y/o asalto"
## [4] "04-Robo Parcial sin violencia o extravío"
## [5] "05-Robo Parcial con violencia y/o asalto"
## [6] "06-REVISAR"
## [7] "07-Robo de bulto por entero"
## [8] "08-Mojadura"
## [9] "09-Oxidación"
## [10] "10-Manchas"
## [11] "11-Contaminación por contacto con otras Cargas"
## [12] "12-Rotura o rajadura, abolladura y dobladura"
## [13] "13-Derrames y/o Mermas"
## [14] "16-Daños a bienes refrigerados"
## [15] "20-Maniobras de Carga y Descarga"
## [16] "23-Todo Riesgo"
## [17] "99-Otras coberturas"
El número de siniestros por COBERTURA es:
# Frecuencia absoluta, de acuerdo al número de siniestros encontrados en el Ramo Maritimo_T
Frec_abs_Cob_Mar_T<-data.frame(table(Maritimo_T$COBERTURA))
Frec_abs_Cob_Mar_T
plot(Maritimo_T$COBERTURA,col=rainbow(17, alpha=0.8),main="Frecuencia por Cobertura
del Ramo Marítimo y Trasnportes",xlab="Coberturas", ylab="Número de Siniestros")
legend("topright",legend=c("Riesgos Ordinarios","Robo Total sin violencia","Robo Total con violencia","Robo Parcial sin violencia","Robo Parcial con violencia ",
"REVISAR","Robo de bulto","Mojadura","Oxidación","Manchas","Contaminación por contacto","Rotura o rajadura","Derrames y/o Mermas","Daños a bienes refrigerados","Maniobras de Carga y Descarga","Todo Riesgo","Otras coberturas"),pch=19,col=rainbow(17, alpha=0.8) ,cex=0.6)
Frec_rel_Cob_Mar_T <- data.frame(
"Coberturas" = Frec_abs_Cob_Mar_T$Var1,
"Frecuencia" = Frec_abs_Cob_Mar_T$Freq/length(Maritimo_T$RAMO))
Frec_rel_Cob_Mar_T
Severidad Promedio
Estos valores lo calcularemos con Maritimo_T:
ROT <- filter(Maritimo_T,COBERTURA =="01-Riesgos Ordinarios de Tránsito (ROT) (básica)")
RTSV <- filter(Maritimo_T,COBERTURA =="02-Robo Total sin violencia")
RTCV <- filter(Maritimo_T,COBERTURA =="03-Robo Total con violencia y/o asalto")
RPSV <- filter(Maritimo_T,COBERTURA =="04-Robo Parcial sin violencia o extravío")
RPCV <- filter(Maritimo_T,COBERTURA =="05-Robo Parcial con violencia y/o asalto")
Revisar <- filter(Maritimo_T,COBERTURA =="06-REVISAR")
RBE <- filter(Maritimo_T,COBERTURA =="07-Robo de bulto por entero")
Mojadura <- filter(Maritimo_T,COBERTURA =="08-Mojadura")
Oxidacion <- filter(Maritimo_T,COBERTURA =="09-Oxidación")
Manchas <- filter(Maritimo_T,COBERTURA =="10-Manchas")
Contaminacion <- filter(Maritimo_T,COBERTURA =="11-Contaminación por contacto con otras Cargas")
RRAD <- filter(Maritimo_T,COBERTURA =="12-Rotura o rajadura, abolladura y dobladura")
Derrames <- filter(Maritimo_T,COBERTURA =="13-Derrames y/o Mermas")
DBR <- filter(Maritimo_T,COBERTURA =="16-Daños a bienes refrigerados")
MCD <- filter(Maritimo_T,COBERTURA =="20-Maniobras de Carga y Descarga")
TR <- filter(Maritimo_T,COBERTURA =="23-Todo Riesgo")
Otras <- filter(Maritimo_T,COBERTURA =="99-Otras coberturas")
data.frame("Coberturas_del_Ramo_Maritimo"=Frec_abs_Cob_Mar_T$Var1,"Severidad"=c(mean(ROT$MONTO_OCURRIDO),mean(RTSV$MONTO_OCURRIDO),mean(RTCV$MONTO_OCURRIDO),mean(RPSV$MONTO_OCURRIDO),mean(RPCV$MONTO_OCURRIDO),mean(Revisar$MONTO_OCURRIDO),mean(RBE$MONTO_OCURRIDO),mean(Mojadura$MONTO_OCURRIDO),mean(Oxidacion$MONTO_OCURRIDO),mean(Manchas$MONTO_OCURRIDO),mean(Contaminacion$MONTO_OCURRIDO),mean(RRAD$MONTO_OCURRIDO),mean(Derrames$MONTO_OCURRIDO),mean(DBR$MONTO_OCURRIDO),mean(MCD$MONTO_OCURRIDO),mean(TR$MONTO_OCURRIDO),mean(Otras$MONTO_OCURRIDO)))
Filtramos los datos del RAMO Responsabilidad Civil
Resp_Civil <- filter(Base_Siniestros,RAMO =="Responsabilidad Civil")
Resp_Civil
Monto total:
Siniestralidad_Resp_Civil <- sum(Resp_Civil$MONTO_OCURRIDO)
Siniestralidad_Resp_Civil
## [1] 2014072734
Severidad Promedio:
Se realiza un boxplot para observar si contamos con valores atípicos que puedan llegar a modificar drásticamente la severidad promedio
boxplot_Resp_Civil <-boxplot(Resp_Civil$MONTO_OCURRIDO,main="boxplot Responsabilidad Civil",outpch = 21,outbg ="lightskyblue4")
Observamos que hay 3 valores atípicos que destacan en la parte superior, al ser el Ramo de Responsabilidad Civil decidimos quitarlos para nuestra severidad promedio, entonces:
par(mfrow = c(1, 2))
boxplot(Resp_Civil$MONTO_OCURRIDO,main="boxplot antes",outpch = 21,outbg ="lightskyblue4")
Resp_Civil_2 <-Resp_Civil %>% filter(MONTO_OCURRIDO < 80000000)
boxplot(Resp_Civil_2$MONTO_OCURRIDO,main="boxplot después",col = "lightskyblue4",outpch = 21,outbg = "lightskyblue4")
Al sacar la Severidad Promedio podemos notar que la diferencia no es tan grande a comparación de los otros ramos
Severidad_Prom_Resp_Civil = mean(Resp_Civil$MONTO_OCURRIDO)
Severidad_Prom_Resp_Civil
## [1] 2193979
Severidad_Prom_Resp_Civil_2 = mean(Resp_Civil_2$MONTO_OCURRIDO)
Severidad_Prom_Resp_Civil_2
## [1] 1800592
Ya que su diferencia es de $393,386 dólares aún asi ya que estamos hablando de dólares, no se puede tomar a la ligera
Severidad_Prom_Resp_Civil- Severidad_Prom_Resp_Civil_2
## [1] 393386.5
En este caso tomamos el que no tiene los 3 valores atípicos
Cuota de riesgo
Cuota_Riesgo_Resp_Civil=(Frec_rel_Ramos[2]$Frecuencia[5])*Severidad_Prom_Resp_Civil_2
Cuota_Riesgo_Resp_Civil
## [1] 215003.1
Prima de Riesgo
La Prima de Riesgo la calculamos por Ponderada por suma asegurada
Prima_Riesgo <-data_frame("PRIMA_RIESGO"=((Resp_Civil$SUMA_ASEGURADA/(sum(Resp_Civil$SUMA_ASEGURADA)))*Siniestralidad_Resp_Civil)) #Calculo de la Prima de Riesgo
Prima_Riesgo$PRIMA_RIESGO<-round(Prima_Riesgo$PRIMA_RIESGO)
Prima Tarifa
Prima_Tarifa <-data_frame("PRIMA_TARIFA"=(Prima_Riesgo$PRIMA_RIESGO/(1-(Gastos_de_Administracion + Gastos_de_Adquisición + Margen_de_Utilidad)))) #Calculo de la Prima Tarifa
Prima_Tarifa$PRIMA_TARIFA<-round(Prima_Tarifa$PRIMA_TARIFA)
En la siguiente tabla se muestra el número de siniestro, la suma asegurada, el monto ocurrido, la prima de Riesgo, la prima tarifa, el ramo y la Cobertura
datos_Resp_Civil<-cbind(Resp_Civil,Prima_Riesgo,Prima_Tarifa)
datos_Resp_Civil<-select(datos_Diversos,NUM_SINIESTRO,SUMA_ASEGURADA,MONTO_OCURRIDO,PRIMA_RIESGO,PRIMA_TARIFA,RAMO,COBERTURA)
datos_Resp_Civil
Ahora vamos a separar nuestros siniestros por COBERTURA dependiendo de cada RAMO, pero primero ocupamos la función as.factor() en la variable COBERTURA para transformarlos a tipo factor y poder graficarlos
Resp_Civil$COBERTURA<- as.factor(Resp_Civil$COBERTURA)
Checamos los tipos de COBERTURAS del RAMO Responsabilidad Civil, los cuales son:
levels(Resp_Civil$COBERTURA)
## [1] "01-Actividades e inmuebles"
## [2] "02-Asumida"
## [3] "04-Bienes bajo custodia"
## [4] "05-Carga y descarga"
## [5] "06-Contaminación al medio ambiente"
## [6] "08-Cruzada"
## [7] "11-Daños a instalaciones"
## [8] "12-Daños a la contraparte del contrato"
## [9] "13-Daños a terceros con vehículo en custodia"
## [10] "14-Daños a vehículos en custodia"
## [11] "16-Daños por la carga"
## [12] "17-Daños por trabajos y obras especiales"
## [13] "18-Demandas en el extranjero"
## [14] "20-Equipaje y efectos de huéspedes"
## [15] "21-Estacionamientos"
## [16] "24-Patronal (Subsidiaria)"
## [17] "25-Productos y trabajos terminados"
## [18] "26-RC Profesionistas"
## [19] "29-Talleres automotrices"
## [20] "30-Unión, mezcla y transformación"
## [21] "31-RC Viajero"
## [22] "32-Viajes en el extranjero"
## [23] "33-RC Hospitales"
## [24] "99-RC Otros u Otra Cobertura"
El número de siniestros por COBERTURA es:
# Frecuencia absoluta, de acuerdo al número de siniestros encontrados en el Ramo Responsabilidad Civil
Frec_abs_Cob_Rsp_C<-data.frame(table(Resp_Civil$COBERTURA))
Frec_abs_Cob_Rsp_C
plot(Resp_Civil$COBERTURA,col=rainbow(24, alpha=0.6),main="Frecuencia por Cobertura
Responsabilidad Civil",xlab="Coberturas", ylab="Número de Siniestros")
legend("topright",legend=c("Actividades e inmuebles","Asumida","Bienes bajo custodia","Carga y descarga","Contaminación al medio","Cruzada","Daños a instalaciones","Daños a la contraparte","Daños a terceros","Daños a vehículos","Daños por la carga","Daños por trabajos","Demandas en el extranjero","Equipaje y efectos","Estacionamientos","Patronal (Subsidiaria)","Productos y trabajos","RC Profesionistas","Talleres automotrices","Unión, mezcla","RC Viajero","Viajes en el extranjero","RC Hospitales","RC Otros "),pch=19,col=rainbow(24, alpha=0.6),cex=0.35)
Frec_rel_Cob_Rsp_C <- data.frame(
"Coberturas" = Frec_abs_Cob_Rsp_C$Var1,
"Frecuencia" = Frec_abs_Cob_Rsp_C$Freq/length(Resp_Civil$RAMO))
Frec_rel_Cob_Rsp_C
Severidad Promedio
Estos valores lo calcularemos con Resp_Civil_2 la base donde eliminamos 3 valores atípicos por lo que mencionamos anteriormente
AEI <- filter(Resp_Civil_2,COBERTURA =="01-Actividades e inmuebles")
Asumida <- filter(Resp_Civil_2,COBERTURA =="02-Asumida")
BBC <- filter(Resp_Civil_2,COBERTURA =="04-Bienes bajo custodia")
CYD <- filter(Resp_Civil_2,COBERTURA =="05-Carga y descarga")
Cont_A <- filter(Resp_Civil_2,COBERTURA =="06-Contaminación al medio ambiente")
Cruzada <- filter(Resp_Civil_2,COBERTURA =="08-Cruzada")
Daños_inst <- filter(Resp_Civil_2,COBERTURA =="11-Daños a instalaciones")
Daños_cont <- filter(Resp_Civil_2,COBERTURA =="12-Daños a la contraparte del contrato")
Daños_tercero <- filter(Resp_Civil_2,COBERTURA =="13-Daños a terceros con vehículo en custodia")
Daños_Veh <- filter(Resp_Civil_2,COBERTURA =="14-Daños a vehículos en custodia")
Daños_carga <- filter(Resp_Civil_2,COBERTURA =="16-Daños por la carga")
Daños_trab <- filter(Resp_Civil_2,COBERTURA =="17-Daños por trabajos y obras especiales")
Demandas <- filter(Resp_Civil_2,COBERTURA =="18-Demandas en el extranjero")
Equipaje <- filter(Resp_Civil_2,COBERTURA =="20-Equipaje y efectos de huéspedes")
Estacion <- filter(Resp_Civil_2,COBERTURA =="21-Estacionamientos")
Patronal<- filter(Resp_Civil_2,COBERTURA =="24-Patronal (Subsidiaria)")
Productos <- filter(Resp_Civil_2,COBERTURA =="25-Productos y trabajos terminados")
Profesionista <- filter(Resp_Civil_2,COBERTURA =="26-RC Profesionistas")
tall_auto <- filter(Resp_Civil_2,COBERTURA =="29-Talleres automotrices")
UMT <- filter(Resp_Civil_2,COBERTURA =="30-Unión, mezcla y transformación")
RC_viajero <- filter(Resp_Civil_2,COBERTURA =="31-RC Viajero")
Viajes <- filter(Resp_Civil_2,COBERTURA =="32-Viajes en el extranjero")
Hospital <- filter(Resp_Civil_2,COBERTURA =="33-RC Hospitales")
Otras_Cob<- filter(Resp_Civil_2,COBERTURA =="99-RC Otros u Otra Cobertura")
data.frame("Coberturas_del_Ramo_Resp_C"=Frec_abs_Cob_Rsp_C$Var1,"Severidad"=c(mean(AEI$MONTO_OCURRIDO),mean(Asumida$MONTO_OCURRIDO),mean(BBC$MONTO_OCURRIDO),mean(CYD$MONTO_OCURRIDO),mean(Cont_A$MONTO_OCURRIDO),mean(Cruzada$MONTO_OCURRIDO),mean(Daños_inst$MONTO_OCURRIDO),mean(Daños_cont$MONTO_OCURRIDO),mean(Daños_tercero$MONTO_OCURRIDO),mean(Daños_Veh$MONTO_OCURRIDO),mean(Daños_carga$MONTO_OCURRIDO),mean(Daños_trab$MONTO_OCURRIDO),mean(Demandas$MONTO_OCURRIDO),mean(Equipaje$MONTO_OCURRIDO),mean(Estacion$MONTO_OCURRIDO),mean(Patronal$MONTO_OCURRIDO),mean(Productos$MONTO_OCURRIDO),mean(Profesionista$MONTO_OCURRIDO),mean(tall_auto$MONTO_OCURRIDO),mean(UMT$MONTO_OCURRIDO),mean(RC_viajero$MONTO_OCURRIDO),mean(Viajes$MONTO_OCURRIDO),mean(Hospital$MONTO_OCURRIDO),mean(Otras_Cob$MONTO_OCURRIDO)))
Filtramos los datos del RAMO Terremoto
Terremoto <- filter(Base_Siniestros,RAMO =="Terremoto")
Terremoto
Monto total:
Siniestralidad_Terremoto <- sum(Terremoto$MONTO_OCURRIDO)
Siniestralidad_Terremoto
## [1] 24330437892
Severidad Promedio:
Se realiza un boxplot para observar si contamos con valores atípicos que puedan llegar a modificar drásticamente la severidad promedio
boxplot_Terremoto <-boxplot(Terremoto$MONTO_OCURRIDO,main="boxplot Terremoto",outpch = 21,outbg = "lightcyan3")
max(boxplot_Terremoto$out)
## [1] 10699934463
A simple vista podemos ver que hay 3 valores atípicos que se encuentra alejados de los demáss, por lo cual decidimos eliminarlos, a continuación podemos observar el boxplot antes y después de eliminar esos valores
par(mfrow = c(1, 2))
boxplot(Terremoto$MONTO_OCURRIDO,main="boxplot antes",outpch = 21,outbg = "lightcyan3")
Terremoto_2 <-Terremoto %>% filter(MONTO_OCURRIDO < 2000000000)
boxplot(Terremoto_2$MONTO_OCURRIDO,main="boxplot después",col = "lightcyan3",outpch = 21,outbg = "lightcyan3")
Al sacar la Severidad Promedio podemos notar una gran diferencia en eliminar y no eliminar los 3 valores atípicos
Severidad_Prom_Terremoto = mean(Terremoto$MONTO_OCURRIDO)
Severidad_Prom_Terremoto
## [1] 121652189
Severidad_Prom_Terremoto_2 = mean(Terremoto_2$MONTO_OCURRIDO)
Severidad_Prom_Terremoto_2
## [1] 38356515
Una diferencia de $83,295,674 dólares, una suma muy considerable que hay que tomar muy en cuenta
Severidad_Prom_Terremoto- Severidad_Prom_Terremoto_2
## [1] 83295674
En este caso yo me quedaría con la Severidad promedio sin contar los 3 valores atípicos
Cuota de riesgo
Cuota_Riesgo_Terremoto=(Frec_rel_Ramos[2]$Frecuencia[6])*Severidad_Prom_Terremoto_2
Cuota_Riesgo_Terremoto
## [1] 997828.2
Prima de Riesgo
La Prima de Riesgo la calculamos por Ponderada por suma asegurada
Prima_Riesgo <-data_frame("PRIMA_RIESGO"=((Terremoto$SUMA_ASEGURADA/(sum(Terremoto$SUMA_ASEGURADA)))*Siniestralidad_Terremoto)) #Calculo de la Prima de Riesgo
Prima_Riesgo$PRIMA_RIESGO<-round(Prima_Riesgo$PRIMA_RIESGO)
Prima Tarifa
Prima_Tarifa <-data_frame("PRIMA_TARIFA"=(Prima_Riesgo$PRIMA_RIESGO/(1-(Gastos_de_Administracion + Gastos_de_Adquisición + Margen_de_Utilidad)))) #Calculo de la Prima Tarifa
Prima_Tarifa$PRIMA_TARIFA<-round(Prima_Tarifa$PRIMA_TARIFA)
En la siguiente tabla se muestra el número de siniestro, la suma asegurada, el monto ocurrido, la prima de Riesgo, la prima tarifa, el ramo y la Cobertura
datos_Terremoto<-cbind(Terremoto,Prima_Riesgo,Prima_Tarifa)
datos_Terremoto<-select(datos_Terremoto,NUM_SINIESTRO,SUMA_ASEGURADA,MONTO_OCURRIDO,PRIMA_RIESGO,PRIMA_TARIFA,RAMO,COBERTURA)
datos_Terremoto
Ahora vamos a separar nuestros siniestros por COBERTURA dependiendo de cada RAMO, pero primero ocupamos la función as.factor() en la variable COBERTURA para transformarlos a tipo factor y poder graficarlos
Terremoto$COBERTURA<- as.factor(Terremoto$COBERTURA)
Checamos los tipos de COBERTURAS del RAMO Terremoto, los cuales son:
levels(Terremoto$COBERTURA)
## [1] "01-Terremoto" "16-Terrorismo"
El número de siniestros por COBERTURA es:
# Frecuencia absoluta, de acuerdo al número de siniestros encontrados en el Ramo Terremoto
Frec_abs_Cob_Terr<-data.frame(table(Terremoto$COBERTURA))
Frec_abs_Cob_Terr
plot(Terremoto$COBERTURA,col = c("goldenrod","gold4"),main="Frecuencia por Cobertura
del Ramo Terremoto",xlab="Coberturas", ylab="Número de Siniestros")
Frec_rel_Cob_Terr <- data.frame(
"Coberturas" = Frec_abs_Cob_Terr$Var1,
"Frecuencia" = Frec_abs_Cob_Terr$Freq/length(Terremoto$RAMO))
Frec_rel_Cob_Terr
Severidad Promedio
Estos valores lo calcularemos con Terremoto_2 la base donde eliminamos 3 valores atípicos por lo que mencionamos anteriormente
Terr_01 <- filter(Terremoto_2,COBERTURA =="01-Terremoto")
Terrorismo <- filter(Terremoto_2,COBERTURA =="16-Terrorismo")
data.frame("Coberturas_del_Ramo_Terremoto"=Frec_abs_Cob_Terr$Var1,"Severidad"=c(mean(Terr_01$MONTO_OCURRIDO),mean(Terrorismo$MONTO_OCURRIDO)))
La base de datos contaba con 6 Ramos en total, donde la más frecuente es Marítimo y Trasnporte y la menos frecuente Diversos, a pesar de ser la menos frecuente sus montos de ocurrencia son bastantes altos, fue en este Ramo donde se encontraron los valores atípicos más alejados de la media, que como observamos llegan a modificar mucho el promedio de la severidad esto debido a que las cantidades eran bastantes altas por lo que decidimos quitarla en algunos Ramos esto dependiendo el tipo y que tan alejado se encontraba de la media.
Por último, al calcular las primas por Ramo observamos que varios de los Ramos son de alta severidad y poca frecuencia, como el caso del Ramo Incendio el cual en caso de suceder ocasiona perdida total, o los que son ocasionados por fenómenos naturales.