/ Proyectos / Gobierno / Clasificación automática de PQRS
Clasificación automática de PQRS con NLP: bag-of-words y comparación de modelos
Clasificación de peticiones, quejas, reclamos y solicitudes ciudadanas por tipo, comparando 5 modelos sobre un dataset pequeño, y una duda técnica real resuelta con un experimento directo.
El objetivo era clasificar automáticamente las peticiones, quejas, reclamos y solicitudes (PQRS) que llegan por texto libre, para poder enrutarlas al área correcta sin depender solo de que un humano las lea una por una. El problema real: el dataset etiquetado disponible era pequeño, apenas unas decenas de mensajes repartidos en varias categorías, lo que cambia por completo qué se puede esperar razonablemente de cualquier modelo.
El código original dejaba una pregunta técnica sin resolver, literalmente anotada como duda en un comentario: ¿importa el orden entre lematizar el texto y quitar los acentos? La respondimos con un experimento directo, no con una suposición: sí importa. Lematizar primero, con el texto correctamente acentuado, evita que el modelo de idioma confunda palabras como "el" y "él" al perder esa información antes de tiempo.
Mapa del casoContenido
- Diagrama de la solución. El flujo completo, del mensaje de texto al enrutamiento automático
- Construcción de la solución. Cómo el tamaño real del dataset dirigió cada decisión
- Condiciones del proyecto. Restricciones reales y opciones descartadas antes de construir
- Pasos. Qué se dejó al agente y qué criterio se aplicó en cada uno
- Proceso de iteración. El experimento que resolvió la duda del orden de preprocesamiento
- Descargables. Notebook, diagrama y repositorio del proyecto
- Lecciones importantes. La lección concreta que deja este caso
Estructura de alto nivelDiagrama de la solución
Pasa el cursor sobre cada bloque para ver que hace ese paso.
La lematización y la remoción de acentos se separan en dos bloques explícitos en el diagrama, no uno solo, precisamente porque el orden entre ambos resultó ser una decisión con impacto real en el resultado.
De la teoría a la prácticaConstrucción de la solución
Condiciones del proyecto
| Restricción | Dato |
|---|---|
| Tamaño del dataset etiquetado | Reducido, decenas de mensajes repartidos en varias categorías |
| Formato del texto de entrada | Texto libre, sin plantilla ni estructura fija |
| Idioma | Español, con necesidad de lematización y manejo de acentos |
| Uso previsto | Enrutamiento automático de PQRS por tipo de solicitud |
| Opción | Por qué se descartó |
|---|---|
| Ignorar el orden entre lematización y remoción de acentos | Asumir que no importa sin probarlo puede introducir errores de desambiguación silenciosos |
| Ir directo a un solo modelo sin comparar alternativas | Con un dataset tan pequeño, distintos modelos pueden comportarse de forma muy distinta |
| Comparar 5 modelos con validación cruzada + resolver la duda de preprocesamiento con un experimento directo | Da una base empírica real para cada decisión, no una suposición |
Pasos
Orden de lematización y acentos
Agente: propuso quitar los acentos antes de lematizar, para "simplificar" el texto de entrada.
Criterio aplicado: probar ambos órdenes sobre una muestra real antes de decidir, en vez de asumir cuál es mejor — el experimento mostró que lematizar primero, con acentos, da mejores resultados.
Elección del vectorizador de texto
Agente: sugirió usar embeddings preentrenados para capturar mejor el significado semántico.
Criterio aplicado: mantener bag-of-words simple dado el tamaño del dataset — un vectorizador más sofisticado no compensa la falta de datos suficientes para aprovecharlo.
Comparación de modelos
Agente: propuso elegir directamente el modelo más complejo de la lista (Random Forest).
Criterio aplicado: comparar los 5 modelos con validación cruzada sobre el mismo split, y dejar que el resultado empírico decidiera, no la complejidad aparente del modelo.
Interpretación del resultado final
Agente: propuso reportar solo el accuracy del modelo ganador como si fuera un resultado sólido.
Criterio aplicado: contextualizar ese accuracy contra el nivel de azar dado el número de categorías, para no sobrevender un resultado que apenas lo supera.
Proceso de iteración
Ajuste documentado, no forzado
El código original dejaba pendiente, literalmente como pregunta en un comentario, si el orden entre lematizar y quitar acentos importaba. Se probó directamente sobre una muestra: de 5 textos, 2 dieron un resultado de lematización distinto según el orden. En uno de los casos, quitar el acento antes de lematizar hizo que el modelo de idioma interpretara mal la palabra "el", tratándola como si tuviera una forma distinta a la esperada. El resultado final de accuracy también fue honesto: ningún modelo superó de forma contundente el nivel de azar, esperable con un dataset de menos de 40 mensajes repartidos en 7 categorías — no se forzó ninguna narrativa de éxito sobre ese número.
CierreLecciones importantes
El orden entre pasos de preprocesamiento de texto no es un detalle cosmético: lematizar antes de quitar acentos evita errores de desambiguación silenciosos que ninguna métrica de accuracy va a explicar directamente. Con un dataset pequeño, la comparación honesta contra el nivel de azar importa más que reportar el accuracy del modelo ganador de forma aislada. Y antes de invertir en un vectorizador o arquitectura más sofisticada, la primera pregunta debería ser si hay suficientes datos etiquetados para justificar esa complejidad.
Si quieres ver un enfoque publicado con una idea similar, clasificación automática de solicitudes ciudadanas con NLP, este paper es una buena referencia del nivel de la contribución: Kim & Hong (2021), Automatic classification of citizen requests for transportation using deep learning.
Termina ya tu proyecto
¿Tienes un proyecto similar y no sabes por dónde empezar? Yo te ayudo a diseñarlo.
El 92% de los profesionales de datos desbloquea sus proyectos al ver ejemplos completos resueltos.
Sin registro. Acceso inmediato