Кейс 1: MSE и цена большого промаха

Прогноз цены и влияние выбросов (MSE на практике)

Начнём с простого и очень жизненного примера. Представим сервис оценки стоимости квартир. Ничего сложного: на вход подаётся площадь, на выходе – прогнозируемая цена. Это типичная задача регрессии, и для неё почти автоматически выбирают MSE.

Но именно здесь хорошо видно, какую цену мы платим за такой выбор.

Цель кейса

Показать, как MSE резко реагирует на выбросы и почему одна плохая точка может испортить модель.

Сценарий

У нас есть несколько квартир с известной реальной ценой и предсказаниями модели. Для простоты будем считать, что модель уже обучена, а мы лишь оцениваем качество её работы.

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

Реальные цены (в условных единицах):

$y = [100, 120, 130, 115, 125];

Предсказания модели:

$yHat = [102, 118, 128, 117, 123];

Ошибки есть, но они небольшие. Это выглядит как вполне адекватные предсказания на данном наборе данных.

Напоминание: как считается MSE

Реализуем MSE буквально в несколько строк, без каких-либо библиотек:

function mse(array $y, array $yHat): float {
    $n = count($y);
    $sum = 0.0;

    for ($i = 0; $i < $n; $i++) {
        $diff = $y[$i] - $yHat[$i];
        $sum += $diff * $diff;
    }

    return $sum / $n;
}

echo mse($y, $yHat);

Посчитаем ошибку:

Значение MSE получается небольшим. Это ожидаемо: все ошибки лежат в пределах нескольких единиц, и возведение в квадрат лишь умеренно усиливает их вклад.

Добавляем одну "плохую" квартиру

Теперь испортим картину всего одной точкой. Пусть в данных появилась странная квартира: либо ошибка в базе, либо уникальный объект, либо просто неудачный прогноз. Добавим выброс.

Реальная цена:

Предсказание модели:

Ошибка здесь огромная. Посчитаем MSE снова:

И вот тут происходит ключевой момент кейса.

Что мы видим

MSE вырос не просто заметно, а непропорционально сильно. Хотя новых данных всего одна точка, именно она начинает доминировать над всей функцией потерь.

Почему так происходит, легко увидеть на уровне одной формулы:

(300130)2=1702=28900(300 - 130)^2 = 170^2 = 28900

Для сравнения, все предыдущие ошибки давали квадраты порядка единиц (в редких случаях – десятков). Один промах буквально "перекрикивает" все остальные наблюдения.

В режиме обучения этот эффект проявляется ещё сильнее.

10.1 MSE и цена большого промаха

Почему это не баг

Очень важно понять: такое поведение MSE – осознанное свойство, а не ошибка дизайна.

Используя квадратичную ошибку, мы заранее говорим модели:

Большие промахи гораздо хуже, чем много маленьких.

Это разумно во многих задачах. Например:

  • в прогнозе цен для банка

  • в расчётах рисков

  • в инженерных и физических моделях

Там один крупный промах может стоить дороже, чем десяток мелких неточностей.

Но за это есть цена

Обратная сторона очевидна. Если в данных есть:

  • выбросы

  • ошибки разметки

  • редкие, но экстремальные значения

MSE начинает подстраивать модель именно под них. Иногда в ущерб большинству "нормальных" данных.

Этот кейс важен не потому, что MSE плох. А потому, что он ясно показывает: loss-функция – это выбор приоритетов.

Ключевой вывод

MSE не просто измеряет ошибку. Он задаёт модельному обучению философию:

  • большие ошибки недопустимы

  • выбросы имеют решающее значение

  • стабильность достигается ценой чувствительности

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

circle-info

Чтобы самостоятельно протестировать этот код, установите примеры из официального репозитория GitHubarrow-up-right или воспользуйтесь онлайн-демонстрациейarrow-up-right для его запуска.

Last updated