Метрики
До цього моменту основною метрикою для оцінки ефективності моделі була точність. Однак точність має певні обмеження. Далі розглянемо її недоліки та представимо кілька додаткових метрик — на основі TP, TN, FP та FN — які допомагають вирішити ці проблеми.
Точність
Точність відображає частку правильних передбачень:
accuracy=correct+incorrectcorrect=TP+TN+FP+FNTP+TNОднак точність має свої недоліки. Наприклад, уявіть, що потрібно передбачити, чи має пацієнт рідкісне захворювання. У наборі даних 99,9% здорових пацієнтів і лише 0,1% із захворюванням. У такому випадку постійне передбачення, що пацієнт здоровий, дасть точність 0,999 — хоча така модель є абсолютно марною.
Такі набори даних називають несбалансованими, і в подібних випадках збалансована точність є кращою метрикою.
Збалансована точність
Збалансована точність окремо обчислює частку правильних позитивних передбачень і частку правильних негативних передбачень, після чого усереднює їх. Такий підхід надає однакову важливість кожному класу, незалежно від того, наскільки незбалансованим є набір даних.
balanced_accuracyaccuracy=21⋅PTP+21⋅NTN=P+NTP+TNДе
- P=TP+FN – загальна кількість позитивних випадків (клас 1);
- N=TN+FP – загальна кількість позитивних випадків (клас 0).
У прикладі з рідкісною хворобою збалансована точність моделі, яка завжди передбачає "здоровий", становитиме 0.5 – що ефективно підкреслює проблему. Таким чином, це питання вирішується.
Однак збалансована точність все ще не розрізняє помилки першого та другого типу – так само, як і звичайна точність. Саме тут стають важливими точність і повнота.
Точність
Метрика точність показує, скільки з тих значень, які модель передбачила як позитивні, були дійсно позитивними. Це частка істинно позитивних передбачень серед усіх позитивних передбачень, зроблених моделлю:
precision=TP+FPTPВикористовуючи метрику точності (precision), можна визначити, як часто виникає помилка першого роду. Висока точність означає, що помилки першого роду трапляються рідко, тоді як низька точність вказує на їх часте виникнення.
Повнота
Метрика повноти (recall) показує частку дійсно позитивних випадків, які модель правильно передбачила:
recall=precision=TP+FNTPМетрика повноти допомагає зрозуміти, як часто виникає помилка другого роду. Висока повнота означає, що помилки другого роду трапляються рідко, а низька повнота — що вони виникають часто.
Однак і точність, і повнота мають свої обмеження. Наприклад, модель, яка завжди передбачає лише позитивний клас (1), досягне ідеальної повноти, але її точність буде низькою. З іншого боку, модель, яка правильно передбачає лише один позитивний випадок і все інше позначає як негативне, матиме ідеальну точність, але дуже низьку повноту.
Це показує, що хоча легко побудувати модель з ідеальною точністю або ідеальною повнотою, значно складніше створити таку, яка добре працює за обома показниками. Саме тому важливо враховувати обидві метрики — і, на щастя, існує метрика, яка їх поєднує.
F1-міра
F1-міра — це гармонійне середнє між точністю (precision) та повнотою (recall). Гармонійне середнє використовується замість звичайного (арифметичного) середнього, оскільки воно сильніше враховує випадки, коли одне зі значень (або точність, або повнота) є низьким, що робить F1-міру більш збалансованою оцінкою якості моделі.
F1=precision1+recall12=precision+recall2⋅precision⋅recallF1-міра поєднує і точність, і повноту в одному показнику. Вона буде високою лише тоді, коли обидва значення є відносно високими, що робить її корисною для оцінки, коли потрібно збалансувати обидва типи помилок.
Вибір відповідної метрики залежить від конкретного завдання. Точність (або збалансована точність для незбалансованих наборів даних) є інтуїтивно зрозумілою та дає загальне уявлення про ефективність моделі. Якщо потрібен детальніший аналіз типів помилок, точність допомагає виявити помилки першого роду, а повнота — помилки другого роду. F1-міра показує, наскільки добре модель збалансована щодо обох типів помилок.
Ще однією поширеною метрикою є 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():
12345678910111213import 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))
Support означає кількість фактичних випадків кожного класу у тестовій вибірці. Macro avg обчислює середнє значення кожної метрики (точність, повнота, F1) для всіх класів однаково, без урахування дисбалансу класів. Weighted avg також обчислює середнє значення метрик для всіх класів, але надає більшу вагу класам із більшою кількістю випадків (залежно від їхньої підтримки).
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Awesome!
Completion rate improved to 4.17
Метрики
Свайпніть щоб показати меню
До цього моменту основною метрикою для оцінки ефективності моделі була точність. Однак точність має певні обмеження. Далі розглянемо її недоліки та представимо кілька додаткових метрик — на основі TP, TN, FP та FN — які допомагають вирішити ці проблеми.
Точність
Точність відображає частку правильних передбачень:
accuracy=correct+incorrectcorrect=TP+TN+FP+FNTP+TNОднак точність має свої недоліки. Наприклад, уявіть, що потрібно передбачити, чи має пацієнт рідкісне захворювання. У наборі даних 99,9% здорових пацієнтів і лише 0,1% із захворюванням. У такому випадку постійне передбачення, що пацієнт здоровий, дасть точність 0,999 — хоча така модель є абсолютно марною.
Такі набори даних називають несбалансованими, і в подібних випадках збалансована точність є кращою метрикою.
Збалансована точність
Збалансована точність окремо обчислює частку правильних позитивних передбачень і частку правильних негативних передбачень, після чого усереднює їх. Такий підхід надає однакову важливість кожному класу, незалежно від того, наскільки незбалансованим є набір даних.
balanced_accuracyaccuracy=21⋅PTP+21⋅NTN=P+NTP+TNДе
- P=TP+FN – загальна кількість позитивних випадків (клас 1);
- N=TN+FP – загальна кількість позитивних випадків (клас 0).
У прикладі з рідкісною хворобою збалансована точність моделі, яка завжди передбачає "здоровий", становитиме 0.5 – що ефективно підкреслює проблему. Таким чином, це питання вирішується.
Однак збалансована точність все ще не розрізняє помилки першого та другого типу – так само, як і звичайна точність. Саме тут стають важливими точність і повнота.
Точність
Метрика точність показує, скільки з тих значень, які модель передбачила як позитивні, були дійсно позитивними. Це частка істинно позитивних передбачень серед усіх позитивних передбачень, зроблених моделлю:
precision=TP+FPTPВикористовуючи метрику точності (precision), можна визначити, як часто виникає помилка першого роду. Висока точність означає, що помилки першого роду трапляються рідко, тоді як низька точність вказує на їх часте виникнення.
Повнота
Метрика повноти (recall) показує частку дійсно позитивних випадків, які модель правильно передбачила:
recall=precision=TP+FNTPМетрика повноти допомагає зрозуміти, як часто виникає помилка другого роду. Висока повнота означає, що помилки другого роду трапляються рідко, а низька повнота — що вони виникають часто.
Однак і точність, і повнота мають свої обмеження. Наприклад, модель, яка завжди передбачає лише позитивний клас (1), досягне ідеальної повноти, але її точність буде низькою. З іншого боку, модель, яка правильно передбачає лише один позитивний випадок і все інше позначає як негативне, матиме ідеальну точність, але дуже низьку повноту.
Це показує, що хоча легко побудувати модель з ідеальною точністю або ідеальною повнотою, значно складніше створити таку, яка добре працює за обома показниками. Саме тому важливо враховувати обидві метрики — і, на щастя, існує метрика, яка їх поєднує.
F1-міра
F1-міра — це гармонійне середнє між точністю (precision) та повнотою (recall). Гармонійне середнє використовується замість звичайного (арифметичного) середнього, оскільки воно сильніше враховує випадки, коли одне зі значень (або точність, або повнота) є низьким, що робить F1-міру більш збалансованою оцінкою якості моделі.
F1=precision1+recall12=precision+recall2⋅precision⋅recallF1-міра поєднує і точність, і повноту в одному показнику. Вона буде високою лише тоді, коли обидва значення є відносно високими, що робить її корисною для оцінки, коли потрібно збалансувати обидва типи помилок.
Вибір відповідної метрики залежить від конкретного завдання. Точність (або збалансована точність для незбалансованих наборів даних) є інтуїтивно зрозумілою та дає загальне уявлення про ефективність моделі. Якщо потрібен детальніший аналіз типів помилок, точність допомагає виявити помилки першого роду, а повнота — помилки другого роду. F1-міра показує, наскільки добре модель збалансована щодо обох типів помилок.
Ще однією поширеною метрикою є 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():
12345678910111213import 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))
Support означає кількість фактичних випадків кожного класу у тестовій вибірці. Macro avg обчислює середнє значення кожної метрики (точність, повнота, F1) для всіх класів однаково, без урахування дисбалансу класів. Weighted avg також обчислює середнє значення метрик для всіх класів, але надає більшу вагу класам із більшою кількістю випадків (залежно від їхньої підтримки).
Дякуємо за ваш відгук!