Как предсказать переменную как можно ближе, но не больше её?
Использую GradientBoostingRegressor sklearn для предсказания переменной, задача не в том чтобы предсказать её как можно точнее, а подобраться как можно ближе с одной стороны. То есть допустим y_true=[9,6,4,9,7], значит y_pred должен быть [<=9,<=6,<=4,<=9,<=7] .Предсказание [0,0,0,0,0] будут подходить в любом случае, но надо подобраться как можно ближе, и ни в коем случае не больше. То есть нужно что то вроде ограничения на предсказание в виде целевой переменной. Как это можно реализовать? То есть подскажите хотя бы сторону куда копать (в голову пришло сделать нейросеть с генетическим алгоритмом и изменить в нем функцию ошибки)
Вообще не соображаю в предсказаниях; но сама постановка вопроса странная: либо мы знаем ограничение, тогда нет смысла его предсказывать; либо не знаем, тогда непонятно, что мы собрались предсказывать.
Мы предсказываем что и на основе чего? Следующий элемент последовательности на основании предыдущего/предыдущих? Или как?
В принципе, вы правы. Любая задача по подбору модели (ну, почти любая) - это задача оптимизации. Начиная с классической регрессии, где минимизируется сумма квадратов отклонения. Другое дело, что классическая регрессия - линейная, квадратическая, логнормальная, лог-лог и пр. можно (и нужно) сначала решать аналитически, а потом только в полученные формулы подставлять данные выборки. Так экономится время решения, да и точность решения возрастает.
Но проблема заключается в том, что как только мы либо выходим в класс других функций приближения, либо меняем критерий оценки найти аналитическое решение не получается. И тут уже надо искать какие-то другие подходы. В том числе и нейросети, которые в конечном итоге есть не что иное, как использование алгоритмов градиентной минимизации и обратного распространения ошибки. (Про "генетические алгоритмы" говорить ничего не буду).
Теперь про исходную задачу ТС. Он просто хочет провести регрессию, но со специфической функцией потерь, которая при отрицательных значениях ошибки предсказания будет - например - квадратичной, а при положительных - примет какую-то фиксированное но большое значения. Понятно, что такая функция не дифференцируема, а следовательно аналитически ее решить невозможно. Т.о. остается второй путь - использование алгоритмов параметрической оптимизации.
P.S. Я правда не уверен, что ТС понимает до конца проблему, т.к. с одной стороны он хочет решить задачу "предсказания", а с другой стороны говорит о том, что надо "подобраться как можно ближе, и ни в коем случае не больше". А в задачах предсказаниях не бывает "ни в коем случае", все строиться на вероятностях. Про другие неточности в формулировке, которые сразу же бросаются в глаза - тоже уже сказали выше в комментарии к самому вопросу. Но это уже другая сторона вопроса, о которой пока не будем.
dmshar, вы правильно поняли , но мне хотелось бы инструменты для реализации. Как изменить эту функцию потерь? Писать с нуля, или можно обойтись scipy и sklearn?