Metrikker
Sveip for å vise menyen
Til nå har vi brukt nøyaktighet som hovedmålet for å evaluere modellens ytelse. Nøyaktighet har imidlertid noen begrensninger. La oss nå diskutere ulempene og introdusere flere tilleggsmetrikker – basert på TP, TN, FP og FN – som bidrar til å håndtere disse utfordringene.
Nøyaktighet
Nøyaktighet representerer andelen korrekte prediksjoner:
accuracy=correct+incorrectcorrect=TP+TN+FP+FNTP+TNNøyaktighet har imidlertid sine svakheter. For eksempel, tenk deg at du prøver å forutsi om en pasient har en sjelden sykdom. Datasettet inneholder 99,9 % friske pasienter og kun 0,1 % med sykdommen. I dette tilfellet vil det å alltid forutsi at pasienten er frisk gi en nøyaktighet på 0,999 – selv om en slik modell er helt ubrukelig.
Datasett som dette kalles ubalanserte, og i slike tilfeller er balansert nøyaktighet et bedre mål å bruke.
Balansert nøyaktighet
Balansert nøyaktighet beregner andelen korrekte positive prediksjoner og andelen korrekte negative prediksjoner hver for seg, og gjennomsnittet av disse. Denne tilnærmingen gir lik vekt til hver klasse, uavhengig av hvor ubalansert datasettet er.
balanced_accuracyaccuracy=21⋅PTP+21⋅NTN=P+NTP+TNHvor
- P=TP+FN – totalt antall positive forekomster (klasse 1);
- N=TN+FP – totalt antall negative forekomster (klasse 0).
I eksempelet med den sjeldne sykdommen vil den balanserte nøyaktigheten til en modell som alltid forutsier "frisk" være 0,5 – noe som tydeliggjør problemet. Dermed blir dette problemet adressert.
Likevel skiller ikke balansert nøyaktighet mellom type 1 og type 2 feil – akkurat som vanlig nøyaktighet. Det er her presisjon og tilbakekalling kommer inn.
Presisjon
Presisjon-metrikken indikerer hvor mange av verdiene modellen har forutsagt som positive som faktisk var positive. Dette er andelen sanne positive prediksjoner av alle positive prediksjoner gjort av modellen:
precision=TP+FPTPVed å bruke presisjon-metrikken kan vi forstå hvor ofte en type 1-feil oppstår. Høy presisjon betyr at type 1-feil er sjeldne, mens lav presisjon indikerer at type 1-feil skjer ofte.
Recall
Recall-metrikken viser andelen faktiske positive tilfeller som modellen korrekt forutså:
recall=TP+FNTPRecall-metrikken hjelper oss å forstå hvor ofte en type 2-feil oppstår. Høy recall betyr at type 2-feil er sjeldne, mens lav recall betyr at de skjer ofte.
Både presisjon og recall har imidlertid begrensninger. For eksempel vil en modell som kun predikerer den positive klassen (1) oppnå perfekt recall, men presisjonen vil være dårlig. På den andre siden vil en modell som korrekt predikerer kun én positiv forekomst og merker alt annet som negativt ha perfekt presisjon, men elendig recall.
Dette viser at det er lett å lage en modell med perfekt presisjon eller perfekt recall, men mye vanskeligere å lage en som presterer godt på begge. Derfor er det viktig å vurdere begge metrikker – og heldigvis finnes det en metrikk som kombinerer dem.
F1-score
F1-score er det harmoniske gjennomsnittet av presisjon og recall. Det harmoniske gjennomsnittet foretrekkes fremfor det vanlige (aritmetiske) gjennomsnittet fordi det straffer situasjoner der én av verdiene (enten presisjon eller recall) er lav, noe som gjør det til et mer balansert mål på modellens ytelse.
F1=precision1+recall12=precision+recall2⋅precision⋅recallF1-score kombinerer både presisjon og recall i én enkelt metrikk. Den vil kun være høy dersom både presisjon og recall er relativt høye, noe som gjør den til et nyttig mål når det er behov for å balansere begge typer feil.
Valg av riktig metrikk avhenger av den spesifikke oppgaven. Nøyaktighet (eller balansert nøyaktighet for ubalanserte datasett) er intuitivt og gir en generell oversikt over modellens totale ytelse. Dersom det er behov for mer detaljert innsikt i hvilke typer feil modellen gjør, hjelper presisjon med å identifisere type 1-feil, mens rekall fremhever type 2-feil. F1-score viser hvor godt modellen balanserer mellom type 1- og type 2-feil.
En annen ofte brukt metrikk er ROC/AUC, som du kan lese mer om i denne artikkelen.
Metrikker i Python
Scikit-learn tilbyr implementasjoner for alle disse metrikker i sklearn.metrics-modulen:
from sklearn.metrics import accuracy_score, balanced_accuracy_score, precision_score, recall_score, f1_score
accuracy = accuracy_score(y_true, y_pred)
balanced_accuracy = balanced_accuracy_score(y_true, y_pred)
precision = precision_score(y_true, y_pred)
recall = recall_score(y_true, y_pred)
f1 = f1_score(y_true, y_pred)
Hvis du ønsker å hente ut metrikker som presisjon, recall og F1-score samtidig, tilbyr sklearn funksjonen classification_report():
12345678910111213import pandas as pd import seaborn as sns from sklearn.metrics import classification_report from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b71ff7ac-3932-41d2-a4d8-060e24b00129/titanic.csv') X, y = df.drop('Survived', axis=1), df['Survived'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1) random_forest = RandomForestClassifier().fit(X_train, y_train) y_pred = random_forest.predict(X_test) # Display a classification report print(classification_report(y_test, y_pred))
Support refererer til antall faktiske forekomster av hver klasse i testsettet. Macro avg beregner gjennomsnittet av hver metrikk (presisjon, recall, F1) på tvers av alle klasser likt, uten å ta hensyn til skjevhet i klassene. Weighted avg beregner også gjennomsnittet av metrikker på tvers av alle klasser, men gir mer vekt til klasser med flere forekomster (basert på deres support).
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår