Аналитика11 октября 2026 г.

Зачем сравнивать классификатор с простой базовой моделью

Автор
Ненашев А.
На чтение
7 мин
Дата обновления
11.10.2026
Старт:С 8 сентября
Срок обучения:24 часа
Машинное обучение для анализа естественного языка (NLP)
Научитесь применять машинное обучение для анализа текстов и решения реальных задач NLP. Курс сочетает теорию и практику: от предобработки текстов до работы с BERT и GPT. Освойте современные методы обработки естественного языка (NLP) и научитесь применять их в проектах. Уникальность — акцент на практику с использованием Python и предобученных моделей. Тренинг по обработке естественного языка с помощью машинного обучения предназначен для тех, кто хочет познакомиться со сложными методами обработки текстовых данных. Он включает в себя необходимый минимум теории и большой объем практических занятий, позволяющих участникам овладеть необходимыми навыками для работы в области анализа данных. К каждому модулю предлагаются задания для самостоятельного выполнения - домашние работы. В рамках тренинга участники изучат методы преобразования текстовых данных, такие как стемминг, лемматизация и векторизация, а также базовые задачи, которые могут быть решены с помощью методов машинного обучения, такие как классификация, суммаризация текстов, выделение имен и другие. Будет уделено особое внимание практическому применению методов машинного обучения на языке Python с использованием современных нейросетей, таких как FastText, BERT и GPT-2.
Подробнее
42 000 ₽42 900 ₽
#COURSE##INNER#

Зачем сравнивать классификатор с простой базовой моделью

Сравнение с простой базовой моделью нужно не для формальности, а для ответа на очень практичный вопрос: ваш классификатор действительно научился чему-то в признаках или просто повторяет распределение классов. На неравновесной выборке этот вопрос особенно острый. Если 90% объектов относятся к классу 0, то модель, которая всегда говорит «0», уже выглядит прилично по accuracy. Но это не значит, что она решает задачу.

Поэтому базовая линия нужна как нижняя планка. Она показывает, какой результат можно получить почти без анализа входных данных. Если содержательная модель едва превосходит такую планку или превосходит ее только по одному удобному показателю, вывод «модель хорошая» делать рано.

Когда accuracy создает ложное чувство успеха

На несбалансированных данных accuracy легко маскирует провал по редкому классу. Представьте задачу, где редкий класс и есть то, что вы хотели бы находить: жалобы, отказы, мошеннические операции, токсичные комментарии. Если таких объектов мало, модель может игнорировать их почти полностью и все равно набирать высокий процент правильных ответов за счет большинства.

Проблема здесь не в самой accuracy. Она просто отвечает на свой вопрос: какая доля предсказаний совпала с истинной меткой. Но если для задачи важно не пропускать редкий класс, одного этого вопроса недостаточно. Нужны метрики, которые отдельно показывают, что происходит с меньшинством: хотя бы recall и F1 по положительному классу, а для общего баланса классов — balanced accuracy.

Сравнение с базовой моделью быстро отрезвляет. Если ваша новая модель дает 90% accuracy, а примитивный предиктор «всегда класс 0» тоже дает 90%, то достижение пока сомнительное. Вы улучшили решение задачи только в том случае, если при тех же данных и тех же правилах оценки получили лучший результат там, где это действительно важно.

Что считать простой базовой моделью

В scikit-learn для такой проверки есть DummyClassifier. Это не «плохая модель», а намеренно простая точка отсчета. Она умеет несколько стратегий: всегда предсказывать самый частый класс, выдавать классы по частотам из обучения, выбирать случайно или всегда возвращать заранее заданную метку. Общая идея одна: такие стратегии не используют признаки объекта и не пытаются найти закономерность в X.

Для первого sanity-check на неравновесной бинарной задаче обычно достаточно стратегии most_frequent. Она отвечает на вопрос: «Что будет, если я вообще не анализирую входные данные и всегда ставлю класс большинства?» Если содержательная модель не лучше этого варианта, проблема может быть в признаках, в разбиении, в выборе метрики или в том, что модель пока не настроена.

Иногда полезно посмотреть и на стратегию constant с постоянным положительным классом. Она не становится хорошей моделью, но помогает понять другой край: что будет, если пытаться поймать все редкие объекты ценой множества ложных срабатываний. Но для честного базового сравнения в учебной задаче ниже достаточно именно most_frequent.

УЧЕБНЫЙ ПРИМЕР: одно разбиение, одни метрики, два вывода

УЧЕБНЫЙ ПРИМЕР. Возьмем условную бинарную задачу в среде Python 3.11 и scikit-learn. Всего 100 объектов: 90 относятся к классу 0 и 10 — к классу 1. Делаем одно стратифицированное разбиение 70/30. Тогда в тесте 30 объектов, из них 27 относятся к классу 0 и 3 — к классу 1.

Сравним две модели на одном и том же тестовом наборе. Первая — DummyClassifier со стратегией most_frequent. Вторая — содержательная модель, например логистическая регрессия по подготовленным признакам. Для обеих считаем одинаковый набор метрик: accuracy, recall по классу 1, F1 по классу 1 и balanced accuracy.

МодельTNFPFNTPAccuracyRecall(1)F1(1)Balanced accuracy
DummyClassifier270300.900.000.000.50
Логистическая регрессия252120.900.670.570.80

Здесь видно главное. По accuracy модели одинаковы: обе дали 0.90. Если остановиться на этом, можно решить, что новая модель ничего не улучшила. Но матрица ошибок показывает обратное. DummyClassifier не нашел ни одного объекта класса 1. Содержательная модель поймала 2 из 3 положительных объектов, ошибившись два раза на большинстве. Для задач, где редкий класс значим, это уже содержательное отличие.

Проверим арифметику. Для содержательной модели accuracy равна (25 + 2) / 30 = 0.90. Recall по классу 1 равен 2 / 3 = 0.67. F1 по формуле 2TP / (2TP + FP + FN) равен 4 / 7 = 0.57. Balanced accuracy — это среднее между долей верно найденных объектов класса 1 и долей верно найденных объектов класса 0: (2/3 + 25/27) / 2 ≈ 0.80. Этот результат уже нельзя получить простым повторением класса большинства.

from sklearn.metrics import accuracy_score, recall_score, f1_score, balanced_accuracy_score

def report(y_true, y_pred):
    return {
        'accuracy': round(accuracy_score(y_true, y_pred), 3),
        'recall_1': round(recall_score(y_true, y_pred, pos_label=1), 3),
        'f1_1': round(f1_score(y_true, y_pred, pos_label=1), 3),
        'balanced_accuracy': round(balanced_accuracy_score(y_true, y_pred), 3),
    }

Почему сравнивать нужно только на одинаковых данных и одинаковых метриках

Базовая модель полезна только при честном сопоставлении. Это значит: одно и то же разбиение на train/test, одинаковая подготовка целевой переменной, одинаковая тестовая часть и один набор метрик. Если DummyClassifier проверяли на одной тестовой выборке, а новую модель — на другой, вывод уже неустойчив. Разные объекты могут сделать сравнение случайно выгодным одной из сторон.

Тот же принцип касается метрик. Нельзя хвалить содержательную модель по accuracy, а dummy ругать по recall. Либо сравниваются предсказанные классы по одному набору показателей, либо, если задача использует вероятности, стоит оценивать вероятностные предсказания метриками такого же типа, например log loss или Brier score. Иначе вы меняете не только модель, но и сам критерий успеха.

Практически полезный минимум для несбалансированной бинарной задачи на одном разбиении такой: показать матрицу ошибок, accuracy, recall по меньшинству, F1 по меньшинству и balanced accuracy. Этого уже достаточно, чтобы не принять пустое улучшение за реальное. Если новая модель лучше dummy только по accuracy, но не умеет ловить редкий класс, это повод не праздновать, а пересматривать постановку.

Какие выводы допустимы на маленькой выборке

Одно разбиение подходит для быстрой проверки здравого смысла, но не для сильных заявлений. В нашем учебном тесте всего 3 положительных объекта. Это значит, что каждая ошибка меняет recall сразу на 1/3, то есть примерно на 33 процентных пункта. Сегодня модель угадала 2 из 3, завтра на другом маленьком тесте может угадать 1 из 3, и значение резко изменится, хотя сама модель почти не изменилась.

Из такого примера можно сделать ограниченный, но важный вывод: содержательная модель уже выглядит полезнее тривиального предсказания большинства, потому что она хотя бы находит часть редкого класса. А вот утверждать, что «ее реальный recall равен 0.67» или что она стабильно лучше на любых данных, по одному маленькому тесту нельзя. Следующий шаг — повторить сравнение на нескольких стратифицированных разбиениях или кросс-валидации, если объем данных это позволяет.

Есть и еще одна граница вывода. На очень маленьких и неравновесных выборках некоторые фолды могут вообще не содержать положительного класса. Тогда часть метрик теряет смысл. Поэтому сама по себе базовая линия не решает всех проблем оценки, но помогает не ошибиться в самом первом вопросе: есть ли в модели что-то сверх угадывания по частоте классов.

Если сформулировать практический результат статьи в одном действии, он такой: перед обсуждением качества любой новой модели сначала поставьте рядом DummyClassifier на том же разбиении и посмотрите не только на accuracy, но и на метрики меньшинства. Это занимает минуты, зато защищает от самой частой ошибки в учебных и рабочих задачах на несбалансированных данных.

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

Курсы

147504
0,0
0 отзывов
Машинное обучение для анализа естественного языка (NLP)
  • С 8 сентября
  • 24 часа
  • с преподавателем
  • сертификат
42 000 ₽42 900 ₽
-2%
Перейти на сайт