Quantile Loss (квантильная функция потерь), также известная как Pinball Loss, — это функция потерь, используемая в задачах регрессии, когда нужно прогнозировать не просто среднее значение, а определенные квантили распределения целевой переменной.

Что такое Quantile Loss?

Quantile Loss позволяет модели обучаться прогнозировать конкретные квантили (процентили) распределения, а не только условное математическое ожидание. Это особенно полезно для:

  • Построения прогнозных интервалов
  • Оценки неопределенности прогнозов
  • Работы с гетероскедастичными данными (когда изменчивость непостоянна)
  • Задач, где переоценка и недооценка имеют разную стоимость

Формула Quantile Loss

Для одного наблюдения:

Lᵩ(y, ŷ) = { ᵩ × (y - ŷ) если y ≥ ŷ (1 - ᵩ) × (ŷ - y) если y < ŷ }

Где:

  • y — фактическое значение
  • ŷ — предсказанное значение (квантиль)
  • (tau) — целевой квантиль (от 0 до 1)

Упрощенная запись:

Lᵩ(y, ŷ) = max[ᵩ × (y - ŷ), (1 - ᵩ) × (ŷ - y)]


Как работает Quantile Loss?

Визуализация для разных квантилей:

Фактическое распределение:
       ●●●●●●●●●●●
    ●●●●●●●●●●●●●●●●●
  ●●●●●●●●●●●●●●●●●●●●●
  
Прогнозы:
ŷ₀.₁₀ ────────────────  (10-й процентиль)
ŷ₀.₅₀ ────────────────  (медиана) 
ŷ₀.₉₀ ────────────────  (90-й процентиль)

Асимметричность штрафов:

  • Для ᵩ = 0.9: Сильнее штрафует за занижение прогноза
  • Для ᵩ = 0.1: Сильнее штрафует за завышение прогноза
  • Для ᵩ = 0.5: Эквивалентна MAE (симметричный штраф)

Примеры расчета для разных квантилей

Данные: y = 100, ŷ = 90

Квантиль (ᵩ)РасчетРезультат
ᵩ = 0.10.1 × (100-90) = 1.01.0
ᵩ = 0.50.5 × (100-90) = 5.05.0
ᵩ = 0.90.9 × (100-90) = 9.09.0

Данные: y = 100, ŷ = 110

Квантиль (ᵩ)РасчетРезультат
ᵩ = 0.1(1-0.1) × (110-100) = 9.09.0
ᵩ = 0.50.5 × (110-100) = 5.05.0
ᵩ = 0.9(1-0.9) × (110-100) = 1.01.0

Практическое применение

1. Прогнозные интервалы

Обучаем две модели:

  • Нижняя граница: ᵩ = 0.1 (10-й процентиль)
  • Верхняя граница: ᵩ = 0.9 (90-й процентиль)

Получаем интервал: [ŷ₀.₁₀, ŷ₀.₉₀] с 80% покрытием

2. Управление рисками

  • Finance: Value at Risk (VaR) — оценка потенциальных потерь
  • Supply chain: Буферные запасы против дефицита

3. Задачи с асимметричными затратами

  • Энергетика: Стоимость недооценки спроса > стоимости переоценки
  • Медицина: Ложноотрицательные > ложноположительные результаты

Сравнение с другими функциями потерь

Функция потерьЧто прогнозируетОсобенности
MSEСреднее значениеЧувствительна к выбросам
MAEМедиануУстойчива к выбросам
Quantile LossЛюбой квантильКонтролируемая асимметрия

Реализация в Python

import numpy as np
import tensorflow as tf
import torch
 
### NumPy реализация
def quantile_loss_numpy(y_true, y_pred, quantile):
    """
    Вычисляет quantile loss между фактическими и предсказанными значениями
    """
    errors = y_true - y_pred
    return np.maximum(quantile * errors, (quantile - 1) * errors)
 
### TensorFlow/Keras реализация
def quantile_loss_tf(quantile):
    def loss(y_true, y_pred):
        errors = y_true - y_pred
        return tf.reduce_mean(tf.maximum(quantile * errors, (quantile - 1) * errors))
    return loss
 
### PyTorch реализация
def quantile_loss_torch(y_true, y_pred, quantile):
    errors = y_true - y_pred
    return torch.mean(torch.max(quantile * errors, (quantile - 1) * errors))
 
# Пример использования
y_true = np.array([100, 200, 150, 300])
y_pred = np.array([110, 190, 160, 280])
quantile = 0.9
 
loss = np.mean(quantile_loss_numpy(y_true, y_pred, quantile))
print(f"Quantile Loss (τ={quantile}): {loss:.2f}")

Пример: Прогноз спроса с квантильной регрессией

import pandas as pd
from sklearn.ensemble import RandomForestRegressor
 
# Обучаем модель для разных квантилей
quantiles = [0.1, 0.5, 0.9]
models = {}
 
for q in quantiles:
    # Используем QuantileRegressor или любую модель с quantile_loss
    model = RandomForestRegressor()
    # Здесь нужно модифицировать функцию потерь для квантилей
    models[q] = model
 
# Получаем прогнозные интервалы
lower_bound = models[0.1].predict(X_test)  # 10-й процентиль
median = models[0.5].predict(X_test)       # Медиана
upper_bound = models[0.9].predict(X_test)  # 90-й процентиль
 
print(f"80% прогнозный интервал: [{lower_bound}, {upper_bound}]")

Преимущества Quantile Loss

  1. Богатая информация: Дает полное представление о распределении
  2. Робастность: Менее чувствительна к выбросам, чем MSE
  3. Гибкость: Можно настроить асимметрию штрафов под задачу
  4. Интерпретируемость: Квантили имеют четкую вероятностную интерпретацию

Недостатки

  1. Вычислительная сложность: Нужно обучать отдельную модель для каждого квантиля
  2. Нестабильность: Может быть неустойчивой при малых объемах данных
  3. Сложность реализации: Не все алгоритмы поддерживают quantile loss “из коробки”

Рекомендации по использованию

Когда использовать Quantile Loss:

  • ✅ Нужны прогнозные интервалы
  • Затраты на ошибки асимметричны
  • ✅ Работа с гетероскедастичными данными
  • ✅ Оценка рисков и неопределенности

Популярные значения квантилей:

  • ᵩ = 0.5: Медиана (аналог MAE)
  • ᵩ = 0.1, 0.9: 80% прогнозный интервал
  • ᵩ = 0.05, 0.95: 90% прогнозный интервал
  • ᵩ = 0.25, 0.75: Интерквартильный размах

Связь с другими концепциями

Value at Risk (VaR):

VaRᵩ = ŷᵩ — квантиль распределения потерь

Expected Shortfall:

Среднее значение всех потерь, превышающих VaR

Квантильная регрессия:

Статистический метод, минимизирующий quantile loss

Резюме

Quantile Loss — это мощный инструмент для:

  • Построения прогнозных интервалов
  • Учета асимметричных затрат на ошибки
  • Оценки неопределенности прогнозов
  • Работы с разнородными данными

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