Что такое сбалансированный класс в машинном обучении?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Сбалансированный класс в машинном обучении
Сбалансированный класс — это состояние датасета, когда распределение примеров разных классов примерно равномерно. Это важный концепт в классификационных задачах, особенно при работе с бинарной или мультиклассовой классификацией.
Что такое несбалансированность?
Если в датасете для классификации одного класса гораздо больше, чем другого, возникает дисбаланс классов (class imbalance). Например:
- Обнаружение мошенничества: 99.9% транзакций легальны, 0.1% — мошеннические
- Медицинская диагностика: редкое заболевание есть только у 2% пациентов
- Предсказание оттока: 95% клиентов остаются, 5% уходят
Почему это проблема?
Модель может быть ленива. Если большинство классов относится к одной категории, модель получит высокую точность (accuracy), просто всегда предсказывая доминирующий класс:
# Плохой сценарий — точность 99%, но модель бесполезна
if fraud_percentage == 0.1:
# Модель, которая всегда говорит "не мошенничество"
# Accuracy = 99.9%, но не поймала ни одного мошенника!
predict_always_legitimate()
Как достичь баланса?
1. Переагрегация (Oversampling)
Увеличить количество примеров меньшинства до уровня большинства:
from imblearn.over_sampling import RandomOverSampler
oversampler = RandomOverSampler(random_state=42)
X_balanced, y_balanced = oversampler.fit_resample(X, y)
2. Подагрегация (Undersampling)
Уменьшить количество примеров большинства:
from imblearn.under_sampling import RandomUnderSampler
undersampler = RandomUnderSampler(random_state=42)
X_balanced, y_balanced = undersampler.fit_resample(X, y)
3. SMOTE (Synthetic Minority Over-sampling Technique)
Этот метод создаёт синтетические примеры меньшинства, интерполируя между существующими:
from imblearn.over_sampling import SMOTE
smote = SMOTE(random_state=42)
X_balanced, y_balanced = smote.fit_resample(X, y)
4. Взвешивание классов
Увеличить штраф за ошибки на редком классе:
from sklearn.linear_model import LogisticRegression
model = LogisticRegression(class_weight='balanced')
model.fit(X, y)
Какие метрики использовать?
Для несбалансированных данных accuracy не подходит. Используй:
- Precision & Recall — показывают баланс между ложными срабатываниями и пропусками
- F1-score — гармоническое среднее Precision и Recall
- ROC-AUC — площадь под кривой компромисса между TPR и FPR
from sklearn.metrics import confusion_matrix, f1_score, roc_auc_score
print(f"F1-score: {f1_score(y_true, y_pred)}")
print(f"ROC-AUC: {roc_auc_score(y_true, y_proba)}")
Итог
Сбалансированный класс — залог качественной модели классификации. Выбор метода зависит от размера данных, типа задачи и требуемого баланса между точностью и полнотой.