FIBrosis_7 Inspiration
El reto parte de una pregunta clínica sencilla, pero difícil de resolver:
De los pacientes con ILA recién diagnosticado, ¿cuáles evolucionarán hacia fibrosis pulmonar idiopática (FPI)?
Actualmente, en el momento del diagnóstico, la decisión de vigilar, tratar o derivar a un paciente puede apoyarse en valores como una FVC de aproximadamente 85 % y una DLCO de aproximadamente 78 %. Estos valores pueden parecer normales cuando se observan de forma aislada, pero no necesariamente reflejan el riesgo futuro de progresión.
Nuestra propuesta parte de tres ideas.
El momento del diagnóstico es clave. Si existe una señal de riesgo, debe poder detectarse en T0, que es cuando se toma la primera decisión clínica.
Existe mucha información molecular que todavía no se utiliza conjuntamente con los datos clínicos. El dataset contiene 2.944 proteínas séricas medidas mediante tecnología Olink, además de las variables clínicas disponibles en esa misma visita.
La solución tiene que ser sencilla. Una firma que necesite cientos o miles de variables no resulta práctica para una consulta clínica. Por eso buscamos reducir toda esa información a un conjunto pequeño de variables interpretables.
El objetivo es identificar una firma molecular que, utilizando únicamente la información disponible en el momento del diagnóstico de ILA, permita estimar qué pacientes presentan mayor riesgo de progresar hacia FPI.
What it does
FIBrosis_7 utiliza una única visita clínica, T0, para estimar el riesgo de progresión y generar una firma de diez variables interpretables.
Entrada
El dataset contiene 1.000 pacientes y 2.953 variables:
8 variables clínicas basales:
age
sex
bmi
cigarette_packs_year
ct_pattern
clinic_group
fvc_basal
dlco_basal
2.944 proteínas séricas identificadas mediante variables NPX.
1 cluster derivado del gemelo digital.
La variable objetivo define como progresor a un paciente cuya variación de FVC es igual o inferior al 10 %:
y = 1 si ΔFVC ≤ -10 %
En el dataset hay 501 pacientes progresores y 499 pacientes estables.
Resultados principales Métrica Resultado AUC en entrenamiento 0.8535 AUC en validación cruzada de 5 folds 0.8158 ± 0.0288 Sensibilidad 77.4 % Especificidad 80.0 % Umbral de Youden 0.5056 Variables seleccionadas por LASSO 35 de 2.953 Reducción de variables 98.8 % Variables de la firma final 10 Variables clínicas 3 Proteínas 7 Firma final
Las diez variables con mayor peso absoluto son:
Variable Coeficiente cigarette_packs_year +0.578 NPX_SFTPB +0.270 fvc_basal -0.239 NPX_MMP7 +0.107 NPX_GDF15 +0.081 NPX_VCAM1 +0.079 NPX_ITGB6 +0.079 dlco_basal -0.066 NPX_MUC1 +0.061 NPX_CCL18 +0.061
La puntuación de riesgo se calcula a partir de los coeficientes del modelo:
s = β0 + β1x1 + β2x2 + ... + β10x10
El signo del coeficiente indica la dirección de la asociación dentro del modelo: los coeficientes positivos aumentan la puntuación de riesgo y los negativos la reducen.
Digital twin
Además de la firma clínica, desarrollamos un gemelo digital de la cohorte.
El proceso combina PCA y K-Means para identificar perfiles clínicos y moleculares similares.
Primero aplicamos PCA y conservamos 50 componentes, que explican el 11,1 % de la varianza. Después utilizamos K-Means y seleccionamos cuatro grupos mediante el método del codo.
Uno de los grupos presenta una concentración especialmente alta de progresores. El cluster 2 contiene aproximadamente el 80 % de progresión y presenta un perfil identificable desde T0:
Edad aproximada: 66 años
Tabaquismo: 26 paquetes-año
FVC: 73 %
DLCO: 60 %
Este análisis permite complementar la predicción individual con una visión de los distintos perfiles existentes dentro de la cohorte.
How we built it
El proyecto se implementó completamente en Python utilizando pandas, scikit-learn, matplotlib, seaborn y umap-learn.
El sistema se divide en dos pipelines principales y una interfaz web.
- Imputación
Las ocho variables clínicas se imputaron mediante MICE utilizando IterativeImputer con DecisionTreeRegressor.
Para las 2.944 proteínas se utilizó imputación mediante la mediana de cada columna.
- Gemelo digital
Se aplicó PCA sobre las variables disponibles y se conservaron 50 componentes.
Posteriormente se utilizó K-Means para identificar cuatro perfiles diferentes dentro de la cohorte.
El número de clusters se seleccionó mediante el método del codo.
- Selección de la firma
Para reducir las 2.953 variables utilizamos regresión logística con regularización L1, también conocida como LASSO.
El modelo se ajustó mediante:
LogisticRegressionCV
penalización L1
solver saga
class_weight="balanced"
validación cruzada estratificada de 5 folds
selección basada en AUC
búsqueda sobre 50 valores de C, donde C = 1 / λ
La regularización L1 permite que muchos coeficientes sean exactamente cero. De esta forma, el modelo reduce automáticamente el número de variables utilizadas.
El modelo terminó seleccionando 35 variables de las 2.953 originales.
Después ordenamos esas variables según el valor absoluto de su coeficiente y seleccionamos las diez principales para construir la firma final.
- Validación
Evaluamos el modelo mediante:
curva ROC
AUC
validación cruzada de 5 folds
sensibilidad
especificidad
matriz de confusión
umbral óptimo de Youden
El AUC medio obtenido en validación cruzada fue 0.8158, con una desviación estándar de 0.0288.
- Comunicación
El resultado se integra en un dashboard web dividido en cinco secciones:
Resumen
Firma
Clusters
Predicciones
Metodología
El proyecto también genera las figuras utilizadas en el análisis y un informe técnico a partir de los CSV producidos por el pipeline.
Para garantizar la reproducibilidad, utilizamos RANDOM_SEED = 42 en todo el proyecto. Las ejecuciones producen los mismos CSV; las imágenes pueden presentar pequeñas diferencias dependiendo de la versión de matplotlib utilizada.
Challenges we ran into
- Data leakage
El primer modelo utilizaba variables como fvc_v2, fvc_v3 y time_visit*.
El problema era que la variable objetivo se calculaba a partir de la evolución de la FVC:
ΔFVC = FVC_v3 - FVC_basal
Por tanto, el modelo estaba recibiendo información relacionada directamente con el resultado que intentaba predecir.
El resultado fue un AUC de 0.95, pero este resultado no era válido para nuestro objetivo clínico.
Decidimos reconstruir el pipeline utilizando exclusivamente información disponible en T0.
El AUC obtenido posteriormente fue 0.816 en validación cruzada.
Esta fue una de las decisiones más importantes del proyecto: preferimos un resultado más realista y reproducible antes que una métrica artificialmente elevada por fuga de información.
- Muchas variables y pocos pacientes
El problema contiene 2.953 variables para 1.000 pacientes.
Además, muchas proteínas presentan correlaciones entre sí.
Un modelo que utilizara todas las variables directamente tendría un riesgo elevado de sobreajuste.
La regularización L1 permitió reducir el espacio de variables de forma considerable, pasando de 2.953 variables a 35.
Finalmente, seleccionamos las diez variables principales para construir una firma clínicamente manejable.
- Datos confidenciales y Git
Durante el desarrollo detectamos que el dataset de 1.000 pacientes había quedado incluido en el historial remoto del repositorio.
El problema se solucionó retirando los datos del seguimiento habitual, añadiendo las rutas correspondientes al .gitignore y restaurando los archivos necesarios sin volver a incorporarlos al índice del repositorio.
Este incidente reforzó la importancia de separar desde el principio los datos sensibles del código fuente.
- Entorno y rutas
El entorno de desarrollo presentó problemas relacionados con Python 3.12 y la ausencia de ensurepip.
Además, el pipeline utiliza rutas relativas al directorio raíz del proyecto.
Ejecutar los scripts desde un subdirectorio podía producir errores como FileNotFoundError.
Por este motivo documentamos en el README el proceso completo de instalación y ejecución:
Preparar los datos.
Crear el entorno virtual.
Situarse en la raíz del proyecto.
Ejecutar el pipeline.
- Resultados y dashboard
Detectamos que parte de la información mostrada en el dashboard estaba escrita directamente en HTML.
Esto podía provocar diferencias entre los resultados reales del modelo y los datos mostrados en la interfaz.
También existía un script que indicaba que el informe había sido generado automáticamente cuando en realidad algunos datos estaban escritos manualmente.
Lo corregimos haciendo que el informe se genere directamente a partir de los CSV de resultados, especialmente B05_firma_clinica_top10.csv.
- Coherencia de la documentación
Durante la revisión encontramos varias diferencias entre la documentación y los resultados reales.
Por ejemplo, algunos documentos indicaban que la firma contenía dos variables clínicas y ocho proteínas, cuando el resultado final era de tres variables clínicas y siete proteínas.
También había diferencias en la forma de contar los biomarcadores recuperados de la literatura.
Revisamos estas afirmaciones directamente contra los CSV generados por el pipeline para que la documentación reflejara los resultados reales.
Accomplishments
El proyecto consigue varios objetivos importantes.
Una firma pequeña y interpretable
La firma final contiene diez variables:
3 variables clínicas
7 proteínas
Esto permite pasar de miles de variables potenciales a un conjunto reducido que puede analizarse e interpretarse con facilidad.
Un modelo evaluado sin fuga de información
El AUC medio en validación cruzada fue 0.8158.
El modelo se construyó utilizando únicamente información disponible en T0, evitando utilizar variables que contienen información del seguimiento.
Reducción de dimensionalidad
El proceso de selección redujo el número de variables de 2.953 a 35, una reducción del 98,8 %.
Posteriormente se seleccionaron las diez variables principales para construir la firma presentada.
Biomarcadores relevantes
La firma recupera varios biomarcadores descritos previamente en la literatura, entre ellos:
SFTPB
MMP7
GDF15
CCL18
CXCL10
PTX3
SFTPD
KL6 no está disponible en el dataset y IGFBP2 fue descartada durante la selección mediante LASSO.
Gemelo digital
El análisis de clusters permite identificar perfiles de pacientes con características clínicas y moleculares similares.
Uno de los clusters concentra una proporción elevada de progresores y presenta un perfil identificable desde el diagnóstico.
Reproducibilidad
El pipeline utiliza una semilla fija y genera resultados deterministas en los CSV.
Esto permite repetir el análisis y comprobar que los resultados son consistentes.
Dashboard
El proyecto incluye una interfaz web con cinco secciones:
Resumen
Firma
Clusters
Predicciones
Metodología
La interfaz no necesita mostrar datos personales de pacientes.
Documentación
El README incluye las instrucciones necesarias para instalar las dependencias, preparar el entorno y ejecutar el proyecto desde cero en Ubuntu 24.04 con Python 3.12.
What we learned
- Un AUC más alto no significa necesariamente un modelo mejor
El primer resultado de 0.95 estaba afectado por fuga de información.
Después de eliminar las variables que contenían información del seguimiento, el AUC bajó a aproximadamente 0.82.
El segundo resultado es mucho más representativo del problema que queremos resolver.
- La simplicidad también es una característica
Una firma de diez variables puede discutirse y analizarse durante una consulta.
Una lista de casi 3.000 proteínas no resulta práctica para una decisión clínica.
La regularización L1 permitió transformar un problema de alta dimensionalidad en una firma mucho más manejable.
- Las proteínas y las variables clínicas aportan información complementaria
La firma final combina variables como tabaquismo, FVC y DLCO con proteínas como SFTPB, MMP7, GDF15 y CCL18.
El modelo no depende exclusivamente de la información clínica ni exclusivamente de los biomarcadores.
- La reproducibilidad y la privacidad son fundamentales
El uso de semillas fijas, control de los datos sensibles y verificación automática de los resultados reduce el riesgo de inconsistencias entre el análisis, la documentación y el dashboard.
- La comunicación debe adaptarse al usuario
Para presentar el modelo a un equipo sanitario es más útil mostrar:
qué variable se está utilizando
qué dirección tiene su asociación con el riesgo
cuál es su peso en el modelo
cómo contribuye al resultado final
que mostrar una matriz completa con miles de coeficientes.
What's next for FIBrosis_7 Validación externa
El siguiente paso sería evaluar la firma en un conjunto de test independiente y, si es posible, en cohortes externas.
También sería importante analizar:
curvas Precision-Recall
calibración
Brier score
estabilidad de la firma en diferentes poblaciones
Esto permitiría evaluar no solo la capacidad de discriminación del modelo, sino también si las probabilidades estimadas son suficientemente fiables para su utilización clínica.
Interpretabilidad
Podemos aplicar métodos como SHAP para estudiar la contribución individual de cada variable.
También sería interesante analizar posibles interacciones entre las variables de la firma y factores como el patrón de TAC o el sexo.
Firma basada únicamente en proteínas
Una posible versión alternativa utilizaría únicamente las siete proteínas de la firma.
Esto permitiría estudiar si la información molecular por sí sola puede mantener una capacidad predictiva útil.
Integración con imagen
Otra extensión sería incorporar información cuantitativa de la TAC, incluyendo características radiológicas o variables derivadas mediante radiómica.
Esto permitiría combinar tres fuentes de información:
clínica
molecular
imagen
Dashboard dinámico
Actualmente, la principal deuda técnica de la interfaz es que algunos elementos todavía dependen de información previamente incorporada al frontend.
El siguiente paso es servir directamente los archivos B05_*.csv para que el dashboard se actualice automáticamente cada vez que se ejecuta el pipeline.
Despliegue
El modelo podría exponerse mediante una API ligera.
La API recibiría una fila con las variables disponibles en T0 y devolvería:
probabilidad estimada de progresión
clasificación de riesgo
principales factores que contribuyen al resultado
Esto permitiría integrar el modelo posteriormente en otras aplicaciones o sistemas clínicos.
Estudio prospectivo
El objetivo final no debería ser únicamente conseguir una buena métrica predictiva.
La siguiente pregunta es si utilizar la firma en un entorno clínico cambia realmente la forma en que se toman las decisiones sobre los pacientes.
Ese sería el paso necesario para demostrar el valor clínico de la herramienta.
Log in or sign up for Devpost to join the conversation.