/ Proyectos / Salud / Clasificación de riesgo de salud mental
Clasificación de riesgo de salud mental con NLP y embeddings
Un clasificador de urgencia de canalización a salud mental, construido con embeddings modernos y desplegado en una arquitectura serverless de bajo costo.
Un servicio de salud mental universitario rara vez tiene la capacidad de atender a todos los estudiantes al mismo tiempo. Cuando alguien llena un cuestionario de tamizaje, alguien más tiene que revisarlo, y no todos los casos son igual de urgentes.
Este proyecto nació de esa fricción. La idea no era reemplazar al psicólogo, era ayudarle a decidir a quién atender primero, a partir de las respuestas de texto libre que la persona ya estaba escribiendo de todas formas. El sistema nunca decide nada clínico por sí mismo, solo prioriza. La decisión final, siempre, la toma un profesional de la salud mental.
Mapa del casoContenido
- Diagrama de la solución. Del texto libre al nivel de urgencia, en producción y en entrenamiento
- Construcción de la solución. Cómo el presupuesto real definió cada decisión de modelo
- 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. La limitación del dataset desbalanceado, documentada sin maquillar
- Descargables. Notebook 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 qué hace ese paso.
El mismo pipeline de embeddings se usa en entrenamiento, sobre el dataset abierto, y en producción, sobre la respuesta real del usuario, para que el clasificador vea siempre la misma representación del texto.
Cómo se construyóConstrucción de la solución
Condiciones del proyecto
| Restricción | Dato |
|---|---|
| Presupuesto de infraestructura | Casi nulo, todo el backend debía correr en nivel gratuito o de muy bajo costo de AWS |
| Tamaño del modelo servible | Debía cargar y responder rápido dentro de una función serverless |
| Dataset propio anotado por profesionales | No existía, hubo que entrenar con un corpus público de texto sobre salud mental |
| Alcance de la decisión automática | Limitado a un nivel de urgencia, nunca a un diagnóstico |
| Opción | Por qué se descartó |
|---|---|
| Bolsa de palabras clásica (TF-IDF) más un clasificador simple | Pierde matices semánticos que sí capturan los embeddings modernos |
| Ajuste fino completo de un modelo tipo BERT | Demasiado pesado y lento para servirse barato en una Lambda con memoria limitada |
| Embeddings preentrenados tipo MiniLM + regresión logística | Representación semántica moderna, ligera y barata de desplegar, opción elegida |
| Siete niveles de salida, uno por clase del dataset | Demasiado granular para el objetivo real, que es priorizar la revisión humana |
Pasos
Elegir un dataset público y real
Agente: propuso generar datos sintéticos de conversación para entrenar desde cero.
Criterio aplicado: usar Sentiment Analysis for Mental Health (Kaggle), un corpus abierto con 52.681 textos en 7 categorías, evitando inventar datos que no reflejaran lenguaje real.
Modernizar la representación del texto
Agente: propuso un pipeline de bolsa de palabras clásico.
Criterio aplicado: actualizar esa propuesta a embeddings de un modelo preentrenado tipo MiniLM, que capturan significado semántico y siguen siendo ligeros para el presupuesto de infraestructura.
Elegir un clasificador que quepa en el presupuesto
Agente: sugirió ajustar un transformer completo para maximizar exactitud.
Criterio aplicado: usar una regresión logística sobre los embeddings, suficiente, rápida de entrenar y de servir, y que sí cabía en una Lambda de nivel gratuito.
Definir el mapeo de clases a nivel de urgencia
Agente: no propuso nada aquí, esta decisión no puede automatizarse.
Criterio aplicado: decidir que la ideación suicida es la única categoría de urgencia alta, y que depresión, ansiedad y trastorno bipolar caen en urgencia media, con perspectiva de intervención temprana.
Proceso de iteración
Resultado inesperado, no forzado
El dataset público no está balanceado: las categorías más graves, como ideación suicida y trastorno bipolar, tienen muchos menos ejemplos que las categorías más comunes. Esto significa que la métrica global de exactitud puede verse bien mientras el modelo comete más errores justo en las clases de mayor urgencia. La lectura correcta de resultados no puede quedarse solo en la exactitud general, tiene que revisar el desempeño por clase.
CierreLecciones importantes
La lección principal fue de límites, no de modelos. Antes de elegir cualquier arquitectura, había que decidir qué tan lejos podía llegar una decisión automática en un tema tan sensible como la salud mental. La respuesta fue clara: el modelo prioriza, la persona decide.
La segunda lección fue de presupuesto real. Modernizar no significa siempre usar el modelo más grande disponible, significa elegir la representación más moderna que siga cabiendo en las restricciones reales del proyecto.
Si quieres ver un trabajo reciente que compara enfoques clásicos de NLP contra modelos de lenguaje más grandes para esta misma tarea de clasificación de estados de salud mental, esta es una buena referencia del nivel de la contribución: Comparing traditional natural language processing and large language models for mental health status classification.
Termina ya tu proyecto
¿Tu tesis necesita convertirse en algo más que código? Yo te ayudo a diseñar la aplicación.
El 92% de los profesionales de datos desbloquea sus proyectos al ver ejemplos completos resueltos.
Sin registro. Acceso inmediato