¿Se pueden verificar estas cifras? Sí.
Los datos son públicos, el código está abierto y los métodos son los mismos que usan oficinas de estadística y de salud pública. Cualquier persona puede reproducir cada número.
1. Los datos: públicos y verificables
La fuente es SINADEF, el registro de certificados de defunción del Ministerio de Salud. No usamos notas de prensa, ni de TV Perú ni de la PNP. Son otras fuentes, que miden cosas distintas: la PNP registra denuncias; SINADEF registra muertes certificadas por un médico.
El MINSA publica el archivo completo todos los días. Lo descargamos automáticamente y guardamos su huella digital (SHA-256): desde el 8 de agosto registramos 63 publicaciones, y el archivo pasó de 1.555.123 a 1.586.183 registros.
Compruébalo tú. Descarga el archivo de Datos Abiertos del MINSA y corre esto en Python:
import duckdb
duckdb.sql("""
SELECT COUNT(*) FROM 'SINADEF_DATOS_ABIERTOS.csv'
WHERE MUERTE_VIOLENTA = 'HOMICIDIO' AND ANIO = '2026' AND MES = '09'
""") # → 138, con la publicación del 11-oct-2026
Huella SHA-256 de esa publicación: fd61c816369ac131ba3bfa3a935e6ca96dce9113bbee78bf14f86da6e7b3703c
2. “NO SE CONOCE” no es nuevo: pasa desde siempre
Una de cada cuatro muertes violentas del Perú queda sin tipo. El gráfico de control muestra ese porcentaje mes a mes desde 2017. La franja marca el rango esperable por azar (±3 desviaciones estándar): los puntos dentro de ella son variación normal; los de fuera son un cambio real.
- Setiembre 2026 está dentro del rango normal y por debajo del promedio: 22,0% contra 24,8% histórico.
- En 117 meses solo hubo un periodo anómalo: octubre 2022 a febrero 2023, con entre 35% y 42% sin tipificar.
- Una regresión logística sobre los 117 meses da una tendencia levemente a la baja: el registro mejora, no empeora.
El caso de Caraz (un homicidio cuyo certificado no menciona el disparo) tampoco es nuevo. Todos los años hay muertes registradas como “NO SE CONOCE” cuyo propio certificado nombra el arma:
| Año | % sin tipificar | Sin tipificar con arma en el certificado |
|---|---|---|
| 2017 | 25,2% | 100 |
| 2018 | 26,0% | 143 |
| 2019 | 24,8% | 136 |
| 2020 | 23,9% | 157 |
| 2021 | 22,9% | 171 |
| 2022 | 27,4% | 218 |
| 2023 | 29,2% | 211 |
| 2024 | 23,7% | 250 |
| 2025 | 23,1% | 233 |
| 2026* | 22,4% | 157 |
* 2026: enero a setiembre. “Arma en el certificado”: el texto de causas menciona proyectil, arma de fuego, PAF, arma blanca, estrangulamiento o apuñalamiento. Es una búsqueda de texto, no un modelo.
3. La proyección: estadística clásica, con sus errores a la vista
- Se prueban 46 configuraciones de seis familias de modelos: SARIMA, ETS, Theta, Prophet, XGBoost y un modelo ingenuo estacional como referencia mínima.
- Cada una se evalúa en 6 ventanas de 3 meses hacia atrás (rolling origin, el esquema de las competencias internacionales de pronóstico M3/M4). Gana la de menor error.
- El rango del 80% sale de los errores que el modelo ganador cometió en 24 ventanas de prueba, no de un supuesto teórico.
¿Funciona? Corrimos el sistema completo como si hubiera estado en producción desde setiembre 2024: cada mes proyecta solo con los datos que existían antes. En 25 meses, su error promedio fue 10,0%, contra 15,3% de repetir el mismo mes del año anterior.
Lo que esta prueba nos hizo corregir. Con el método original, el valor real cayó dentro del rango del 80% solo en 13 de 25 meses: el rango era demasiado angosto y arrastraba el sesgo de los años en que los homicidios subían. Desde la proyección de octubre 2026 se estima con 24 ventanas y según el tamaño del error, no su dirección. Con ese cambio, el valor real cae dentro del rango en 20 de 25 meses (80%). Las proyecciones ya publicadas, como la de setiembre (184, rango 166–193), se mantienen tal como se hicieron. Setiembre 2026 queda fuera del rango incluso con el método corregido: es el mayor error de los 25 meses.
4. Dónde se usan estos métodos
| Método | Referencia | Quién lo usa |
|---|---|---|
| SARIMA | Box y Jenkins, 1970 | Base de X-13ARIMA-SEATS (Oficina del Censo de EE.UU.) y de TRAMO-SEATS, que Eurostat recomienda a las oficinas de estadística europeas |
| ETS y Theta | Hyndman et al., 2002 · Assimakopoulos y Nikolopoulos, 2000 | Referencias de las competencias M3 y M4; Theta fue el mejor método de M3 |
| Prophet · XGBoost | Taylor y Letham, 2018 · Chen y Guestrin, 2016 | Prophet fue creado por Meta y es de código abierto; XGBoost es estándar en aprendizaje automático |
| GLM binomial negativo con estacionalidad (cierre del mes) | Farrington et al., 1996 · Noufaily et al., 2013 | Vigilancia de salud pública en el Reino Unido; el CDC de EE.UU. lo usó para el exceso de muertes por COVID-19. EuroMOMO usa un modelo de la misma familia para la mortalidad esperada en Europa |
| Corrección del retraso de registro | Höhle y an der Heiden, 2014 | Instituto Robert Koch (Alemania), en sus estimaciones de COVID-19 |
5. El código
Son 26 archivos y 7.105 líneas: la descarga, la API, los modelos, los análisis y la app. Descargar todo (.zip)
Ver archivo por archivo
Datos
sinadef_etl.pyDescarga diaria del CSV del MINSA, huella SHA-256 y recarga atómica de la base.
Backend (API)
main.pyAPI FastAPI: todas las consultas que alimentan la app, en SQL legible.forecast.pyMotor de proyección mensual: 46 configuraciones, rolling origin, bandas empíricas.nowcast.pyCierre del mes: GLM binomial negativo diario y corrección del retraso de registro.jobs.pyCola de trabajos de proyección.store.pyRepositorio de proyecciones: se invalidan cuando cambian los datos.run_api.shArranque del servicio.
Análisis
analisis/features_v2.pyVariables del clasificador a partir de las columnas de SINADEF.analisis/entrenar_modelo.pyClasificador binario homicidio / no homicidio, validación cruzada y temporal.analisis/multiclase.pyClasificador de los cinco tipos de muerte violenta.analisis/auditoria_mensual.pyAuditoría mes a mes: entrena con el pasado y clasifica el mes sin ver etiquetas.analisis/backtest_proyeccion.pyValidación walk-forward del motor de proyección.analisis/calibracion_bandas.pyComparación de formas de construir el rango del 80% con los errores de la validación.analisis/clasificador_nsc.pyPrimera versión del clasificador de casos sin tipificar.
Frontend (React)
frontend/src/App.tsxEstructura de la app y pestañas.frontend/src/Dashboard.tsxAnálisis histórico.frontend/src/Proyeccion.tsxPestaña de proyecciones.frontend/src/Nowcast.tsxPestaña de cierre del mes.frontend/src/Gestion.tsxGestión territorial.frontend/src/charts.tsxComponentes de gráficos.frontend/src/tendencia.tsCálculo de tendencia.frontend/src/api.tsCliente de la API.frontend/src/main.tsxPunto de entrada.frontend/src/theme.cssEstilos y paleta validada para daltonismo.frontend/package.jsonDependencias.frontend/vite.config.tsConfiguración de build.