MLOps · Model deployment · Madrid
MLOps, learned by building
I study machine learning in Madrid and the part that has been hardest to learn is what comes after the notebook: serving the model behind an API, containerising it, versioning it and watching for drift. This page sums up how I do it in my projects, with the code public for anyone who wants to check.

The same pipeline that trains is the one that serves
Preprocessing lives inside the scikit-learn pipeline, so what happens at training time happens exactly the same way at inference time. There are no two versions of the same code that can drift apart. A bug taught me this: a different one-hot encoding at serving time that took me days to find.
Version registry and reproducibility
Every trained model is registered with its validation metrics, hyperparameters and data hash. I can go back to any previous version and know exactly what it was trained on. The pointer to the active version lives in the registry, not in code.
Drift monitoring before anyone else notices
A reference profile of the training data and Population Stability Index metrics over live traffic. When data changes, the system detects it and surfaces it in Grafana before the model starts failing silently.
Reproducible infrastructure with Docker
Multi-stage image: builder installs dependencies, runtime only copies the virtual environment and runs as a non-root user. The same container that passes tests is the one that gets deployed. No environment surprises.
Want to see how I do it, or tell me something?
The code is on GitHub and the decisions are in the READMEs. If you have feedback, a question or an opportunity for someone who learns fast, write to me.
Write to meFAQ
What is MLOps and why do I study it?
MLOps is the engineering practice that allows ML models to reach production and stay alive: versioning, CI/CD, monitoring, retraining. Without it, models die in notebooks or degrade without anyone knowing. I study it because it is the difference between knowing how to train a model and knowing how to build a system.
What stack do I use for MLOps?
FastAPI for the inference API (Pydantic input validation, synchronous and batch endpoints), multi-stage Docker, Prometheus for metrics, Grafana for visualisation and PSI for drift. CI with GitHub Actions. For the version registry, a lightweight file-based solution that needs no additional infrastructure.
Where can I see all of this working?
In credit-risk-platform, on my GitHub (github.com/delcenjo): an end-to-end MLOps platform with reproducible training, an inference API, PSI drift and Grafana dashboards. I also publish related open-source tools, like servectl for serving, at github.com/jmweb-org.
What happens when new data changes?
The system detects drift via PSI and surfaces it in Grafana, before the model starts giving bad results silently. Retraining can be automated or kept manual; in my projects I keep it manual so I can review what changed and why.
Can I ask you about this or propose something?
Of course. If you are learning the same things, if you have feedback on how I do it, or if you are looking for a junior with this drive for your team, write to me through the contact form. I always reply.