Saltar al contenido

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

Trade-off view: Pareto front approximation of elongation versus tensile strength

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:

  1. Definir un sandbox de formulación acotado (base, aditivos, variables de proceso, balance de masa ≈ 100 wt%).
  2. Generar datos de pseudo-laboratorio con ecuaciones inspiradas en física y ruido controlado.
  3. Entrenar sustitutos (baselines lineales vs Random Forest), incluido un régimen de pocos datos.
  4. Generar candidatos con búsqueda restringida y puntuación Upper Confidence Bound (UCB).
  5. Simular la medición de esos candidatos, anexar, reentrenar, observar el frente de Pareto.
FormulationsSurrogatesUCB policyCandidates
Constraint → score → choose

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.

Repositorio

github.com/carlosdcorona/polymer-ml-lab