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ᵢ) |
|---|---|---|---|---|
| A | 1000 | 950 | 50 | 1000/2600 ≈ 0.385 |
| B | 800 | 850 | 50 | 800/2600 ≈ 0.308 |
| C | 500 | 550 | 50 | 500/2600 ≈ 0.192 |
| D | 300 | 250 | 50 | 300/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 составляющая |
|---|---|---|---|
| 1000 | 900 | 100 | 10% |
| 10 | 5 | 5 | 50% |
| 5 | 10 | 5 | 100% |
Обычная 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:
- Ассортиментное прогнозирование: Когда есть товары с разным уровнем продаж
- Финансовое прогнозирование: С разнородными по объему статьями доходов/расходов
- Прогнозирование спроса: При наличии как ходовых, так и нишевых товаров
- Данные с нулевыми значениями: Когда некоторые фактические значения могут быть нулевыми
Практические примеры:
- Розничная торговля: Хиты продаж vs нишевые товары
- Производство: Основная продукция vs экспериментальные линии
- Финансы: Крупные клиенты vs мелкие клиенты
Недостатки WMAPE
- Может маскировать проблемы с нишевыми товарами: Поскольку ошибки в малых значениях имеют небольшой вес, проблемы с прогнозированием нишевых товаров могут остаться незамеченными
- Сложность объяснения: Менее интуитивна, чем обычная MAPE
- Зависимость от распределения данных: Сильно зависит от структуры данных
- Все еще требует ненулевых значений: Если все фактические значения равны 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}%")Рекомендации по использованию
- Используйте WMAPE когда у вас разнородные данные с разным масштабом значений
- Дополняйте другими метриками чтобы видеть полную картину (например, MAPE для анализа по группам товаров)
- Анализируйте ошибки по сегментам отдельно для ходовых и нишевых товаров
- Устанавливайте разные целевые значения WMAPE для разных категорий товаров
Резюме
WMAPE — это мощная метрика, которая решает основные проблемы MAPE при работе с разнородными данными. Она особенно полезна когда:
- ✅ Есть товары/статьи с сильно различающимся объемом
- ✅ В данных возможны нулевые значения
- ✅ Нужно учитывать “экономическую значимость” ошибок
- ✅ Требуется симметричная оценка ошибок
Ключевое преимущество: WMAPE не позволяет ошибкам в малозначимых позициях доминировать в общей оценке точности прогноза, что делает ее особенно ценной для бизнес-прогнозирования.