EGBDT LogLoss — кривые обучения
Про синтетический LogLoss-датасет уже было два поста. Давайте разберем следующий эксперимент.
В датасете две группы статических признаков:
📈 f1…f8: признаки с растущим uplift
📉 f9…f16: признаки с падающим uplift
И есть дополнительные признаки [1, t] для учета bias и тренда.
Теперь к графику. Это learning curve: зависимость loss от числа стадий (сколько деревьев уже добавлено в модель). Изначально я рисовал его для отладки. Ожидал падение loss на первых 16 шагах, но первые результаты не совпадали из-за нескольких багов. Сейчас кривые выглядят разумно, но есть несколько интересных деталей.
Loss на train падает на шагах 1…16, затем почти перестает уменьшаться.
Для точек 1…16 train-loss стабильно снижается. После этого почти останавливается - ровно то, что я и ожидал.
На каждом этапе используется decision stump (дерево высоты 1), то есть по сути один признак на шаг. Каждый новый признак может добавить информацию и снизить loss. Когда полезные переменные заканчиваются, выжимать уже нечего.
Разрыв между train и test очень большой.
Я пока не до конца понимаю природу этого gap. Снаружи это выглядит как переобучение.
Интересно прогнать тот же сетап с другими параметрами и проверить, можно ли gap уменьшить (learning rate, регуляризация, subsampling, minimum leaf size - стандартные ручки).
Странный плоский участок test-кривой около шагов 8→9.
На train loss уменьшается на каждом шаге. На test между 8-й и 9-й точками - почти горизонтальный участок. Почему?
Первая гипотеза: первые 8 деревьев в основном используют одну группу признаков, а примерно на шаге 9 модель впервые переключается на другую. Тогда следующий вопрос - почему эта группа хуже обобщается? Признаки слабее, шумнее, сильнее коррелируют или как-то странно взаимодействуют с train/test split?
Столько интересных вопросов.
