I'm predicting multiclass probabilities using CatBoost Classifier.
I have a balanced dataset with roughly 4000 rows, 13 features, 4 target class labels. Dataset has some outliers which I decided not to remove.
I'm using random_state=42
while splitting data and as a CatBoost parameter during both hyperparameters tuning and model evaluation with best found hyperparameters.
My model training and evaluation steps:
- Split data into train, val, test sets in 0.7:0.15:0.15 proportion with stratification.
- Perform hyperparameters tuning with Optuna, using LogLoss as an evaluation metric (training on train set, evaluating on val set) and performing early stopping rounds using
(X_val, y_val)
as model'seval_set
during hyperparameters tuning. - Fit model with best found hyperparameters on train set (
model.fit(X_train, y_train)
) - Predict probabilities on
X_train
andX_test
:model.predict_proba(X_train)
andmodel.predict_proba(X_test)
- Compare metrics on train and test set, the results are following:
Log Loss | AUC-ROC | Brier Score | ECE | |
---|---|---|---|---|
Train | 0.30 | 0.99 | 0.07 | 0.05 |
Test | 0.55 | 0.94 | 0.08 | 0.02 |
Do these results suggest that my model is overfitting or is there something wrong with my training and evaluating steps?
The difference in LogLoss seems to be severe (which I assume is a sign of overfitting), AUC-ROC and Brier Score seem to be mostly fine (I think?), while ECE gets better on test set which I find weird in case of overfitting. Also the best Optuna trial LogLoss on validation set was nearly similar to what I got when evaluating model on test set after hyperparameters tuning.