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

Почему метрика MAPE ассиметрична?

2.0 Middle🔥 101 комментариев
#Метрики и оценка моделей#Статистика и A/B тестирование

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

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

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

Почему метрика MAPE асимметрична

MAPE (Mean Absolute Percentage Error) — одна из популярных метрик для оценки регрессионных моделей, но она имеет фундаментальное математическое свойство асимметрии, которое часто приводит к неправильной интерпретации результатов и неожиданному поведению при сравнении моделей.

Формула MAPE

MAPE = (1/n) * Σ|y_true - y_pred| / |y_true| * 100%

Делитель — это истинное значение, а не среднее или предсказанное.

Математическая природа асимметрии

Асимметрия возникает из-за того, что знаменатель берётся только из реальных данных (y_true). Рассмотрим простой пример:

Сценарий 1: Недопредсказание

y_true = 100
y_pred = 50

ошибка = |100 - 50| / |100| = 50/100 = 0.50 = 50%

Сценарий 2: Перепредсказание на то же значение

y_true = 100
y_pred = 150

ошибка = |100 - 150| / |100| = 50/100 = 0.50 = 50%

Ока выглядят симметричными, но проблема проявляется в обратных случаях:

Сценарий 3: Перепредсказание в 2 раза

y_true = 100
y_pred = 200

ошибка = |100 - 200| / |100| = 100/100 = 1.00 = 100%

Максимум = 100%

Сценарий 4: Недопредсказание в 2 раза (максимальная ошибка)

y_true = 100
y_pred = 0

ошибка = |100 - 0| / |100| = 100/100 = 1.00 = 100%

Максимум = 100%

Сценарий 5: Предсказание = 0 (выше нельзя!)

y_true = 100
y_pred = -100

ошибка = |100 - (-100)| / |100| = 200/100 = 2.00 = 200%

Может быть > 100%!

Главная проблема: ограничение сверху

Минимальная ошибка = 0% (идеальное предсказание) Максимальная ошибка = +∞ (без верхнего предела!)

При перепредсказании можно получить ошибку в 100%, 200%, 1000% и больше:

import numpy as np

y_true = [100, 200, 50]
y_pred = [50, 1000, 25]  # Второе значение сильно перепредсказано

mape = np.mean(np.abs((y_true - y_pred) / y_true)) * 100
# MAPE будет искажена большой ошибкой на втором значении

Практический пример асимметрии

Модель A: всегда предсказывает значение в 2 раза больше

y_true = [100, 200, 300]
y_pred = [200, 400, 600]

MAPE = (100/100 + 200/200 + 300/300) / 3 * 100 = 100%

Модель B: всегда предсказывает значение в 2 раза меньше

y_true = [100, 200, 300]
y_pred = [50, 100, 150]

MAPE = (50/100 + 100/200 + 150/300) / 3 * 100 = 50%

Модель B выглядит лучше, хотя обе допускают одинаковую систематическую ошибку в 2 раза!

Почему асимметрия критична

  1. Недопредсказание наказывается слабее — если true = 100, а pred = 0, максимум 100%
  2. Перепредсказание наказывается сильнее — если true = 100, а pred = 1000, это 900%!
  3. Невозможно сравнивать модели — если одна overestimates, другая underestimates
  4. Проблема с нулевыми значениями — если y_true = 0, формула не определена

Когда MAPE неприменима

  • Близко к нулю значения — MAPE взлетает
  • Нулевые значения — деление на ноль
  • Смешанные знаки данных — асимметрия усугубляется
  • Временные ряды — особенно близко к нулю
y_true = [0.1, 0.2, 0.5]
y_pred = [0.15, 0.25, 0.55]

MAPE = (0.05/0.1 + 0.05/0.2 + 0.05/0.5) / 3 * 100
     = (50% + 25% + 10%) / 3 = 28.3%
# Высокая ошибка для точных предсказаний!

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

  1. SMAPE (Symmetric Mean Absolute Percentage Error)

    SMAPE = (1/n) * Σ|y_true - y_pred| / (|y_true| + |y_pred|) / 2 * 100%
    
    • Более симметрична
    • Диапазон: 0-100%
  2. MASE (Mean Absolute Scaled Error) — симметричная, адаптивная

  3. MAE/RMSE — просто используй абсолютные ошибки без процентов

  4. RMSPE (Root Mean Squared Percentage Error) — менее асимметрична

Вывод

MAPE асимметрична из-за математической структуры: ошибка в процентах от true значения. Это означает:

  • Недопредсказание: максимум ~100%
  • Перепредсказание: без верхнего предела

В production используй SMAPE для симметрии или просто MAE/RMSE для простоты и надёжности.

Почему метрика MAPE ассиметрична? | PrepBro