Introducción a la Modelización de Siniestros
Este documento presenta diversos métodos estadísticos para modelar la frecuencia y severidad de siniestros en el ámbito de los seguros. Se utilizan distribuciones como Poisson, Binomial Negativa, Inversa Gaussiana, Exponencial, Lognormal y Gamma, junto con técnicas como convoluciones y el algoritmo de Panjer. Se empleará el lenguaje de programación R para los cálculos.
1. Cálculo de Media y Varianza (Frecuencia de Siniestros)
Se introducen los datos de frecuencia de siniestros y se calculan la media y varianza muestrales.
valn <- 0:4 # Columna de número de siniestros
valf <- c(2654, 316, 22, 6, 2) # Columna de número de pólizas
medn <- weighted.mean(valn, valf) # Cálculo de la media muestral
varn <- sum((valn - medn)^2 * valf) / sum(valf) # Cálculo de la varianza muestral
2. Modelado de la Frecuencia: Distribución de Poisson
Se ajusta una distribución de Poisson a los datos de frecuencia, utilizando la media muestral como parámetro lambda
.
lambda <- medn
prpois <- dpois(valn, medn) #Probabilidad P(N=k)
prpois <- c(prpois, 1 - sum(prpois)) # Probabilidad acumulada P(N>4)
fteopois <- prpois * sum(valf) # Frecuencias teóricas absolutas
3. Modelado de la Frecuencia: Distribución Binomial Negativa
Se ajusta una distribución Binomial Negativa.
a <- medn^2 / (varn - medn)
b <- (varn - medn) / medn
prnegbin <- dnbinom(valn, a, 1 / (1 + b))
prnegbin <- c(prnegbin, 1 - sum(prnegbin))
fteonegbin <- prnegbin * sum(valf)
4. Modelado de la Frecuencia: Distribución Inversa Gaussiana
Se ajusta una distribución Inversa Gaussiana (requiere el paquete gamlss.dist
).
mu <- medn
beta <- varn / medn - 1
# Instalación del paquete (si es necesario):
# install.packages("gamlss.dist")
library(gamlss.dist)
prpoig <- dPIG(valn, mu, beta / mu)
prpoig <- c(prpoig, 1 - sum(prpoig))
fteopoig <- prpoig * sum(valf)
5. Contraste Chi-Cuadrado (Bondad de Ajuste)
Se utiliza la función conchi
(no definida en el documento original, se asume que es una función personalizada) para realizar pruebas de bondad de ajuste Chi-cuadrado para cada distribución.
conchi(valf, fteopois, 1) # Poisson (1 parámetro)
conchi(valf, fteonegbin, 2) # Binomial Negativa (2 parámetros)
conchi(valf, fteopoig, 2) # Inversa Gaussiana (2 parámetros)
Se elige el modelo con el p-valor más alto y, en caso de empate, la menor estadística D.
Modelado de la Severidad (Cuantía de los Siniestros)
6. Introducción de Datos de Severidad
valx <- c(5, 15, 25, 35, 45) # Puntos medios de los intervalos de cuantía
valf <- c(20, 30, 10, 8, 2, 0) # Frecuencias
7. Modelado de la Severidad: Distribución Exponencial
medx <- weighted.mean(valx, valf)
bexp <- 1 / medx
x <- c(0, 10, 20, 30, 40, 50) #Extremos de los intervalos
praexp <- pexp(x, bexp)
praexp <- c(praexp, 1)
prexp <- diff(praexp)
fteoexp <- prexp * sum(valf)
8. Modelado de la Severidad: Distribución Lognormal
varx <- weighted.mean((valx - medx)^2, valf)
a <- sqrt(varx) / medx
sigma <- sqrt(log(1 + a^2))
mu <- log(medx / sqrt(1 + a^2))
praln <- plnorm(x, mu, sigma)
praln <- c(praln, 1)
prln <- diff(praln)
fteoln <- prln * sum(valf)
9. Modelado de la Severidad: Distribución Gamma
bgamma <- medx / varx
agamma <- medx * bgamma
pragamma <- pgamma(x, agamma, bgamma)
pragamma <- c(pragamma, 1)
prgamma <- diff(pragamma)
fteogamma <- prgamma * sum(valf)
10. Modelado de la Severidad: Distribución Inversa Gaussiana
muig <- medx
betaig <- varx / medx
praig <- pinvgauss(x, muig, muig^2 / betaig) #Requiere el paquete invgauss
praig <- c(praig, 1)
prig <- diff(praig)
fteoig <- prig * sum(valf)
11. Contraste Chi-Cuadrado (Bondad de Ajuste)
Se realizan pruebas Chi-cuadrado para las distribuciones de severidad.
conchi(valf, fteoexp, 1) # Exponencial
conchi(valf, fteoln, 2) # Lognormal
conchi(valf, fteogamma, 2) # Gamma
conchi(valf, fteoig, 2) # Inversa Gaussiana
Cálculo de Probabilidades (Severidad)
Se muestran ejemplos de cálculo de probabilidades utilizando las funciones de distribución acumulada (F) de las distribuciones ajustadas.
- P(X > 2000) = 1 – F(2000)
- P(1000 ≤ X ≤ 3000) = F(3000) – F(1000)
- P(X < E(X)) = F(E(X))
Costo Total por Póliza y Periodo (S = N * X)
12. Convoluciones
Se utiliza el paquete actuar
para calcular la distribución del costo total (S) mediante convoluciones.
pn <- c(0.7, 0.2, 0.1) # Probabilidades de N (frecuencia)
px <- c(0, 0.8, 0.2) # Probabilidades de X (severidad)
library(actuar)
Fs <- aggregateDist("convolution", model.freq = pn, model.sev = px)
Fs(0:4) # Función de distribución de S
c(Fs(0), diff(Fs(0:4))) #Probabilidades P(S=k)
13. Algoritmo de Panjer
Se utiliza el algoritmo de Panjer para calcular la distribución de S cuando N sigue una distribución de Poisson.
px <- c(0, 0.3, 0.7)
Fs <- aggregateDist("recursive", model.freq = "poisson", model.sev = px, lambda = 0.8)
Fs(0:4)
diff(Fs(0:4))
14. Aproximaciones: Normal-Power y Wilson-Hilferty
Se utilizan aproximaciones Normal-Power y Wilson-Hilferty para calcular probabilidades de S, especialmente útil cuando se conocen los momentos de S.
lambda <- 0.95
medx <- 5.375
medx2 <- 45.89
medx3 <- 488.05
meds <- lambda * medx
vars <- lambda * medx2
assims <- (lambda * medx3) / (lambda * medx2)^(3/2)
Fs <- aggregateDist("npower", moments = c(meds, vars, assims))
#Probabilidades con Normal Power
1 - Fs(8) # P(S > 8)
Fs(1) # P(S < 1) -- No disponible con Normal-Power
Fs(1.05 * meds) #P(S<1.05*E[S])
1 - Fs(20) # P(S > 20)
#Probabilidades con Wilson-Hilferty
Fwh <- wh(c(8, 1, 1.05 * meds, 20), meds, vars, assims)
1 - Fwh[1] # P(S > 8)
Fwh[2] # P(S < 1)
Fwh[3]
1 - Fwh[4] # P(S > 20)
Ejemplo Combinado: Poisson y Momentos
Ejemplo donde N es Poisson y se proporcionan datos de X.
valx <- c(25, 75, 125, 175)
px <- c(0.2, 0.5, 0.2, 0.1)
medx <- weighted.mean(valx, px)
medx2 <- weighted.mean(valx^2, px)
lambda <- 1.2
meds <- lambda * medx
vars <- lambda * medx2
#Transformación de X para Panjer
fx <- c(0, 0.2, 0, 0.5, 0, 0.2, 0, 0.1) #Probabilidades de la X transformada
#Convolución
pn <- dpois(0:9, lambda)
Fsc <- aggregateDist("convolution", model.freq = pn, model.sev = fx)
Fsc(4)
#Panjer
Fsr <- aggregateDist("recursive", model.freq = "poisson", model.sev = fx, lambda = lambda)
Fsr(4)
Nota: La función conchi
no está definida en el código original proporcionado. Se asume que es una función personalizada para realizar la prueba de Chi-cuadrado. El código original contiene algunos errores de sintaxis y de uso de funciones, que han sido corregidos en esta versión.