Skip to content
NLEN
Illustration: From data analyst to ML engineer: the career path

From data analyst to ML engineer: the career path

By Ivo Donker — compiled with AI assistance (Claude & Gemini)

The transition from data analyst to machine learning engineer (ML engineer) is one of the most common and logical career moves in today's data landscape. Where a data analyst queries historical data to surface business patterns through dashboards and reports, an ML engineer builds scalable software systems that autonomously generate predictions and run continuously in production. This transition, however, requires a fundamental shift in mindset: from one-off ad hoc analyses and visualizations to robust software engineering, automated pipelines, and operational model management.

Many data analysts already have a solid foundation in SQL, exploratory data analysis (EDA), and domain knowledge. The stumbling block is rarely understanding the underlying data, but almost always the technical engineering layer: object-oriented programming, version control, testing, containerization, and MLOps principles. This article outlines the complete career path, exposes exactly where the gap lies, and offers a concrete step-by-step plan to make this transition successfully in the Dutch technology sector.

The fundamental role shift: from insight to software product

To understand what the transition entails, we need to look at the fundamental difference in end product. A data analyst typically delivers answers to strategic or operational questions. The output consists of a Power BI or Tableau dashboard, a SQL query, a Jupyter Notebook with summary statistics, or a presentation for stakeholders. The primary goal is to support decision-making.

An ML engineer, on the other hand, delivers software. The end product is a trained model that is packaged in a container, exposed via a REST API or message queue, and performs inferences thousands of times per minute with low latency. Responsibility doesn't stop at achieving a high ROC-AUC score in an experiment; responsibility really only begins once the model is running in a live production environment. To get a clear picture of the precise differences between data scientists, AI engineers, and ML engineers, it helps to look at the overview in which the differences between AI Engineer, Data Scientist, and ML Engineer are set side by side.

Dimension Data Analyst Machine Learning Engineer
Core goal Describing and explaining historical data Automating predictions in production
Primary tooling SQL, Power BI, Tableau, Excel, basic Python/R Python, Docker, Git, CI/CD, FastAPI, Kubernetes, MLflow
Code quality Scripts focused on analysis and one-off visualization Modular, tested, and documented production code
Data processing Batch extracts and aggregated tables Real-time streaming, automated feature stores
Critical metrics Business KPIs, dashboard adoption, accuracy Latency, throughput, drift, uptime, F1 score in production

The skills gap: which capabilities are usually missing?

Data analysts looking to make the switch often overestimate the mathematical requirements and underestimate the software quality that's required. Unlike academic researchers, an ML engineer rarely needs to design new algorithms from scratch. The real gap lies in three specific technical domains:

1. Software engineering and modularity

In data analysis, a linear Jupyter Notebook with hundreds of cells is often enough to reach a conclusion. In machine learning engineering, such a notebook is merely a scratchpad. Production code requires:

2. System infrastructure and containerization

A model that runs locally on a laptop inside a Conda environment is unusable for IT infrastructure. An ML engineer must understand how an application is packaged reproducibly with Docker, how environment variables are managed, and how network communication between microservices works.

3. Model lifecycle and monitoring (MLOps)

Once a model goes live, the world around it keeps changing. Data distributions shift (data drift) and economic or behavioral relationships change (concept drift). Anyone who wants to understand how such degradation is continuously monitored can dive deeper into measuring drift and model performance in production. An ML engineer sets up automated monitoring and retraining pipelines to detect degradation in time.

The step-by-step transition path: from data wrangling to model deployment

The transition from data analyst to ML engineer works most efficiently through a structured route of four phases. By completing each phase with tangible code and experiments, you build up the necessary foundation step by step.

Phase 1: Modern software design in Python (Month 1-2)

Leave the notebook behind for core logic. Set up a professional local development environment with VS Code or PyCharm. Learn to work with virtual environments (uv or poetry), object-oriented design patterns, abstract classes for data loaders, and structured error handling. Write unit tests directly alongside every function.

Phase 2: Classic machine learning and pipeline architecture (Month 3-4)

Deepen your mathematical intuition behind regression, decision trees, ensemble models (XGBoost, LightGBM), and clustering. Focus on the full pipeline: feature engineering without data leakage, cross-validation strategies for time series, and hyperparameter tuning. Use Scikit-learn pipelines to seamlessly connect data transformations and model training.

Phase 3: Deployment, containerization, and API exposure (Month 5-6)

Build a REST API around a trained model using FastAPI. Write input validation with Pydantic, package the complete application into a Docker image, and optimize container size through multi-stage builds. Test the endpoint locally and deploy it to a cloud environment such as AWS (ECS/EKS), Google Cloud Platform (Cloud Run/Vertex AI), or Microsoft Azure.

Phase 4: MLOps, CI/CD, and tracking (Month 7-8)

Integrate tools for experiment tracking and model registries such as MLflow or Weights & Biases. Automate the test and build process through CI/CD pipelines. Set up automated data and model validation before a new artifact is pushed to the registry.

Example: From analytical script to a production-ready API

To make the difference between analytical scripting and engineering concrete, let's look at how inference code transforms. A data analyst often loads a pickle file ad hoc into a notebook. An ML engineer builds a typed, validated service with asynchronous endpoints and structured error handling.

Below is an example of a minimalist, robust FastAPI service for model inference with Pydantic validation:

import joblib
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel, Field
import numpy as np

app = FastAPI(title="Kredietrisico Model API", version="1.0.0")

# Laad het getrainde modelartefact bij het opstarten
try:
  model = joblib.load("models/credit_risk_pipeline_v1.joblib")
except FileNotFoundError:
  model = None

class PredictionRequest(BaseModel):
  inkomen: float = Field(..., gt=0, description="Bruto jaarinkomen in euro's")
  schuld_ratio: float = Field(..., ge=0.0, le=1.0, description="Ratio tussen schuld en inkomen")
  krediet_score: int = Field(..., ge=300, le=850, description="FICO-achtige kredietscore")

class PredictionResponse(BaseModel):
  wanbetaling_kans: float
  risico_klasse: str

@app.post("/predict", response_model=PredictionResponse)
def voorspel_risico(aanvraag: PredictionRequest) -> PredictionResponse:
  if model is None:
    raise HTTPException(status_code=503, detail="Modelartefact niet beschikbaar")

  features = np.array([[aanvraag.inkomen, aanvraag.schuld_ratio, aanvraag.krediet_score]])
  kans = float(model.predict_proba(features)[0][1])
  klasse = "HOOG" if kans > 0.35 else "LAAG"

  return PredictionResponse(wanbetaling_kans=round(kans, 4), risico_klasse=klasse)

This code contains a strict type structure, data contracts via schemas, and clean status codes for errors. This is the level recruiters and engineering leads expect during technical assessments.

The role of certifications versus a built portfolio

Many professionals in transition start by collecting cloud and data certificates. While certificates from AWS, Azure, or Google Cloud offer structure to a learning path, they don't demonstrate problem-solving ability on their own. For a detailed assessment of the market value of various programs, it's worthwhile to the overview of valuable AI certifications and training programs .

In the Dutch labor market, a publicly accessible GitHub portfolio with working code weighs considerably heavier than paper qualifications. A strong portfolio for a beginning ML engineer doesn't consist of standard Kaggle notebooks on the Titanic dataset or MNIST digits. Employers look for projects that show the full spectrum:

Anyone looking for inspiration for realistic and relevant architectures can study the guide on portfolio projects that impress AI employers to see how a project is built convincingly.

The Dutch labor market for ML engineers

Demand for machine learning engineering talent in the Netherlands is structurally high, but highly professionalized. Where organizations mainly experimented with data science pilots (proofs of concept) between 2018 and 2022, the emphasis since 2024 has shifted entirely to industrialization and demonstrable cost reduction or revenue growth. Anyone wanting to know which sectors and regions in the Netherlands see the greatest demand can find current context in the analysis on the Dutch AI labor market and job opportunities.

Market demand translates into specific dynamics within different types of Dutch organizations:

Navigating within your current organization: the internal transition

The most effective and lowest-risk route to becoming an ML engineer is the internal move within a current employer. As a data analyst, you already have deep knowledge of the company data, the data sources, and the domain context. That's a head start an external candidate doesn't have.

A pragmatic strategy to grow internally includes the following steps:

For a comparison with the broader AI engineering profile, the article on the transition from data analyst to AI engineer also offers additional insights into how LLM integration and classic machine learning work relate to each other.

Pitfalls during retraining and interviews

During job applications and assessments, candidates retraining for the role regularly fall into the same pitfalls. Avoiding these mistakes considerably increases the chance of a successful assessment:

Pitfall Why it leads to rejection The right approach
Only showing notebooks Doesn't demonstrate command of modular software architecture or testing. Always deliver a git repository with src/, tests/, a Dockerfile, and documentation.
Choosing complex deep learning over simple baselines Shows a lack of pragmatism and business cost awareness. Always start with a simple linear baseline (e.g. Logistic Regression) before testing heavier models.
Ignoring data leakage Leads to unusable models in a live production environment. Perform all feature scaling and transformations exclusively on the training set within a pipeline.
No attention to latency and resources A model that's too slow or consumes too much memory can't go live. Measure inference times per request and explicitly document hardware requirements.

Conclusion: Your action plan for the transition

The step from data analyst to machine learning engineer is not a theoretical retraining, but a transformation of working method. By combining the strong analytical foundation and domain knowledge you have as an analyst with robust software engineering, containerization, and MLOps skills, a rare and sought-after profile emerges in the Dutch labor market.

Don't start today with yet another course on advanced algorithms; instead, take an existing analysis, refactor the code into modular Python functions, write unit tests, package the inference into a FastAPI application within Docker, and commit the whole thing to GitHub. That's the tangible proof that will get the conversation with employers and engineering leads off to a successful start.