← Назад к вопросам

Что такое sMAPE?

1.0 Junior🔥 201 комментариев
#Метрики и оценка моделей

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI28 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое sMAPE (Symmetric Mean Absolute Percentage Error)

sMAPE — это метрика для оценки качества моделей прогнозирования, которая измеряет среднюю абсолютную процентную ошибку в симметричной форме.

Формула

sMAPE рассчитывается по следующей формуле:

sMAPE = (100 процентов / n) * sum(|y_actual - y_pred| / ((|y_actual| + |y_pred|) / 2))

Где:

  • y_actual — фактическое значение
  • y_pred — предсказанное значение
  • n — количество наблюдений
  • Значение выражается в процентах (обычно от 0 до 100)

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

Симметричность: В отличие от MAPE, sMAPE одинаково штрафует за переоценку и недооценку. Это достигается за счет нормализации на сумму абсолютных значений фактического и предсказанного.

Безразмерность: Как и MAPE, sMAPE не зависит от масштаба данных, что позволяет сравнивать различные временные ряды.

Интерпретируемость: Результат выражается в процентах, что легко объяснить бизнесу.

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

Хорошо подходит для:

  1. Прогнозирования спроса и продаж
  2. Временных рядов с вариирующимся масштабом
  3. Сравнения нескольких моделей
  4. Когда нужна симметричная ошибка

Проблемы при использовании:

  • Если фактическое значение близко к нулю, знаменатель может быть очень маленьким
  • При наличии нулевых значений в данных возможны математические неопределенности
  • Может давать значения больше 100 процентов в некоторых реализациях

Примеры расчёта

Пример 1: Простой случай

  • Фактическое значение: 100
  • Предсказанное значение: 110
sMAPE = |100 - 110| / ((100 + 110) / 2) = 10 / 105 = 0.0952 = 9.52 процентов

Пример 2: Когда предсказание ниже

  • Фактическое значение: 100
  • Предсказанное значение: 90
sMAPE = |100 - 90| / ((100 + 90) / 2) = 10 / 95 = 0.1053 = 10.53 процентов

Заметьте, что ошибка немного отличается в обе стороны из-за симметричной нормализации.

Сравнение с MAPE

MAPE (Mean Absolute Percentage Error):

MAPE = (100 / n) * sum(|y_actual - y_pred| / |y_actual|)

Главное отличие:

  • MAPE нормализует на фактическое значение
  • sMAPE нормализует на среднее от фактического и предсказанного

Практический эффект:

  • MAPE дает более высокие значения ошибок при недооценке
  • sMAPE более справедлива при обе стороны

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

import numpy as np

def smape(y_true, y_pred):
    """Вычисляет sMAPE в процентах"""
    numerator = np.abs(y_true - y_pred)
    denominator = (np.abs(y_true) + np.abs(y_pred)) / 2
    
    # Избегаем деления на ноль
    mask = denominator != 0
    smape_values = np.zeros_like(y_true, dtype=float)
    smape_values[mask] = numerator[mask] / denominator[mask]
    
    return 100 * np.mean(smape_values)

# Пример использования
y_actual = np.array([100, 200, 150, 300])
y_pred = np.array([110, 190, 160, 290])

error = smape(y_actual, y_pred)
print(f"sMAPE: {error:.2f} процентов")

Альтернативы

Для разных задач можно использовать:

  • MAE (Mean Absolute Error) — абсолютные ошибки, не процентные
  • RMSE (Root Mean Squared Error) — штрафует большие ошибки больше
  • MAPE — когда нужна асимметричная ошибка
  • SMAPE — когда нужна симметричная процентная ошибка

Рекомендации

В моей практике я использую sMAPE когда:

  1. Данные содержат значения разного порядка
  2. Нужно объяснить метрику бизнесу в процентах
  3. Одинаково важны ошибки в обе стороны
  4. Работаю с временными рядами продаж и спроса

Dashboard мониторинга всегда включает sMAPE рядом с MAE и RMSE для полной картины.