Cálculo y Distribución de Siniestros: Modelos Estadísticos en Seguros

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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.