What you are actually searching over
What it is
Parameters are fitted from the data by the learning algorithm — coefficients, split thresholds, centroids. Hyperparameters are the inputs to that algorithm, chosen before it runs: the penalty strength, the tree depth, the number of components, the resampling ratio, the threshold. Only the second kind is searched.
Why it matters
Drawing the line precisely is what tells you which quantities need a validation set. A fitted parameter is validated by the model's own objective; a hyperparameter has no such objective, so every one you choose consumes some of your validation data's credibility.
In the real world: Settings like tree depth and learning rate that decide how well the churn model generalises.
Visual example
Parameters vs hyperparametersThe same pipeline, split into what the fit decides and what you decide — and it is the right-hand column that costs validation data.
Why this matters
Two of the three searched rows are preprocessing, not the model. That is typical, and it is why tuning has to happen over the whole pipeline object rather than over the estimator at the end of it.
Common misconception
Wrong idea: hyperparameter tuning means tuning the model.
Correct idea: it means tuning every choice you made. The number of PCA components and the decision threshold are hyperparameters in exactly the same sense as max_depth, and leaving them out of the search does not make them unchosen.
from sklearn.linear_model import LogisticRegression
model = LogisticRegression(C=0.5, penalty="l2", max_iter=2000) # hyperparameters
model.fit(X_train, y_train)
model.coef_, model.intercept_ # parameters: fitted, not chosen
model.get_params() # hyperparameters: chosen, not fitted
model.set_params(C=2.0) # ...and therefore searchable
# Anything with a trailing underscore was learned. Anything in get_params() was set.
[k for k in vars(model) if k.endswith("_")]Forgetting that preprocessing choices are hyperparameters too. SelectKBest(k=...), PCA(n_components=...), SMOTE(sampling_strategy=...) and the decision threshold are all settings you picked by looking at scores, and every one of them needs to sit inside the search rather than be decided once up front.