Documentación de proyecto
Sistema de detección de vulnerabilidad social (SIDVP)
- Categoría
- Proyecto académico
- Stack técnico
- Random Forest, Flask, Leaflet.js, Render
Resumen
SIDVP es un sistema que identifica y visualiza zonas de vulnerabilidad social en los 734 corregimientos de Panamá, con un mapa interactivo de dos niveles de detalle (provincia/comarca y corregimiento) y un modelo de clasificación entrenado sobre datos socioeconómicos.
Está pensado para dos tipos de uso: uno institucional/analítico (paneles con métricas, tabla filtrable de corregimientos, alertas de baja cobertura de subsidios) y uno ciudadano (un portal público donde una persona puede consultar si es beneficiaria de un programa social del MIDES).
Objetivo
Ofrecer una herramienta basada en datos para apoyar la identificación de corregimientos con mayor vulnerabilidad social, como aporte al análisis social y a la toma de decisiones informadas.
Fuentes y preparación de datos
El sistema está diseñado alrededor de cuatro fuentes: el Censo del INEC, las líneas de pobreza oficiales del MEF (2023: 88 dólares mensuales per cápita para pobreza extrema, 185 para pobreza general), la evaluación de hogares del MIDES (FUPS) y su registro de beneficiarios de programas sociales (RENAB).
El pipeline de datos es un proceso ETL que prioriza archivos reales de esas fuentes si están disponibles y, en su ausencia, genera datos sintéticos reproducibles (con semilla fija) anclados a estadísticas oficiales publicadas, como las tasas de pobreza por provincia del MEF. Esto permite demostrar el sistema completo de principio a fin sin depender de acceso a microdatos gubernamentales.
Actualmente, el dashboard, el mapa y el modelo funcionan con datos sintéticos generados a partir de esas estadísticas oficiales agregadas por provincia, mientras se integran los microdatos reales del INEC, el MEF y el MIDES. El buscador de cédulas usa el mismo mecanismo: las cédulas que consulta son generadas por el sistema, no números reales de ciudadanos panameños.
El modelo de Machine Learning
Se entrena un Random Forest de 100 árboles con profundidad máxima de 10, sobre un split de 80/20 estratificado por clase, para clasificar cada corregimiento en tres niveles: no pobre, pobreza moderada y pobreza extrema, definidos directamente por los umbrales oficiales del MEF sobre el ingreso per cápita estimado.
Las variables de entrada son trece indicadores socioeconómicos por corregimiento: acceso a agua potable y electricidad, porcentaje de piso de tierra, vivienda precaria, tasa de desempleo provincial, ingreso per cápita estimado, indicadores de pobreza general y extrema, brecha de pobreza en dólares, hogares en pobreza, y cobertura de subsidios.
Por qué Random Forest
El sistema compara cinco algoritmos entrenados sobre el mismo conjunto de datos: Random Forest, árbol de decisión, regresión logística, SVM y KNN. Random Forest obtuvo la mejor exactitud de esa comparación, con 100 % sobre el conjunto de prueba, frente a resultados de entre 98 % y 99.3 % del resto de los algoritmos.
Análisis crítico del modelo
Dos de las trece variables de entrada, el ingreso per cápita estimado y la brecha de pobreza en dólares, están matemáticamente derivadas del mismo umbral que define la etiqueta objetivo, por lo que el modelo tiene acceso directo (o casi directo) a la misma información que usa la regla que genera la respuesta correcta. Esto explica en buena parte la exactitud tan alta obtenida por todos los algoritmos comparados, no solo por Random Forest.
Queda como mejora identificada para una siguiente iteración: incorporar variables predictoras independientes de la etiqueta, para medir el desempeño del modelo en un escenario más exigente y realista.
Arquitectura de la aplicación
El backend es una aplicación Flask con nueve rutas: un dashboard nacional, una tabla filtrable de los 734 corregimientos, el portal público, el buscador de cédulas, un panel de alertas de cobertura de subsidios, una vista de comparación de modelos, y tres endpoints que devuelven datos en JSON o GeoJSON para alimentar el mapa y las gráficas del cliente.
El modelo se entrena y evalúa de forma offline, como un análisis independiente; la página de comparación muestra los resultados ya calculados de esa evaluación, sin exponer un endpoint de predicción en vivo sobre nuevos datos.
El mapa interactivo
Construido con Leaflet.js sobre un mapa base oscuro, con dos capas de información: una siempre visible con círculos por provincia y comarca (tamaño proporcional al porcentaje de pobreza), y una segunda con los polígonos de cada corregimiento, que se carga de forma perezosa solo al acercar el zoom, para no penalizar el tiempo de carga inicial con un archivo geográfico de casi un megabyte.
La vulnerabilidad se representa con una escala de cinco colores, de verde (mínima) a rojo (crítica), y cada marcador o polígono muestra en un popup los datos socioeconómicos del corregimiento correspondiente. Como los nombres de corregimiento del dataset propio no siempre coinciden exactamente con los del archivo geográfico de referencia, el sistema aplica varias estrategias de coincidencia de texto en cascada (normalizando tildes, mayúsculas y espacios) para emparejar ambas fuentes.
Otras funcionalidades
- Sistema de alertas que clasifica corregimientos según su nivel de cobertura de subsidios frente a la cantidad de hogares en pobreza, con niveles de crítica, alta, media y baja.
- Filtros de búsqueda por texto, provincia/comarca y nivel de pobreza en la tabla de corregimientos y en el panel de alertas.
- Portal público de consulta de elegibilidad a programas sociales por número de cédula.
- Diseño responsive, con menú y leyenda del mapa adaptados a pantallas móviles.
Despliegue
El sistema está desplegado en Render. La configuración del servicio, como los comandos de build y arranque, se gestiona directamente desde su panel de control.