WMAPE (Weighted Mean Absolute Percentage Error) — это взвешенная средняя абсолютная процентная ошибка, которая решает некоторые ключевые проблемы обычной MAPE.

Что такое WMAPE?

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

Основная идея:

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


Формулы WMAPE

Основная формула:

WMAPE = (Σ |yᵢ - ŷᵢ|) / (Σ |yᵢ|) × 100%

Альтернативная формула с явными весами:

WMAPE = Σ [wᵢ × (|yᵢ - ŷᵢ| / |yᵢ|)] × 100% где wᵢ = |yᵢ| / Σ |yᵢ|


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

Рассмотрим прогноз продаж для товаров с разной популярностью:

ТоварФакт (yᵢ)Прогноз (ŷᵢ)Абсолютная ошибка yᵢ - ŷᵢВес (wᵢ)
A1000950501000/2600 ≈ 0.385
B80085050800/2600 ≈ 0.308
C50055050500/2600 ≈ 0.192
D30025050300/2600 ≈ 0.115

Сумма фактических значений: 1000 + 800 + 500 + 300 = 2600

Расчет 1 (основная формула):

WMAPE = (50 + 50 + 50 + 50) / 2600 × 100% = 200 / 2600 × 100% ≈ 7.69%

Расчет 2 (с весами):

  • Для каждого товара: |yᵢ - ŷᵢ| / |yᵢ| = 50 / yᵢ
  • A: 50/1000 × 0.385 = 0.05 × 0.385 = 0.01925
  • B: 50/800 × 0.308 = 0.0625 × 0.308 = 0.01925
  • C: 50/500 × 0.192 = 0.1 × 0.192 = 0.0192
  • D: 50/300 × 0.115 = 0.1667 × 0.115 = 0.01917

Сумма: 0.01925 + 0.01925 + 0.0192 + 0.01917 ≈ 0.07687 WMAPE ≈ 7.69%


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

1. Решает проблему нулевых значений

  • MAPE: Не определена при yᵢ = 0 (деление на ноль)
  • WMAPE: Работает, если есть хотя бы одно ненулевое фактическое значение

2. Устойчивость к малым значениям

  • MAPE: Сильно штрафует за ошибки в малых значениях
  • WMAPE: Ошибки в малых значениях имеют меньший вес

3. Более репрезентативная оценка

Учитывает “экономическую значимость” ошибок:

# Ошибка 10 единиц для разных товаров:
- Товар X: продажи 1000 → ошибка 1%
- Товар Y: продажи 10 → ошибка 100%
 
# В MAPE обе ошибки учитываются одинаково
# В WMAPE ошибка товара X имеет больший вес

4. Симметричность

В отличие от MAPE, WMAPE симметрично относится к завышению и занижению прогноза.


Сравнение WMAPE и MAPE на примере

Рассмотрим данные с разным масштабом:

Факт (yᵢ)Прогноз (ŷᵢ)Абс. ошибкаMAPE составляющая
100090010010%
105550%
5105100%

Обычная MAPE: MAPE = (10% + 50% + 100%) / 3 ≈ 53.3%

WMAPE:

  • Сумма |yᵢ| = 1000 + 10 + 5 = 1015
  • Сумма ошибок = 100 + 5 + 5 = 110
  • WMAPE = 110 / 1015 × 100% ≈ 10.8%

Вывод: WMAPE дает более реалистичную оценку, так как ошибка в основном товаре (1000 единиц) имеет больший вес.


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

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

  1. Ассортиментное прогнозирование: Когда есть товары с разным уровнем продаж
  2. Финансовое прогнозирование: С разнородными по объему статьями доходов/расходов
  3. Прогнозирование спроса: При наличии как ходовых, так и нишевых товаров
  4. Данные с нулевыми значениями: Когда некоторые фактические значения могут быть нулевыми

Практические примеры:

  • Розничная торговля: Хиты продаж vs нишевые товары
  • Производство: Основная продукция vs экспериментальные линии
  • Финансы: Крупные клиенты vs мелкие клиенты

Недостатки WMAPE

  1. Может маскировать проблемы с нишевыми товарами: Поскольку ошибки в малых значениях имеют небольшой вес, проблемы с прогнозированием нишевых товаров могут остаться незамеченными
  2. Сложность объяснения: Менее интуитивна, чем обычная MAPE
  3. Зависимость от распределения данных: Сильно зависит от структуры данных
  4. Все еще требует ненулевых значений: Если все фактические значения равны 0, метрика не определена

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

МетрикаПреимуществаНедостатки
WMAPEУстойчива к малым значениям, работает с нулямиСложная интерпретация, маскирует ошибки в нишах
MAPEПростая интерпретацияПроблемы с нулями, асимметричность
MASEУниверсальная, сравнимаяСложнее для объяснения
RMSEЧувствительна к большим ошибкамЗависит от масштаба данных

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

import numpy as np
 
def wmape(y_true, y_pred):
    """
    Вычисляет WMAPE между фактическими и предсказанными значениями
    """
    # Проверка на одинаковую длину
    if len(y_true) != len(y_pred):
        raise ValueError("Массивы должны быть одинаковой длины")
    
    # Абсолютные ошибки и фактические значения
    abs_errors = np.abs(y_true - y_pred)
    abs_values = np.abs(y_true)
    
    # Проверка, что есть ненулевые фактические значения
    if np.sum(abs_values) == 0:
        return np.nan  # Не определена, если все фактические значения нулевые
    
    return np.sum(abs_errors) / np.sum(abs_values) * 100
 
# Пример использования
y_true = np.array([1000, 800, 500, 300])
y_pred = np.array([950, 850, 550, 250])
 
print(f"WMAPE: {wmape(y_true, y_pred):.2f}%")

Рекомендации по использованию

  1. Используйте WMAPE когда у вас разнородные данные с разным масштабом значений
  2. Дополняйте другими метриками чтобы видеть полную картину (например, MAPE для анализа по группам товаров)
  3. Анализируйте ошибки по сегментам отдельно для ходовых и нишевых товаров
  4. Устанавливайте разные целевые значения WMAPE для разных категорий товаров

Резюме

WMAPE — это мощная метрика, которая решает основные проблемы MAPE при работе с разнородными данными. Она особенно полезна когда:

  • ✅ Есть товары/статьи с сильно различающимся объемом
  • ✅ В данных возможны нулевые значения
  • ✅ Нужно учитывать “экономическую значимость” ошибок
  • ✅ Требуется симметричная оценка ошибок

Ключевое преимущество: WMAPE не позволяет ошибкам в малозначимых позициях доминировать в общей оценке точности прогноза, что делает ее особенно ценной для бизнес-прогнозирования.