Содержание
- Что такое бинарная классификация?
- Области применения «да/нет»‑моделей
- Ключевые метрики оценки
- Основные алгоритмы
- Сравнительный анализ методов
- Практический пример на Python (scikit‑learn)
Что такое бинарная классификация?
Бинарная классификация – это задача машинного обучения, в которой каждый объект, описанный набором признаков x, нужно отнести к одному из двух классов:
- Класс 1 (положительный, «да», «истина»)
- Класс 0 (отрицательный, «нет», «ложь»)
Такие модели широко используются в медицине, финансах, маркетинге и многих других областях, где требуется принять быстрое решение «да/нет».
Области применения «да/нет»‑моделей
Примеры реальных задач:
- Определение наличия заболевания по результатам анализов;
- Выявление мошеннических транзакций в банковской системе;
- Прогноз оттока клиентов (уйдёт / останется);
- Классификация спама в электронных письмах;
- Определение готовности оборудования к поломке.
Ключевые метрики оценки
Для оценки качества бинарных моделей используют несколько основных показателей. Ниже перечислены самые популярные, а также их формулы.
| Метрика | Описание | Формула |
|---|---|---|
| Accuracy (Точность) | Доля правильно классифицированных объектов. | (TP + TN) / (TP + TN + FP + FN) |
| Precision (Точность положительного класса) | Доля предсказанных положительных, которые действительно положительные. | TP / (TP + FP) |
| Recall (Полнота) | Доля реальных положительных, найденных моделью. | TP / (TP + FN) |
| F1‑score | Гармоническое среднее Precision и Recall. | 2·(Precision·Recall) / (Precision + Recall) |
| AUC‑ROC | Площадь под ROC‑кривой; измеряет способность модели различать классы. | — (интеграл по ROC‑кривой) |
| Log Loss (Log‑likelihood loss) | Средняя логарифмическая потеря; чем меньше, тем лучше. | -1/N Σ [ y·log(p) + (1‑y)·log(1‑p) ] |
В примере исследования предсказания сердечно‑сосудистых заболеваний получены следующие результаты: Accuracy = 78 %, Precision = 0.79, Recall = 0.67, AUC = 0.84; Эти цифры показывают, что модель достаточно сбалансирована, но есть пространство для улучшения полноты.
Основные алгоритмы бинарной классификации
Логистическая регрессия
Самый простой и интерпретируемый метод. Моделирует вероятность принадлежности к классу 1 через логистическую функцию:
p = 1 / (1 + exp(- (β₀ + β₁·x₁ + … + βₖ·xₖ))) Дерево решений
Разбивает пространство признаков на прямоугольные регионы, каждый из которых получает метку класса. Плюсы: простота визуализации, отсутствие необходимости масштабировать признаки.
Случайный лес (Random Forest)
Ансамбль из множества деревьев, обученных на разных подвыборках и подмножестве признаков. Уменьшает переобучение и повышает устойчивость.
Градиентный бустинг (XGBoost, LightGBM, CatBoost)
Последовательно обучает слабые модели (деревья) так, чтобы каждая следующая исправляла ошибки предыдущих. Часто дает лучшие результаты на табличных данных.
Машина опорных векторов (SVM)
Ищет гиперплоскость, максимально разделяющую два класса. При нелинейных зависимостях используется ядровая функция (RBF, полиномиальная).
Наивный байесовский классификатор
Базируется на предположении о независимости признаков. Быстрый, особенно при работе с текстовыми данными (например, спам‑фильтрация).
Нейронные сети (MLP, CNN, RNN)
Позволяют моделировать сложные нелинейные зависимости. Требуют больших объёмов данных и вычислительных ресурсов.
Сравнительный анализ методов
Ниже представлена таблица, суммирующая сильные и слабые стороны рассмотренных алгоритмов для задач с линейной и нелинейной зависимостью между признаками и целевой переменной.
| Алгоритм | Сильные стороны | Слабые стороны | Подходит для |
|---|---|---|---|
| Логистическая регрессия | Интерпретируемость, быстрое обучение | Только линейные границы, чувствительна к мультиколлинеарности | Линейные зависимости, небольшие наборы данных |
| Дерево решений | Простая визуализация, работает с категориальными признаками без кодирования | Склонность к переобучению, нестабильность | Небольшие‑средние наборы, требуется интерпретация |
| Случайный лес | Низкая дисперсия, автоматический отбор признаков | Меньше интерпретируемости, большие затраты памяти | Средние‑большие наборы, сложные нелинейные паттерны |
| Градиентный бустинг | Высокая точность, гибкость настройки гиперпараметров | Долгое обучение, чувствительность к шуму при неправильных параметрах | Табличные данные, конкурсы Kaggle, задачи с сильными нелинейностями |
| SVM | Эффективна в высокоразмерных пространствах, гибкость через ядра | Плохая масштабируемость на больших датасетах, трудный выбор ядра | Текстовые и изображенческие задачи небольших размеров |
| Наивный байес | Очень быстрый, устойчив к небольшому объёму данных | Сильное предположение о независимости признаков | Текстовая классификация, спам‑фильтрация |
| Нейронные сети | Мощные нелинейные представления, возможность работы с изображениями и последовательностями | Требуют больших данных, сложно интерпретировать, длительное обучение | Большие датасеты, задачи компьютерного зрения, NLP |
Практический пример: бинарная классификация с помощью scikit‑learn
Рассмотрим задачу предсказания наличия сердечно‑сосудистого заболевания (ССЗ) на основе медицинских показателей.
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, precision_score, recall_score, roc_auc_score, f1_score, log_loss
df = pd.read_csv('cvs_dataset.csv') # файл должен содержать признаки и столбец target
X = df.drop('target', axis=1)
y = df['target']
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y)
scaler = StandardScaler
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
model = LogisticRegression(max_iter=1000, class_weight='balanced')
model.fit(X_train_scaled, y_train)
y_pred = model.predict(X_test_scaled)
y_proba = model.predict_proba(X_test_scaled)[:, 1]
print('Accuracy :', accuracy_score(y_test, y_pred))
print('Precision:', precision_score(y_test, y_pred))
print('Recall :', recall_score(y_test, y_pred))
print('F1‑score :', f1_score(y_test, y_pred))
print('AUC‑ROC :', roc_auc_score(y_test, y_proba))
print('LogLoss :', log_loss(y_test, y_proba))
В результате получаем метрики, сравнимые с указанными в исследовании (Accuracy ≈ 78 %, Precision ≈ 0.79, Recall ≈ 0.67, AUC ≈ 0.84). При желании можно заменить модель на RandomForest, XGBoost или SVM и сравнить результаты;
- Выбор модели зависит от структуры данных. Если признаки линейно разделимы – начните с логистической регрессии.
- Для сложных нелинейных зависимостей эффективнее использовать ансамбли (Random Forest, Gradient Boosting) или SVM с ядром RBF.
- Оценка модели должна включать несколько метрик. Accuracy часто вводит в заблуждение при несбалансированных классах, поэтому важно смотреть на Precision, Recall, F1‑score и AUC‑ROC.
- Регуляризация и балансировка классов (class_weight, SMOTE) помогают избежать переобучения и повышают полноту.
- Интерпретируемость важна в медицине и финансах. Для таких областей предпочтительны логистическая регрессия, дерево решений или модели с post‑hoc объяснителями (SHAP, LIME).
Статья составлена на основе публично доступных материалов (scikit‑learn, научные публикации, статьи на Tproger, Habr, CyberLeninka) и актуального состояния исследований в 2026 году.