TGViewer
Data Science | Вопросы собесов Data Science | Вопросы собесов @easy_ds · 4.9K subscribers
Post #2671 292
🤔 Какую метрику следует выбрать, когда у бинарного классификатора разделение данных такое что 95% в одном классе, 5% в другом ?

Когда у вас сильно несбалансированный набор данных с 95% примеров в одном классе и 5% в другом, стандартные метрики, такие как accuracy (точность), становятся неэффективными. Они могут давать высокие значения, даже если модель просто предсказывает всегда более частый класс. В таких случаях лучше использовать метрики, которые учитывают дисбаланс классов.

🟠Матрица ошибок
Дает представление о количестве истинно положительных (TP), истинно отрицательных (TN), ложно положительных (FP) и ложно отрицательных (FN) предсказаний. Это основа для вычисления многих других метрик.
from sklearn.metrics import confusion_matrix

y_true = [0, 0, 0, 1, 1, 1, 1, 1, 1, 1]
y_pred = [0, 0, 1, 0, 0, 0, 1, 1, 1, 1]

conf_matrix = confusion_matrix(y_true, y_pred)
print(conf_matrix)


🟠Precision, Recall и F1-Score
Доля правильных предсказаний положительного класса среди всех предсказаний положительного класса.
\text{Precision} = \frac{TP}{TP + FP}


Доля правильных предсказаний положительного класса среди всех реальных положительных примеров.
\text{Recall} = \frac{TP}{TP + FN}


Гармоническое среднее Precision и Recall.
\text{F1-Score} = 2 \cdot \frac{\text{Precision} \cdot \text{Recall}}{\text{Precision} + \text{Recall}}

from sklearn.metrics import precision_score, recall_score, f1_score

precision = precision_score(y_true, y_pred)
recall = recall_score(y_true, y_pred)
f1 = f1_score(y_true, y_pred)

print(f"Precision: {precision}")
print(f"Recall: {recall}")
print(f"F1-Score: {f1}")


🟠ROC-AUC

Измеряет качество классификатора по совокупности всех возможных порогов классификации. Это хорошо работает с несбалансированными данными, так как учитывает соотношение истинно положительных и ложноположительных сработок.
from sklearn.metrics import roc_auc_score

y_true = [0, 0, 0, 1, 1, 1, 1, 1, 1, 1]
y_scores = [0.1, 0.4, 0.35, 0.8, 0.65, 0.7, 0.85, 0.9, 0.95, 0.98] # вероятности

roc_auc = roc_auc_score(y_true, y_scores)
print(f"ROC-AUC: {roc_auc}")


🟠Precision-Recall Curve и PR-AUC
Более информативна для несбалансированных данных, так как она лучше показывает разницу в предсказаниях для меньшего класса. PR-AUC — это площадь под кривой Precision-Recall.
from sklearn.metrics import precision_recall_curve, auc

precision, recall, _ = precision_recall_curve(y_true, y_scores)
pr_auc = auc(recall, precision)
print(f"PR-AUC: {pr_auc}")


🟠Balanced Accuracy
Это среднее значение чувствительности (Recall) для каждого класса, что делает ее более подходящей для несбалансированных данных.
from sklearn.metrics import balanced_accuracy_score

balanced_acc = balanced_accuracy_score(y_true, y_pred)
print(f"Balanced Accuracy: {balanced_acc}")


🟠Cohen's Kappa
Учитывает вероятность случайных совпадений и дает более точную оценку производительности модели на несбалансированных данных.
from sklearn.metrics import cohen_kappa_score

kappa = cohen_kappa_score(y_true, y_pred)
print(f"Cohen's Kappa: {kappa}")


Ставь 👍 и забирай 📚 Базу знаний
More from @easy_ds
  1. Oct 10, 2026🤔 Что такое переобучение модели? Переобучение (overfitting) происходит, когда модель слиш…
  2. Oct 9, 2026Post #2695
  3. Oct 9, 2026🤔 Расскажи о Gradient-boosted trees Gradient-boosted trees — это ансамблевый метод машинн…
  4. Oct 9, 2026🤔 Какие слабые стороны есть у алгоритма кластериации ? Алгоритмы кластеризации имеют неск…
  5. Oct 8, 2026🤔 В чем разница между листом и кортежем? В Python список (list) — это изменяемая коллекци…
  6. Oct 7, 2026🤔 Какие есть проблемы с Batch Norm? 1. Зависимость от мини-батчей: небольшие батчи могут…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →