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.1 | 0.1 × (100-90) = 1.0 | 1.0 |
| ᵩ = 0.5 | 0.5 × (100-90) = 5.0 | 5.0 |
| ᵩ = 0.9 | 0.9 × (100-90) = 9.0 | 9.0 |
Данные: y = 100, ŷ = 110
| Квантиль (ᵩ) | Расчет | Результат |
|---|---|---|
| ᵩ = 0.1 | (1-0.1) × (110-100) = 9.0 | 9.0 |
| ᵩ = 0.5 | 0.5 × (110-100) = 5.0 | 5.0 |
| ᵩ = 0.9 | (1-0.9) × (110-100) = 1.0 | 1.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
- Богатая информация: Дает полное представление о распределении
- Робастность: Менее чувствительна к выбросам, чем MSE
- Гибкость: Можно настроить асимметрию штрафов под задачу
- Интерпретируемость: Квантили имеют четкую вероятностную интерпретацию
Недостатки
- Вычислительная сложность: Нужно обучать отдельную модель для каждого квантиля
- Нестабильность: Может быть неустойчивой при малых объемах данных
- Сложность реализации: Не все алгоритмы поддерживают 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 — это мощный инструмент для:
- Построения прогнозных интервалов
- Учета асимметричных затрат на ошибки
- Оценки неопределенности прогнозов
- Работы с разнородными данными
Ключевое преимущество: Она позволяет выйти за рамки прогнозирования среднего значения и получить полное представление о распределении целевой переменной, что критически важно для принятия решений в условиях неопределенности.