Krzywa ROC (Receiver Operating Characteristic) to wykres, który pokazuje, jak Twój klasyfikator binarny radzi sobie przy każdym możliwym progu decyzyjnym naraz. Na osi pionowej masz czułość, czyli TPR (True Positive Rate — odsetek poprawnie wyłapanych przypadków pozytywnych), a na osi poziomej odsetek fałszywych alarmów, czyli FPR (False Positive Rate — odsetek negatywów błędnie oznaczonych jako pozytywne). Każdy punkt na krzywej odpowiada jednemu progowi. Nazwa wzięła się z radarów z czasów II wojny światowej, gdzie operatorzy odróżniali sygnał wroga od szumu — dziś robisz to samo z mailami spam vs. nie-spam.
Jak to działa i po co Ci to
Model zwykle nie zwraca twardego „tak/nie”, tylko prawdopodobieństwo (np. 0.83). Próg decyzyjny ustala, od jakiej wartości uznajesz przypadek za pozytywny. Przesuwając próg od 1 do 0, zamieniasz ostrożny model (mało fałszywych alarmów, ale i mało trafień) na agresywny (łapie wszystko, ale spamuje fałszywymi alarmami). Krzywa ROC kreśli ten kompromis dla całego zakresu progów, więc oceniasz model niezależnie od jednego konkretnego cut-offa.
Żeby sprowadzić cały wykres do jednej liczby, liczy się AUC (Area Under the Curve) — pole pod krzywą. AUC = 1.0 to klasyfikator idealny, 0.5 to rzut monetą (przekątna), a poniżej 0.5 oznacza, że model myli się systematycznie (czasem wystarczy odwrócić jego decyzje). Interpretacja AUC jest zaskakująco intuicyjna: to prawdopodobieństwo, że losowy przypadek pozytywny dostanie wyższy score niż losowy negatywny.
Przykład z praktyki
W Pythonie ze scikit-learn liczysz to dwiema linijkami: from sklearn.metrics import roc_curve, roc_auc_score, a potem fpr, tpr, thresholds = roc_curve(y_true, y_scores) i roc_auc_score(y_true, y_scores). Uwaga: do obu funkcji podajesz prawdopodobieństwa (z predict_proba), nie gotowe etykiety z predict — to klasyczna wpadka, przez którą krzywa wychodzi schodkowa i bezużyteczna.
Częste błędy i mity
- Niezbalansowane klasy. Przy danych typu 1 oszustwo na 10 000 transakcji ROC potrafi pokazać piękne AUC 0.95, bo FPR liczony od ogromnej liczby negatywów rośnie wolno. W takich przypadkach sięgnij po krzywą
Precision-Recall— jest bardziej bezlitosna. - AUC to nie dokładność. Mierzy uszeregowanie (ranking) przypadków, nie to, ile próg trafia w praktyce.
- Jedno AUC nie wybierze progu za Ciebie. Próg dobierasz pod koszt błędu — inaczej dla diagnostyki choroby, inaczej dla filtra reklam.
Pojęcia powiązane: macierz pomyłek (confusion matrix), precision i recall, F1-score, krzywa Precision-Recall, próg decyzyjny, czułość i swoistość.