Вопрос или проблема
Какая функция потерь является лучшей функцией потерь при использовании регрессии XGB с сильно искаженными данными?
Искаженность данных очень высока. Я использовал XGBoost с целевой функцией линейной регрессии (но данные были преобразованы в логарифмическое пространство). Это показало лучшие результаты, чем использование целевой функции гамма. Есть ли другие предложения?
Вы могли бы попробовать задать веса потерь для каждой точки данных, чтобы некоторые точки данных не доминировали в потере.
Поскольку это может быть вопрос для других людей, вот результаты моих исследований:
Я попробовал два варианта, используя регрессию XGB с разными целевыми функциями, включая:
-
Целевая функция линейной регрессии (“reg:linear” или “reg:squarederror”) и преобразование целевой переменной в логарифмическое пространство
-
Гамма-целевая функция (“reg:gamma”), которая полезна для искаженной целевой переменной с гамма-распределением, например, для серьезности страховых убытков. В этом случае я не преобразовывал свою целевую переменную в логарифмическое пространство.
В моем случае вариант 1 работал лучше, чем вариант 2 (примерно на 15-20%). Однако в зависимости от природы данных один из них может превзойти другой.
Кроме того, вот один потенциальный вариант для целевой функции “reg:squaredlogerror”
Ответ или решение
Вопрос выбора функции потерь при использовании XGBoost для регрессии на сильно искажённых данных — важная задача для повышения качества модели. Рассмотрим наиболее подходящие функции потерь и их особенности, учитывая ваш опыт и описанные вами результаты.
Основные функции потерь для XGBoost
-
Среднеквадратичная ошибка (MSE): Функция потерь
reg:squarederror
(линейная регрессия) является универсальным выбором и эффективно работает в большинстве случаев. Трансформация целевой переменной в логарифмическую шкалу, как вы уже сделали, часто помогает смягчить проблемы с большой вариацией и искажением распределения целевого значения. Это позволяет модели сосредоточиться на более значимых изменениях и улучшать точность прогноза. -
Гамма-регрессия: Функция
reg:gamma
хорошо подходит для оценки данных, распределённых по гамма-распределению. Однако, как вы отметили, в вашем конкретном случае она показала худшие результаты по сравнению с весовым подходом. Это может быть связано с тем, что данная функция потерь фокусируется на данных с низкими значениями и трудно обрабатывает выбросы. Гамма-регрессия более эффективна при наличии естественной интерпретации целевых переменных, таких как страховые выплаты. -
Средняя квадратная логарифмическая ошибка: Функция
reg:squaredlogerror
, предложение которой прозвучало, представляет собой ещё один потенциально эффективный вариант при работе с сильно искажёнными данными. Эта функция потерь также учитывает трансформацию целевого значения в логарифмическую шкалу, что может улучшить качество модели, особенно при наличии выбросов.
Рекомендации по улучшению моделирования
-
Веса примеров: Использование весов для отдельных примеров — хорошая практика при работе с сильно искаженными данными. Это может снизить влияние выбросов и более точно отразить характеристику основной массы данных. В XGBoost можно задать веса для каждого экземпляра, чтобы уменьшить влияние менее значительных значений на функцию потерь.
-
Гиперпараметры: Попробуйте оптимизировать другие гиперпараметры, такие как
max_depth
,min_child_weight
,subsample
и т. д. Это может помочь модели более точно обрабатывать искажения в распределении данных. -
Кросс-валидация: Обязательно применяйте кросс-валидацию для сравнения различных функций потерь. Это не только поможет удостовериться в их надёжности, но и ознаменует улучшения по сравнению с предыдущими попытками.
Заключение
Ваша инициатива попробовать трансформацию целевой переменной в логарифмическое пространство с последующим использованием функции reg:squarederror
дала положительные результаты. Тем не менее, не исключено, что функция reg:squaredlogerror
в сочетании с весами примеров или более глубокими гиперпараметрами также может укрепить вашу модель на наборе данных с высокой степенью искажения. Важно помнить, что предопределенного "лучшего" варианта не существует — каждый случай уникален и требует своего подхода. Поэтому продолжайте экспериментировать и оптимизировать, основываясь на ваших данных и их характеристиках.