/ 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.

9 min de lectura Python · spaCy · Scikit-learn Datos: sintéticos, con la escala real del problema Aplicable a tesis de ingeniería y atención ciudadana
Clasificacion automatica de peticiones, quejas, reclamos y solicitudes ciudadanas con NLP

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


Estructura de alto nivelDiagrama de la solución

Entrada Texto libre de PQRS Limpieza de texto Caracteres, minusculas, stopwords Lematizacion Con acentos intactos Remocion de acentos Despues de lematizar Vectorizacion Bag-of-words (CountVectorizer) Benchmarking 5 modelos, validacion cruzada Evaluacion vs. nivel de azar Enrutamiento automatico

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ónDato
Tamaño del dataset etiquetadoReducido, decenas de mensajes repartidos en varias categorías
Formato del texto de entradaTexto libre, sin plantilla ni estructura fija
IdiomaEspañol, con necesidad de lematización y manejo de acentos
Uso previstoEnrutamiento automático de PQRS por tipo de solicitud
OpciónPor qué se descartó
Ignorar el orden entre lematización y remoción de acentosAsumir que no importa sin probarlo puede introducir errores de desambiguación silenciosos
Ir directo a un solo modelo sin comparar alternativasCon 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 directoDa una base empírica real para cada decisión, no una suposición

Pasos

1

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.

2

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.

3

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.

4

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.

53
proyectos
8
sectores
100%
aplicado

Sin registro. Acceso inmediato