Статья Автор: Деникина Н.В., Деникин А.В.

Понятие ошибки: логистическая (log-loss)

Представьте: наш алгоритм выдаёт вероятность, что человек болен. Например, он сказал «вероятность 0.8», а на самом деле человек действительно болен (класс 1). Хорошо ли сработал алгоритм? Да, вполне — он был уверен на 80%.

А если алгоритм сказал «вероятность 0.2», но человек болен? Плохо! Алгоритм ошибся.

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

Почему не подходит обычная разность?

В линейной регрессии мы считали ошибку просто: \(ошибка=(y_{правда}−y_{предсказание})^2\)

Но в классификации yправда — это 0 или 1 (класс), а yпредсказание — это вероятность от 0 до 1. Разность работает плохо, потому что она не учитывает специфику вероятностей.


Log-loss (логистическая ошибка)

Для логистической регрессии используют специальную функцию ошибки — log-loss (logarithmic loss).
 

Формула для одного примера

\(Loss = -(y \cdot \log(p) + (1 - y) \cdot \log(1 - p))\)

где:

  • y — правильный ответ (0 или 1)

  • p — предсказанная вероятность класса 1

  • log⁡ — натуральный логарифм
     

Как это работает?

Давайте разберём два случая:


Случай 1: Правильный класс — 1 (человек болен)

Тогда y=1, и формула упрощается:

\(Loss=−log⁡(p)\)

Что это значит:

  • Если p=1 (мы уверены на 100%), то log⁡(1)=0, ошибка = 0. Отлично!

  • Если p=0.5 (сомневаемся), то −log⁡(0.5)≈0.69. Ошибка средняя.

  • Если p=0.01 (почти уверены, что здоров, но он болен!), то −log⁡(0.01)≈4.6−log(0.01)≈4.6. Огромная ошибка!


Случай 2: Правильный класс — 0 (человек здоров)

Тогда y=0, и формула упрощается:

\(Loss=−log⁡(1−p)\)

Что это значит:

  • Если p=0 (уверены, что здоров), то log⁡(1)=0, ошибка = 0. Отлично!

  • Если p=0.5 (сомневаемся), то −log⁡(0.5)≈0.69. Ошибка средняя.

  • Если p=0.99 (почти уверены, что болен, но он здоров!), то −log⁡(0.01)≈4.6. Огромная ошибка!


Почему log-loss хорош?

Log-loss сильно наказывает за уверенные неправильные предсказания:

  • Если мы сказали «вероятность болезни 99%», а человек здоров — ошибка огромная

  • Если мы сказали «вероятность 60%», а ошиблись — ошибка небольшая

Это заставляет алгоритм честно оценивать свою уверенность.


Средняя ошибка на всём датасете

Для всех примеров считаем среднюю ошибку:
\(\text{Log-Loss} = -\frac{1}{n}\sum_{i=1}^{n} \left(y_i \cdot \log(p_i) + (1 - y_i) \cdot \log(1 - p_i)\right)\)

где n — количество примеров.

Чем меньше log-loss, тем лучше работает модель.


Пример расчёта

Допустим, у нас 3 пациента:

Пациент Правда (yy) Предсказание (pp) Ошибка
1 1 (болен) 0.9 −log⁡(0.9)≈0.11
2 0 (здоров) 0.2 −log⁡(0.8)≈0.22
3 1 (болен) 0.3 −log⁡(0.3)≈1.20

Средняя ошибка: 0.11+0.22+1.203≈0.513


Почему логарифм?

Логарифм превращает вероятности в «штрафы»:

  • Высокая уверенность в правильном ответе → маленький штраф

  • Высокая уверенность в неправильном ответе → огромный штраф

  • Сомнения → средний штраф

Это математически удобно для оптимизации и отражает интуитивное понимание «насколько мы уверены».


Итоги

  • Log-loss измеряет качество вероятностных предсказаний

  • Чем ближе предсказанная вероятность к правильному классу, тем меньше ошибка

  • Алгоритм подбирает w и b так, чтобы минимизировать среднюю log-loss

  • В Python для расчёта используется np.log(), а в sklearn есть готовая функция log_loss()

Печать