Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое 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
Хорошо подходит для:
- Прогнозирования спроса и продаж
- Временных рядов с вариирующимся масштабом
- Сравнения нескольких моделей
- Когда нужна симметричная ошибка
Проблемы при использовании:
- Если фактическое значение близко к нулю, знаменатель может быть очень маленьким
- При наличии нулевых значений в данных возможны математические неопределенности
- Может давать значения больше 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 когда:
- Данные содержат значения разного порядка
- Нужно объяснить метрику бизнесу в процентах
- Одинаково важны ошибки в обе стороны
- Работаю с временными рядами продаж и спроса
Dashboard мониторинга всегда включает sMAPE рядом с MAE и RMSE для полной картины.