INTRODUCCIÓN

El reaseguro constituye un mecanismo esencial para la estabilidad y solvencia del sector asegurador, al permitir que las compañías de seguros transfieran una parte de los riesgos asumidos a entidades especializadas, generalmente ubicadas en el extranjero, a cambio de una prima. Esta práctica, mejor conocida como reaseguro cedido, posibilita a las aseguradoras locales el poder diversificar su exposición, poder proteger su capital frente a siniestros catastróficos y poder cumplir con los requerimientos regulatorios de solvencia.

Bajo el contexto mexicano, la Comisión Nacional de Seguros y Fianzas (CNSF) reporta que el reaseguro cedido al extranjero representa un flujo financiero significativo, concentrado principalmente en países como Alemania, Estados Unidos, Suiza, Reino Unido y diversos centros de reaseguro extraterritoriales.

Para ello, la transferencia de riesgos no solo elimina la exposición subyacente; sino, la desplaza hacia los reaseguradores internacionales, los cuales deben gestionar carteras agregadas de siniestros provenientes de múltiples cedentes y jurisdicciones. Es por eso que la evaluación de la exposición al riesgo de estas carteras de reaseguro cedido constituye un problema de gran relevancia tanto para las entidades cedentes como para los propios reaseguradores y los organismos supervisores.

Desde la perspectiva actuarial, la Teoría del Riesgo proporciona el marco matemático idóneo para modelar el comportamiento estocástico de los flujos de primas y siniestros que caracterizan la operación de una entidad aseguradora.

En particular, mediante el modelo clásico de Cramér-Lundberg, propuesto inicialmente por Filip Lundberg en 1903 y formalizado posteriormente por Harald Cramér en 1930, este modelo describe “la evolución del superávit (o capital) de una compañía de seguros como un proceso estocástico en tiempo continuo, en el que las primas se recaudan a una tasa constante y las reclamaciones ocurren de acuerdo con un proceso de Poisson compuesto”.

Este modelo nos permite poder estimar indicadores fundamentales como el coeficiente de ajuste de Lundberg y la probabilidad de ruina, la cual esta definida como la probabilidad de que el superávit de la aseguradora alcance valores negativos en un horizonte temporal finito o infinito.

El presente proyecto aplica el modelo de Cramér-Lundberg al análisis del reaseguro cedido al extranjero por país, utilizando una base de datos que comprende las operaciones de reaseguro cedido del total de las operaciones por países durante el período 2015-2024, desagregada por ramo de seguro.

La estructura del documento es la siguiente: en la Sección 3 se presenta una revisión de la literatura relevante sobre Teoría del Riesgo, modelos de ruina y análisis de reaseguro cedido. La Sección 4 contiene el análisis exploratorio de datos (EDA), incluyendo la descripción de variables, estadísticas descriptivas, visualizaciones y tratamiento de valores atípicos y datos faltantes. La Sección 5 describe la metodología y herramientas utilizadas. La Sección 6 detalla la propuesta del modelo, su justificación, supuestos, parámetros y plan de simulaciones. Las Secciones 7 a 9 presentan los resultados, discusión y conclusiones preliminares, respectivamente.

Objetivo

El presente proyecto tiene como objetivo el poder evaluar la exposición al riesgo de las operaciones de reaseguro cedido al extranjero por país, mediante la aplicación del modelo clásico de Cramér-Lundberg, a partir de los datos estadísticos oficiales del sector asegurador mexicano correspondientes al período 2015-2024.

Ademas podemos definir los siguientes objetivos especificos:

  • Realizar un análisis exploratorio de datos (EDA) que caracterice la estructura de primas, siniestros y siniestralidad por país y ramo de operación, identificando patrones, valores atípicos y datos faltantes.

  • Estimar los parámetros fundamentales del modelo de Cramér-Lundberg (tasa de prima, intensidad de reclamaciones y distribución de montos) para los principales países receptores de reaseguro cedido.

  • Calcular la probabilidad de ruina y el coeficiente de ajuste de Lundberg para cada cartera-país, como medida del riesgo de insolvencia del reasegurador.

  • Proponer un plan de simulaciones Monte Carlo que permita, en una segunda fase del proyecto, contrastar los resultados teóricos con escenarios estocásticos de siniestralidad

El estudio se limita al análisis de los datos disponibles en la base de datos de Reaseguro Cedido al Extranjero del Total de las Operaciones por Países, abarcando el decenio 2015-2024.

REVISION LITERARIA

FASE 1

El análisis exploratorio que se presenta en esta sección se construye sobre una base de datos ampliada respecto a la que se considero inicialmente. Esto debido a que al realizar parte de las simulaciones iniciales, se identificó la necesidad de incorporar dos nuevas fuentes de información adicionales que su tarea es permitir superar las limitaciones de trabajar exclusivamente con las cifras de reaseguro cedido.

La primera de ellas es el archivo de Reaseguro Tomado del Extranjero (Reaseguro_tomado_extranjero_paises.csv), la cual registra las primas y siniestros que las instituciones mexicanas aceptan a su vez de otros mercados. La segunda corresponde a las Estadísticas de Frecuencia y Severidad del seguro directo mexicano contenidas en la base de la (Informacion_estadistica_FES.csv).

La inclusión de estas nuevas fuentes de datos responde a dos necesidades concretas del proyecto.

En primer lugar, la exposición real de que una cartera de reaseguro no está determinada únicamente por los riesgos que se ceden al extranjero, sino tambien por la diferencia entre lo cedido y lo tomado, es decir, por la posición neta.

El limitar el análisis unicamente a los flujos de salida sin considerar los de entrada conduciría a una sobreestimación del riesgo, ya que se ignorarían los ingresos y la capacidad de absorción de siniestros que provienen del reaseguro aceptado. Por ello, para cada país y año se construyen las variables netas:

\(Ingreso \; Neto = Ingreso \; Cedido − Ingreso \;Tomado\)

\(Egreso \; Neto = Egreso \; Cedido − Egreso \; Tomado\)

Este procedimiento permitira alinear el trabajo con las prácticas recomendadas por los estándares internacionales de medición de exposición neta (Solvencia II, IAIS, 2019) y permite que los estadísticos descriptivos, los gráficos y, posteriormente, los parámetros del modelo de ruina, reflejen la realidad económica de cada jurisdicción.

En segundo término, la estimación de la frecuencia anual de siniestros \((λ)\) el cual es el parámetro central del modelo exacto de Cramér‑Lundberg, que se obtenía originalmente contando los años con siniestros positivos en la base neta, esta presentaba una elevada incertidumbre debido al reducido número de observaciones temporales en el perido (2015‑2024).

Para mitigar esta limitación se recurrió a la base de la Estadísticas de Frecuencia y Severidad, la cual contiene las frecuencias de siniestralidad observadas directamente en los ramos del seguro directo mexicano. A partir de esta base podremos calcular una frecuencia esperada para cada país como una media ponderada de las frecuencias por operación - ramo, utilizando como ponderación las primas netas correspondientes:

\[ \lambda_{est} = \dfrac{\sum _{ramos}Frecuencia_{ramo} \cdot Primas_{pais,ramo}}{\sum _{ramos}Primas_{pais,ramo}} \]

Este nuevo enfoque tendra tres ventajas principales:

  • Estabilidad: Debido a que las frecuencias del FES se calculan sobre millones de pólizas y no sobre diez observaciones anuales.

  • Coherencia: Ya que vincula el riesgo de ruina con la siniestralidad real del mercado directo mexicano

  • Reducción de la incertidumbre: Esto para evitar que países con pocos siniestros históricos reciban una estimación de \(\lambda\) igual a cero, lo que anularía artificialmente su probabilidad de ruina.

Esta estrategia es congruente con las directrices de la Nota Técnica de Reaseguro emitida por la CNSF (2023), que recomienda sustentar los parámetros en información estadística del mercado cuando los datos propios son insuficientes.

Analisis Exploratorio de Datos

Lo primero que tenemos que hacer es cargar los paquetes que vamos a utilizar para el análisis. En este caso vamos a usar:

if (!require("pacman")) install.packages("pacman")
## Cargando paquete requerido: pacman
pacman::p_load(
  tidyverse, lubridate, skimr, corrplot, GGally, psych, moments, MASS,
  FactoMineR, factoextra, broom, scales, plotly, treemapify, outliers,
  gmodels, Hmisc, ggthemes, hexbin, ggpubr, ggridges, RColorBrewer,
  ADGofTest, fitdistrplus, goftest, gridExtra, statmod, patchwork, gt,
  patchwork, here
)
options(scipen = 999)

los cuales mas adelante en el CAPITULO 5: Metodologia, explicaremos mejor que uso tiene cada libreria.

Asi mismo definimos la ruta donde se encuentran nuestras bases de datos y ademas una ruta donde se guardaran nuestras imagenes y algunas tablas importantes que estaremos generando

# Directorio de trabajo
data_path <- here("Base de datos")

# Guardar imagenes
ruta <- here("1. COMPUTO CIENTIFICO", "Graficas 4")
dir.create(ruta, recursive = TRUE, showWarnings = FALSE)

De la pagina oficial de la COMISION NACIONAL DE SEGUROS Y FIANZAS (CNSF) descargamos las siguientes bases de datos, y realizamos su carga

  • Reaseguro_Cedido_al_Extranjero_del_Total_de_las_Operaciones_por_Paises; la cual registra las primas y siniestros que Mexico cede al extranjero a su vez de otros mercados, siendo esta nuestra fuente de datos principal para elaborar nuestro trabajo.
base_RC <- read.csv(
  file.path(data_path, "Reaseguro Cedido al Extranjero del Total de las Operaciones por Paises.csv"),
  header = TRUE,
  stringsAsFactors = FALSE,
  fileEncoding = "UTF-8"
)
  • Reaseguro_tomado_extranjero_paises; la cual registra las primas y siniestros que las instituciones mexicanas aceptan a su vez de otros mercados
base_RT <- read.csv(
  file.path(data_path, "Reaseguro_tomado_extranjero_paises.csv"),
  header = TRUE, 
  stringsAsFactors = FALSE
)
  • Informacion_estadistica; correspondiente a las Estadísticas de Frecuencia y Severidad del seguro directo mexicano.
base_FS <- read.csv(
  file.path(data_path, "Informacion_estadistica.csv"),
  header = TRUE, 
  stringsAsFactors = FALSE
)

Depuración y construcción de la base neta

La base de datos de Reaseguro_Cedido_al_Extranjero_del_Total_de_las_Operaciones_por_Paises, tenemos

base1 <- base_RC %>%
  mutate(
    ANO = as.integer(ANO),
    PAISES = as.factor(PAISES),
    OPERACION_RAMO = as.factor(OPERACION_RAMO)
  )

# Variables derivadas del cedido (se conservan para referencia)
base1 <- base1 %>%
  mutate(
    INGRESO_NETO_CED = PRIMAS - COMISIONES - PARTICIPACION_UTILIDADES - 
      COSTO_COBERTURA_REASEGURO_NO_PROPORCIONAL,
    EGRESO_NETO_CED = SINIESTROS_VENCIMIENTOS + GASTOS_AJUSTE_RECUPERADOS -
      SINIESTROS_RECUPERADOS_COBERTURA_REASEGURO_NO_PROPORCIONAL -
      PARTICIPACION_SALVAMENTOS - INTERESES_RESERVAS_RETENIDAS,
    GANANCIA_NETA_CED = INGRESO_NETO_CED - EGRESO_NETO_CED,
    LOSS_RATIO = if_else(PRIMAS > 0, SINIESTROS_VENCIMIENTOS / PRIMAS, NA_real_)
  )

glimpse(base1)
## Rows: 3,866
## Columns: 16
## $ ANO                                                        <int> 2015, 2015,…
## $ PAISES                                                     <fct> Alemania, B…
## $ OPERACION_RAMO                                             <fct> Accidentes …
## $ PRIMAS                                                     <dbl> 60274706, -…
## $ COMISIONES                                                 <dbl> 16084279, 2…
## $ PARTICIPACION_UTILIDADES                                   <int> -421197, 0,…
## $ SINIESTROS_VENCIMIENTOS                                    <dbl> 3073198, 10…
## $ GASTOS_AJUSTE_RECUPERADOS                                  <int> 322, 125175…
## $ SINIESTROS_RECUPERADOS_COBERTURA_REASEGURO_NO_PROPORCIONAL <dbl> 0, 0, 0, 0,…
## $ PARTICIPACION_SALVAMENTOS                                  <int> 0, -124, 0,…
## $ INTERESES_RESERVAS_RETENIDAS                               <int> 5961, 0, 0,…
## $ COSTO_COBERTURA_REASEGURO_NO_PROPORCIONAL                  <int> 4296318, 14…
## $ INGRESO_NETO_CED                                           <dbl> 40315306, -…
## $ EGRESO_NETO_CED                                            <dbl> 3067559, 11…
## $ GANANCIA_NETA_CED                                          <dbl> 37247747, -…
## $ LOSS_RATIO                                                 <dbl> 0.05098653,…

Tenemos un total de 3 866 registros y 16 variables, donde tenemos un total de 14 variables numericas, donde 8 son tipo (dbl) y 6 tipo (int), mientras el resto de las variables son caracteres (fct).

Nuestra segunda base de datos Reaseguro_tomado_extranjero_paises, tenemos

base2 <- base_RT %>%
  mutate(
    ANO = as.integer(anio),
    PAISES = as.factor(paises),
    OPERACION_RAMO = as.factor(operacion_ramo)
  ) %>%
  select(-anio, -paises, -operacion_ramo) %>%
  mutate(
    INGRESO_NETO_TOM = primas - comision_corretaje - participacion_utilidades,
    EGRESO_NETO_TOM  = siniestros_vencimientos + gastos_ajuste -
      salvamentos - intereses_reserva_retenida
  ) %>%
  rename(PRIMAS_TOM = primas, 
         SINIESTROS_TOM = siniestros_vencimientos)

# Agregado anual por país (tomado)
RT_ag <- base2 %>%
  group_by(ANO, PAISES) %>%
  summarise(
    Ingreso_Tom = sum(INGRESO_NETO_TOM, na.rm = TRUE),
    Egreso_Tom  = sum(EGRESO_NETO_TOM, na.rm = TRUE),
    .groups = "drop"
  )
glimpse(base2)
## Rows: 3,638
## Columns: 12
## $ PRIMAS_TOM                 <int> 764412, 87176, 264721, 30524, 102574, 40369…
## $ salvamentos                <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ intereses_reserva_retenida <int> 0, 0, 0, 0, 0, 0, 0, 967, 0, 0, 663, 0, 0, …
## $ comision_corretaje         <int> 321185, 28308, -26472, 3059, 32007, 518001,…
## $ participacion_utilidades   <int> 0, 0, 0, 0, 0, 127867, 0, 0, 323651, 869, 2…
## $ SINIESTROS_TOM             <dbl> 887000, 36956, 0, 0, 2941645, 204407, 0, 25…
## $ gastos_ajuste              <int> 0, 0, -960466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ ANO                        <int> 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2…
## $ PAISES                     <fct> Argentina, Bahamas, Bermudas, Bolivia, Core…
## $ OPERACION_RAMO             <fct> Accidentes Personales, Accidentes Personale…
## $ INGRESO_NETO_TOM           <int> 443227, 58868, 291193, 27465, 70567, 339111…
## $ EGRESO_NETO_TOM            <dbl> 887000, 36956, -960466, 0, 2941645, 204407,…

Tenemos un total de 3 638 registros y 12 variables, donde tenemos un total de 10 variables numericas, donde 2 son tipo (dbl) y 8 tipo (int), mientras el resto de las variables son caracteres (fct).

Finalmente de nuestra base de Informacion_estadistica, tenemos las siguientes observaciones

base_FS <- base_FS %>%
  mutate(across(
    c(numero_polizas_vigor, 
      numero_certificados_vigor,
      suma_asegurada, 
      prima_emitida,
      numero_siniestros, 
      costo_siniestros),
    ~ as.numeric(str_remove_all(., ","))
  ))

base_FS_pol <- base_FS %>% 
  filter(tipo == "Polizas")

# Parámetros de frecuencia y severidad por ramo (con filtros de estabilidad)
base3 <- base_FS_pol %>%
  mutate(
    frecuencia = numero_siniestros / numero_polizas_vigor,
    severidad_media = if_else(numero_siniestros > 50,
                              costo_siniestros / numero_siniestros,
                              NA_real_)
  ) %>%
  filter(numero_polizas_vigor > 1000) %>%
  select(ANO = anio, OPERACION_RAMO = ramo_tipo_riesgo,
         frecuencia, severidad_media)
glimpse(base3)
## Rows: 35
## Columns: 4
## $ ANO             <int> 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, …
## $ OPERACION_RAMO  <chr> "Accidentes Personales", "Agricola y de Animales", "Au…
## $ frecuencia      <dbl> 0.02034019, 1.39050597, 0.30748877, 0.04351241, 1.6911…
## $ severidad_media <dbl> 4992.034, 68135.668, 14002.652, 11739473.415, 361950.2…

Tenemos solo 35 filas correspondientes a frecuencias y severidades por ramo, filtradas con criterios de estabilidad (pólizas, $>$1 000 pólizas en vigor, $>$50 siniestros para severidad) y 4 variables, donde tenemos un total de 3 variables numericas, donde 2 son tipo (dbl) y 1 tipo (int), mientras el resto de las variables son caracteres (chr).

Incorporacion de Posicion Neta

Ademas de la fuente de datos correspondiente al reaseguro cedido y tomado realizamos el calculo de posición neta, para creal nuestra fuente de datos final agregamos el reaseguro cedido y el reaseguro tomado tomando como variables madre a la variable pais y año.

A su vez las variables netas correspondientes a primas y siniestros, se calularon mediante \[ Prima=Ingreso_Ced - Ingreso_Tom Siniestro=Egreso_ced - Egreso_Tom \] Realizar estas incorporaciones de variables correspondientes a México y el resto del mundo nos permiten ver el efecto de la retrocesión

# Agregado del cedido por país y año
cedido_ag <- base1 %>%
  group_by(ANO, PAISES) %>%
  summarise(
    Ingreso_Ced = sum(INGRESO_NETO_CED, na.rm = TRUE),
    Egreso_Ced  = sum(EGRESO_NETO_CED, na.rm = TRUE),
    .groups = "drop"
  )

# Unión con tomado → posición neta
base_neta <- cedido_ag %>%
  left_join(RT_ag, by = c("ANO", "PAISES")) %>%
  mutate(
    Ingreso_Tom = replace_na(Ingreso_Tom, 0),
    Egreso_Tom  = replace_na(Egreso_Tom, 0),
    INGRESO_NETO = Ingreso_Ced - Ingreso_Tom,
    EGRESO_NETO  = Egreso_Ced - Egreso_Tom,
    GANANCIA_NETA = INGRESO_NETO - EGRESO_NETO
  )

# Unir los valores netos a cada registro original
base_neta_detallada <- base1 %>%
  left_join(base_neta %>% select(ANO, 
                                 PAISES, INGRESO_NETO, 
                                 EGRESO_NETO, 
                                 GANANCIA_NETA),
            by = c("ANO", "PAISES"))

# A partir de aquí 'base' y 'base_valida' usan las variables netas
base1 <- base_neta_detallada

Filtrado de datos validos

En esta parte realizamos filtros de datos donde se requerian que fueran mayores a 0 y no existieran valores negativos, debido a que en base_neta_detallada, tenemos valores igual a 0 o negativos, esto podemos decir que son debido a posibles ajustes contables o financieros de quien realizo el levantamiento de datos.

base_valida <- base1 %>%
  filter(PRIMAS > 0, SINIESTROS_VENCIMIENTOS >= 0,
         INGRESO_NETO > 0, 
         EGRESO_NETO >= 0, 
         is.finite(GANANCIA_NETA))

cat("\n========== VALORES FALTANTES ==========\n")
## 
## ========== VALORES FALTANTES ==========
faltantes <- colSums(is.na(base1))
tabla_falt <- data.frame(Variable = names(faltantes),
                         Faltantes = faltantes,
                         Porcentaje = round(100 * faltantes / nrow(base1), 2))
print(tabla_falt[order(-tabla_falt$Faltantes), ])
##                                                                                                              Variable
## LOSS_RATIO                                                                                                 LOSS_RATIO
## ANO                                                                                                               ANO
## PAISES                                                                                                         PAISES
## OPERACION_RAMO                                                                                         OPERACION_RAMO
## PRIMAS                                                                                                         PRIMAS
## COMISIONES                                                                                                 COMISIONES
## PARTICIPACION_UTILIDADES                                                                     PARTICIPACION_UTILIDADES
## SINIESTROS_VENCIMIENTOS                                                                       SINIESTROS_VENCIMIENTOS
## GASTOS_AJUSTE_RECUPERADOS                                                                   GASTOS_AJUSTE_RECUPERADOS
## SINIESTROS_RECUPERADOS_COBERTURA_REASEGURO_NO_PROPORCIONAL SINIESTROS_RECUPERADOS_COBERTURA_REASEGURO_NO_PROPORCIONAL
## PARTICIPACION_SALVAMENTOS                                                                   PARTICIPACION_SALVAMENTOS
## INTERESES_RESERVAS_RETENIDAS                                                             INTERESES_RESERVAS_RETENIDAS
## COSTO_COBERTURA_REASEGURO_NO_PROPORCIONAL                                   COSTO_COBERTURA_REASEGURO_NO_PROPORCIONAL
## INGRESO_NETO_CED                                                                                     INGRESO_NETO_CED
## EGRESO_NETO_CED                                                                                       EGRESO_NETO_CED
## GANANCIA_NETA_CED                                                                                   GANANCIA_NETA_CED
## INGRESO_NETO                                                                                             INGRESO_NETO
## EGRESO_NETO                                                                                               EGRESO_NETO
## GANANCIA_NETA                                                                                           GANANCIA_NETA
##                                                            Faltantes Porcentaje
## LOSS_RATIO                                                       611       15.8
## ANO                                                                0        0.0
## PAISES                                                             0        0.0
## OPERACION_RAMO                                                     0        0.0
## PRIMAS                                                             0        0.0
## COMISIONES                                                         0        0.0
## PARTICIPACION_UTILIDADES                                           0        0.0
## SINIESTROS_VENCIMIENTOS                                            0        0.0
## GASTOS_AJUSTE_RECUPERADOS                                          0        0.0
## SINIESTROS_RECUPERADOS_COBERTURA_REASEGURO_NO_PROPORCIONAL         0        0.0
## PARTICIPACION_SALVAMENTOS                                          0        0.0
## INTERESES_RESERVAS_RETENIDAS                                       0        0.0
## COSTO_COBERTURA_REASEGURO_NO_PROPORCIONAL                          0        0.0
## INGRESO_NETO_CED                                                   0        0.0
## EGRESO_NETO_CED                                                    0        0.0
## GANANCIA_NETA_CED                                                  0        0.0
## INGRESO_NETO                                                       0        0.0
## EGRESO_NETO                                                        0        0.0
## GANANCIA_NETA                                                      0        0.0

Para esto aplicamos los siguientes criterios:

  • Primas > 0, Siniestros ≥ 0, Ingreso Neto > 0, Egreso Neto ≥ 0, Ganancia Neta finita.

  • La muestra se redujo de 3 866 a 2 124 observaciones (45% de reducción).

  • Se eliminaron registros con primas nulas/negativas, siniestros negativos (recuperaciones netas excesivas) y combinaciones que generaban ingreso neto no positivo.

  • Valores faltantes (principalmente LOSS_RATIO, 15.8% de los originales) se imputaron con 0 (práctica habitual en seguros para siniestralidad nula).

# Imputar NA restantes con 0 (práctica común en seguros)
base_valida[is.na(base_valida)] <- 0

# Variables en millones para visualización
base_valida <- base_valida %>%
  mutate(
    PRIMAS_M       = PRIMAS / 1e6,
    SINIESTROS_VENCIMIENTOS_M = SINIESTROS_VENCIMIENTOS / 1e6,
    INGRESO_NETO_M  = INGRESO_NETO / 1e6,
    EGRESO_NETO_M   = EGRESO_NETO / 1e6,
    GANANCIA_NETA_M = GANANCIA_NETA / 1e6
  )

cat("\n========== RESUMEN VARIABLES NUMÉRICAS ==========\n")
## 
## ========== RESUMEN VARIABLES NUMÉRICAS ==========
base_valida %>%
  select(PRIMAS, COMISIONES, SINIESTROS_VENCIMIENTOS, 
         INGRESO_NETO, EGRESO_NETO, GANANCIA_NETA, LOSS_RATIO) %>%
  skim()
Data summary
Name Piped data
Number of rows 2124
Number of columns 7
_______________________
Column type frequency:
numeric 7
________________________
Group variables None

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
PRIMAS 0 1 386459922.38 819788802.74 10 3793127.50 49949523.50 339289566.75 6884061378.0 ▇▁▁▁▁
COMISIONES 0 1 60798501.84 157340579.64 -112262841 267886.75 6344854.00 58168566.50 2376609141.0 ▇▁▁▁▁
SINIESTROS_VENCIMIENTOS 0 1 208852897.03 647332944.38 0 193972.00 15556951.00 155368061.25 13441795911.0 ▇▁▁▁▁
INGRESO_NETO 0 1 4151486204.73 5900884339.13 180 154151215.00 909401179.00 6730780078.00 25271569474.0 ▇▂▁▁▁
EGRESO_NETO 0 1 2432202751.53 3476856169.81 0 63037309.00 589109963.00 3865953485.00 17895890876.0 ▇▂▁▁▁
GANANCIA_NETA 0 1 1719283453.20 3666093586.56 -9053449242 2328533.00 203886715.00 2100725198.00 17215348906.0 ▁▇▂▁▁
LOSS_RATIO 0 1 8.72 220.17 0 0.03 0.28 0.68 9459.4 ▇▁▁▁▁
# Tabla numérica resumida
resumen_num <- base_valida %>%
  select(PRIMAS, COMISIONES, SINIESTROS_VENCIMIENTOS, 
         INGRESO_NETO, EGRESO_NETO, GANANCIA_NETA, LOSS_RATIO) %>%
  pivot_longer(everything(), 
               names_to = "Variable", 
               values_to = "Valor") %>%
  group_by(Variable) %>%
  summarise(
    n = n(), 
    Media = mean(Valor, na.rm = TRUE),
    Mediana = median(Valor, na.rm = TRUE), 
    Desv_Std = sd(Valor, na.rm = TRUE),
    Min = min(Valor, na.rm = TRUE), 
    Max = max(Valor, na.rm = TRUE)
  ) %>%
  mutate(across(where(is.numeric), ~ round(., 2)))

print(resumen_num)
## # A tibble: 7 × 7
##   Variable                    n         Media   Mediana Desv_Std     Min     Max
##   <chr>                   <dbl>         <dbl>     <dbl>    <dbl>   <dbl>   <dbl>
## 1 COMISIONES               2124   60798502.     6.34e+6   1.57e8 -1.12e8 2.38e 9
## 2 EGRESO_NETO              2124 2432202752.     5.89e+8   3.48e9  0      1.79e10
## 3 GANANCIA_NETA            2124 1719283453.     2.04e+8   3.67e9 -9.05e9 1.72e10
## 4 INGRESO_NETO             2124 4151486205.     9.09e+8   5.90e9  1.8 e2 2.53e10
## 5 LOSS_RATIO               2124          8.72   2.8 e-1   2.20e2  0      9.46e 3
## 6 PRIMAS                   2124  386459922.     4.99e+7   8.20e8  1   e1 6.88e 9
## 7 SINIESTROS_VENCIMIENTOS  2124  208852897.     1.56e+7   6.47e8  0      1.34e10

Ademas, se crearon versiones escaladas para mejorar la legibilidad de gráficos y resúmenes, donde se trabajaron valores en millones de pesos en lugar de tomar los valores originales.

cat("\nObservaciones originales (cedido):", 
    nrow(base_RC))
## 
## Observaciones originales (cedido): 3866
cat("\nObservaciones después de neteo y filtro:", 
    nrow(base_valida), "\n")
## 
## Observaciones después de neteo y filtro: 2124

Metodologia

FASE 2

Propuesta del modelo

Descripción del modelo propuesto

Justificación de elección del modelo

Supuestos del modelo

Parámetros del modelo y su estimación

Plan de simulaciones

Resultados

Discusión

CONCLUSIONES

REFERENCIAS