Obter uma pontuação baixa na ROC AUC, mas uma alta precisão
Usando umLogisticRegression
aula emscikit-learn
em uma versão doconjunto de dados de atraso de vôo.
eu usopandas
para selecionar algumas colunas:
df = df[["MONTH", "DAY_OF_MONTH", "DAY_OF_WEEK", "ORIGIN", "DEST", "CRS_DEP_TIME", "ARR_DEL15"]]
Eu preenchoNaN
valores com 0:
df = df.fillna({'ARR_DEL15': 0})
Verifique se as colunas categóricas estão marcadas com o tipo de dados 'categoria':
df["ORIGIN"] = df["ORIGIN"].astype('category')
df["DEST"] = df["DEST"].astype('category')
Em seguida, ligueget_dummies()
depandas
:
df = pd.get_dummies(df)
Agora eu treino e testo meu conjunto de dados:
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)
Depois de ligar para oscore
método eu chego em torno de 0,867. No entanto, quando ligo para oroc_auc_score
método, recebo um número muito menor de cerca de 0,583
probabilities = lr.predict_proba(test_set_x)
roc_auc_score(test_set_y, probabilities[:, 1])
Existe alguma razão pela qual a ROC da AUC é muito menor do que ascore
método fornece?