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

bookМетрики

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

Точність

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

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=TPTP+FP\text{precision} = \frac{\textcolor{green}{\text{TP}}}{\textcolor{green}{\text{TP}} + \textcolor{red}{\text{FP}}}

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

Повнота

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

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

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

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

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

F1-міра

F1-міра — це гармонійне середнє між точністю (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-міра поєднує і точність, і повноту в один показник. Вона буде високою лише тоді, коли обидва значення — і точність, і повнота — є відносно високими, що робить її корисною мірою, коли потрібно збалансувати обидва типи помилок.

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

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))
copy
Note
Примітка

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

question mark

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

Select the correct answer

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

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

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

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

Запитати АІ

expand

Запитати АІ

ChatGPT

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

bookМетрики

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

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

Точність

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

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=TPTP+FP\text{precision} = \frac{\textcolor{green}{\text{TP}}}{\textcolor{green}{\text{TP}} + \textcolor{red}{\text{FP}}}

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

Повнота

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

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

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

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

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

F1-міра

F1-міра — це гармонійне середнє між точністю (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-міра поєднує і точність, і повноту в один показник. Вона буде високою лише тоді, коли обидва значення — і точність, і повнота — є відносно високими, що робить її корисною мірою, коли потрібно збалансувати обидва типи помилок.

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

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))
copy
Note
Примітка

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

question mark

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

Select the correct answer

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

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

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

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