Каким должен быть recall и precision. Универсальный подход (почти) к любой задаче машинного обучения. Обучающая и тестовая выборка

В задачах машинного обучения для оценки качества моделей и сравнения различных алгоритмов используются метрики, а их выбор и анализ - непременная часть работы датасатаниста.

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

Метрики в задачах классификации

Для демонстрации полезных функций sklearn и наглядного представления метрик мы будем использовать наш датасет по оттоку клиентов телеком-оператора, с которым мы познакомились в первой статье курса.

Загрузим необходимые библиотеки и посмотрим на данные

Import pandas as pd import matplotlib.pyplot as plt from matplotlib.pylab import rc, plot import seaborn as sns from sklearn.preprocessing import LabelEncoder, OneHotEncoder from sklearn.model_selection import cross_val_score from sklearn.linear_model import LogisticRegression from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier from sklearn.metrics import precision_recall_curve, classification_report from sklearn.model_selection import train_test_split df = pd.read_csv("../../data/telecom_churn.csv")

Df.head(5)


Предобработка данных

# Сделаем маппинг бинарных колонок # и закодируем dummy-кодированием штат (для простоты, лучше не делать так для деревянных моделей) d = {"Yes" : 1, "No" : 0} df["International plan"] = df["International plan"].map(d) df["Voice mail plan"] = df["Voice mail plan"].map(d) df["Churn"] = df["Churn"].astype("int64") le = LabelEncoder() df["State"] = le.fit_transform(df["State"]) ohe = OneHotEncoder(sparse=False) encoded_state = ohe.fit_transform(df["State"].values.reshape(-1, 1)) tmp = pd.DataFrame(encoded_state, columns=["state " + str(i) for i in range(encoded_state.shape)]) df = pd.concat(, axis=1)

Accuracy, precision и recall

Перед переходом к самим метрикам необходимо ввести важную концепцию для описания этих метрик в терминах ошибок классификации - confusion matrix (матрица ошибок).
Допустим, что у нас есть два класса и алгоритм, предсказывающий принадлежность каждого объекта одному из классов, тогда матрица ошибок классификации будет выглядеть следующим образом:

True Positive (TP) False Positive (FP)
False Negative (FN) True Negative (TN)

Здесь - это ответ алгоритма на объекте, а - истинная метка класса на этом объекте.
Таким образом, ошибки классификации бывают двух видов: False Negative (FN) и False Positive (FP).

Обучение алгоритма и построение матрицы ошибок

X = df.drop("Churn", axis=1) y = df["Churn"] # Делим выборку на train и test, все метрики будем оценивать на тестовом датасете X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, test_size=0.33, random_state=42) # Обучаем ставшую родной логистическую регрессию lr = LogisticRegression(random_state=42) lr.fit(X_train, y_train) # Воспользуемся функцией построения матрицы ошибок из документации sklearn def plot_confusion_matrix(cm, classes, normalize=False, title="Confusion matrix", cmap=plt.cm.Blues): """ This function prints and plots the confusion matrix. Normalization can be applied by setting `normalize=True`. """ plt.imshow(cm, interpolation="nearest", cmap=cmap) plt.title(title) plt.colorbar() tick_marks = np.arange(len(classes)) plt.xticks(tick_marks, classes, rotation=45) plt.yticks(tick_marks, classes) if normalize: cm = cm.astype("float") / cm.sum(axis=1)[:, np.newaxis] print("Normalized confusion matrix") else: print("Confusion matrix, without normalization") print(cm) thresh = cm.max() / 2. for i, j in itertools.product(range(cm.shape), range(cm.shape)): plt.text(j, i, cm, horizontalalignment="center", color="white" if cm > thresh else "black") plt.tight_layout() plt.ylabel("True label") plt.xlabel("Predicted label") font = {"size" : 15} plt.rc("font", **font) cnf_matrix = confusion_matrix(y_test, lr.predict(X_test)) plt.figure(figsize=(10, 8)) plot_confusion_matrix(cnf_matrix, classes=["Non-churned", "Churned"], title="Confusion matrix") plt.savefig("conf_matrix.png") plt.show()


Accuracy

Интуитивно понятной, очевидной и почти неиспользуемой метрикой является accuracy - доля правильных ответов алгоритма:

Эта метрика бесполезна в задачах с неравными классами и это легко показать на примере.

Допустим, мы хотим оценить работу спам-фильтра почты. У нас есть 100 не-спам писем, 90 из которых наш классификатор определил верно (True Negative = 90, False Positive = 10) и 10 спам-писем, 5 из которых классификатор также определил верно (True Positive = 5, False Negative = 5).
Тогда accuracy:

Однако если мы просто будем предсказывать все письма как не-спам, то получим более высокую accuracy:

При этом, наша модель совершенно не обладает никакой предсказательной силой, так как мы изначально мы хотели определять письма со спамом. Преодолеть это нам поможет переход с общей для всех классов метрики к отдельным показателям качества классов.

Precision, recall и F-мера

Для оценки качества работы алгоритма на каждом из классов по отдельности введем метрики precision (точность) и recall (полнота).

Precision можно интерпретировать как долю объектов, названных классификатором положительными и при этом действительно являющимися положительными, а recall показывает, какую долю объектов положительного класса из всех объектов положительного класса нашел алгоритм.

Именно введение precision не позволяет нам записывать все объекты в один класс, так как в этом случае мы получаем рост уровня False Positive. Recall демонстрирует способность алгоритма обнаруживать данный класс вообще, а precision - способность отличать этот класс от других классов.

Как мы отмечали ранее, ошибки классификации бывают двух видов: False Positive и False Negative. В статистике первый вид ошибок называют ошибкой I-го рода, а второй - ошибкой II-го рода. В нашей задаче по определению оттока абонентов, ошибкой первого рода будет принятие лояльного абонента за уходящего, так как наша нулевая гипотеза состоит в том, что никто из абонентов не уходит, а мы эту гипотезу отвергаем. Соответственно, ошибкой второго рода будет являться "пропуск" уходящего абонента и ошибочное принятие нулевой гипотезы.

Precision и recall не зависят, в отличие от accuracy, от соотношения классов и потому применимы в условиях несбалансированных выборок.
Часто в реальной практике стоит задача найти оптимальный (для заказчика) баланс между этими двумя метриками. Классическим примером является задача определения оттока клиентов.
Очевидно, что мы не можем находить всех уходящих в отток клиентов и только их. Но определив стратегию и ресурс для удержания клиентов, мы можем подобрать нужные пороги по precision и recall. Например, можно сосредоточиться на удержании только высокодоходных клиентов или тех, кто уйдет с большей вероятностью, так как мы ограничены в ресурсах колл-центра.

Обычно при оптимизации гиперпараметров алгоритма (например, в случае перебора по сетке GridSearchCV ) используется одна метрика, улучшение которой мы и ожидаем увидеть на тестовой выборке.
Существует несколько различных способов объединить precision и recall в агрегированный критерий качества. F-мера (в общем случае ) - среднее гармоническое precision и recall:

В данном случае определяет вес точности в метрике, и при это среднее гармоническое (с множителем 2, чтобы в случае precision = 1 и recall = 1 иметь )
F-мера достигает максимума при полноте и точности, равными единице, и близка к нулю, если один из аргументов близок к нулю.
В sklearn есть удобная функция _metrics.classificationreport возвращающая recall, precision и F-меру для каждого из классов, а также количество экземпляров каждого класса.

Report = classification_report(y_test, lr.predict(X_test), target_names=["Non-churned", "Churned"]) print(report)

class precision recall f1-score support
Non-churned 0.88 0.97 0.93 941
Churned 0.60 0.25 0.35 159
avg / total 0.84 0.87 0.84 1100

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

AUC-ROC и AUC-PR

При конвертации вещественного ответа алгоритма (как правило, вероятности принадлежности к классу, отдельно см. SVM) в бинарную метку, мы должны выбрать какой-либо порог, при котором 0 становится 1. Естественным и близким кажется порог, равный 0.5, но он не всегда оказывается оптимальным, например, при вышеупомянутом отсутствии баланса классов.

Одним из способов оценить модель в целом, не привязываясь к конкретному порогу, является AUC-ROC (или ROC AUC) - площадь (A rea U nder C urve) под кривой ошибок (R eceiver O perating C haracteristic curve). Данная кривая представляет из себя линию от (0,0) до (1,1) в координатах True Positive Rate (TPR) и False Positive Rate (FPR):

TPR нам уже известна, это полнота, а FPR показывает, какую долю из объектов negative класса алгоритм предсказал неверно. В идеальном случае, когда классификатор не делает ошибок (FPR = 0, TPR = 1) мы получим площадь под кривой, равную единице; в противном случае, когда классификатор случайно выдает вероятности классов, AUC-ROC будет стремиться к 0.5, так как классификатор будет выдавать одинаковое количество TP и FP.
Каждая точка на графике соответствует выбору некоторого порога. Площадь под кривой в данном случае показывает качество алгоритма (больше - лучше), кроме этого, важной является крутизна самой кривой - мы хотим максимизировать TPR, минимизируя FPR, а значит, наша кривая в идеале должна стремиться к точке (0,1).

Код отрисовки ROC-кривой

Sns.set(font_scale=1.5) sns.set_color_codes("muted") plt.figure(figsize=(10, 8)) fpr, tpr, thresholds = roc_curve(y_test, lr.predict_proba(X_test)[:,1], pos_label=1) lw = 2 plt.plot(fpr, tpr, lw=lw, label="ROC curve ") plt.plot(, ) plt.xlim() plt.ylim() plt.xlabel("False Positive Rate") plt.ylabel("True Positive Rate") plt.title("ROC curve") plt.savefig("ROC.png") plt.show()


Критерий AUC-ROC устойчив к несбалансированным классам (спойлер: увы, не всё так однозначно) и может быть интерпретирован как вероятность того, что случайно выбранный positive объект будет проранжирован классификатором выше (будет иметь более высокую вероятность быть positive), чем случайно выбранный negative объект.

Рассмотрим следующую задачу: нам необходимо выбрать 100 релевантных документов из 1 миллиона документов. Мы намашинлернили два алгоритма:

  • Алгоритм 1 возвращает 100 документов, 90 из которых релевантны. Таким образом,
  • Алгоритм 2 возвращает 2000 документов, 90 из которых релевантны. Таким образом,

Скорее всего, мы бы выбрали первый алгоритм, который выдает очень мало False Positive на фоне своего конкурента. Но разница в False Positive Rate между этими двумя алгоритмами крайне мала - всего 0.0019. Это является следствием того, что AUC-ROC измеряет долю False Positive относительно True Negative и в задачах, где нам не так важен второй (больший) класс, может давать не совсем адекватную картину при сравнении алгоритмов.

Для того чтобы поправить положение, вернемся к полноте и точности:

  • Алгоритм 1
  • Алгоритм 2

Здесь уже заметна существенная разница между двумя алгоритмами - 0.855 в точности!

Precision и recall также используют для построения кривой и, аналогично AUC-ROC, находят площадь под ней.


Здесь можно отметить, что на маленьких датасетах площадь под PR-кривой может быть чересчур оптимистична, потому как вычисляется по методу трапеций, но обычно в таких задачах данных достаточно. За подробностями о взаимоотношениях AUC-ROC и AUC-PR можно обратиться сюда .

Logistic Loss

Особняком стоит логистическая функция потерь, определяемая как:

здесь это ответ алгоритма на -ом объекте, истинная метка класса на -ом объекте, а размер выборки.

Подробно про математическую интерпретацию логистической функции потерь уже написано в рамках поста про линейные модели.
Данная метрика нечасто выступает в бизнес-требованиях, но часто - в задачах на kaggle .
Интуитивно можно представить минимизацию logloss как задачу максимизации accuracy путем штрафа за неверные предсказания. Однако необходимо отметить, что logloss крайне сильно штрафует за уверенность классификатора в неверном ответе.

Рассмотрим пример:

Def logloss_crutch(y_true, y_pred, eps=1e-15): return - (y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred)) print("Logloss при неуверенной классификации %f" % logloss_crutch(1, 0.5)) >> Logloss при неуверенной классификации 0.693147 print("Logloss при уверенной классификации и верном ответе %f" % logloss_crutch(1, 0.9)) >> Logloss при уверенной классификации и верном ответе 0.105361 print("Logloss при уверенной классификации и НЕверном ответе %f" % logloss_crutch(1, 0.1)) >> Logloss при уверенной классификации и НЕверном ответе 2.302585

Отметим, как драматически выросла logloss при неверном ответе и уверенной классификации!
Следовательно, ошибка на одном объекте может дать существенное ухудшение общей ошибки на выборке. Такие объекты часто бывают выбросами, которые нужно не забывать фильтровать или рассматривать отдельно.
Всё становится на свои места, если нарисовать график logloss:


Видно, что, чем ближе к нулю ответ алгоритма при ground truth = 1, тем выше значение ошибки и круче растёт кривая.

Подытожим:

  • В случае многоклассовой классификации нужно внимательно следить за метриками каждого из классов и следовать логике решения задачи , а не оптимизации метрики
  • В случае неравных классов нужно подбирать баланс классов для обучения и метрику, которая будет корректно отражать качество классификации
  • mephistopheies и madrugado за помощь в подготовке статьи.

В процессе подготовки задачи для вступительного испытания на летнюю школу GoTo , мы обнаружили, что на русском языке практически отсутствует качественное описание основных метрик ранжирования (задача касалась частного случая задачи ранжирования - построения рекомендательного алгоритма). Мы в E-Contenta активно используем различные метрики ранжирования, поэтому решили исправить это недоразуменее, написав эту статью.

Задача ранжирования сейчас возникает повсюду: сортировка веб-страниц согласно заданному поисковому запросу, персонализация новостной ленты, рекомендации видео, товаров, музыки… Одним словом, тема горячая. Есть даже специальное направление в машинном обучении, которое занимается изучением алгоритмов ранжирования способных самообучаться - обучение ранжированию (learning to rank). Чтобы выбрать из всего многообразия алгоритмов и подходов наилучший, необходимо уметь оценивать их качество количественно. О наиболее распространенных метриках качества ранжирования и пойдет речь далее.

Кратко о задаче ранжирования

Ранжирование - задача сортировки набора элементов из соображения их релевантности . Чаще всего релевантность понимается по отношению к некому объекту . Например, в задаче информационного поиска объект - это запрос, элементы - всевозможные документы (ссылки на них), а релевантность - соответствие документа запросу, в задаче рекомендаций же объект - это пользователь, элементы - тот или иной рекомендуемый контент (товары, видео, музыка), а релевантность - вероятность того, что пользователь воспользуется (купит/лайкнет/просмотрит) данным контентом.

Формально, рассмотрим N объектов и M элементов . Реузальтат работы алгоритма ранжирования элементов для объекта - это отображение , которое сопоставляет каждому элементу вес , характеризующей степень релевантности элемента объекту (чем больше вес, тем релевантнее объект). При этом, набор весов задает перестановку на наборе элементов элементов (считаем, что множество элементов упорядоченное) исходя из их сортировки по убыванию веса .

Чтобы оценить качество ранжирования, необходимо иметь некоторый «эталон», с которым можно было бы сравнить результаты алгоритма. Рассмотрим - эталонную функцию релевантности, характеризующую «настоящую» релевантность элементов для данного объекта ( - элемент идеально подходит, - полностью нерелевантен), а так же соответствующую ей перестановку (по убыванию ).

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

Стоит отметить, что когда принимает только экстремальные значения: 0 и 1, то престановку обычно не рассматривют и учитывают лишь множество релевантных элементов, для которых .

Цель метрики качества ранжирования - определить, насколько полученные алгоритмом оценки релевантности и соответствующая им перестановка соответствуют истинным значениям релевантности . Рассмотрим основные метрики.

Mean average precision

Mean average precision at K (map@K) - одна из наиболее часто используемых метрик качества ранжирования. Чтобы разобраться в том, как она работает начнем с «основ».

Замечание: "*precision" метрики используется в бинарных задачах, где принимает только два значения: 0 и 1.

Precision at K

Precision at K (p@K) - точность на K элементах - базовая метрика качества ранжирования для одного объекта. Допустим, наш алгоритм ранжирования выдал оценки релевантности для каждого элемента . Отобрав среди них первые элементов с наибольшим можно посчитать долю релевантных. Именно это и делает precision at K:

Замечание: под понимается элемент , который в результате перестановки оказался на -ой позиции. Так, - элемент с наибольшим , - элемент со вторым по величине и так далее.

Average precision at K

Precision at K - метрика простая для понимания и реализации, но имеет важный недостаток - она не учитывает порядок элементов в «топе». Так, если из десяти элементов мы угадали только один, то не важно на каком месте он был: на первом, или на последнем, - в любом случае . При этом очевидно, что первый вариант гораздо лучше.

Этот недостаток нивелирует метрика ранжирования average precision at K (ap@K) , которая равна сумме p@k по индексам k от 1 до K только для релевантных элементов , деленому на K:

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

Теперь и map@K нам по зубами.

Mean average precision at K

Mean average precision at K (map@K) - одна из наиболее часто используемых метрик качества ранжирования. В p@K и ap@K качество ранжирования оценивается для отдельно взятого объекта (пользователя, поискового запроса). На практике объектов множество: мы имеем дело с сотнями тысяч пользователей, миллионами поисковых запросов и т.д. Идея map@K заключается в том, чтобы посчитать ap@K для каждого объекта и усреднить:

Замечание: идея эта вполне логична, если предположить, что все пользователи одинаково нужны и одинаково важны. Если же это не так, то вместо простого усреднения можно использовать взвешенное, домножив ap@K каждого объекта на соответствующий его «важности» вес.

Normalized Discounted Cumulative Gain

Normalized discounted cumulative gain (nDCG) - еще одна распространенная метрика качества ранжирования. Как и в случае с map@K, начнем с основ.

Cumulative Gain at K

Вновь рассмотрим один объект и элементов с наибольшим . Cumulative gain at K (CG@K) - базовая метрика ранжирования, которая использует простую идею: чем релевантные элементы в этом топе, тем лучше:

Эта метрика обладает очевидными недостатками: она не нормализована и не учитывает позицию релевантных элементов.

Заметим, что в отличии от p@K, CG@K может использоваться и в случае небинарных значений эталонной релевантности .

Discounted Cumulative Gain at K

Discounted cumulative gain at K (DCG@K) - модификация cumulative gain at K, учитывающая порядок элементов в списке путем домножения релевантности элемента на вес равный обратному логарифму номера позиции:

Замечание: если принимает только значения 0 и 1, то , и формула принимает более простой вид:

Использование логарифма как функции дисконтирования можно объяснить следующими интуитивными соображениями: с точки зрения ранжирования позиции в начале списка отличаются гораздо сильнее, чем позиции в его конце. Так, в случае поискового движка между позициями 1 и 11 целая пропасть (лишь в нескольких случаях из ста пользователь заходит дальшей первой страницы поисковой выдачи), а между позициями 101 и 111 особой разницы нет - до них мало кто доходит. Эти субъективные соображения прекрасно выражаются с помощью логарифма:

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

Normalized Discounted Cumulative Gain at K

Как можно догадаться из названия, normalized discounted cumulative gain at K (nDCG@K) - не что иное, как нормализованная версия DCG@K:

где - это максимальное (I - ideal) значение . Так как мы договорились, что принимает значения в , то .

Таким образом, наследует от учет позиции элементов в списке и, при этом принимает значения в диапазоне от 0 до 1.

Замечание: по аналогии с map@K можно посчитать , усредненный по всем объектам .

Mean reciprocal rank

Mean reciprocal rank (MRR) - еще одна часто используемая метрика качества ранжирования. Задается она следующей формулой:

где - reciproсal rank для -го объекта - очень простая по своей сути величина, равная обратному ранку первого правильно угаданного элемента .

Mean reciprocal rank изменяется в диапазоне и учитывает позицию элементов. К сожалению он делает это только для одного элемента - 1-го верно предсказанного, не обращая внимания на все последующие.

Метрики на основе ранговой корреляции

Отдельно стоит выделить метрики качества ранжирования, основанные на одном из коэффициентов ранговой корреляции . В статистике, ранговый коэффициент корреляции - это коэффициент корреляции , который учитывает не сами значения, а лишь их ранг (порядок). Рассмотрим два наиболее распространенных ранговых коэффициента корреляции: коэффициенты Спирмена и Кендэлла.

Ранговый коэффициент корреляции Кендэлла

Первый из них - коэффициент корреляции Кендэлла, который основан на подсчете согласованных
(и несогласованных) пар у перестановок - пар элементов, котором перестановки присвоили одинаковый (разный) порядок:

Ранговый коэффициент корреляции Спирмена

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

где - коэффициент корреляции Пирсона.

Метрики на основе ранговой корреляции обладают уже известными нам недостатком: они не учитывают позицию элементов (еще хуже чем p@K, т.к. корреляция считается по всем элементам, а не по K элементам с наибольшим рангом). Поэтому на практике используются крайне редко.

Метрики на основе каскадной модели поведения

До этого момента мы не углублялись в то, как пользователь (далее мы рассмотрим частный случай объекта - пользователь) изучает предложенные ему элементы. На самом деле, неявно нами было сделано предположение, что просмотр каждого элемента независим от просмотров других элементов - своего рода «наивность». На практике же, элементы зачастую просматриваются пользователем поочередно, и то, просмотрит ли пользователь следующий элемент, зависит от его удовлетворенности предыдущими. Рассмотрим пример: в ответ на поисковый запрос алгоритм ранжирования предложил пользователю несколько документов. Если документы на позиции 1 и 2 оказались крайне релевантны, то вероятность того, что пользователь просмотрит документ на позиции 3 мала, т.к. он будет вполне удовлетворен первыми двумя.

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

Expected reciprocal rank

Expected reciprocal rank (ERR) - пример метрики качества ранжирования, основанной на каскадной модели. Задается она следующей формулой:

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

где - вероятность того, что пользователь будет удовлетворен объектом с рангом . Эти вероятности считаются на основе значений . Так как в нашем случае , то можем рассмотреть простой вариант:

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

На элементах внутри каждого списка. Частичный порядок обычно задаётся путём указания оценки для каждого элемента (например, «релевантен» или «не релевантен»; возможно использование и более, чем двух градаций). Цель ранжирующей модели - наилучшим образом (в некотором смысле) приблизить и обобщить способ ранжирования в обучающей выборке на новые данные.

Обучение ранжированию - это ещё довольно молодая, бурно развивающаяся область исследований, возникшая в 2000-е годы с появлением интереса в области информационного поиска к применению методов машинного обучения к задачам ранжирования.

Энциклопедичный YouTube

  • 1 / 5

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

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

    • Значения мер TF, TF-IDF , BM25 , и языковой модели соответствия запросу различных зон документа (заголовка, URL, основного текста, текста ссылок);
    • Длины и IDF-суммы зон документа;
    • Ранги документа, полученные различными вариантами таких алгоритмов ссылочного ранжирования, как PageRank и HITS .

    Метрики качества ранжирования

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

    Примеры метрик:

    Классификация алгоритмов

    В своей статье «Learning to Rank for Information Retrieval» и выступлениях на тематических конференциях, Тай-Ян Лью из Microsoft Research Asia проанализировал существующие на тот момент методы для решения задачи обучения ранжированию и предложил их классификацию на три подхода, в зависимости от используемого входного представления данных и функции штрафа:

    Поточечный подход

    Примечания

    1. Tie-Yan Liu (2009), Learning to Rank for Information Retrieval , Foundations and Trends in Information Retrieval: Vol. 3: No 3, с. 225-331, ISBN 978-1-60198-244-5 , DOI 10.1561/1500000016 . Доступны слайды c выступления Т. Лью на конференции WWW 2009.
    1

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

    машинное обучение

    визуальное качество

    реконструкция

    обработка изображений

    1. Gastaldo P. Machine learning solutions for objective visual quality assessment / 6th international workshop on video processing and quality metrics for consumer electronics, VPQM. - Vol. 12. - 2012.

    2. Bertalmio M., Bertozzi A., Sapiro G. Navier-Stokes, fluid dynamics, and image and video inpainting/ Hawaii: Proc. IEEE Computer Vision and Pattern Recognition (CVPR) . - 2001.– PP. 213–226.

    3. Criminisi A., Perez P., Toyama K. Region filling and object removal by exemplar-based image inpainting / IEEE Trans. Image Process. - 13(9) . - 2004. - PP. 28–34.

    4. Vijay M., Cheung, S.S. Eye tracking based perceptual image inpainting quality analysis/ Image Processing (ICIP), 17th IEEE International Conference on IEEE. - 2010. - PP. 1109 - 1112.

    5. Ardis P.A., Singhal A. Visual salience metrics for image inpainting /SPIE Electronic Imaging. International Society for Optics and Photonics. - 2009.

    6. Cheung S.S., Zhao J., Venkatesh V. Efficient object-based video inpainting / Image Processing, 2006 IEEE International Conference on. - 2006. - PP. 705-708.

    7. Перетягин Г.И. Представление изображений гауссовыми случайными полями/ Автометрия. – № 6. – 1984. – С. 42 – 48.

    8. Frantc V.A., Voroni V.V., Marchuk V.I., Sherstobitov A.I., Agaian S., Egiazarian K. Machine learning approach for objective inpainting quality assessment/ Proc. SPIE 9120, Mobile Multimedia/Image Processing, Security, and Applications. – Vol. 91200S. – 2014.

    9. Paul A., Singhal A., and. Brown C. Inpainting quality assessment / Journal of Electronic Imaging. – Vol. 19. – 2010. – PP. 011002-011002.

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

    Возможны два подхода к оценке качества изображений: количественная оценка с помощью использования математических методов (среднеквадратическая ошибка, Lp-норма , меры, учитывающие особенности восприятия изображения зрительной системой человека) и субъективная оценка на основе экспертных оценок .

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

    В разработке количественных оценок качества изображения достигнуты значительные успехи. Однако введенные критерии не являются достаточно совершенными. Большинство попыток найти приемлемые оценки качества изображения относится к частным случаям. Предлагается некая оценка, основанная на каких-либо физиологических предпосылках, а чаще просто удобная для анализа и вычислений, а затем оцениваются его свойства. Создание более совершенных оценок качества изображений связано с более глубоким изучением свойств зрительной системы человека.

    Целью данной работы является разработка метрики оценки качества изображений при обработке методами реконструкции на основе машинного обучения.

    Математическая модель

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

    Рис 1. Модель изображения

    Известно изображение и область Ω внутри его. Задача реконструкции состоит в модификации значений пикселей изображения внутри области Ω, таким образом, чтобы область не выделялась на фоне окружающего изображения . Цель реконструкции может состоять в восстановлении поврежденных частей изображения (например, царапин и трещин на старых фотографиях) или удаления нежелательных объектов на изображении. Показанная на рисунке 1 область Ω всегда определяется пользователем, т.е. определение области Ω не является частью задачи реконструкции.

    Алгоритм оценки качества восстановления изображений

    В общем случае для успешного построения метрики качества изображения на основе машинного обучения требуется решение трех следующих задач:

    1. Определение пространства признаков , служащих описанием входных сигналов.

    2. Выбор функции отображения из пространства признаков в пространство оценок качества .

    3. Обучение системы и проверка ее устойчивости (проверка на переобучение и т.д.).

    Структурная схема выбранного подхода представлена на рисунке 2 и содержит следующие этапы:

    1. Выбор области интереса (с использованием карты внимания);

    2. Вычисление низкоуровневых признаков изображения;

    3. Построение дескриптора восстановленной области на базе низкоуровневых особенностей;

    4. Решение задачи регрессии с целью получения численной оценки качества на основе полученного вектора-дескриптора.

    Рис. 2. Блок-схема алгоритма

    В работе показано, что визуальное внимание играет важную роль в зрительном восприятии человека. В каждый момент времени человеческий глаз ясно видит лишь небольшую часть сцены, в то же время гораздо более значительная область сцены воспринимается как «размытая». Этой «размытой информации» достаточно для оценки важности различных областей сцены и привлечения внимания к важным областям зрительного поля. Большинство методов позволяют получить карту внимания - двумерное изображение, в котором значения каждого пикселя связанно с важностью соответствующей области.

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

    .

    Здесь - карта внимания для реконструированного изображения, а значение карты внимания, соответствующее пикселю . В выражении, приведенном выше, плотность взгляда вычисляется внутри и снаружи восстановленной области изображений. Значение используется в качестве порогового значения при принятии решения о том, какие части изображения будут использоваться при оценке, а какие нет. Принимаются во внимания только те области, для которых .

    В качестве низкоуровневых признаков локальных областей используются спектральные представления. Далее предлагается анализ следующих базисов Фурье, Уолша, Хаара с использованием вектора эффективности. Для корректного вычисления составляющих системного критерия эффективности при наличии помех и искажений требует применения статистического усреднения.

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

    Для заданного класса двумерных процессов предполагается известной вероятность каждого из подклассов, где индекс - номер подкласса с некоторыми общими свойствами, а - номер реализации процесса -го подкласса. Будем сравнивать некоторую совокупность базисных систем Разложение в обобщенный ряд Фурье по ,-й базисной системе в общем виде имеет вид: .

    При конечном числе членов ряда Фурье можно охарактеризовать погрешностью: , где - расстояние в некоторой метрике, - частичная сумма членов ряда Фурье.

    Аппаратурное определение коэффициентов ряда Фурье или их вычисление связанно с определенными вычислительными затратами . Введем функцию потерь, учитывающую как потери, связанные с погрешностью усечения ряда Фурье, так и затраты аппаратурных и вычислительных ресурсов:

    .

    Значение условного риска зависит как от подкласса сигналов, так и от базиса и вычисляется путем усреднения функции потерь по реализациям:

    где - плотность вероятности анализируемых сигналов и помех; а угловые скобки означают операцию статистического усреднения.

    Средний риск определяется путем усреднения условного риска по подклассам сигналов:

    ,

    где - вероятность -го подкласса сигналов.

    В соответствии с критерием минимума среднего риска из базисов выбирается тот, для которого средний риск минимален.

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

    В качестве примера в статье рассматривается представление случайных реализаций с различными корреляционными функциями в базисах тригонометрических функций (Фурье), Уолша и Хаара. Проведем анализ в выбранных базисах для созданных моделей изображений размером 256 на 256 пикселей. Зададимся также тремя типами распределения вероятностей подклассов: 1) равномерное: ; 2) убывающее: ;
    3) возрастающее: . Выберем функцию стоимости в виде: .

    Средний риск определяется путем усреднения условного риска по подклассам сигналов с использованием принятых априорных вероятностей подклассов сигналов, рассчитанные значения представлены в таблице 1.

    Таблица 1

    Величины среднего риска

    Виды распределения вероятностей

    Результаты расчетов, представленные в таблице показывают, что для принятых моделей двумерных сигналов и распределений их вероятностей базис Хаара имеет наименьший средний риск, а базис Фурье наибольший.

    На основе проведенного анализа выберем базис Хаара для представления локальных областей изображений. Следует отметить, что размер восстановленной области различен для различных изображений. В связи с этим на основе низкоуровневых признаков следует формировать высокоуровневое представление фиксированного размера. В качестве высокоуровневого представления используется подход «мешок слов». Процедура построения дескриптора (сигнатуры) восстановленной области состоит из двух шагов. На первом шаге строится словарь. Для этого используются низкоуровневые особенности, извлеченные из всех изображений обучающего набора изображений. Для построения словаря извлеченные особенности делятся на 100 классов с помощью алгоритма кластеризации k-средних. Каждый элемент словаря представляет собой центроид для одного из классов, найденных процедурой кластеризации. Каждое слово в словаре представляет преобразование Хаара в блоке изображения размером 8x8. Полученный словарь используется на втором этапе при построении гистограмм частот для слов из словаря в качестве вектора признаков - дескриптора восстановленной области (рис. 3). Полученный набор дескрипторов используется для обучения машины регрессии (Support Vector Regression). Для получения гистограммы частот слов из словаря извлекаются все визуально заметные области (заметность определяется с использованием карт внимания) конкретного изображения. Затем к каждому из извлеченных блоков применяется преобразование Хаара и выполняется классификация согласно полученному словарю на основе евклидова расстояния .

    Каждый бин результирующей гистограммы содержит число низкоуровневых особенностей конкретного класса в данной восстановленной области. После нормализации гистограммы получается «сигнатура» изображения - высокоуровневое представление восстановленной области .

    Рис.3. Построение гистограммы

    Оценка эффективности алгоритма оценки качества восстановления изображений

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

    Эксперты оценивали качество по шкале, в которой 5 соответствует «Отлично», а 1 - соответствует «Очень плохо». Для оценки эффективности полученной метрики используется коэффициент корреляции между векторами полученных с помощью объективной метрики и экспертным методом оценок качества. Анализ полученных результатов в таблице 2 показывает, что предложенный подход превосходит известные метрики качества на выбранном наборе тестовых данных.

    Таблица 2

    Коэффициент корреляции для различных методов вычисления объективной
    метрики качества изображений

    Предложенный подход

    Заключение

    В статье представлена объективная метрика оценки качества изображений на основе машинного обучения. Количественные меры качества изображения необходимы для проектирования и оценки систем воспроизведения изображений. Эти меры во многом помогут избавиться от трудоемкой и неточной современной методики оценки изображений посредством субъективной экспертизы. Кроме того, на основе количественных мер можно развивать методы оптимизации систем обработки изображений. Продемонстрировано, что оценка качества, полученная с использованием приведенного подхода коррелирует с субъективной оценкой качества.

    Работа поддержана Минобрнауки России в рамках ФЦП «Исследования и разработки по приоритетным направлениям развития научно-технологического комплекса России на 2014-2020 годы» (соглашение №14.586.21.0013).

    Рецензенты:

    Федосов В.П., д.т.н., профессор, заведующий кафедрой ТОР инженерно-технологической академии Южного Федерального Университета, г.Ростов-на-Дону;

    Марчук В.И., д.т.н., профессор, заведующий кафедрой «Радиоэлектронные и электротехнические системы и комплексы» ИСОиП (филиал ДГТУ), г.Шахты.

    Библиографическая ссылка

    Воронин В.В. ОЦЕНКА КАЧЕСТВА ВОССТАНОВЛЕНИЯ ИЗОБРАЖЕНИЙ НА ОСНОВЕ МАШИННОГО ОБУЧЕНИЯ // Современные проблемы науки и образования. – 2014. – № 6.;
    URL: http://science-education.ru/ru/article/view?id=16294 (дата обращения: 01.02.2020). Предлагаем вашему вниманию журналы, издающиеся в издательстве «Академия Естествознания»

    По оттоку клиентов телеком-оператора.


    Загрузим необходимые библиотеки и посмотрим на данные

    import pandas as pd import matplotlib.pyplot as plt from matplotlib.pylab import rc, plot import seaborn as sns from sklearn.preprocessing import LabelEncoder, OneHotEncoder from sklearn.model_selection import cross_val_score from sklearn.linear_model import LogisticRegression from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier from sklearn.metrics import precision_recall_curve, classification_report from sklearn.model_selection import train_test_split df = pd.read_csv("../../data/telecom_churn.csv")


    df.head(5)

    Предобработка данных

    # Сделаем маппинг бинарных колонок # и закодируем dummy-кодированием штат (для простоты, лучше не делать так для деревянных моделей) d = {"Yes" : 1, "No" : 0} df["International plan"] = df["International plan"].map(d) df["Voice mail plan"] = df["Voice mail plan"].map(d) df["Churn"] = df["Churn"].astype("int64") le = LabelEncoder() df["State"] = le.fit_transform(df["State"]) ohe = OneHotEncoder(sparse=False) encoded_state = ohe.fit_transform(df["State"].values.reshape(-1, 1)) tmp = pd.DataFrame(encoded_state, columns=["state " + str(i) for i in range(encoded_state.shape)]) df = pd.concat(, axis=1)

    Accuracy, precision и recall

    Перед переходом к самим метрикам необходимо ввести важную концепцию для описания этих метрик в терминах ошибок классификации - confusion matrix (матрица ошибок).
    Допустим, что у нас есть два класса и алгоритм, предсказывающий принадлежность каждого объекта одному из классов, тогда матрица ошибок классификации будет выглядеть следующим образом:


    True Positive (TP) False Positive (FP)
    False Negative (FN) True Negative (TN)

    Здесь - это ответ алгоритма на объекте, а - истинная метка класса на этом объекте.
    Таким образом, ошибки классификации бывают двух видов: False Negative (FN) и False Positive (FP).


    Обучение алгоритма и построение матрицы ошибок

    X = df.drop("Churn", axis=1) y = df["Churn"] # Делим выборку на train и test, все метрики будем оценивать на тестовом датасете X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, test_size=0.33, random_state=42) # Обучаем ставшую родной логистическую регрессию lr = LogisticRegression(random_state=42) lr.fit(X_train, y_train) # Воспользуемся функцией построения матрицы ошибок из документации sklearn def plot_confusion_matrix(cm, classes, normalize=False, title="Confusion matrix", cmap=plt.cm.Blues): """ This function prints and plots the confusion matrix. Normalization can be applied by setting `normalize=True`. """ plt.imshow(cm, interpolation="nearest", cmap=cmap) plt.title(title) plt.colorbar() tick_marks = np.arange(len(classes)) plt.xticks(tick_marks, classes, rotation=45) plt.yticks(tick_marks, classes) if normalize: cm = cm.astype("float") / cm.sum(axis=1)[:, np.newaxis] print("Normalized confusion matrix") else: print("Confusion matrix, without normalization") print(cm) thresh = cm.max() / 2. for i, j in itertools.product(range(cm.shape), range(cm.shape)): plt.text(j, i, cm, horizontalalignment="center", color="white" if cm > thresh else "black") plt.tight_layout() plt.ylabel("True label") plt.xlabel("Predicted label") font = {"size" : 15} plt.rc("font", **font) cnf_matrix = confusion_matrix(y_test, lr.predict(X_test)) plt.figure(figsize=(10, 8)) plot_confusion_matrix(cnf_matrix, classes=["Non-churned", "Churned"], title="Confusion matrix") plt.savefig("conf_matrix.png") plt.show()


    Accuracy

    Интуитивно понятной, очевидной и почти неиспользуемой метрикой является accuracy - доля правильных ответов алгоритма:



    Эта метрика бесполезна в задачах с неравными классами, и это легко показать на примере.


    Допустим, мы хотим оценить работу спам-фильтра почты. У нас есть 100 не-спам писем, 90 из которых наш классификатор определил верно (True Negative = 90, False Positive = 10), и 10 спам-писем, 5 из которых классификатор также определил верно (True Positive = 5, False Negative = 5).
    Тогда accuracy:



    Однако если мы просто будем предсказывать все письма как не-спам, то получим более высокую accuracy:



    При этом, наша модель совершенно не обладает никакой предсказательной силой, так как изначально мы хотели определять письма со спамом. Преодолеть это нам поможет переход с общей для всех классов метрики к отдельным показателям качества классов.

    Precision, recall и F-мера

    Для оценки качества работы алгоритма на каждом из классов по отдельности введем метрики precision (точность) и recall (полнота).




    Precision можно интерпретировать как долю объектов, названных классификатором положительными и при этом действительно являющимися положительными, а recall показывает, какую долю объектов положительного класса из всех объектов положительного класса нашел алгоритм.



    Именно введение precision не позволяет нам записывать все объекты в один класс, так как в этом случае мы получаем рост уровня False Positive. Recall демонстрирует способность алгоритма обнаруживать данный класс вообще, а precision - способность отличать этот класс от других классов.


    Как мы отмечали ранее, ошибки классификации бывают двух видов: False Positive и False Negative. В статистике первый вид ошибок называют ошибкой I-го рода, а второй - ошибкой II-го рода. В нашей задаче по определению оттока абонентов, ошибкой первого рода будет принятие лояльного абонента за уходящего, так как наша нулевая гипотеза состоит в том, что никто из абонентов не уходит, а мы эту гипотезу отвергаем. Соответственно, ошибкой второго рода будет являться "пропуск" уходящего абонента и ошибочное принятие нулевой гипотезы.


    Precision и recall не зависят, в отличие от accuracy, от соотношения классов и потому применимы в условиях несбалансированных выборок.
    Часто в реальной практике стоит задача найти оптимальный (для заказчика) баланс между этими двумя метриками. Классическим примером является задача определения оттока клиентов.
    Очевидно, что мы не можем находить всех уходящих в отток клиентов и только их. Но, определив стратегию и ресурс для удержания клиентов, мы можем подобрать нужные пороги по precision и recall. Например, можно сосредоточиться на удержании только высокодоходных клиентов или тех, кто уйдет с большей вероятностью, так как мы ограничены в ресурсах колл-центра.


    Обычно при оптимизации гиперпараметров алгоритма (например, в случае перебора по сетке GridSearchCV ) используется одна метрика, улучшение которой мы и ожидаем увидеть на тестовой выборке.
    Существует несколько различных способов объединить precision и recall в агрегированный критерий качества. F-мера (в общем случае ) - среднее гармоническое precision и recall:



    В данном случае определяет вес точности в метрике, и при это среднее гармоническое (с множителем 2, чтобы в случае precision = 1 и recall = 1 иметь )
    F-мера достигает максимума при полноте и точности, равными единице, и близка к нулю, если один из аргументов близок к нулю.
    В sklearn есть удобная функция _metrics.classificationreport , возвращающая recall, precision и F-меру для каждого из классов, а также количество экземпляров каждого класса.


    report = classification_report(y_test, lr.predict(X_test), target_names=["Non-churned", "Churned"]) print(report)
    class precision recall f1-score support
    Non-churned 0.88 0.97 0.93 941
    Churned 0.60 0.25 0.35 159
    avg / total 0.84 0.87 0.84 1100

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

    AUC-ROC и AUC-PR

    При конвертации вещественного ответа алгоритма (как правило, вероятности принадлежности к классу, отдельно см. SVM) в бинарную метку, мы должны выбрать какой-либо порог, при котором 0 становится 1. Естественным и близким кажется порог, равный 0.5, но он не всегда оказывается оптимальным, например, при вышеупомянутом отсутствии баланса классов.


    Одним из способов оценить модель в целом, не привязываясь к конкретному порогу, является AUC-ROC (или ROC AUC) - площадь (A rea U nder C urve) под кривой ошибок (R eceiver O perating C haracteristic curve). Данная кривая представляет из себя линию от (0,0) до (1,1) в координатах True Positive Rate (TPR) и False Positive Rate (FPR):




    TPR нам уже известна, это полнота, а FPR показывает, какую долю из объектов negative класса алгоритм предсказал неверно. В идеальном случае, когда классификатор не делает ошибок (FPR = 0, TPR = 1) мы получим площадь под кривой, равную единице; в противном случае, когда классификатор случайно выдает вероятности классов, AUC-ROC будет стремиться к 0.5, так как классификатор будет выдавать одинаковое количество TP и FP.
    Каждая точка на графике соответствует выбору некоторого порога. Площадь под кривой в данном случае показывает качество алгоритма (больше - лучше), кроме этого, важной является крутизна самой кривой - мы хотим максимизировать TPR, минимизируя FPR, а значит, наша кривая в идеале должна стремиться к точке (0,1).


    Код отрисовки ROC-кривой

    sns.set(font_scale=1.5) sns.set_color_codes("muted") plt.figure(figsize=(10, 8)) fpr, tpr, thresholds = roc_curve(y_test, lr.predict_proba(X_test)[:,1], pos_label=1) lw = 2 plt.plot(fpr, tpr, lw=lw, label="ROC curve ") plt.plot(, ) plt.xlim() plt.ylim() plt.xlabel("False Positive Rate") plt.ylabel("True Positive Rate") plt.title("ROC curve") plt.savefig("ROC.png") plt.show()



    Критерий AUC-ROC устойчив к несбалансированным классам (спойлер: увы, не всё так однозначно) и может быть интерпретирован как вероятность того, что случайно выбранный positive объект будет проранжирован классификатором выше (будет иметь более высокую вероятность быть positive), чем случайно выбранный negative объект.


    Рассмотрим следующую задачу: нам необходимо выбрать 100 релевантных документов из 1 миллиона документов. Мы намашинлернили два алгоритма:

    • Алгоритм 1 возвращает 100 документов, 90 из которых релевантны. Таким образом,

    • Алгоритм 2 возвращает 2000 документов, 90 из которых релевантны. Таким образом,


    Скорее всего, мы бы выбрали первый алгоритм, который выдает очень мало False Positive на фоне своего конкурента. Но разница в False Positive Rate между этими двумя алгоритмами крайне мала - всего 0.0019. Это является следствием того, что AUC-ROC измеряет долю False Positive относительно True Negative и в задачах, где нам не так важен второй (больший) класс, может давать не совсем адекватную картину при сравнении алгоритмов.


    Для того чтобы поправить положение, вернемся к полноте и точности:

    • Алгоритм 1

    • Алгоритм 2


    Здесь уже заметна существенная разница между двумя алгоритмами - 0.855 в точности!


    Precision и recall также используют для построения кривой и, аналогично AUC-ROC, находят площадь под ней.



    Здесь можно отметить, что на маленьких датасетах площадь под PR-кривой может быть чересчур оптимистична, потому как вычисляется по методу трапеций, но обычно в таких задачах данных достаточно. За подробностями о взаимоотношениях AUC-ROC и AUC-PR можно обратиться сюда .

    Logistic Loss

    Особняком стоит логистическая функция потерь, определяемая как:



    здесь - это ответ алгоритма на -ом объекте, - истинная метка класса на -ом объекте, а размер выборки.


    Подробно про математическую интерпретацию логистической функции потерь уже написано в рамках поста про линейные модели.
    Данная метрика нечасто выступает в бизнес-требованиях, но часто - в задачах на kaggle .
    Интуитивно можно представить минимизацию logloss как задачу максимизации accuracy путем штрафа за неверные предсказания. Однако необходимо отметить, что logloss крайне сильно штрафует за уверенность классификатора в неверном ответе.


    Рассмотрим пример:


    def logloss_crutch(y_true, y_pred, eps=1e-15): return - (y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred)) print("Logloss при неуверенной классификации %f" % logloss_crutch(1, 0.5)) >> Logloss при неуверенной классификации 0.693147 print("Logloss при уверенной классификации и верном ответе %f" % logloss_crutch(1, 0.9)) >> Logloss при уверенной классификации и верном ответе 0.105361 print("Logloss при уверенной классификации и НЕверном ответе %f" % logloss_crutch(1, 0.1)) >> Logloss при уверенной классификации и НЕверном ответе 2.302585

    Отметим, как драматически выросла logloss при неверном ответе и уверенной классификации!
    Следовательно, ошибка на одном объекте может дать существенное ухудшение общей ошибки на выборке. Такие объекты часто бывают выбросами, которые нужно не забывать фильтровать или рассматривать отдельно.
    Всё становится на свои места, если нарисовать график logloss:



    Видно, что чем ближе к нулю ответ алгоритма при ground truth = 1, тем выше значение ошибки и круче растёт кривая.

    Подытожим:

    • В случае многоклассовой классификации нужно внимательно следить за метриками каждого из классов и следовать логике решения задачи , а не оптимизации метрики
    • В случае неравных классов нужно подбирать баланс классов для обучения и метрику, которая будет корректно отражать качество классификации
    • и madrugado за помощь в подготовке статьи.