Los Modelos Lineales Generalizados (GLM) extienden la regresión lineal tradicional para permitir trabajar con variables respuesta que no necesariamente siguen una distribución normal.
En la práctica, muchas variables no son continuas simétricas, por ejemplo:
Los GLM permiten modelar estas situaciones sin forzar un supuesto irreal de normalidad.
Un Modelo Lineal Generalizado consta de tres componentes:
Componente Aleatoria: La variable respuesta \((Y)\) sigue una distribución perteneciente a la familia exponencial (Normal, Binomial, Poisson, Gamma, Inversa Gaussiana, etc.)
Componente Sistemática: Se define un predictor lineal: \[ \eta = \beta_0 + \beta_1 X_1 + \cdots + \beta_k X_k \]
Función de Enlace: Relaciona la media \((\mu = E[Y])\) con el predictor lineal: \[ g(\mu) = \eta \]
La función de enlace permite “ajustar” la relación entre la media de la variable respuesta y los predictores, evitando asumir linealidad estricta.
| Tipo de variable respuesta \((Y)\) | Distribución | Función de enlace | Modelo | Caso práctico |
|---|---|---|---|---|
| Binaria (0/1) | Binomial | Logit | Regresión Logística | Probabilidad de compra de un seguro |
| Conteos | Poisson | Log | Regresión Poisson | Número de reclamos por asegurado |
| Conteos con sobredispersión | Binomial Negativa | Log | NegBin | Reclamos pero con alta variabilidad |
| Continuas positivas | Gamma | Log o Inversa | Gamma GLM | Costo (severidad) de siniestros |
| Proporciones (0 a 1) | Binomial | Logit | Logística | Tasa de cumplimiento (%) |
| Proporciones continuas (0,1) | Beta | Logit o Log-log | Beta Regression | Índices de riesgo, razones financieras |
Nota: La regresión Beta no es técnicamente GLM clásico, pero se utiliza para proporciones continuas. Más adelante la agregamos si se requiere.
Supongamos que queremos modelar la probabilidad de que un cliente compre un seguro ((Compra = 1)) en función de su edad.
\[ \Pr(\text{Compra}=1) = \frac{e^{\beta_0 + \beta_1\cdot \text{Edad}}}{1 + e^{\beta_0 + \beta_1\cdot \text{Edad}}} \]
Si \((\beta_1 > 0)\), a mayor edad, aumenta la probabilidad de compra.
# Ejemplo artificial simple
set.seed(123)
n <- 200
datos <- data.frame(
Edad = runif(n, 18, 70),
Compra = rbinom(n, 1, prob = 0.3)
)
modelo_log <- glm(Compra ~ Edad, data = datos, family = binomial)
summary(modelo_log)
##
## Call:
## glm(formula = Compra ~ Edad, family = binomial, data = datos)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.2174 0.4995 -0.435 0.663
## Edad -0.0144 0.0110 -1.309 0.191
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 244.35 on 199 degrees of freedom
## Residual deviance: 242.61 on 198 degrees of freedom
## AIC: 246.61
##
## Number of Fisher Scoring iterations: 4
Se modela el número esperado de reclamos por asegurado en función de la edad.
set.seed(123)
n <- 200
datos2 <- data.frame(
Edad = runif(n, 18, 70),
Reclamos = rpois(n, lambda = 0.1 * (datos$Edad/30))
)
modelo_pois <- glm(Reclamos ~ Edad, data = datos2, family = poisson)
summary(modelo_pois)
##
## Call:
## glm(formula = Reclamos ~ Edad, family = poisson, data = datos2)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -2.40938 0.64433 -3.739 0.000184 ***
## Edad 0.00978 0.01330 0.735 0.462148
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 115.65 on 199 degrees of freedom
## Residual deviance: 115.11 on 198 degrees of freedom
## AIC: 172.33
##
## Number of Fisher Scoring iterations: 6
Compra ~ Edadexp(coef(modelo_log))
## (Intercept) Edad
## 0.8046331 0.9857049
| Parámetro | OR (Odds Ratio) |
|---|---|
| Intercepto | 0.8046 |
| Edad | 0.9857 |
[ (0.9857 - 1) %]
→ Cada año extra está asociado con una disminución del ~1.43% en la probabilidad de compra.
No hay evidencia estadística suficiente para afirmar que la edad influye en la probabilidad de compra. La diferencia podría ser puro ruido muestral.
Reclamos ~ Edadexp(coef(modelo_pois)) - 1
| Parámetro | % Cambio esperado |
|---|---|
| Intercepto | -91.01% (no se interpreta directamente) |
| Edad | +0.9828% |
No hay evidencia estadística suficiente para afirmar que la edad afecte la frecuencia de reclamos.
| Modelo | Efecto de la Edad | Tamaño del efecto | ¿Significativo? | Conclusión |
|---|---|---|---|---|
| Logístico (Compra) | Probabilidad ↓ | ~1.4% menos por año | ❌ No | No podemos afirmar relación. |
| Poisson (Reclamos) | Frecuencia ↑ | ~1% más por año | ❌ No | No podemos afirmar relación. |
Moral del cuento: No siempre el signo cuenta la historia. La evidencia manda.
Los GLM permiten modelar:
En resumen: Los GLM son el corazón de la tarificación actuarial moderna.
Perfecto. Con esos valores, ahora la interpretación queda numéricamente precisa. Sigo desde la sección del documento, usando exactamente los valores que entregaste, y luego continuamos con el ejemplo asegurador completo + visualizaciones.
Vamos a tarificar, que es donde el actuarial saca músculo .
La Pérdida Esperada por póliza se define como:
\[ EL = \lambda \cdot E[S] \]
set.seed(321)
n <- 500
datos_seg <- data.frame(
Edad = sample(18:75, n, replace = TRUE),
Tipo = sample(c("Básico", "Premium"), n, replace = TRUE, prob = c(0.7, 0.3))
)
# Frecuencia (Poisson)
datos_seg$Reclamos <- rpois(n, lambda = 0.02 + 0.001 * datos_seg$Edad + ifelse(datos_seg$Tipo=="Premium", 0.03, 0))
# Severidad (Gamma)
datos_seg$Costo <- rgamma(n, shape = 2, scale = 1200 + 10*datos_seg$Edad + ifelse(datos_seg$Tipo=="Premium", 2000, 0))
mod_freq <- glm(Reclamos ~ Edad + Tipo, data = datos_seg, family = poisson)
mod_sev <- glm(Costo ~ Edad + Tipo, data = datos_seg, family = Gamma(link="log"))
freq_pred <- predict(mod_freq, type="response")
sev_pred <- predict(mod_sev, type="response")
datos_seg$Prima_Pura <- freq_pred * sev_pred
library(ggplot2)
# Frecuencia
ggplot(datos_seg, aes(Edad, freq_pred)) +
geom_point(alpha=0.3) +
geom_smooth(se=FALSE) +
labs(title="Frecuencia Esperada vs Edad", y="Frecuencia Esperada")
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
# Severidad
ggplot(datos_seg, aes(Edad, sev_pred, color=Tipo)) +
geom_point(alpha=0.3) +
geom_smooth(se=FALSE) +
labs(title="Severidad Esperada vs Edad", y="Severidad Esperada")
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
# Prima Pura
ggplot(datos_seg, aes(Edad, Prima_Pura, color=Tipo)) +
geom_point(alpha=0.3) +
geom_smooth(se=FALSE) +
labs(title="Prima Pura Estimada", y="Prima Pura")
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
Modelo:
\[ \log(E[\text{Reclamos}]) = -2.9115 + 0.00543 \cdot \text{Edad} - 0.08998 \cdot I(\text{Tipo}=\text{Premium}) \]
| Coeficiente | Valor | Interpretación |
|---|---|---|
| Intercepto | -2.9115 | Frecuencia base muy baja (≈ 0.054 reclamos por persona-año) |
| Edad | +0.00543 | La frecuencia aumenta con la edad |
| Tipo = Premium | -0.08998 | Los clientes Premium tienen menor frecuencia que los Básicos (todo lo demás constante) |
\[ e^{0.00543} \approx 1.00545 \]
→ Por cada año adicional de edad, la frecuencia esperada de reclamos aumenta en aproximadamente 0.55%.
\[ e^{-0.08998} \approx 0.914 \]
→ Una póliza Premium tiene ≈ 8.6% menos frecuencia de reclamos que una póliza Básica (todo lo demás igual).
La curva azul creciente en el gráfico muestra exactamente esa pendiente suave positiva:
Modelo:
\[ \log(E[\text{Costo}]) = 7.956 + 0.00371 \cdot \text{Edad} + 0.8093 \cdot I(\text{Tipo}=\text{Premium}) \]
| Coeficiente | Valor | Interpretación |
|---|---|---|
| Intercepto | 7.956 | Nivel base de costos ≈ 2,857 |
| Edad | +0.00371 | La severidad aumenta con la edad |
| Tipo = Premium | +0.8093 | Los siniestros Premium son mucho más costosos |
\[ e^{0.00371} \approx 1.00372 \]
→ Cada año adicional de edad aumenta el costo esperado del siniestro en ≈ 0.37%.
\[ e^{0.8093} \approx 2.246 \]
→ Una póliza Premium tiene siniestros, en promedio, un 125% más costosos (más del doble) que una Básica.
El gráfico lo confirma:
\[ \text{Prima Pura}(i) = E[\text{Reclamos}_i] \times E[\text{Costo}_i] \]
Y eso es lo mismo que muestran tus últimas gráficas:
La frecuencia aumenta ligeramente con la edad (≈ +0.5% por año).
La severidad también aumenta con la edad, pero lo más importante es que para pólizas Premium la severidad es más del doble que en Básico.
Por lo tanto, la prima pura aumenta con la edad y es sustancialmente más alta en el plan Premium.
No porque reclamen más, sino porque cuando reclaman, reclaman en grande.
Una aseguradora desea revisar su estructura de precios diferenciando por Edad, Sexo, Región y Tipo de plan (Básico vs Premium). Se dispone de una muestra simulada de 15.000 pólizas con información mínima para estimar frecuencia de reclamos, severidad y prima pura técnica.
Objetivo del informe: construir un documento técnico (PDF, RMarkdown) que:
Nota: Para tarificación técnica se recomienda estimar EL = λ × E[S] a partir de modelos, en vez de usar la Prima_Pura observada directamente, pues está “censurada” por los ceros de Reclamos.
Un solo PDF, generado con RMarkdown, estilo informe técnico.
Extensión sugerida: 6–10 páginas.
Estructura obligatoria (títulos tal cual Rmarkdown):
Incluyas código en el PDF. El código se revisará como parte del trabajo.
Producto mínimo: una tabla “Ficha de datos” con: N observaciones, % NA por variable, rangos y niveles.
Univariado:
Bivariado clave:
Producto mínimo: 3–5 gráficos bien rotulados y 2 tablas sintéticas con conclusiones de 1–2 líneas cada una.
Correlación numérica: entre Edad, Reclamos (tratado como tasa media o como conteo) y Costo_Esperado.
Relaciones categóricas:
Hallazgos clave: redactar 3–5 bullets que conecten con la intuición actuarial (p. ej., “Premium presenta menor frecuencia pero mayor severidad”).
Producto mínimo: 1 matriz/tabla de correlación + 1 gráfico comparativo por Tipo.
Frecuencia (Poisson)
Severidad (Gamma, enlace log)
Predicciones
Presentar la frecuencia esperada \((\hat\lambda)\) y la severidad esperada \((\widehat{E[S]})\) por combinaciones de interés:
Mostrar una tabla resumen con \((\hat\lambda)\), \((\widehat{E[S]})\) y \(EL = (\hat\lambda \times \widehat{E[S]})\).
Producto mínimo: 2 tablas de coeficientes (o extractos) + 1 tabla de predicciones por segmento + 2–3 frases de interpretación.
Prima pura técnica (EL)
Ranking de riesgo
Propuesta tarifaria (sin gastos)
Producto mínimo: 1 tabla de EL por segmento + 1 gráfico + 1 mini-grilla tarifaria sugerida.
Recomendaciones (3–5 bullets):
Limitaciones (3 bullets):