Вопрос или проблема
У меня есть регрессионный случайный лес, который нацелен на непрерывную переменную (сумма продаж). Есть ли какая-либо конфигурация для классификатора, которая позволяет установить максимум и минимум для целевой переменной?
Пример: Предсказанная sales_amount
должна быть между $10000$ и $20000$.
Регрессор случайного леса не имеет такой возможности, обычно, если у вас достаточно данных и корректный процесс обучения, предсказания должны находиться в приемлемом диапазоне. Конечно, они могут выходить за пределы вашего диапазона, но ошибка может быть все еще приемлемой.
Если вы ищете модель, способную учитывать границы предсказаний, я предлагаю вам взглянуть на Facebook Prophet, так как это может быть полезно для вашей задачи.
Быстрый старт Python Prophet
Для предсказаний диапазона вы можете указать “Прогнозирование роста”:
При прогнозировании роста обычно существует какой-то максимальный достижимый показатель: общий размер рынка, общая численность населения и т. д. Это называется вместимостью, и прогноз должен достигать насыщения в этой точке.
Вот ссылка на эту часть
Прогнозирование роста и насыщения минимума
Еще одна заметка – Prophet оказывается довольно полезным для прогнозирования любых временных рядов, связанных с сезонностью, так что вы можете достичь еще лучших результатов в прогнозировании продаж по сравнению со случайным лесом.
Если в ваших обучающих данных нет никаких наблюдений, которые меньше 10,000 и больше 20,000, то случайный лес никогда не сделает предсказание за пределами этих границ. Поэтому, если вы исключите эти наблюдения из обучающих данных, вы получите желаемый эффект.
Я лишь предлагаю это как вариант, я не знаком с вашей проблемой, поэтому не знаю, является ли это хорошим подходом или нет.
Согласно этому ответу https://stats.stackexchange.com/a/205771/217009
Ваше предсказание модели всегда будет находиться между целевыми значениями обучения. Если в вашем обучающем наборе есть значение меньше 20,000, вам не о чем беспокоиться.
В этом примере выход не будет пересекать входное целевое значение.
В вашем случае я предполагаю, что в обучающих данных есть целевое значение больше 20,000. Но все равно вы хотите, чтобы выходное целевое значение было меньше 20,000. Есть два решения:
- Если обучающие примеры с целевым значением более 20,000 являются выбросами или очень редкими случаями. Попробуйте уменьшить размер дерева (уменьшите переобучение).
- Используйте нормализатор и измените выходное значение в диапазоне от 10,000 до 20,000
Ответ или решение
Когда вы работаете с регрессионной моделью, такой как Random Forest, возникновение предсказаний, выходящих за пределы заданного диапазона (например, продаж от 10,000 до 20,000), становится важной задачей. Хотя Random Forest не имеет встроенной функции для задания предельных значений, существуют несколько подходов, которые вы можете применить для достижения желаемого результата.
1. Отбор данных для обучения
Если ваш набор данных не содержит записей, значение которых меньше 10,000 или больше 20,000, то Random Forest не сможет предсказать значения вне этого диапазона. Вы можете просто удалить эти выбросы из тренировочного набора данных. Однако этот метод подходит только в том случае, если выбросы являются необоснованными. Так вы гарантируете, что модель будет обучена на данных, которые соответствуют вашему целевому диапазону.
2. Настройка глубины деревьев и шансов переобучения
Если у вас все еще есть данные, которые превышают 20,000 и не представляют собой выбросы, вы можете попробовать уменьшить сложность вашего дерева. Это можно сделать путем настройки параметров модели, таких как максимальная глубина дерева или минимальное количество образцов в листе. Это может помочь модели сосредоточиться на более крупных значениях, которые находятся в пределах заданного диапазона.
3. Нормализация предсказаний
Другим подходом является нормализация выходных значений вашей модели. Вы можете масштабировать предсказания так, чтобы они находились в диапазоне от 10,000 до 20,000. Однако важно помнить, что такая нормализация может привести к искажению результатов, и вам следует использовать этот метод с осторожностью.
# Пример нормализации
predictions = model.predict(X)
predictions = np.clip(predictions, 10000, 20000)
4. Использование других моделей
Если проблема с выходом за пределы диапазона остается неудовлетворительной, вы можете рассмотреть возможность использования других моделей, таких как Facebook Prophet. Prophet специально разработан для прогнозирования временных рядов и позволяет устанавливать предельные значения для прогнозируемых значений, включая возможность насыщающих прогнозов, что может быть полезно для ваших целей.
Резюме
Таким образом, если ваши данные имеют значения вне желаемого диапазона, вы можете попробовать один из следующих подходов:
- Удалите выбросы из обучающего набора.
- Настройте сложность дерева, чтобы избежать переобучения.
- Нормализуйте предсказания.
- Исследуйте альтернативные модели, такие как Prophet для более точного прогнозирования.
Следуя этим методам, вы сможете более эффективно управлять предсказаниями и достичь желаемых результатов. Не забывайте, что выбор подхода будет зависеть от вашего конкретного случая и характера имеющихся данных.