255 Leaves, 3000 Rows

A LightGBM model trained on 3,000 rows reports train AUC 0.995 and validation AUC 0.71:

params = {
    'objective': 'binary',
    'num_leaves': 255,
    'max_depth': -1,
    'min_data_in_leaf': 20,
    'learning_rate': 0.05,
    'n_estimators': 400,
}

The same data under XGBoost's level-wise growth at max_depth=6 overfits far less. Which change targets the mechanism behind the difference?

A

Drop min_data_in_leaf to 1 and add trees: at 3,000 rows a floor of 20 is blocking splits, and the validation gap is an underfitting signal

B

Set max_depth=12 and leave num_leaves at 255: a depth cap is the documented control, so the tree is constrained once one exists

C

Set boosting='gbdt' to switch from leaf-wise to level-wise growth and match XGBoost's tree shape

D

Cut num_leaves to the low tens and raise min_data_in_leaf: leaf-wise growth spends the whole 255-leaf budget on 3,000 rows, so the leaves end up isolating a handful of rows each