Yesterday I learned how machine learning teams version datasets and track experiments.

That means we can finally answer questions like:

  • Which dataset trained this model?
  • Which parameters produced this result?
  • Which experiment was deployed?

That raised another question.

How do ML teams systematically find better models?

Training One Model Is Easy Link to heading

Most machine learning tutorials look like this:

Dataset
    ↓
Train Model
    ↓
Accuracy = 85%

Done.

The model works.

But in practice, nobody trains a single model.

A machine learning project is really a search problem.

We’re searching for the best combination of:

  • Features
  • Algorithms
  • Parameters

The first model is usually just the starting point.

The Hidden Knobs Link to heading

Most machine learning algorithms have settings that control their behavior.

These settings are called hyperparameters.

For example:

Random Forest

Trees = 100

Max Depth = 5

Changing these values can significantly affect performance.

Model A → 85%

Model B → 89%

Model C → 91%

Same dataset.

Same algorithm.

Different hyperparameters.

Different results.

The challenge is figuring out which combination works best.

Manual Tuning Doesn’t Scale Link to heading

At first, manual tuning feels reasonable.

You change a parameter.

Train again.

Check the result.

Repeat.

depth=3
depth=5
depth=7
depth=10

This works for a few experiments.

Then the number of possibilities explodes.

Imagine:

5 learning rates
×
5 tree depths
×
5 estimators

That’s already: 125 experiments

Nobody wants to run those manually.

One solution is Grid Search.

The idea is simple.

Try every combination.

Parameter Space
        ↓
Try Everything
        ↓
Select Best Result

This guarantees we explore all candidate configurations.

The downside is obvious.

It becomes expensive very quickly.

As the number of parameters grows, the search space grows too.

This led me to another interesting observation.

Not every parameter matters equally.

Instead of trying every combination, we can randomly sample configurations.

Parameter Space
        ↓
Random Samples
        ↓
Best Candidate

This approach is called Random Search.

Surprisingly, it often performs nearly as well as Grid Search while evaluating far fewer models.

Sometimes working smarter beats working harder.

Why Cross Validation Matters Again Link to heading

Earlier in this series, I learned about cross validation.

Today I realized why it becomes even more important.

Imagine two parameter combinations.

Configuration A → 91%

Configuration B → 90%

If those numbers come from a single train-test split, the comparison may be misleading.

Cross validation provides a more reliable evaluation.

Instead of optimizing for one lucky split, we’re optimizing for performance across multiple splits.

Configuration
        ↓
Cross Validation
        ↓
Average Score

This gives us much more confidence in the result.

AutoML Link to heading

At this point I started wondering:

Why am I choosing algorithms manually at all?

Why not automate the entire search process?

This is the idea behind AutoML.

Instead of manually selecting:

  • Algorithms
  • Hyperparameters
  • Search strategies

we let a system explore the possibilities automatically.

Dataset
    ↓
AutoML
    ↓
Best Candidate Model

The goal isn’t to replace engineers.

The goal is to automate repetitive experimentation.

A Practical Example Link to heading

One lightweight AutoML framework I explored was FLAML.

The workflow looks surprisingly simple.

Dataset
    ↓
FLAML
    ↓
Model Selection
    ↓
Hyperparameter Optimization
    ↓
Best Model

Instead of manually training dozens of models, the search process becomes automated.

What previously required hours can often be reduced to minutes.

The Next Bottleneck Link to heading

All of this creates a new problem.

Imagine: 100 Experiments

Each experiment takes: 5 Minutes

Total time: 500 Minutes

More than 8 hours.

Now we’re waiting on compute instead of ideas.

This is where parallel execution becomes important.

Libraries like Joblib can run multiple experiments simultaneously.

IMAGE: Multiple experiments running in parallel
IMAGE: Multiple experiments running in parallel

Instead of running experiments sequentially, we can evaluate them in parallel.

The search becomes much faster.

What I Learned Today Link to heading

Before today, I thought model training was the difficult part.

Now I think model selection is often the harder problem.

Training one model is easy.

Finding the best model requires systematic experimentation.

That means:

  • Reliable evaluation
  • Hyperparameter tuning
  • Automated search
  • Efficient compute usage

This starts to feel much closer to engineering than trial and error.

Today’s Takeaway Link to heading

Machine learning is not about training a model.

It’s about searching for a better one.

What’s Next? Link to heading

Today we explored how teams run many experiments to find better models.

That creates another challenge.

What happens when training is no longer a single Python script?

What happens when we have:

Validate Data
    ↓
Feature Engineering
    ↓
Train
    ↓
Evaluate
    ↓
Register Model

How do we orchestrate all of that reliably?

When does a training script become a pipeline?

In Day 5, we’ll explore machine learning pipelines and how platforms like Kubeflow orchestrate complex workflows.