Метрики
До цього моменту ми використовували точність як основну метрику для оцінки ефективності моделі. Однак точність має певні обмеження. Далі розглянемо її недоліки та представимо кілька додаткових метрик — на основі 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=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 також обчислює середнє значення метрик для всіх класів, але надає більшу вагу класам з більшою кількістю випадків (залежно від їхньої підтримки).
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Чудово!
Completion показник покращився до 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=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 також обчислює середнє значення метрик для всіх класів, але надає більшу вагу класам з більшою кількістю випадків (залежно від їхньої підтримки).
Дякуємо за ваш відгук!