Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Метрики | Порівняння Моделей
Класифікація з Python

Метрики

Свайпніть щоб показати меню

До цього моменту основним показником для оцінки ефективності моделі була точність. Проте точність має певні обмеження. Далі розглядаються її недоліки та вводяться декілька додаткових метрик — на основі TP, TN, FP і FN — які допомагають вирішити ці проблеми.

ConfusionMatrix

Точність

Точність відображає частку правильних передбачень:

accuracy=correctcorrect+incorrect=TP+TNTP+TN+FP+FN\text{accuracy} = \frac{\text{correct}}{\text{correct} + \text{incorrect}} = \frac{\textcolor{green}{\text{TP}} + \textcolor{green}{\text{TN}}}{\textcolor{green}{\text{TP}} + \textcolor{green}{\text{TN}} + \textcolor{red}{\text{FP}} + \textcolor{red}{\text{FN}}}

Однак точність має свої недоліки. Наприклад, уявіть, що ви намагаєтеся передбачити, чи має пацієнт рідкісне захворювання. У наборі даних 99,9% здорових пацієнтів і лише 0,1% із захворюванням. У такому випадку, якщо завжди передбачати, що пацієнт здоровий, точність складе 0,999 — хоча така модель є абсолютно марною.

Такі набори даних називають несбалансованими, і в таких випадках збалансована точність є кращою метрикою для використання.

Збалансована точність

Збалансована точність окремо обчислює частку правильних позитивних передбачень і частку правильних негативних передбачень, а потім усереднює їх. Такий підхід надає рівну важливість кожному класу, незалежно від того, наскільки несбалансований набір даних.

balanced_accuracy=12TPP+12TNNaccuracy=TP+TNP+N\begin{aligned} \text{balanced\_accuracy} &= \frac12 \cdot \frac{\textcolor{green}{\text{TP}}}{\text{P}} + \frac12 \cdot \frac{\textcolor{green}{\text{TN}}}{\text{N}}\\ \text{accuracy} &= \frac{\textcolor{green}{\text{TP}} + \textcolor{green}{\text{TN}}}{\text{P} + \text{N}} \end{aligned}

Де

  • P=TP+FN\text{P} = \textcolor{green}{\text{TP}} + \textcolor{red}{\text{FN}} — загальна кількість позитивних випадків (клас 1);
  • N=TN+FP\text{N} = \textcolor{green}{\text{TN}} + \textcolor{red}{\text{FP}} — загальна кількість негативних випадків (клас 0).

У прикладі з рідкісним захворюванням збалансована точність моделі, яка завжди передбачає "здоровий", буде 0,5 — що ефективно підкреслює проблему. Таким чином, це питання вирішується.

Однак збалансована точність все ще не розрізняє помилки першого та другого типу — так само, як і звичайна точність. Саме тут з'являються точність (precision) та повнота (recall).

Точність

Метрика точність показує, скільки з тих значень, які модель передбачила як позитивні, були дійсно позитивними. Це частка істинно позитивних передбачень серед усіх позитивних передбачень, зроблених моделлю:

precision=TPTP+FP\text{precision} = \frac{\textcolor{green}{\text{TP}}}{\textcolor{green}{\text{TP}} + \textcolor{red}{\text{FP}}}

Використовуючи метрику точності, можна зрозуміти, як часто виникає помилка першого роду. Висока точність означає, що помилки першого роду трапляються рідко, а низька точність вказує на їх часте виникнення.

Повнота

Метрика повнота показує частку дійсно позитивних випадків, які модель правильно передбачила:

recall=TPTP+FN\text{recall} = \frac{\textcolor{green}{\text{TP}}}{\textcolor{green}{\text{TP}} + \textcolor{red}{\text{FN}}}

Метрика recall допомагає зрозуміти, як часто виникає помилка другого роду. Високе значення recall означає, що помилки другого роду трапляються рідко, а низьке — що вони виникають часто.

Однак і precision, і recall мають обмеження. Наприклад, модель, яка прогнозує лише позитивний клас (1), досягне ідеального recall, але її precision буде низьким. З іншого боку, модель, яка правильно передбачає лише один позитивний випадок і все інше позначає як негативне, матиме ідеальний precision, але дуже низький recall.

Це показує, що хоча легко побудувати модель з ідеальним precision або recall, набагато складніше створити таку, яка добре працює за обома показниками. Тому важливо враховувати обидві метрики — і, на щастя, існує метрика, яка їх поєднує.

F1-оцінка

F1-оцінка — це гармонічне середнє між precision і recall. Гармонічне середнє віддається перевага над звичайним (арифметичним), оскільки воно сильніше штрафує ситуації, коли одне зі значень (precision або recall) низьке, що робить його більш збалансованою мірою ефективності моделі.

F1=21precision+1recall=2precisionrecallprecision+recall\text{F1} = \frac{2}{\frac{1}{\text{precision}} + \frac{1}{\text{recall}}} = \frac{2 \cdot \text{precision} \cdot \text{recall}}{\text{precision} + \text{recall}}

F1-оцінка поєднує precision і recall в одну метрику. Вона буде високою лише тоді, коли обидва показники досить високі, що робить її корисною для балансування обох типів помилок.

Вибір правильної метрики залежить від конкретного завдання. Точність (або збалансована точність для незбалансованих наборів даних) є інтуїтивно зрозумілою та надає загальне уявлення про ефективність моделі. Якщо потрібен детальніший аналіз типів помилок моделі, точність допомагає визначити помилки першого роду, а повнота підкреслює помилки другого роду. F1-міра показує, наскільки добре модель збалансована щодо помилок першого та другого роду.

MetricsSummary
Note
Додаткове вивчення

Ще однією поширеною метрикою є ROC/AUC, про яку можна прочитати у цій статті.

Метрики в Python

Scikit-learn надає реалізації всіх цих метрик у модулі sklearn.metrics:

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

accuracy = accuracy_score(y_true, y_pred)
balanced_accuracy = balanced_accuracy_score(y_true, y_pred)
precision = precision_score(y_true, y_pred)
recall = recall_score(y_true, y_pred)
f1 = f1_score(y_true, y_pred)

Якщо потрібно отримати такі метрики, як precision, recall та F1-score одночасно, у sklearn є функція classification_report():

12345678910111213
import pandas as pd import seaborn as sns from sklearn.metrics import classification_report from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b71ff7ac-3932-41d2-a4d8-060e24b00129/titanic.csv') X, y = df.drop('Survived', axis=1), df['Survived'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1) random_forest = RandomForestClassifier().fit(X_train, y_train) y_pred = random_forest.predict(X_test) # Display a classification report print(classification_report(y_test, y_pred))
Note
Примітка

Support — кількість фактичних випадків кожного класу у тестовій вибірці. Macro avg обчислює середнє значення кожної метрики (precision, recall, F1) для всіх класів однаково, без урахування дисбалансу класів. Weighted avg також обчислює середнє значення метрик для всіх класів, але надає більшу вагу класам із більшою кількістю випадків (згідно з їхнім support).

question mark

Яка метрика оцінювання забезпечує баланс між точністю та повнотою, надаючи єдину оцінку, що відображає обидва показники?

Виберіть правильну відповідь

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 5. Розділ 2

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Секція 5. Розділ 2
some-alt