Перейти к содержимому

Accuracy

Метрика качества — это число, по которому оценивают работу модели. Она показывает, насколько хорошо ответы модели совпадают с правильными ответами.

Accuracy — самая простая метрика качества классификации. Она показывает, какая доля объектов была классифицирована правильно.

Чем больше Accuracy, тем точнее модель. Например, если модель дала 8 правильных ответов из 10, то:

Accuracy = 8 / 10 = 0.8

Это означает, что модель правильно ответила в 80% случаев.

uses MLABC;
begin
var ytrue := [0, 1, 1, 0, 1];
var ypred := [0, 1, 0, 0, 1];
var acc := Metrics.Accuracy(ytrue, ypred);
Println('Accuracy:', acc);
end.

В этом примере совпали 4 ответа из 5:

Accuracy: 0.8

В реальной задаче Accuracy обычно считают на тестовой выборке. Это завершает полный цикл проверки модели:

  1. данные делят на обучающую и тестовую части;
  2. модель обучают на Xtrain и ytrain;
  3. модель делает предсказания для Xtest;
  4. предсказания ypred сравнивают с правильными ответами ytest;
  5. по числу совпадений вычисляют Accuracy.

На рисунке ниже показан весь путь: сначала исходные данные разбиваются на обучающую и тестовую части, затем модель обучается на обучающей выборке, после этого делает предсказания для тестовой выборки, и только в конце вычисляется метрика качества.

Полный цикл вычисления Accuracy после TrainTestSplit: разбиение данных, обучение модели, предсказание и сравнение ответов

Последние две операции из этого цикла в программе выглядят так:

var ypred := model.Predict(Xtest);
var acc := Metrics.Accuracy(ytest, ypred);

Здесь:

  • ytest — правильные ответы для тестовой выборки;
  • ypred — ответы, которые предсказала модель.

Сначала модель получает признаки тестовой выборки Xtest и возвращает предсказания ypred. Затем Metrics.Accuracy сравнивает ypred с правильными ответами ytest.

На рисунке выше совпали 3 ответа из 4, поэтому Accuracy = 3 / 4 = 0.75.

uses MLABC;
begin
var df := DataFrame.FromCsvText('''
Вес,ВысотаВХолке,Порода
20,33,бульдог
17,43,спаниель
16,41,спаниель
25,36,бульдог
26,34,бульдог
21,35,бульдог
24,35,бульдог
20,36,бульдог
14,39,спаниель
15,40,спаниель
19,39,бульдог
18,42,спаниель
22,34,бульдог
15,38,спаниель
19,40,спаниель
16,40,спаниель
''');
var X := df.ToMatrix(['Вес', 'ВысотаВХолке']);
var target := df.EncodeTarget('Порода');
var y := target.Labels;
var (Xtrain, Xtest, ytrain, ytest) :=
Validation.TrainTestSplit(X, y, testRatio := 0.25, seed := 42);
var model := new KNNClassifier(3);
model.Fit(Xtrain, ytrain);
var ypred := model.Predict(Xtest);
var acc := Metrics.Accuracy(ytest, ypred);
Println('Accuracy:', acc);
end.

Вывод:

Accuracy: 0.75

Это значит, что модель правильно классифицировала 75% объектов тестовой выборки: 3 объекта из 4.

Accuracy хорошо подходит как первая оценка качества модели, если классы примерно сбалансированы.

Например, если в тестовой выборке примерно поровну бульдогов и спаниелей, доля правильных ответов хорошо отражает качество модели.

Если классы сильно несбалансированы, Accuracy может выглядеть хорошо, даже если модель плохо решает задачу.

Например, если 95% писем не являются спамом, модель может всегда отвечать “не спам” и получить Accuracy = 0.95. Но такая модель вообще не умеет находить спам.

В таких случаях вместе с Accuracy смотрят другие метрики:

  • Precision;
  • Recall;
  • F1;
  • матрицу ошибок.