Вопрос или проблема
Мой текущий набор данных имеет форму 5300 строк на 160 столбцов с числовой целевой переменной в диапазоне=[641, 3001].
Это не большой набор данных, но в общем должно быть достаточно для достойного качества регрессии. Столбцы являются признаками из различных последовательных этапов процесса.
Цель проекта – предсказать числовую переменную, при этом желательно быть очень точным в области до 1200, что составляет 115 строк (2,1%). Для целевых переменных выше 1200 точность может быть ниже, чем в области [640, 1200]. Целевая переменная нормально распределена со средним ~1780 (25%: 1620, 75%: 1950) и дисперсией 267.5.
предсказание vs фактическое:
график остатков:
Моя проблема заключается в том (см. графики выше), что независимо от того, что я пробую, диапазон предсказаний (y_hat) очень ограничен и довольно случаен (Training RMSE ~300, Test RMSE ~450), лучшее среднее абсолютное отклонение для y-значений <= 1200 ~= 120.
Я уже пробовал:
- очистка признаков
- поэтапное добавление признаков для сравнения производительности/информационного выигрыша модели
- генерация признаков
- получение новых признаков (по бизнес-логике)
- генерация признаков
- перекрестное произведение признаков
- разности с предыдущими строками
- разности между признаками
- разности по признакам относительно среднего
- продолжительности на основе временных меток
- нормализация, масштабирование
- логарифмическое преобразование целевой переменной
- наборы с переизбытком и недоступностью
- различные алгоритмы (используя GridSearchCV для настройки гиперпараметров):
- sklearn [SVR, RandomForrestRegressor, LinearRegression, Lasso, ElasticNet]
- xgboost
- (mxnet.gluon.Dense)
Каков был бы ваш подход? Есть ли у вас совет, какую технику я мог бы попробовать или что, вероятно, я пропустил? Или более вероятно, что обучающие данные просто не подходят под целевую переменную?
Ваши остатки огромны, что не удивительно, учитывая, что ваши данные очень вариабельны, линейная модель может быть не лучшим выбором для этой задачи. Вы могли бы попробовать преобразовать ваши данные (логарифм, квадратный корень) в зависимости от природы ваших данных, чтобы уменьшить изменчивость, но, как я сказал, ваша изменчивость огромна.
В качестве альтернативы вы могли бы попробовать моделировать вариацию с помощью смешанной модели, если это имеет смысл для ваших данных, обладая некоторыми дополнительными знаниями о переменной.
Кроме того, вы могли бы попробовать другой алгоритм для этой задачи.
Ответ или решение
Проблема с плохой производительностью регрессии на несбалансированном наборе данных, как в вашем случае, может быть многогранной и требовать применения различных подходов для ее решения. Давайте подробно рассмотрим основные аспекты этой проблемы.
1. Характеристики данных
Ваш набор данных состоит из 5300 строк и 160 столбцов с целевой переменной, значения которой варьируются от 641 до 3001. Как видно из вашего описания, в диапазоне от 640 до 1200 имеется очень мало наблюдений (115 строк, что составляет всего 2,1% от общего количества). Это несоответствие в распределении целевой переменной может привести к проблемам в предсказаниях, особенно в области низких значений.
2. Анализ распределения целевой переменной
Распределение целевой переменной похоже на нормальное, с средним значением около 1780 и разбросом. Однако ваш основной интерес заключается в точности прогнозирования значений ниже 1200, поэтому важно учитывать, как хорошо модель справляется с обрабатыванием таких меньшинств. Такой дисбаланс может привести к тому, что алгоритмы будут менее чувствительны к редким, но критически важным классам данных.
3. Метрики оценки
Используемые вами метрики, такие как RMSE (корень среднеквадратичной ошибки) и MAE (средняя абсолютная ошибка), указывают на то, что модель показывает большие остатки. Это может говорить о том, что модель не справляется с переменной гибкости данных, или что в гридпоиске не были полностью охвачены важные гиперпараметры.
4. Альтернативные подходы к моделированию
-
Модели на основе градиентного бустинга: Такие как CatBoost или LightGBM, могут справляться с несбалансированными наборами данных лучше, чем традиционные алгоритмы. Они также позволяют работать с нечисловыми данными и могут включать в себя специальные функции учета веса наблюдений.
-
Деревья решений: Рассмотрите возможность использования адаптивных методов, таких как регрессионные деревья, которые могут лучше захватывать нелинейные зависимости в данных.
5. Управление дисбалансом
Попробуйте применить методы управления дисбалансом, чтобы дать модели больше "веса" редким наблюдениям:
- Стратегии взвешивания: Подбирайте веса для разных классов, чтобы оптимизировать справедливость модели.
- Синтетическое создание данных: Используйте SMOTE или аналогичные методы для увеличения количества наблюдений для классов, где наблюдений недостаточно.
6. Улучшение признаков
Ваш подход к созданию признаков выглядит многообещающим, но стоит рассмотреть возможность более глубокого анализа:
- Проведите оценку важности признаков и удалите те, которые имеют низкую предсказательную мощность, чтобы улучшить общую интерпретируемость модели.
- Попробуйте использовать методы отбора признаков, такие как Lasso, которые могут помочь в выявлении наиболее значимых переменных.
7. Преобразования данных
Преобразование целевой переменной может помочь улучшить производительность модели. Попробуйте следующие методы:
- Логарифмическое преобразование целевой переменной, чтобы уменьшить ее разброс и лучше сосредоточиться на более низких значениях.
- Квадратный корень или другие виды трансформаций, которые могут помочь улучшить стабильность и распределение целевой переменной.
8. Сложные модели
Рассмотрите использование более сложных моделей, таких как:
- Смешанные модели, которые учитывают различные источники вариации.
- Модели глубокого обучения, такие как нейронные сети, которые могут обеспечить лучшее представление о сложных зависимостях.
Заключение
Главным образом, ключ к решению вашей проблемы заключается в том, чтобы совместить различные подходы — от улучшения управления дисбалансом до применения более сложного моделирования. Не бойтесь экспериментировать с различными комбинациями методов и ищите новые способы улучшить точность ваших прогнозов, особенно в центральной области интересов.
Следуя этим рекомендациям, вы должны улучшить производительность вашей модели и её способность к адаптации к необходимым задачам.