Как оптимизировать мою регрессионную модель, если моя целевая переменная имеет правостороннее распределение?

Вопрос или проблема

Недавно я работал над задачей, где целевая переменная является непрерывной, с данными, имеющими сильную правую асимметрию. Пожалуйста, смотрите изображение ниже

введите описание изображения здесь

Если я хочу создать регрессию, пожалуйста, предложите лучший подход:

    1. Следует ли мне делать какие-либо преобразования?
    
    2. У нее очень длинный хвост, должен ли я игнорировать его или как с ним справляться?

    3. Требуется ли изменение функции потерь (сейчас используется SSE)?
    
    4. Каковы лучшие метрики оценки (сейчас используется MAPE)?

До сих пор я удалял выбросы после 99,5 перцентиля, и с моделью XGBoost мне удалось достичь 70% MAPE.

Возможно, вам стоит рассмотреть логарифмическое преобразование или преобразование квадратного корня, чтобы уменьшить асимметрию, но они работают только с положительными значениями. Это также может помочь вам разобраться с длинным хвостом значений, “подтягивая их ближе”.

  1. Используйте логарифмическое преобразование или преобразование бокса-кокса (используйте преобразование Йео-Джонсона, если у вас есть отрицательные значения).
  2. Удаляйте экстремальные выбросы, способствующие хвосту, и проверяйте эксцесс, чтобы увидеть, каков хвост.

.

Ответ или решение

Когда вы работаете с моделью регрессии и ваш целевой признак имеет правостороннее асимметричное распределение, существует несколько стратегий для улучшения точности модели. Рассмотрим каждую из них.

Теория

Целевой признак, который имеет правостороннюю асимметрию, часто содержит много маленьких значений и некоторые очень большие значения, что может исказить прогнозы модели регрессии. Это особенно актуально для моделей, чувствительных к распределению данных, таких как линейная регрессия.

  1. Трансформация: Применение логарифмической или другой трансформации, например, Box-Cox или Yeo-Johnson, может сгладить распределение данных и улучшить их приближение к нормальному распределению, что, в свою очередь, улучшит производительность модели.

  2. Анализ выбросов: Длинный хвост в данных может указывать на наличие выбросов. Хотя 99.5-й перцентиль был использован для его коррекции, важно исследовать и понять природу этих выбросов.

  3. Модификация функции потерь: Если вы используете стандартную сумму квадратов ошибок (SSE), это может сделать вашу модель менее устойчивой к экстремальным значениям из-за акцента на большие ошибки. Рассмотрите возможность использования функции потерь, менее чувствительной к выбросам, например, Huber Loss.

  4. Оценочные метрики: MAPE (абсолютная средняя процентная ошибка) может быть неэффективной в правосторонне асимметричных данных из-за непропорционально большого вклада от небольших значений. Вместо этого вы можете рассмотреть такие метрики, как SMAPE или среднеквадратическую ошибку (RMSE).

Пример

Рассмотрим гипотетический сценарий, где продажи продукта имеют то же правостороннее распределение.

  1. Трансформация данных: Применение логарифмической трансформации к данным о продажах уменьшает асимметрию и создает более симметричное распределение, повышая интерпретируемость модели.

  2. Анализ и обработка выбросов: Удаление наблюдений, выходящих за рамки 99.5-го перцентиля, может снизить влияние загрязненных данных.

  3. Функция потерь: Переход на Huber Loss поможет модели не так сильно множить ошибки на выбросах.

  4. Метрика: Добавление RMSE обеспечит устойчивую оценку ошибки модели.

Применение

Теперь, когда мы знаем о теоретических и практических подходах, давайте посмотрим, как их реализовать.

  1. Трансформация ваших данных: Рассмотрите возможность использования логарифмической или Box-Cox трансформации на этапе предварительной обработки данных. Если ваш признак содержит отрицательные значения, используйте Yeo-Johnson трансформацию, которая работает на данных с любым знаком.

    from sklearn.preprocessing import PowerTransformer
    
    power_transformer = PowerTransformer(method='yeo-johnson')
    target_transformed = power_transformer.fit_transform(target_variable.reshape(-1, 1))
  2. Обработка хвоста: Вместо грубого удаления верхнего перцентиля, используйте статистические методы для определения выбросов, такие как IQR или Z-оценка, что позволит вести более обоснованную работу с выбросами.

  3. Альтернатива функции потерь: На уровне модели попробуйте Huber Loss. В XGBoost это может быть реализовано путем установки параметра objective='reg:huber' или через адаптацию функции потерь в индивидуальной реализации модели.

  4. Подбор метрики: Рассмотрите использование SMAPE или MASE (Mean Absolute Scaled Error), которые могут обеспечить более надежную оценку производительности модели на данных с правосторонним распределением.

from sklearn.metrics import mean_squared_error

mape = mean_absolute_percentage_error(y_true, y_pred)
rmse = mean_squared_error(y_true, y_pred, squared=False)
smape = 100 * np.mean(2 * np.abs(y_pred - y_true) / (np.abs(y_true) + np.abs(y_pred)))

# Возможно, на ранних этапах экспериментов лучше использовать RMSE.

Интеграция этих стратегий позволит вам обновить и улучшить вашу модель, учитывая специфику ее целевого признака. Простые преобразования, адаптация функций потерь и выбор соответствующих метрик оценки значительно улучшат интерпретацию и эффективность ваших предсказаний, особенно в контексте данных с длинным хвостом распределения.

Оцените материал
Добавить комментарий

Капча загружается...