Stop 06 · Machine Learning FundamentalsProjects · 1/1

Build & Compare 3 ML Models on the Same Dataset

Part of the Data Science Roadmap

In short

Knowing algorithms is good. Showing you can pick one fairly, with the same data and the same tests for all, is what interviewers really look for. This project proves exactly that.

The core practice project for this phase — train a linear/logistic baseline, a tree-based model, and an ensemble model on the same problem, and compare their performance honestly.

The mascot stands beside three different scooters lined up on a road.

Think of it like this

Test-riding three scooters

Before buying, you ride three scooters on the same road, same day, same passenger. Then you compare mileage, comfort and price, not just top speed. Comparing models works the same way: same data, same folds, several metrics.

Watch it happen

Your build plan

Data
Baseline
3 models
Same CV
Pick
Explain

1/6Pick a classification dataset, clean it and decide the metric that matters, like recall.

The big ideas

What you need to know

Same folds, same pipeline

A fair comparison uses identical splits and preprocessing for every model.

Pick metrics first

Decide on accuracy, recall or MAE before seeing results, so you can't cherry-pick.

Always include a baseline

sklearn's DummyClassifier shows what 'no skill' scores. It keeps your results honest.

Accuracy isn't everything

Training time, prediction speed and explainability matter too. Note them in your table.

See it in code

Walk through the code

python
1from sklearn.datasets import load_breast_cancer2from sklearn.model_selection import cross_validate, StratifiedKFold3from sklearn.pipeline import make_pipeline4from sklearn.preprocessing import StandardScaler5from sklearn.linear_model import LogisticRegression6from sklearn.ensemble import RandomForestClassifier7from sklearn.neighbors import KNeighborsClassifier8X, y = load_breast_cancer(return_X_y=True)9cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=0)10models = {"logreg": make_pipeline(StandardScaler(), LogisticRegression(max_iter=1000)),11          "forest": RandomForestClassifier(random_state=0),12          "knn": make_pipeline(StandardScaler(), KNeighborsClassifier())}13for name, m in models.items():14    r = cross_validate(m, X, y, cv=cv, scoring=["accuracy", "recall"])15    print(name, r["test_accuracy"].mean().round(3), r["test_recall"].mean().round(3))

1/4Load data and fix one set of shuffled, stratified folds for everyone.

The core of the project: three models, one set of folds, two metrics. Add a DummyClassifier as a fourth row for the baseline.

Save yourself the pain

Common mistakes

Oops

Tuning one model heavily and leaving the others on defaults.

Do this instead

Give each model a similar, modest tuning budget, or the comparison is unfair.

Oops

Declaring a winner on a 0.2% difference.

Do this instead

Check the spread across folds. Tiny gaps are often noise, so weigh simplicity and speed too.

Your mission

First milestone

~45 min

Quick check

Why use the same cross-validation folds for every model you compare?

Go deeper

  1. 1Pick a clean, well-known dataset so you can focus on modeling, not cleaning.
  2. 2Use the same train/test split and evaluation metric across all 3 models for a fair comparison.
  3. 3Write a short summary of which model won, and your hypothesis for why.

Stuck on this topic? Ask an Insider

Get 1:1 guidance from people who've walked this exact path — on the InsideEdge app.

Download
InsideEdge