Demo 6 · Chain Ladder, Bornhuetter-Ferguson y Benktander¶
Resumen¶
Demo 6 continúa el recorrido iniciado en Demo 5. Recibe un triángulo acumulado reconciliado, calcula ratios individuales y factores edad-a-edad, permite seleccionar el patrón de desarrollo y estima costo proyectado y pasivo no pagado por periodo de origen. En una segunda etapa incorpora una expectativa previa trazable y compara Chain Ladder con Bornhuetter-Ferguson (BF). Una tercera etapa aplica Benktander con iteraciones configurables y muestra la transición desde el prior hacia Chain Ladder.
La aplicación se ejecuta localmente con Streamlit. Los triángulos y priors cargados no se envían a GitHub ni a servicios externos. El paquete descargable contiene únicamente información agregada y los priors normalizados necesarios para reproducir el cálculo, nunca los archivos fuente.
Alcance determinístico
Este demo no calcula error de predicción, intervalos de confianza, Mack ni bootstrap. Un resultado mecánicamente correcto no demuestra que el patrón histórico o el prior sean representativos.
El residual pagado no es IBNR puro
Con un triángulo agregado exclusivamente pagado, el demo estima el pasivo no pagado total.
No puede separar IBNR puro, RBNS e IBNER sin fecha de reporte, reserva caso o incurrido y
estado de reclamación. El término costo final solo se usa cuando existe una cola explícita;
con cola 1.0 no sustentada, la lectura correcta es acumulado proyectado a edad terminal.
Información que se muestra al cargar un archivo¶
Después de validar el ZIP de Demo 5, r2 presenta tres tablas antes de permitir el cálculo:
- Qué se recibió: dimensión, celdas observadas, medida, moneda, valuación, segmento y trazabilidad.
- Qué falta o sería deseable: reporte/aviso, reserva caso, estado, exposición, segmentación, recuperaciones, reclamaciones grandes, runoff y cambios operativos.
- Qué puede calcularse: proyección determinística y pasivo no pagado total; costo final solo con cola; IBNR puro, RBNS e IBNER quedan marcados como no identificables.
La validación estructural del archivo no implica que su historia sea representativa ni que el resultado sea apto para estados financieros.
1. Objetivos de aprendizaje¶
Al finalizar el ejercicio, el usuario podrá:
- distinguir ratios individuales de factores seleccionados;
- calcular el promedio ponderado por volumen;
- comparar promedio simple, mediana y últimos tres orígenes;
- documentar una selección manual;
- incorporar un factor de cola explícito;
- calcular CDF, madurez, costo proyectado y pasivo no pagado;
- completar las celdas futuras del triángulo acumulado;
- revisar alertas de suficiencia, dispersión y acumulados decrecientes;
- evaluar sensibilidad a diferentes reglas de selección;
- cargar y mapear un prior directo o una exposición por tasa esperada;
- calcular BF aplicando el prior solo a la proporción no desarrollada;
- comparar Chain Ladder y BF y someter el prior a shocks;
- comprobar que una iteración Benktander equivale a BF;
- evaluar la sensibilidad del resultado al número de iteraciones;
- exportar una ejecución reproducible sin detalle fila a fila ni archivos fuente.
2. Flujo entre Demo 5 y Demo 6¶
flowchart TD
A["Datos propios"] --> B["Demo 5: validar y triangular"]
B --> C["ZIP agregado y reconciliado"]
C --> D["Demo 6: seleccionar factores"]
D --> E["Chain Ladder"]
P["Prior directo o exposición × tasa"] --> G["Bornhuetter-Ferguson"]
E --> G
G --> K["Benktander iterativo"]
K --> H["Comparación, sensibilidad y diagnósticos"]
H --> F["ZIP conjunto y auditable"]
Demo 6 verifica que el paquete de Demo 5 contenga:
- triángulo acumulado;
- máscara que distingue observados y futuros;
- configuración y manifiesto;
- estado de reconciliación;
- hash SHA-256 de los datos agregados.
El detalle canónico y el archivo fuente original no son necesarios para ejecutar los métodos. El prior sí debe tener exactamente un registro por periodo de origen y conciliar con los orígenes del triángulo. Las fuentes originales deben permanecer disponibles bajo el gobierno de datos de la entidad para reconciliación, auditoría e investigación de anomalías.
3. Método implementado¶
Para cada enlace entre edades \(j\) y \(j+1\), el factor ponderado por volumen es:
Los pares con denominador no positivo se excluyen y quedan contados en el diagnóstico. Si un enlace no conserva ningún par válido, la ejecución se detiene porque no puede completarse la cadena de desarrollo.
El factor acumulado desde la edad \(k\) hacia la edad terminal, más una cola explícita si existe, es:
Para cada periodo de origen:
La implementación no aplica un piso implícito de cero al pasivo no pagado. Un resultado negativo permanece visible y requiere interpretación, especialmente cuando existen recuperaciones, reversos o factores seleccionados menores que uno.
3.1 Bornhuetter-Ferguson¶
Para cada origen \(i\), la proporción no desarrollada se obtiene a partir del CDF de Chain Ladder:
El prior puede suministrarse directamente como costo final esperado \(U_i^{prior}\) o calcularse como exposición por tasa esperada:
Entonces:
El motor conserva intacto el resultado Chain Ladder que determina la madurez. No utiliza la experiencia emergente para recalibrar silenciosamente el prior.
3.2 Benktander¶
Con \(q_i = 1 - 1/CDF_i\) y prior inicial \(U_i^{(0)}\), el motor aplica:
y valida la forma cerrada equivalente:
La iteración 1 reproduce BF. La iteración 0 se conserva únicamente como escenario de sensibilidad del prior; la interfaz exige al menos una iteración para calcular Benktander.
3.3 Estado de la comparación clásica¶
| Método o control | Estado al preparar v0.6.0 Sprint 2 |
|---|---|
| Chain Ladder | implementado y probado |
| Bornhuetter-Ferguson | implementado y probado |
| Benktander | implementado, reconciliado y probado |
| Cape Cod | especificación técnica lista; implementación pendiente |
| backtesting ampliado | contrato documental listo; implementación pendiente |
| comparación reconciliada de cuatro métodos | contrato documental listo; implementación pendiente |
Cape Cod, el backtesting ampliado y la comparación de cuatro métodos permanecen pendientes. Su especificación documental no debe interpretarse como evidencia de disponibilidad en la interfaz.
4. Métodos de selección¶
| Selección | Definición | Uso educativo |
|---|---|---|
| Ponderado por volumen | suma de acumulados siguientes dividida por suma de actuales | base Chain Ladder tradicional |
| Promedio simple | media de ratios individuales válidos | muestra el peso igual por origen |
| Mediana | mediana de ratios individuales | reduce sensibilidad a extremos |
| Últimos 3 | media simple de los tres ratios más recientes disponibles | muestra sensibilidad a experiencia reciente |
| Manual | factor ingresado para cada enlace | documenta juicio actuarial explícito |
Ninguna regla es automáticamente superior. La selección debe considerar volumen, cambios de operación, mezcla, tendencia, calendario, glosas, recuperaciones y suficiencia por edad.
5. Factor de cola¶
Para archivos del usuario el valor inicial es 1.000000: significa que no se agregó una cola,
no que la última edad sea necesariamente final. La muestra r2 utiliza el factor sintético
35→48 1.0052495821422405, conocido porque el generador conserva runoff completo.
Un valor diferente de uno queda registrado en configuración, manifiesto y diagnósticos.
La cola no debe elegirse únicamente para aumentar o reducir la reserva. Debe sustentarse con historia adicional, curvas de maduración, experiencia externa pertinente o una metodología documentada.
6. Controles implementados¶
El núcleo bloquea:
- triángulos vacíos;
- edades no consecutivas o que no comienzan en
dev_0; - periodos de origen duplicados;
- celdas marcadas como observadas sin valor numérico;
- valores futuros diligenciados en el triángulo de entrada;
- huecos dentro de la historia observada;
- enlaces sin pares válidos;
- factores seleccionados no finitos o no positivos;
- paquetes de Demo 5 incompletos, no reconciliados o con hash inconsistente.
También alerta, sin decidir por el actuario, sobre:
- acumulados decrecientes;
- ratios individuales menores que uno;
- enlaces con pocas observaciones;
- dispersión elevada de ratios;
- periodos cuyo último acumulado es cero;
- concentración del pasivo no pagado en periodos recientes;
- uso de un factor de cola distinto de uno.
Para BF también bloquea:
- orígenes faltantes, adicionales o duplicados en el prior;
- columnas reutilizadas para significados incompatibles;
- exposición, tasa o costo final esperado no numéricos, no finitos o negativos;
- shocks del prior inválidos;
- discrepancias entre la configuración y las columnas suministradas.
Y alerta sobre CDF menores que uno, priors iguales a cero, pasivo BF negativo y diferencias materiales frente a Chain Ladder. Las alertas informan; no sustituyen el juicio actuarial.
Para Benktander también valida la reconciliación exacta entre CL y BF, la equivalencia numérica entre recurrencia y forma cerrada y la finitud de todas las salidas. Alerta sobre CDF menores que uno, pesos fuera del intervalo de cero a uno y pasivo no pagado negativo sin ocultar esos resultados.
7. Ejecución local¶
Desde la raíz del repositorio:
También puede ejecutarse directamente:
La interfaz se abre normalmente en http://localhost:8501.
7.1 Aprender con el ejemplo¶
Selecciona Aprender con el ejemplo mensual. La aplicación utiliza el triángulo sintético de 72 meses de origen y 36 edades 0–35 incluido en Demo 3. La aplicación muestra además la vista tradicional 36×36 y documenta el runoff sintético hasta edad 48.
7.2 Utilizar datos propios¶
- Ejecuta Demo 5 con el archivo local.
- Completa los controles y construye los triángulos.
- Descarga
demo5_resultados_triangulos.zip. - Abre Demo 6.
- Selecciona Usar un paquete ZIP de Demo 5.
- Carga el ZIP sin descomprimirlo.
- Revisa factores, cola y confirmación actuarial.
- Ejecuta Proyectar costo y pasivo no pagado.
7.3 Incorporar el prior y ejecutar BF¶
Después de obtener Chain Ladder:
- selecciona el prior sintético incluido o carga un archivo CSV, TXT, XLSX o Parquet;
- identifica la columna de periodo de origen;
- elige costo final esperado directo o exposición × tasa esperada;
- mapea las columnas correspondientes;
- define los shocks inferior y superior para la sensibilidad;
- confirma que documentaste fuente, fecha, unidad, independencia y ajustes del prior;
- ejecuta Comparar Chain Ladder y Bornhuetter-Ferguson.
El archivo de prior debe tener una fila por origen. Para el modo exposición por tasa, por ejemplo:
| mes_origen | miembros_mes | costo_esperado_por_miembro |
|---|---|---|
| 2021-01 | 80942 | 233275 |
Para el modo directo basta con mes_origen y una columna de costo final esperado, por ejemplo
costo_final_esperado. La interfaz también reconoce ultimate_esperado como alias heredado para
compatibilidad, pero no lo usa como rótulo de salida.
7.4 Ejecutar Benktander¶
Después de ejecutar BF:
- selecciona el número de iteraciones;
- documenta el criterio de selección;
- confirma la trazabilidad del supuesto;
- ejecuta Calcular Benktander;
- revisa la sensibilidad desde la iteración 0 hasta los escenarios configurados.
Dos iteraciones son el valor educativo inicial del demo, no una recomendación universal. La selección debe apoyarse en madurez, estabilidad, credibilidad del prior y backtesting.
7.5 Leer la comparación visual¶
El acumulado observado se presenta como una base común. Chain Ladder, BF y Benktander aparecen en tarjetas paralelas con la misma jerarquía para costo final estimado y pasivo no pagado.
El gráfico principal utiliza dos líneas no apiladas sobre una escala común desde cero, porque son
estimaciones alternativas de la misma magnitud. Un segundo gráfico muestra la diferencia firmada
BF − CL por origen con una referencia en cero. Valores positivos representan mayor pasivo BF y
valores negativos, menor pasivo BF. Como ambos métodos parten del mismo observado, la diferencia de
costo proyectado coincide exactamente con la diferencia de pasivo no pagado.
Después de calcular Benktander, el gráfico principal presenta tres líneas no apiladas en la misma
escala. El gráfico firmado Benktander − CL conserva la referencia en cero y evita comunicar las
estimaciones alternativas como cantidades aditivas.
8. Resultados descargables¶
El primer botón mantiene el ZIP exclusivo de Chain Ladder e incluye:
| Archivo | Contenido |
|---|---|
01_triangulo_acumulado_observado.csv |
valores usados para estimar factores |
02_mascara_observada.csv |
distinción entre observado y futuro |
03_factores_individuales.csv |
ratios por origen y enlace |
04_seleccion_factores.csv |
candidatos, selección y alertas |
05_cdf_total_seleccionado.csv |
factor acumulado y cola seleccionada |
06_triangulo_acumulado_proyectado.csv |
celdas futuras completadas |
07_triangulo_incremental_proyectado.csv |
incrementos observados y proyectados |
08_resultados_por_origen.csv |
madurez, costo y pasivo no pagado |
09_totales.csv |
resumen agregado |
10_diagnosticos.csv |
alertas automáticas |
11_configuracion.json |
método, cola y parámetros |
12_manifiesto.json |
versión, hash y trazabilidad |
13_informacion_recibida.csv |
inventario de la base cargada |
14_informacion_faltante_deseable.csv |
datos adicionales e impacto |
15_alcance_calculable.csv |
resultados posibles y no identificables |
Después de ejecutar BF, el ZIP conjunto contiene los diez resultados agregados de Chain Ladder y añade:
| Archivo | Contenido |
|---|---|
11_prior_bf_normalizado.csv |
prior conciliado usado por el motor |
12_resultados_bf_por_origen.csv |
madurez, prior, costo y pasivo no pagado CL/BF |
13_totales_bf.csv |
totales y diferencia BF frente a CL |
14_sensibilidad_prior_bf.csv |
resultado bajo cada shock configurado |
15_diagnosticos_bf.csv |
controles y alertas BF |
16_configuracion_chain_ladder.json |
supuestos de desarrollo |
17_configuracion_bf.json |
modo, columnas, shocks, moneda y medida |
18_manifiesto.json |
versiones, hashes y trazabilidad de ambas entradas agregadas |
Después de ejecutar Benktander, el mismo paquete añade:
| Archivo | Contenido |
|---|---|
19_resultados_benktander_por_origen.csv |
pesos, costo y pasivo no pagado Benktander |
20_totales_benktander.csv |
totales y diferencias frente a CL y BF |
21_sensibilidad_iteraciones_benktander.csv |
transición por número de iteraciones |
22_diagnosticos_benktander.csv |
reconciliaciones, pesos y alertas |
23_configuracion_benktander.json |
iteraciones, moneda, medida y sensibilidad |
El manifiesto declara explícitamente que no se incluyen los archivos fuente originales.
9. Arquitectura¶
apps/chain_ladder_workshop.py
Interfaz educativa y estado de sesión.
src/health_reserving/chain_ladder.py
Validación, factores, CDF, proyección, resultados y sensibilidad.
src/health_reserving/bornhuetter_ferguson.py
Contrato del prior, cálculo BF, comparación, sensibilidad y diagnósticos.
src/health_reserving/benktander.py
Recurrencia, forma cerrada, sensibilidad, reconciliación y diagnósticos Benktander.
src/health_reserving/export.py
ZIP de Chain Ladder y paquete conjunto generado completamente en memoria.
src/health_reserving/ui_theme.py
Identidad visual compartida con Demo 5.
tests/test_chain_ladder.py
Pruebas numéricas, controles y exportación.
tests/test_bornhuetter_ferguson.py
Fórmulas BF, contratos del prior, sensibilidad y privacidad del paquete conjunto.
tests/test_benktander.py
Equivalencia con BF, formas iterativa y cerrada, sensibilidad, controles y exportación.
tests/test_chain_ladder_app.py
Prueba integral de Chain Ladder, BF y Benktander con el ejemplo mensual.
10. Limitaciones y siguientes pasos¶
Hoja de ruta técnica de v0.6.0
La primera fase documental está definida en los capítulos de diagnósticos y backtesting, Benktander, Cape Cod y comparación clásica. La implementación debe mantener la base reconciliada y los resultados CL/BF existentes.
Demo 6 implementa Chain Ladder, Bornhuetter-Ferguson y Benktander. El siguiente incremento incorporará Cape Cod; después se ampliarán backtesting, diagnósticos y la comparación reconciliada de los cuatro métodos.
Antes de utilizar el resultado profesionalmente se requiere, como mínimo:
- reconciliación independiente contra sistemas y contabilidad;
- evaluación de cambios de mezcla, beneficios, red, tarifas y operación;
- diagnóstico de efectos calendario;
- justificación de exclusiones, factores y cola;
- sensibilidad y backtesting proporcional a la materialidad;
- revisión independiente de la fuente, unidad, vigencia y ajustes del prior;
- cuantificación de incertidumbre;
- revisión y aprobación bajo el gobierno actuarial aplicable.
11. Referencias relacionadas¶
- Factores edad-a-edad
- Método Chain Ladder
- Diagnósticos de Chain Ladder
- Bornhuetter-Ferguson
- Método Benktander
- Método Cape Cod
- Comparación de métodos clásicos
- Chain Ladder de Mack
- Ciclo de vida y rezagos operativos