primo sguardo alla differenza tra prevedere e predict_proba. Il primo prevede la classe per il set di funzionalità in cui quest'ultimo predice le probabilità di varie classi.
Si sta vedendo l'effetto dell'arrotondamento implicito nel formato binario di y_test_predicted. y_test_predicted è composto da 1 e 0 dove p_pred è composto da valori in virgola mobile compresi tra 0 e 1. La routine roc_auc_score varia il valore di soglia e genera il tasso positivo reale e il tasso di falsi positivi, quindi il punteggio sembra molto diverso.
Consideriamo il caso in cui:
y_test = [ 1, 0, 0, 1, 0, 1, 1]
p_pred = [.6,.4,.6,.9,.2,.7,.4]
y_test_predicted = [ 1, 0, 1, 1, 0, 1, 0]
noti che la curva ROC è generata considerando tutte le soglie di taglio. Consideriamo ora una soglia di 0,65 ...
Il caso p_pred dà:
TPR=0.5, FPR=0,
e il caso y_test_predicted dà:
TPR=.75 FPR=.25.
Probabilmente si può vedere che se questi due punti sono diversi, allora anche l'area sotto le due curve sarà molto diversa.
Ma per capirlo davvero, suggerisco di guardare le curve ROC per aiutare a capire questa differenza.
Spero che questo aiuti!
e il caso dovrebbe y_test_predicted: 'TPR = .75 FPR = .33.' – yonglin
Il dividendo dovrebbe includere i PQ, non solo il TNS: FPR = FP/(FP + TN). – AN6U5
Scusa forse ti ho appena frainteso. Se si intende che confrontiamo y_test e y_test_predicted, quindi TN = 2 e FP = 1. – yonglin