logisticregressionanalysis.com

Обработка дисбаланса классов в логистической регрессии: oversampling, weights, threshold

Обработка дисбаланса классов в логистической регрессии: oversampling, weights, threshold

Логистическая регрессия — рабочая лошадка бинарной классификации, но её стандартная настройка предполагает, что классы представлены примерно поровну. Реальность рынка недвижимости и финансов далека от этого: дефолтов по ипотеке — единицы на сотни, резкий рост цен фиксируется в 10–15% случаев, а по-настоящему инвестиционно привлекательные объекты — редкость. Если не учитывать такой дисбаланс, модель быстро выучивает доминирующий класс и выдаёт обманчиво высокую точность, оставаясь слепой к тому, ради чего её строили.

Почему дисбаланс ломает качество

Когда один класс сильно преобладает, модель учится угадывать именно его. Формально accuracy может быть высокой, но это обманчиво: если позитивов 5%, то предсказание «всегда отрицательный класс» даст уже 95% точности. Для логистической регрессии это особенно критично, потому что модель оптимизирует кросс-энтропийную функцию потерь и старается уменьшить суммарную ошибку. Если редкий класс не усилить, его вклад в градиент будет ничтожным, и коэффициенты при значимых признаках меньшинства не получат должной корректировки. В терминах odds ratio это означает, что модель останется практически нечувствительной к факторам, отличающим редкий исход.

Пример из рынка недвижимости: прогнозируем бинарный признак «рост цены выше медианного за квартал». Доля таких объектов — 15%. Модель, обученная без коррекции, может просто выдавать вероятность около 0.15 для всех объектов, и при стандартном пороге 0.5 accuracy составит 85%, но recall по классу роста будет нулевым. Инвестор, полагающийся на такую модель, не получит ни одного сигнала о перспективных объектах.

Где это встречается на практике

  • скоринг и дефолт-модели: доля просрочек или дефолтов редко превышает 3–5%;
  • прогноз роста/падения цен на недвижимость: резкие скачки — событие относительно редкое;
  • классификация объектов по инвестиционной привлекательности: действительно «перспективных» объектов мало;
  • выявление редких, но важных событий: просрочка, резкий рост спроса, аномальная сделка.

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

Три основных подхода

На практике обычно используют три инструмента: oversampling, class weights и threshold moving. У каждого свои плюсы, ограничения и типичные ошибки. Выбор зависит от объёма данных, допустимой сложности и бизнес-требований к интерпретируемости вероятностей.

Метод Что делает Плюсы Минусы Когда применять
Oversampling Увеличивает число объектов редкого класса Просто, интуитивно понятно, позволяет модели увидеть структуру меньшинства без изменения функции потерь Риск переобучения, дублирование шума, искажение распределения признаков Когда данных мало (менее 1000 объектов) и нужен быстрый baseline, либо редкий класс представлен единичными примерами
Class weights Усиливает вклад редкого класса в функцию потерь Без раздувания датасета, сохраняет исходное распределение, простота реализации (class_weight=’balanced’) Требует аккуратной настройки и проверки калибровки, не исправляет ошибки разметки Почти всегда как сильный первый вариант, особенно при достаточном объёме данных
Threshold Меняет порог отнесения к классу 1 Очень практично, гибко, не влияет на обучение, легко адаптируется под бизнес-метрику Не исправляет обучение, только правило классификации; не улучшает качество вероятностей Когда важнее бизнес-решение, чем «чистая» модель, и известна стоимость ошибок

Oversampling: когда помогает, а когда вреден

Oversampling — это искусственное увеличение числа объектов меньшинства. Самый простой вариант — случайное дублирование редких наблюдений. Более сложный — генерация синтетических примеров (SMOTE и его вариации), но в прикладной логистической регрессии чаще начинают именно с простого дублирования, поскольку оно прозрачно и не вносит дополнительных предположений о распределении признаков. По сути, дублирование эквивалентно присвоению наблюдениям редкого класса веса, кратного числу копий, но без изменения оптимизационной процедуры — градиент просто суммируется по всем дубликатам.

Плюсы oversampling

  • выравнивает классы без потери данных большинства (в отличие от undersampling);
  • помогает модели заметнее увидеть редкий класс — градиентный вклад становится сопоставимым;
  • особенно полезен при небольших выборках: если редких примеров всего 20–30, дублирование до 200–300 даёт модели достаточно сигнала для оценки коэффициентов.

Минусы oversampling

  • модель может запомнить дубликаты и переобучиться: она начинает идеально разделять обучающую выборку, но на новых данных качество падает;
  • синтетика и дублирование могут исказить распределение: дубликаты создают искусственные кластеры, и модель может выучить ложные закономерности, особенно если среди редких примеров есть шум или выбросы;
  • если сделать oversampling до разбиения на train/test, возникнет утечка данных: тестовые наблюдения (или их копии) попадут в обучение, и оценка качества станет нереалистично завышенной.

Главное правило

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

Практический вывод

Если у вас мало данных и редкий класс почти не представлен, oversampling может дать заметный выигрыш. Но как единственный способ борьбы с дисбалансом он редко лучший: сначала стоит проверить class weights — они проще, не раздувают датасет и часто дают сопоставимый или лучший результат без риска переобучения.

Class weights: часто лучший старт для логистической регрессии

Class weights заставляют модель сильнее штрафовать ошибки на редком классе. Проще говоря, одна ошибка по minority class начинает «стоить» дороже, чем ошибка по majority class. Для логистической регрессии это реализуется через параметр class_weight в большинстве библиотек: каждому наблюдению присваивается вес, который умножается на его вклад в логарифмическую функцию правдоподобия. Градиент по коэффициентам масштабируется пропорционально, и оптимизация смещается в сторону правильной классификации меньшинства.

Важно: веса не меняют интерпретацию коэффициентов как логарифмов odds ratio — модель остаётся линейной по отношению к log-odds. Однако они влияют на смещение (intercept), поскольку априорная вероятность класса теперь учитывается иначе. Это нужно помнить при калибровке вероятностей.

Когда weights лучше oversampling

  • данных достаточно (тысячи и более), и не хочется плодить дубликаты;
  • важна стабильность обучения: веса не создают ложных паттернов, модель работает с исходным распределением признаков;
  • есть риск переобучения на редком классе — веса можно тонко настроить, а не просто размножать наблюдения;
  • нужна простая и воспроизводимая схема: class_weight='balanced' — одна строка, которая автоматически вычисляет веса, обратно пропорциональные частотам классов.

Типичная схема весов

Часто используют обратную частоту классов: редкому классу дают больший вес, частому — меньший. Например, если minority составляет 10% выборки, его вес будет 1/0.1 = 10, а вес majority — 1/0.9 ≈ 1.11. Это делает вклад классов в функцию потерь примерно равным. В некоторых случаях веса задают исходя из стоимости ошибок: если пропуск дефолта в 5 раз дороже ложной тревоги, вес для дефолта можно установить в 5 раз выше.

Важный нюанс

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

Threshold: то, что часто забывают, но это критично

Многие останавливаются на обучении модели, хотя финальное решение принимает не сама вероятность, а порог классификации. Стандартный порог 0.5 на несбалансированных данных часто не подходит. Логистическая регрессия выдаёт оценку апостериорной вероятности P(y=1|x), но при дисбалансе распределение этих вероятностей смещено к нулю, и 0.5 может оказаться недостижимым порогом для положительного класса.

Почему порог 0.5 плох на дисбалансе

Если позитивный класс редкий, модель калибруется так, что даже для истинных положительных примеров предсказанная вероятность редко превышает 0.3–0.4. Например, в задаче прогноза дефолта по ипотеке средняя вероятность для реальных дефолтов может быть 0.2, а для недефолтов — 0.05. При пороге 0.5 модель не даст ни одного положительного предсказания, и recall станет нулевым. Порог 0.5 исходит из предположения о равных априорных вероятностях и равной стоимости ошибок, что на практике почти никогда не выполняется.

Что делает изменение порога

  • снижение порога увеличивает число положительных предсказаний, повышая recall, но снижая precision;
  • повышение порога делает модель строже: precision растёт, recall падает;
  • выбор порога позволяет подстроить модель под бизнес-цель, не меняя саму модель.

Когда threshold особенно полезен

  • ложноположительные ошибки дешевле, чем ложноотрицательные (например, пропуск дефолта критичнее ложной тревоги) — порог снижают, чтобы максимизировать recall;
  • нужно управлять балансом precision и recall в зависимости от ресурсов: если бюджет на проверку объектов ограничен, важнее высокий precision;
  • бизнесу важнее не абстрактная accuracy, а конкретная цена ошибки: в недвижимости при отборе объектов с высокой вероятностью роста для инвестиций можно повысить порог, чтобы каждая рекомендация была надёжной, а при отсеве рискованных покупок — понизить, чтобы не пропустить падение.

Oversampling, weights и threshold: что выбрать

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

Если нужен быстрый и надёжный baseline

  1. Обучить логистическую регрессию с class_weight='balanced'.
  2. Проверить PR-AUC, recall, precision, F1.
  3. Подобрать порог по валидации.

Если данных мало

  1. Попробовать random oversampling только на train.
  2. Сравнить с class weights.
  3. Оставить тот вариант, который лучше держит качество на валидации.

Если важна калибровка вероятностей

  1. Избегать агрессивного oversampling без необходимости.
  2. Предпочесть class weights.
  3. После обучения отдельно подобрать threshold.

Калибровка означает, что предсказанная вероятность соответствует реальной частоте события. После oversampling вероятности часто завышаются, и модель перестаёт быть хорошо откалиброванной. Для задач, где вероятности используются напрямую (расчёт ожидаемой доходности, риск-менеджмент), это критично.

Как выбирать порог на практике

Порог не выбирают «на глаз». Его нужно подбирать по целевой метрике или бизнес-стоимости ошибки. Оптимальный порог часто близок к доле minority класса, но точное значение зависит от компромисса между precision и recall.

Рабочий порядок действий

  1. Разделите данные на train/validation/test.
  2. Обучите модель на train.
  3. Получите вероятности на validation.
  4. Пройдитесь по набору порогов, например от 0.05 до 0.95 с шагом 0.01.
  5. Выберите порог по нужной метрике:
    • максимум F1;
    • максимум recall при ограничении precision (например, precision не ниже 0.6);
    • минимальная ожидаемая стоимость ошибки, если известны цены false positive и false negative.

Пример логики выбора

  • для скоринга чаще важен recall по «плохим» клиентам: пропущенный дефолт обходится дороже, чем лишняя проверка;
  • для отбора лидов важнее precision, чтобы не тратить ресурсы на слабые заявки;
  • для недвижимости порог можно настраивать под задачу: искать объекты с высокой вероятностью роста (высокий precision) или, наоборот, избегать рискованных покупок (высокий recall по классу падения).

На что смотреть вместо одной accuracy

На дисбалансе accuracy почти всегда недостаточна. Нужны метрики, которые видят редкий класс. Даже ROC-AUC может вводить в заблуждение при сильном дисбалансе, поскольку false positive rate может оставаться низким даже при плохом recall. Поэтому основное внимание — на PR-кривую и метрики, основанные на положительном классе.

Полезные метрики

  • Recall — сколько положительных случаев модель нашла; критичен, когда пропуск события дорог.
  • Precision — насколько чисты положительные предсказания; важен при ограниченных ресурсах на проверку.
  • F1-score — гармоническое среднее precision и recall; хорош как единый компромиссный показатель.
  • ROC-AUC — полезно, но на сильном дисбалансе может быть слишком оптимистичным; используйте с осторожностью.
  • PR-AUC — площадь под precision-recall кривой; часто информативнее для редкого класса, так как не зависит от true negative rate.
  • Balanced accuracy — среднее арифметическое recall по классам; даёт более честную картину, чем обычная accuracy.

Практический алгоритм для логистической регрессии

Базовый рабочий пайплайн

  1. Проверить долю классов на обучающей выборке.
  2. Зафиксировать baseline без исправлений (модель с class_weight=None).
  3. Обучить логистическую регрессию с class weights (например, balanced).
  4. Оценить PR-AUC, recall, precision, F1 на валидации.
  5. Подобрать threshold на валидации по бизнес-метрике.
  6. Если нужно, сравнить с oversampling (только на train).
  7. Оставить вариант, который устойчив на отложенной выборке (test).

Чек-лист перед запуском в прод

  • дисбаланс посчитан на train, а не на всём датасете;
  • oversampling не применялся к test;
  • метрики оценены не только по accuracy;
  • порог выбран на validation;
  • вероятности проверены на калибровку (например, с помощью Brier score или калибровочной кривой);
  • есть сравнение с простым baseline.

Типовые ошибки

  1. Балансировать весь датасет до split. Это самая частая и самая дорогая ошибка. В результате модель «видит» тестовые паттерны заранее, и оценка качества становится бессмысленно завышенной. Любая балансировка должна выполняться строго внутри обучающей части.
  2. Сравнивать модели только по accuracy. На дисбалансе это почти бессмысленно: accuracy может быть высокой при нулевом recall. Всегда добавляйте метрики, ориентированные на редкий класс.
  3. Путать обучение и решение. Weights влияют на обучение (коэффициенты модели), threshold — на финальную классификацию. Это разные рычаги, и их нужно настраивать раздельно.
  4. Не проверять калибровку вероятностей. После oversampling или сильных весов вероятности могут стать менее интерпретируемыми. Если вероятности используются для расчёта рисков или ожидаемой доходности, калибровка обязательна.
  5. Гнаться за одним числом. Для редкого класса важно смотреть на несколько метрик одновременно. Оптимальный порог часто выбирают, балансируя precision и recall, а не максимизируя одну метрику.

Что чаще всего работает в реальных проектах

Для логистической регрессии на несбалансированных данных обычно выигрывает не один магический приём, а комбинация:

  • class_weight='balanced' как старт;
  • подбор порога по validation;
  • PR-AUC и recall как основные метрики;
  • oversampling только если весов недостаточно или данных мало.

На практике именно связка weights + threshold часто даёт более устойчивый результат, чем грубое выравнивание классов дублированием. Веса аккуратно смещают обучение, а порог адаптирует решение к бизнес-реальности, не искажая вероятностную природу модели.

Короткий вывод

Если кратко:

  • oversampling полезен, когда данных мало и нужен простой способ усилить редкий класс;
  • class weights — самый универсальный и аккуратный старт для логистической регрессии;
  • threshold обязателен почти всегда, потому что именно он превращает вероятности в решение.

Для прикладных задач в финансах и недвижимости правильная стратегия обычно такая: сначала weighted logistic regression, затем подбор порога под бизнес-цель, и только потом сравнение с oversampling.

FAQ

Нужно ли всегда использовать oversampling при дисбалансе?

Нет. Для логистической регрессии часто достаточно class weights и настройки порога. Oversampling имеет смысл, когда выборка очень мала (сотни объектов) и редкий класс представлен единичными примерами, из-за чего даже взвешенная модель не может уловить закономерности. В большинстве же реальных задач с тысячами записей веса работают не хуже, а часто и лучше, поскольку не вносят дополнительного шума.

Почему 0.5 почти всегда плохой порог?

Потому что он предполагает, что классы и цена ошибок примерно равны. На дисбалансе это редко так. Апостериорные вероятности для редкого класса обычно смещены к нулю, и оптимальный порог часто близок к априорной доле minority. Кроме того, бизнес-стоимость false negative и false positive различается, и порог должен отражать этот компромисс.

Что лучше: oversampling или class weights?

Чаще — class weights. Они не раздувают датасет, сохраняют исходное распределение признаков и лучше сохраняют калибровку вероятностей. Oversampling полезен, если выборка маленькая или weights дают слабый эффект, но его следует применять осторожно, только на обучающей выборке, и обязательно сравнивать с весами на валидации.

Можно ли совмещать oversampling и weights?

Можно, но осторожно. Иногда это помогает, но часто приводит к переусилению minority class: модель начинает переобучаться на редких примерах и теряет обобщающую способность. Если решаетесь на комбинацию, начинайте с умеренного oversampling (например, двукратного) и небольших весов, и обязательно контролируйте качество на отложенной выборке.

Какие метрики смотреть в первую очередь?

Recall, precision, F1 и PR-AUC. Accuracy — только как дополнительную справку. Для многих задач ключевой является PR-AUC, поскольку она не зависит от истинно отрицательных результатов, которых при дисбалансе подавляющее большинство.

Если важны вероятности, что предпочтительнее?

Обычно class weights и отдельный подбор threshold. Агрессивный oversampling может ухудшить калибровку: предсказанные вероятности перестают соответствовать реальным частотам. Если вероятности используются для расчёта ожидаемых потерь или доходности, калибровка имеет первостепенное значение, и веса — более безопасный путь.

Где особенно полезны эти методы?

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