Что такое метрика sMAPE (Symmetric Mean Absolute Percentage Error)?

«Что такое метрика sMAPE (Symmetric Mean Absolute Percentage Error)?» — вопрос из категории Метрики и функции потерь, который задают на 30% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

sMAPE (Symmetric Mean Absolute Percentage Error) — симметричная средняя абсолютная процентная ошибка. Это модификация стандартной метрики MAPE, разработанная для решения её ключевой проблемы: асимметричного штрафа и неопределённости при истинных значениях, близких к нулю.

Формула (наиболее распространённый вариант): sMAPE = (100% / n) * Σ ( |y_true - y_pred| / ((|y_true| + |y_pred|) / 2) )

Или, что эквивалентно: sMAPE = (200% / n) * Σ ( |y_true - y_pred| / (|y_true| + |y_pred|) )

Интерпретация:

  • 0% — идеальный прогноз (факт и прогноз совпадают).
  • Значение может приближаться к 200% при больших ошибках, особенно когда факт и прогноз имеют разные знаки.

Преимущества перед MAPE:

  1. Симметричность: одинаково штрафует за переоценку и недооценку.
  2. Устойчивость к нулям: знаменатель (|y_true| + |y_pred|) не обращается в ноль, если оба значения не равны нулю одновременно.

Недостатки и критика:

  • Метрика всё ещё может быть неопределена, если и y_true, и y_pred равны нулю.
  • Некоторые исследователи указывают, что sMAPE также не является абсолютно симметричной и может иметь смещение.

Пример вычисления на Python:

import numpy as np

def smape(y_true, y_pred):
    """Вычисляет sMAPE в процентах."""
    # Добавляем эпсилон для численной стабильности, если оба значения нули
    epsilon = 1e-8
    numerator = np.abs(y_pred - y_true)
    denominator = (np.abs(y_true) + np.abs(y_pred)) / 2 + epsilon
    # Избегаем деления на ноль
    return 100 * np.mean(numerator / denominator)

# Пример
actual = np.array([120, 200, 300, 0, 500])
forecast = np.array([100, 210, 290, 5, 450])

print(f"sMAPE: {smape(actual, forecast):.2f}%")
# Вывод: sMAPE: 6.15%

Применение: Широко используется в задачах прогнозирования (например, продаж, нагрузки), особенно в бизнес-аналитике, где важна интерпретируемость в процентах.