RMSLE (Root Mean Squared Logarithmic Error) — это корень из среднеквадратичной логарифмической ошибки. Это мощная метрика, особенно полезная для специфических типов данных.

Что такое RMSLE?

RMSLE — это метрика, которая измеряет разницу между логарифмами фактических и предсказанных значений. Она менее чувствительна к большим выбросам, чем RMSE, и обладает интересными свойствами для работы с данными, имеющими большой разброс.

Формула RMSLE

RMSLE = √[ (1/n) × Σ (log(yᵢ + 1) - log(ŷᵢ + 1))² ]

Или эквивалентно:

RMSLE = √[ (1/n) × Σ (log((yᵢ + 1)/(ŷᵢ + 1)))² ]

Где:

  • yᵢ — фактическое значение
  • ŷᵢ — предсказанное значение
  • log — натуральный логарифм (обычно)
  • n — количество наблюдений

Как рассчитывается RMSLE? Простой пример

Рассмотрим прогноз продаж:

Факт (yᵢ)Прогноз (ŷᵢ)log(yᵢ + 1)log(ŷᵢ + 1)Разность²
10090log(101) ≈ 4.615log(91) ≈ 4.511(0.104)² ≈ 0.0108
10001200log(1001) ≈ 6.909log(1201) ≈ 7.090(-0.181)² ≈ 0.0328
5070log(51) ≈ 3.932log(71) ≈ 4.263(-0.331)² ≈ 0.1096
200180log(201) ≈ 5.303log(181) ≈ 5.198(0.105)² ≈ 0.0110

Расчет RMSLE:

  1. Сумма квадратов разностей: 0.0108 + 0.0328 + 0.1096 + 0.0110 = 0.1642
  2. Среднее значение: 0.1642 / 4 = 0.04105
  3. Квадратный корень: √0.04105 ≈ 0.2026

Ключевые особенности RMSLE

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

RMSLE по-разному наказывает за занижение и завышение прогноза:

  • Сильнее штрафует за занижение (когда ŷᵢ < yᵢ)
  • Меньше штрафует за завышение (когда ŷᵢ > yᵢ)

Пример:

  • Факт: 100, Прогноз: 50 → большая ошибка
  • Факт: 100, Прогноз: 150 → меньшая ошибка

2. Относительная, а не абсолютная ошибка

RMSLE учитывает относительную ошибку, а не абсолютную:

  • Ошибка между 1000 и 2000 ≈ ошибке между 1 и 2
  • В RMSE первая ошибка была бы в 1000 раз больше!

3. Устойчивость к выбросам

Поскольку используется логарифм, большие значения не доминируют в метрике так сильно, как в RMSE.


Преимущества RMSLE

  1. Подходит для данных с большим разбросом: Когда данные охватывают несколько порядков величины (например, от 1 до 1,000,000)
  2. Устойчивость к выбросам: Не позволяет экстремальным значениям полностью доминировать в оценке ошибки
  3. Соответствует человеческому восприятию: Люди часто воспринимают ошибки относительными, а не абсолютными
  4. Работает с гетероскедастичными данными: Когда изменчивость данных непостоянна

Недостатки RMSLE

  1. Сложность интерпретации: Не так интуитивна, как MAE или MAPE
  2. Асимметричность: Не всегда желательно разное отношение к завышению и занижению
  3. Не определена для отрицательных значений: Так как логарифм от отрицательного числа не определен
  4. Чувствительность к малым значениям: Может быть чувствительна, когда и фактические, и предсказанные значения близки к нулю

Когда использовать RMSLE?

Идеальные случаи для RMSLE:

  1. Прогнозирование продаж: Когда есть большие различия между продажами разных товаров
  2. Предсказание цен на недвижимость: Цены могут варьироваться от десятков тысяч до миллионов
  3. Прогнозирование спроса: От единичных покупок до массовых продаж
  4. Предсказание веб-трафика: От нескольких посещений до вирусного контента
  5. Работа с экспоненциальными распределениями

Пример из практики:

Задача: Предсказать ежедневные продажи в розничной сети:

  • Одни товары продаются 1-2 штуки в день
  • Другие — тысячи штук в день

RMSE будет доминироваться ошибками для товаров-хитов, игнорируя точность для нишевых товаров. RMSLE уравновешивает вклад всех товаров.


Сравнение с другими метриками

СитуацияФактПрогнозRMSERMSLE
Малая ошибка10090100.105
Большая ошибка10005005000.693
Относительная ошибка10550.693
Относительная ошибка10005005000.693

Видно, что RMSLE дает одинаковую оценку для одинаковых относительных ошибок, независимо от масштаба.


Практическая реализация

В Python вычисление RMSLE выглядит так:

import numpy as np
 
def rmsle(y_true, y_pred):
    """
    Вычисляет RMSLE между фактическими и предсказанными значениями
    """
    # Добавляем 1 чтобы избежать log(0)
    log_true = np.log1p(y_true)  # log1p(x) = log(x + 1)
    log_pred = np.log1p(y_pred)
    
    squared_errors = (log_true - log_pred) ** 2
    return np.sqrt(np.mean(squared_errors))
 
# Пример использования
y_true = np.array([100, 1000, 50, 200])
y_pred = np.array([90, 1200, 70, 180])
 
print(f"RMSLE: {rmsle(y_true, y_pred):.4f}")

Резюме

RMSLE — это специализированная метрика, которая особенно полезна когда:

  • Данные имеют большой разброс (несколько порядков величины)
  • Относительные ошибки важнее абсолютных
  • Вы хотите уменьшить влияние выбросов
  • Занижение прогноза критичнее, чем завышение

Для стандартных задач с равномерно распределенными данными лучше подходят MAE или RMSE, но для специфических случаев с широким диапазоном значений RMSLE может быть оптимальным выбором.