02 / Trabajo seleccionado
ML científico
Bucle de descubrimiento de polímeros guiado por ML
Estudio científico didáctico que usa datos sintéticos informados por física y modelos sustitutos para decidir qué formulaciones merecen presupuesto de laboratorio.
Python · NumPy · pandas · scikit-learn · matplotlib

Contexto
polymer-ml-lab es un estudio público, guiado por notebooks. No es un despliegue industrial de I+D y no usa mediciones propietarias de laboratorio. La premisa es científica y didáctica: usar ML para encoger un espacio teórico de búsqueda antes de gastar presupuesto experimental.
Es el puente público más claro entre ingeniería física y sistemas de datos: primero restricciones, luego medición (aunque sea simulada), luego una decisión.
Problema
Los espacios de formulación son grandes. Resistencia a la tracción, elongación y resistencia térmica tiran en direcciones distintas. Un equipo que prueba al azar quema tiempo. Un equipo que solo sigue folklore puede no ver la superficie de Pareto. El proyecto pregunta cómo proponer un conjunto pequeño de candidatos que sean físicamente plausibles y valgan la pena confirmar.
Arquitectura
El bucle documentado:
- Definir un sandbox de formulación acotado (base, aditivos, variables de proceso, balance de masa ≈ 100 wt%).
- Generar datos de pseudo-laboratorio con ecuaciones inspiradas en física y ruido controlado.
- Entrenar sustitutos (baselines lineales vs Random Forest), incluido un régimen de pocos datos.
- Generar candidatos con búsqueda restringida y puntuación Upper Confidence Bound (UCB).
- Simular la medición de esos candidatos, anexar, reentrenar, observar el frente de Pareto.
El código se parte entre notebooks ordenados (01 generación, 02 modelado, 03 optimización) y src/data_generation.py para que el muestreo no quede atrapado en un notebook.
Datos / entradas
No hay un dataset confidencial de polímeros. Límites, samplers y un helper de simulación de laboratorio viven en código. Las tablas generadas pueden cachearse en local y están en gitignore por defecto. Tendencias que el README espera: el filler sube la resistencia a la tracción y empeora la elongación; el plastificante hace lo contrario; la temperatura tiene un óptimo en forma de campana.
Decisiones de ingeniería
- Física en el generador, no como atmósfera. El balance de masa y los límites de proceso están codificados para que el modelo no recomiende formulaciones absurdas con tanta libertad.
- Baselines antes que modelos ingeniosos. Los modelos lineales se sientan junto a Random Forest para que “el ML ayudó” sea comparable, no teatral.
- Lectura consciente de incertidumbre en pocos datos. El texto insiste en no confiar recomendaciones soberbias cuando hay pocas muestras.
- UCB como política de decisión. Exploración versus explotación es explícita: el bucle puede visitar regiones nuevas, no solo el mejor actual.
- Notebooks como bitácora de laboratorio. Cada uno termina con notas hacia el siguiente paso. La reproducibilidad es el producto.
Implementación
Entorno: NumPy, pandas, scikit-learn, matplotlib, seaborn. Correr notebooks en orden, o python -m src.data_generation. Un helper limpia salidas de notebooks antes de versionar para que el diff se lea.
Retos
- Los datos sintéticos solo aproximan un laboratorio. El README es claro: las mediciones reales deberían reemplazar o afinar los mismos notebooks (los procesos gaussianos aparecen como sustituto futuro).
- La optimización es búsqueda heurística, no un stack completo de Bayesian optimization. Es una limitación honesta.
- Restricciones industriales extra (costo, envejecimiento, reología) se nombran como ausentes, no se asumen en silencio.
Resultados
Del README del proyecto, como estudio sintético, no como ensayo de planta:
- Los sustitutos Random Forest se mantuvieron robustos con datos recortados a unas 20–30 muestras.
- El bucle UCB estrechó el frente de Pareto en unas tres iteraciones.
- Del orden del ~5% superior de candidatos teóricos se enviaría al laboratorio (simulado).
No traduzco esas cifras a “recortamos el costo de laboratorio un X% en la empresa Y.”
Qué aprendí
Mide antes de optimizar: incluso en un bucle didáctico comparas un baseline lineal y miras la incertidumbre. Sistemas > herramientas: el valor es el ciclo cerrado (generar → puntuar → elegir → medir), no el bosque versus la red.
El grain también importa. Un vector de formulación no es un experimento recomendado hasta que sobrevive restricciones y una política. Mezclar esos grains es cómo un notebook se vuelve una lámina soberbia.
Stack
Python, NumPy, pandas, scikit-learn, matplotlib, seaborn, Jupyter.