Я хотел представить эту распространенную ситуацию, которая возникает в задачах регрессии на практике — как и когда по-разному обрабатывать завышенные и заниженные прогнозы.

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

Рассмотрите гипотетическую задачу прогнозирования продаж бананов в ближайшем к вам супермаркете.

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

Вам нужно спрогнозировать объем продаж на любой день в будущем. Разумный прогноз составляет 100 единиц ; минимизируя либо RMSE (среднеквадратическую ошибку), либо MAE (среднюю абсолютную ошибку), две обычно используемые функции потерь.

RMSE минимизируется с помощью условного среднего, MAE — с помощью условной медианы.

Это лучший способ предсказать продажи?

Рассмотрим следующие два случая:

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

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

  • Компания хочет знать, сколько запасов она должна хранить, чтобы удовлетворить спрос на продажу.

Если вы храните запасы только для 'ожидаемых' продаж, всякий раз, когда продажи превышают "ожидаемые" (более 100), товар будет отсутствовать на складе, и вы пропустит потенциальную продажу.

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

Опять среднее значение = медиана = 100 🍌 ; Итак, прогноз = 100 🍌 минимизирует как RMSE, так и MAE.

Расширяя пункт 2 выше, если вы решите запастись только 100 🍌, исходя из реальной стоимости будущих продаж:

Всего потерянных продаж = 6 🍌

Сходным образом,

  • Прогноз = 101 🍌 : Упущенные продажи = 2 🍌
  • Прогноз ≥ 102 🍌 : упущенные продажи = 0 🍌

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

Однако чрезмерные запасы тоже не бесплатны. Если банан не будет продан к концу дня, он начнет гнить.

В практических задачах недопрогнозирование и перепрогнозирование могут иметь разную цену

Давайте также рассмотрим потери с некоторыми примерами здесь

Вычисление этого для различных возможных значений:

Мы можем игнорировать все прогнозы ≤97 или ≥103, потому что 98 бананов имеют те же потери, но лучшие продажи, чем 97 или меньше бананов, а 102 банана имеют те же продажи, но меньше потерь, чем 103 или более бананов.

Теперь у нас остались следующие возможные (не доминирующие) решения:

98, 99, 100, 101, 102

Можем ли мы теперь решить, какое решение является лучшим?

Нет, нам нужен какой-то способ сравнить потерю с потерей продажи.

В конце дня непроданные бананы выбрасываются.

  • Если вы зарабатываете только 10% на банане, чтобы восстановить 1 потерянный банан, вам придется продать 9 дополнительных бананов,
  • Если вы заработаете 50% на банане, чтобы восстановить 1 потерянный банан, вам придется продать 1 дополнительный банан,
  • Если вы заработаете 80% на банане, чтобы восстановить 4 потерянных банана, вам нужно будет продать только 1 дополнительный банан,

Поэтому нам нужно знать вышеуказанный компромисс, т. е. стоимость завышенного прогноза и стоимость заниженного прогноза.

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

Теперь предположим, что вы можете получить от деловых людей или оценить, что валовая прибыль составляет 75%, а непроданные запасы в конце дня действительно стоят 0.

Как эта информация меняет наш лучший прогноз?

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

Как насчет того, чтобы сделать это напрямую с помощью нашей регрессионной модели?

Мы узнаем только о RMSE и MAE для регрессии, это симметричные функции потерь. В реальной жизни многие проблемы асимметричны по своей природе, т. е. стоимость недопрогнозирования и перепрогнозирования не одинакова. Несмотря на то, что таких проблем на практике много, они почти не рассматриваются в контексте теории регрессии.

Идеальной функцией потерь для использования в этих случаях является квантильная функция потерь.

Вот как это выглядит графически, и вот что можно вывести из первых принципов.

В питоне это элегантно просто реализовать

def quantile_loss(q, y, f):
# q: Quantile to be evaluated, e.g., 0.5 for median.
# y: True value.
# f: Fitted (predicted) value.
e = y - f
return np.maximum(q * e, (q - 1) * e)

Квантильное значение для 75% валовой прибыли в приведенном выше примере будет равно 0,75, поскольку занижение прогноза (упущенная продажа) в три раза хуже, чем завышение прогноза (расходы).

Пример использования в Керасе,

import keras.backend as K
def quantile_loss(q, y, f):
  # q: Quantile to be evaluated, e.g., 0.5 for median.
  # y: True value.
  # f: Fitted (predicted) value.
  e = y - f
  return np.maximum(q * e, (q - 1) * e)

quantile = 0.75
model.compile(loss=lambda y,f: quantile_loss(quantile,y,f), optimizer='adagrad')

Квантильная потеря актуальна в задачах, где вас интересует распределение значений прогноза, а не только «ожидаемое» значение прогноза.

Это особенно актуально, когда:

  1. Ошибки несимметричны (недопрогнозирование — это не то же самое, что перепрогнозирование), как в случае выше.
  2. В линейных моделях, где невязка нарушает предположение о постоянной дисперсии.
  3. Когда вас интересуют только некоторые процентили прогноза (чтобы делать заявления типа — в 90% случаев это будет меньше x)

Для решения каких других практических задач может хорошо работать квантильная потеря fn?

  • Цены на объекты

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

  • Оценка времени

У Google есть функция, которая предупреждает вас о том, что вы должны отправиться в пункт назначения вовремя, если он предлагает «ожидаемое» время — в некоторых случаях вы будете раньше, но иногда вы можете опоздать и, возможно, пропустить свой рейс. В этих случаях желательно прогнозировать более высокий процентиль (т. е. завышенное прогнозирование времени до места назначения).

Дайте мне знать в комментариях, если вы столкнулись с такими проблемами.

Надеюсь, это полезный трюк, и вы сможете вспомнить его в следующий раз, когда будете решать проблему регрессии.

Использованная литература :

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

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