Хотел бы я пометить это как ответ тоже. Ранее я заметил, что в наборе данных было больше нулей. Это объясняет высокую точность оценки. Еще раз спасибо!

ощьюLogisticRegression класс вscikit-learn по версиинабор данных задержки рейса.

я используюpandas выбрать несколько столбцов:

df = df[["MONTH", "DAY_OF_MONTH", "DAY_OF_WEEK", "ORIGIN", "DEST", "CRS_DEP_TIME", "ARR_DEL15"]]

Я заполняюNaN значения с 0:

df = df.fillna({'ARR_DEL15': 0})

Убедитесь, что категориальные столбцы помечены типом данных «категория»:

df["ORIGIN"] = df["ORIGIN"].astype('category')
df["DEST"] = df["DEST"].astype('category')

Тогда позвониget_dummies() изpandas:

df = pd.get_dummies(df)

Сейчас я тренируюсь и проверяю свой набор данных:

from sklearn.linear_model import LogisticRegression
lr = LogisticRegression()

test_set, train_set = train_test_split(df, test_size=0.2, random_state=42)

train_set_x = train_set.drop('ARR_DEL15', axis=1)
train_set_y = train_set["ARR_DEL15"]

test_set_x = test_set.drop('ARR_DEL15', axis=1)
test_set_y = test_set["ARR_DEL15"]

lr.fit(train_set_x, train_set_y)

Однажды я позвонюscore метод я получаю около 0,867. Тем не менее, когда я звонюroc_auc_score Метод, который я получаю гораздо меньшее число около 0,583

 probabilities = lr.predict_proba(test_set_x)

 roc_auc_score(test_set_y, probabilities[:, 1])

Есть ли какая-то причина, почему РПЦ АУК намного ниже, чемscore метод обеспечивает?

Ответы на вопрос(2)

Решение Вопроса

что сказать, что AUC 0,583 «ниже», чем оценка * 0,867, - все равно, что сравнивать яблоки с апельсинами.

[* Я полагаю, вашГол это средняя точность, но это не критично для этого обсуждения - это может быть что-то еще в принципе]

По моему опыту, по крайней мере, большинство практиков ОД считают, что оценка AUC измеряет нечто отличное от того, чтона самом делеобычное (и неудачное) использование аналогично любой другой метрике «чем выше, тем лучше», такой как точность, которая может естественным образом привести к головоломкам, подобным той, которую вы выражаете сами.

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

Решение)порог в двоичной классификации это значение, выше которого мырешить обозначить выборку как 1 (напомним, что вероятностные классификаторы действительно возвращают значениеp в [0, 1], обычно интерпретируется как вероятность - в scikit-learn это то, чтоpredict_proba возвращается).

Теперь этот порог, в таких методах, как scikit-Learnpredict которые возвращаютсяэтикетки (1/0), являетсяпо умолчанию установлено на 0.5, но это не единственная возможность, и она может даже не быть желательной в некоторых случаях (например, несбалансированные данные).

Главное, что нужно взять домой:

когда вы проситеscore (который под капотомиспользованияpredictт.е.этикетки а не вероятности), вы также неявно установили этот порог на 0,5когда вы запрашиваете AUC (который, напротив, использует вероятности, возвращаемые сpredict_proba), порог не задействован, и вы получите (что-то вроде) точностьв среднем через все возможные пороги

Учитывая эти разъяснения, ваш конкретный пример даеточень интересный пример:

Я получаю достаточно хорошую точность ~ 87% с моей моделью; я должен заботиться о том, что, согласно AUC 0,58, мой классификатор делает тольконемного лучше, чем просто случайное предположение?

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

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

По этой причине AUC начал получать серьезную критику в литературе (не читайте неправильно - анализКривая ROC само по себе очень информативно и полезно);Википедия и ссылки, приведенные в нем, настоятельно рекомендуется прочитать:

Таким образом, практическая ценность меры AUC была поставлена ​​под сомнение, что повышает вероятность того, что AUC может фактически вносить больше неопределенности в сравнения точности классификации машинного обучения, чем в разрешение.

[...]

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

Акцент мой - см. ТакжеНа опасностях АУК...

 Jon05 нояб. 2017 г., 14:44
Очень хорошая статья о том, что такое AUC! Определенно помогает мне понять это гораздо больше. Спасибо!

AIR_DEL15 есть, который вы используете в качестве своей метки (это не в исходных данных). мойУгадай является то, что это несбалансированная особенность, то есть там намного больше 0, чем 1; в таком случае точность как метрика не имеет смысла, и вам следует вместо этого использовать точность, отзыв и матрицу путаницы - см. такжеэта тема).

В качестве крайнего примера, если 87% ваших меток равны 0, вы можете иметь «классификатор» точности 87% просто (и наивно), классифицируя все выборки как 0; в таком случае у вас также будет низкий AUC (довольно близко к 0,5, как в вашем случае).

Для более общего (и, на мой взгляд, столь необходимого) обсуждения того, что же такое AUC, см. Мой другой ответ.

 Jon05 нояб. 2017 г., 14:49
Хотел бы я пометить это как ответ тоже. Ранее я заметил, что в наборе данных было больше нулей. Это объясняет высокую точность оценки. Еще раз спасибо!

Ваш ответ на вопрос