Skip to content

The Machine Learning Roadmap

The big picture

Here’s a realistic “career-grade” roadmap. You’ll cycle through it many times.

diagram Diagram mermaid

Phase-by-phase (what you’ll build)

  1. Foundations (vocabulary + intuition)
  2. Preprocessing (where most real time goes)
  3. Regression (predict numbers)
  4. Classification (predict categories)
  5. Ensembles (combine models)
  6. Unsupervised (cluster/structure without labels)
  7. Tuning (pipelines + CV + hyperparams)
  8. Deep learning (neural nets)
  9. NLP (text)
  10. Deployment/MLOps (ship + monitor)

Two skill tracks to learn in parallel

Track A — Modeling skills

  • pick baseline models
  • avoid leakage
  • choose metrics
  • interpret results

Track B — Engineering skills

  • write clean reproducible notebooks/scripts
  • build pipelines
  • version data and models
  • deploy and monitor

Reality check: where time actually goes

Beginner expectation: “I’ll spend 80% training models.”

Real projects usually:

  • 70% data cleaning and feature engineering
  • 20% evaluation, iteration, and debugging
  • 10% modeling

Mini-checkpoint

Write down:

  • one ML problem you want to solve (ex: “predict house price”)
  • your potential target label (ex: price)
  • 5 candidate features (ex: bedrooms, area, age, location, condition)

What “modeling” actually looks like

The book’s classic first example: does money make people happier? You join a GDP-per-capita table with a life-satisfaction table, plot the two columns, and notice a rough linear trend. That’s model selection — you pick a family of functions (here, a straight line) before you ever touch training data.

A tiny model-based learning example
import numpy as np
from sklearn.linear_model import LinearRegression
 
# GDP per capita (simplified) vs life satisfaction (0-10 scale)
gdp_per_capita = np.array([[12240], [27195], [37675], [50962], [55805]])
life_satisfaction = np.array([4.9, 5.8, 6.5, 7.3, 7.2])
 
model = LinearRegression()
model.fit(gdp_per_capita, life_satisfaction)
 
cyprus_gdp = [[22587]]
print("Predicted satisfaction:", model.predict(cyprus_gdp)[0].round(2))
A tiny model-based learning example
import numpy as np
from sklearn.linear_model import LinearRegression
 
# GDP per capita (simplified) vs life satisfaction (0-10 scale)
gdp_per_capita = np.array([[12240], [27195], [37675], [50962], [55805]])
life_satisfaction = np.array([4.9, 5.8, 6.5, 7.3, 7.2])
 
model = LinearRegression()
model.fit(gdp_per_capita, life_satisfaction)
 
cyprus_gdp = [[22587]]
print("Predicted satisfaction:", model.predict(cyprus_gdp)[0].round(2))

Swap LinearRegressionLinearRegression for KNeighborsRegressor(n_neighbors=3)KNeighborsRegressor(n_neighbors=3) and you get instance-based learning instead: the prediction comes from averaging the labels of the k most similar training examples rather than fitting a line. Same data, same .fit().fit()/.predict().predict() interface, completely different strategy.

🧪 Try It Yourself

Exercise 1 – Model-Based: Fit a Linear Model

Exercise 2 – Instance-Based: Swap in KNN

Exercise 3 – Reality Check on Time Spent

If this helped you, consider buying me a coffee ☕

Buy me a coffee

Was this page helpful?

Let us know how we did