Хостинги и домены

Что означает метрика качества в машинном обучении. Метрики в задачах машинного обучения. Метрики в задачах классификации

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

Обучение ранжированию - это ещё довольно молодая, бурно развивающаяся область исследований, возникшая в 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.

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


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

    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 за помощь в подготовке статьи. 

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

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

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

    Для демонстрации полезных функций 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 за помощь в подготовке статьи.

    УДК 519.816

    С. В. СЕМЕНИХИН Л. А. ДЕНИСОВА

    Омский государственный технический университет

    МЕТОД МАШИННОГО ОБУЧЕНИЯ РАНЖИРОВАНИЮ

    НА ОСНОВЕ МОДИФИЦИРОВАННОГО ГЕНЕТИЧЕСКОГО АЛГОРИТМА ДЛЯ МЕТРИКИ ЫРСО

    Рассмотрены задача ранжирования документов на странице результатов информационного поиска и вопросы машинного обучения ранжированию. Предложен подход к оптимизации функции ранжирования с использованием метрики качества ЫОСО на основе модифицированного генетического алгоритма. Проведены исследования разработанных алгоритмов (на тестовых коллекциях ЬЕТО^ и показана их эффективность для машинного обучения ранжированию.

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

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

    В начале проведенных исследований были рассмотрены списочные подходы к машинному обучению ранжированию , в большинстве из которых используется метод градиентного спуска . В рассмотренных работах МО сводится к оптимизации метрик качества поиска (МКП), однако используются только метрики, представленные непрерывными функциями. Это ограничение зачастую приводит к тому, что в результате оптимизации функция ранжирования имеет менее высокие оценки по многим важным принятым показателям (DCG, nDCG, Graded Mean Reciprocal Rank и т.д.), являющимся дискретным функциями. В работе предложено применение генетических алгоритмов (ГА) при обучении ранжированию для минимизации функции потерь Хубера с использованием экспертных оценок релевантности в качестве эталонных значений. Также был предложен подход к МО на основе оптимизации дискретных метрик качества информационного поиска .

    2. Постановка задачи машинного обучения ранжированию. В большинстве современных информационно-поисковых систем функция ранжирования строится на основе n простых ранжирующих функций (ПРФ) и может быть записана в виде:

    где SRF¡ - ¡-ая простая ранжирующая функция для документа d и запроса д, WCi - весовой коэффициент ¡-ой простой ранжирующей функции, п - количество ПРФ в системе ранжирования.

    В ходе машинного обучения ранжированию использован набор поисковых документов Б и запросов О из тестовой коллекции ЬБТОЯ . Для всех запросов деО сформирована пара с каждым документом dеD. Для каждой такой пары ИПС определяет значения релевантности, которые используются для ранжирования поисковой выдачи. Для того чтобы произвести оценку качества ранжирования, системе требуются эталонные значения релевантности Е для каждой пары документ-запрос ^, д). Для этих целей используются экспертные оценки релевантности.

    Для проведения исследования использована ИПС, в которой ранжирование производится на основе N = 5 простых ранжирующих функций SRFi(WC)l г = 1, N, которые образуют векторный критерий оптимальности:

    где WCе {WC} - вектор варьируемых параметров; {ШС}, {ЯБ} - пространства параметров и векторных критериев соответственно.

    Применение генетических алгоритмов для МО ранжированию делает возможным максимизацию дискретных метрик качества, таких как nDCG. Метрика nDCG ранжирования документов в поисковой системе определяется в соответствии с выражением :

    DCG @ n = X 2---

    RF(q, d)= X WC. ■ SRF., i=1 1 1

    где grade(p) - средняя оценка релевантности, выставленная экспертами документу, расположенному на позиции p в списке результатов, gradee ; 1/log2(2 + p) - коэффициент, зависящий от позиций документа (первые документы имеют больший вес).

    Тогда нормализованная версия NDCG запишется в виде

    N000 @ п = ОСО @ П / г,

    где г - фактор нормализации, который равен максимально возможному значению 0С0@п для данного запроса (т.е. равен ООО идеального ранжирования).

    Таким образом, для оптимизации (максимизации) метрики пОСО, целевая функция (ЯМ) запишется в следующем виде

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

    1. Критерий точности информационного поиска

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

    2. Критерий Bpref, оценивающий релевантность информационного поиска, используется для обработки задания с R релевантными документами и вычисляется по формуле

    Bpref = - ^ (1 - Non Re ¡Before(r)/ R). (4)

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

    3. Критерий полноты поисковой выдачи

    r = a / (a + с),

    где a - количество найденных релевантных документов, с - количество ненайденных релевантных документов.

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

    ранжирования поисковой выдачи системой. В процессе МО тестовые коллекции используются в качестве обучающей выборки и, следовательно, оказывают значительное влияние на результаты. Для проведения исследований использована тестовая коллекция документов и запросов LETOR. Эта коллекция используется в исследованиях в области поиска информации подразделениями Microsoft Research. В табл. 1 приведены характеристики тестовых коллекций LETOR.

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

    Следует отметить, что ГА наиболее эффективны в поисках области глобального экстремума, однако они могут медленно работать, когда необходимо найти локальный минимум в этой области. Предлагаемый способ избежать этого недостатка - создание модифицированного генетического алгоритма (МГА), который будет переключаться на локальный (быстродействующий) алгоритм оптимизации после нахождения области глобального оптимума с помощью базового ГА. Предлагаемый в работе МГА представляет собой гибридный метод на основе классического ГА и метода Нелдера - Мида (симплекс-алгоритма). Метод Нелдера - Мида, часто используемый алгоритм нелинейной оптимизации, является численным методом для нахождения минимума целевой функции в многомерном пространстве . Предлагаемый в данной работе гибридный алгоритм MGA переключается на метод Нелдера - Мида после выполнения условий остановки ГА. Блок-схема алгоритма MGA показана на рис. 1.

    При выполнении исследований принято ограничение на количество вычислений целевой функции (Nrf= 16 000) при поиске области глобального экстремума и условие перехода на алгоритм локальный оптимизации на основе метода Нелдера - Мида (после того как базовый генетический алгоритм выполнит 75 % Nrf операций).

    6. Результаты. В результате проведенных исследований с помощью алгоритма машинного обучения

    Таблица 1

    Количество документов и запросов в тестовых коллекциях

    Название тестовой коллекции Название подсистемы Количество запросов Количество документов

    LETOR 4.0 MQ2007 1692 69623

    LETOR 4.0 MQ2008 784 15211

    LETOR 3.0 OHSUMED 106 16140

    LETOR 3.0 Gov03td 50 49058

    LETOR 3.0 Gov03np 150 148657

    LETOR 3.0 Gov03hp 150 147606

    LETOR 3.0 Gov04td 75 74146

    LETOR 3.0 Gov04np 75 73834

    LETOR 3.0 Gov04hp 75 74409

    Рис. 1. Блок-схема гибридного алгоритма МвЛ на основе генетических алгоритмов и метода Нелдера-Мида

    ранжированию LTR-MGA получен вектор весовых коэффициентов WC* для функции ранжирования. Далее на основе данных из тестовой коллекции ЬЕТОЯ произведена оценка качества ранжирования, для чего вычислены метрики качества. Дискретная метрика качества ранжирования NDCG@n оценивает качество первых п документов ответа системы. Общепринятыми метриками для оценки качества ранжирования являются NDCG@1, NDCG@5 и NDCG@10. Однако для более детального рассмотрения изменений метрики в зависимости были рассмотрены значения NDCG@n для всех п от 1 до 10. Для сравнения эффективности разработанного алгоритма с существующими решениями проведен сравнительный анализ с использованием ранжирующих алгоритмов, предоставленных в коллекциях ЬЕТОЯ 3.0. Результаты выполнения алгоритмов для тестовых коллекций ТБ2003 и ТБ2004 для метрики NDCG представлены на рис. 2. Результаты показывают, что алгоритм LTR-MGA превосходит тестовые алгоритмы, причем наиболее высокие значения име-

    ются для NDCG@1 (на уровне первого документа). Превосходство алгоритма LTR-MGA вызвано тем, что, в отличие от рассмотренных в экспериментах тестовых ранжирующих функций, в предлагаемом подходе для оптимизации функции ранжирования именно метрика NDCG используется в качестве целевой функции.

    Для того, чтобы оценить качество ранжирования при использовании предлагаемого алгоритма LTR-MGA вычислены значения метрик качества ранжирования документов в поисковой выдаче (рис. 3). Сравнение результатов ранжирования (табл. 2) при использовании базовой ранжирующей функции, базового алгоритма LTR-GA и модифицированного алгоритма LTR-MGA свидетельствует о преимуществе последнего.

    Кроме того, при исследовании выполнена оценка времени, требуемого для МО ранжированию. Это необходимо для подтверждения того, что предложенный метод LTR-MGA превосходит в этом показателе подход, основанный на использовании традици-

    Рис. 2. Сравнение алгоритмов машинного обучения ранжированию

    по метрике NDCG для тестовых коллекций: слева - набор данных Gov03td, справа - набор данных Gov04td

    Рис. 3. Оценка метрик качества ранжирования для базовой ранжирующей формулы и алгоритмов обучения LTR-GA и LTR-MGA

    Метрики качества ранжирования для разных алгоритмов машинного обучения ранжированию

    Таблица 2

    Метрика качества ранжирования Базовая ранжирующая функция LTR-GA LTR-MGA Повышение значения метрики, %

    Точность 0,201 0,251 0,267 26,81

    NDCG@5 (первые 5 документов) 0,149 0,31 0,339 90,47

    NDCG@10 (первые 10 документов) 0,265 0.342 0,362 29,14

    Bpref 0,303 0,316 0,446 51,49

    Полнота 0,524 0,542 0,732 39,03

    * Серым выделены лучшие значения для соответствующей метрики

    онного генетического алгоритма (ЬТЯ-ОЛ). Результаты сравнения временных затрат на выполнение алгоритмов ЬТЯ-ОЛ и ЬТЯ-МОЛ приведены в табл. 3.

    7. Заключение. Таким образом, проведенные исследования показали, что при использовании предлагаемого подхода значения рассмотренных метрик ранжирования в ИПС увеличиваются (в среднем на 19,55 % по сравнению с алгоритмом ЬТЯ-ОЛ). Это подтверждает, что ЬТЯ-МОЛ работает корректно и значительно улучшает функцию ранжирования, другими словами - успешно решает задачу оптимизации. С помощью модифицированного алгоритма

    за счет применения метода локальной оптимизации и введенных ограничений на количество вычислений целевой функции время машинного обучения снизилось (в среднем на 17,71 % по сравнению с использованием традиционного генетического алгоритма ЬТЯОЛ).

    Разработанный алгоритм машинного обучения ранжированию ЬТЯ-МОЛ может быть использован в ИПС, использующих модель ранжирования на основе комбинации простых ранжирующих функций. Однако следует учесть некоторые ограничения по применению предлагаемого подхода. На основе

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

    Таблица 3

    Размер текстовой коллекции документов

    Время выполнения LTR-GA

    Время выполнения LTR-MGA

    Уменьшение времени выполнения, %

    Среднее значение

    *Серым цветом выделены лучшие значения для соответствующего размера тестовой коллекции

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

    Библиографический список

    1. Tie-Yan Liu. Learning to Rank for Information Retrieval // Journal Foundations and Trends in Information Retrieval. Vol. 3, issue 3. March 2009. P. 225-331.

    2. Christopher J. C. Burges, Tal Shaked, Erin Renshaw. Learning to Rank using Gradient Descent // Proceeding ICML "05 Proceedings of the 22nd international conference on Machine learning. 2005. P. 89-96.

    3. Семенихин, С. В. Исследование подходов к машинному обучению ранжированию документов поисковой системой на базе генетических алгоритмов / С. В. Семенихин // Россия молодая: передовые технологии - в промышленность. - 2013. - № 2. - С. 82 - 85.

    4. Многокритериальная оптимизация на основе генетических алгоритмов при синтезе систем управления: моногр. / Л. А. Денисова. - Омск: Изд-во ОмГТУ, 2014. - 170 с. - ISBN 978-5-8149-1822-2.

    5. Денисова, Л. А. Автоматизация параметрического синтеза системы регулирования с использованием генетического алгоритма / Л. А. Денисова, В. А. Мещеряков // Автоматизация в промышленности. - 2012. - № 7. - С. 34 - 38.

    6. Huber, Peter J. Robust Estimation of a Location Parameter // Annals of Statistics. - 1964. - № 53. - P. 73-101.

    7. Семенихин, С. В. Автоматизация информационного поиска на базе многокритериальной оптимизации и генетических алгоритмов / С. В. Семенихин, Л. А. Денисова // Динамика систем, механизмов и машин. - 2014. - № 3. - С. 224 - 227.

    8. Tie-Yan Liu, Jun Xu, Tao Qin, Wenying Xiong and Hang Li. LETOR: Benchmark Dataset for Research on Learning to Rank for Information Retrieval // SIGIR 2007 Workshop on Learning to Rank for Information Retrieval. - 2007. - С. 3-10.

    9. Агеев, М. С. Официальные метрики Р0МИП"2004 / М. С. Агеев, И. Е Кураленок // II Россиискии семинар по оценке методов информационного поиска (РОМИП 2004), Пущино, 2004: тр. ; под ред. И. С. Некрестьянова. - СПб. : НИИ химии СПбГУ. - С. 142-150.

    10. J. A. Nelder, R. Mead, A simplex method for function minimization, The Computer Journal 7 (1965). 308-313.

    СЕМЕНИХИН Святослав Витальевич, аспирант кафедры «Автоматизированные системы обработки информации и управления». Адрес для переписки: [email protected] ДЕНИСОВА Людмила Альбертовна, доктор технических наук, доцент кафедры «Автоматизированные системы обработки информации и управления». Адрес для переписки: [email protected]