Metrikker
Indtil nu har vi brugt nøjagtighed som den primære måling til at evaluere modellens præstation. Dog har nøjagtighed visse begrænsninger. Lad os nu diskutere dens ulemper og introducere flere yderligere målinger – baseret på TP, TN, FP og FN – som hjælper med at håndtere disse problemer.
Nøjagtighed
Nøjagtighed repræsenterer andelen af korrekte forudsigelser:
accuracy=correct+incorrectcorrect=TP+TN+FP+FNTP+TNDog har nøjagtighed sine ulemper. Forestil dig for eksempel, at du forsøger at forudsige, om en patient har en sjælden sygdom. Datasættet indeholder 99,9% raske patienter og kun 0,1% med sygdommen. I dette tilfælde ville det altid at forudsige, at patienten er rask, resultere i en nøjagtighed på 0,999 – selvom en sådan model er fuldstændig ubrugelig.
Datasæt som dette kaldes ubalancerede, og i sådanne tilfælde er balanceret nøjagtighed en bedre måling at anvende.
Balanceret nøjagtighed
Balanceret nøjagtighed beregner andelen af korrekte positive forudsigelser og andelen af korrekte negative forudsigelser separat, og gennemsnitliggør derefter disse. Denne tilgang giver lige stor betydning til hver klasse, uanset hvor ubalanceret datasættet er.
balanced_accuracyaccuracy=21⋅PTP+21⋅NTN=P+NTP+TNHvor
- P=TP+FN – samlet antal positive forekomster (klasse 1);
- N=TN+FP – samlet antal positive forekomster (klasse 0).
I eksemplet med sjælden sygdom vil den balancerede nøjagtighed for en model, der altid forudsiger "sund", være 0,5 – hvilket effektivt fremhæver problemet. Dette problem bliver altså adresseret.
Dog skelner balanceret nøjagtighed stadig ikke mellem type 1 og type 2 fejl – ligesom almindelig nøjagtighed. Det er her, præcision og recall kommer ind.
Præcision
Målingen præcision angiver, hvor mange af de værdier, som modellen har forudsagt som positive, der faktisk var positive. Det er andelen af sande positive forudsigelser ud af alle positive forudsigelser, som modellen har lavet:
precision=TP+FPTPVed at anvende præcisionsmetrikken kan vi forstå, hvor ofte en type 1-fejl opstår. Høj præcision betyder, at type 1-fejl er sjældne, mens lav præcision indikerer, at type 1-fejl forekommer hyppigt.
Recall
Recall-metrikken viser andelen af faktiske positive tilfælde, som modellen korrekt har forudsagt:
recall=precision=TP+FNTPRecall-metrikken hjælper os med at forstå, hvor ofte en type 2-fejl opstår. Høj recall betyder, at type 2-fejl er sjældne, mens lav recall betyder, at de forekommer hyppigt.
Dog har både præcision og recall begrænsninger. For eksempel vil en model, der kun forudsiger den positive klasse (1), opnå perfekt recall, men dens præcision vil være dårlig. Omvendt vil en model, der korrekt forudsiger blot én positiv forekomst og mærker alt andet som negativt, have perfekt præcision, men elendig recall.
Dette viser, at det er let at bygge en model med perfekt præcision eller perfekt recall, men langt sværere at bygge en, der klarer sig godt på begge områder. Derfor er det vigtigt at tage begge metrikker i betragtning – og heldigvis findes der en metrik, der kombinerer dem.
F1-score
F1-score er det harmoniske gennemsnit af præcision og recall. Det harmoniske gennemsnit foretrækkes frem for det almindelige (aritmetiske) gennemsnit, fordi det straffer situationer, hvor en af værdierne (enten præcision eller recall) er lav, hvilket gør det til et mere balanceret mål for modellens ydeevne.
F1=precision1+recall12=precision+recall2⋅precision⋅recallF1-score kombinerer både præcision og recall i én enkelt måling. Den vil kun være høj, hvis både præcision og recall er relativt høje, hvilket gør den til et nyttigt mål, når der skal opnås balance mellem begge typer fejl.
Valg af den rette måling afhænger af den specifikke opgave. Nøjagtighed (eller balanceret nøjagtighed for ubalancerede datasæt) er intuitiv og giver et generelt indtryk af modellens samlede ydeevne. Hvis der ønskes mere detaljeret indsigt i de typer fejl, modellen laver, hjælper præcision med at identificere type 1-fejl, mens recall fremhæver type 2-fejl. F1-score viser, hvor velbalanceret modellen er i forhold til både type 1- og type 2-fejl.
En anden ofte anvendt metrisk er ROC/AUC, som du kan læse mere om i denne artikel.
Metrikker i Python
Scikit-learn tilbyder implementeringer af alle disse metrikker i modulet sklearn.metrics:
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 at få metrikker som precision, recall og F1-score på én gang, tilbyder sklearn funktionen 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 henviser til antallet af faktiske forekomster af hver klasse i testdatasættet. Macro avg beregner gennemsnittet af hver metrik (præcision, recall, F1) på tværs af alle klasser ligeligt, uden at tage højde for ubalance mellem klasserne. Weighted avg gennemsnitliggør også metrikkerne på tværs af alle klasser, men vægter klasser med flere forekomster højere (baseret på deres support).
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
Awesome!
Completion rate improved to 4.17
Metrikker
Stryg for at vise menuen
Indtil nu har vi brugt nøjagtighed som den primære måling til at evaluere modellens præstation. Dog har nøjagtighed visse begrænsninger. Lad os nu diskutere dens ulemper og introducere flere yderligere målinger – baseret på TP, TN, FP og FN – som hjælper med at håndtere disse problemer.
Nøjagtighed
Nøjagtighed repræsenterer andelen af korrekte forudsigelser:
accuracy=correct+incorrectcorrect=TP+TN+FP+FNTP+TNDog har nøjagtighed sine ulemper. Forestil dig for eksempel, at du forsøger at forudsige, om en patient har en sjælden sygdom. Datasættet indeholder 99,9% raske patienter og kun 0,1% med sygdommen. I dette tilfælde ville det altid at forudsige, at patienten er rask, resultere i en nøjagtighed på 0,999 – selvom en sådan model er fuldstændig ubrugelig.
Datasæt som dette kaldes ubalancerede, og i sådanne tilfælde er balanceret nøjagtighed en bedre måling at anvende.
Balanceret nøjagtighed
Balanceret nøjagtighed beregner andelen af korrekte positive forudsigelser og andelen af korrekte negative forudsigelser separat, og gennemsnitliggør derefter disse. Denne tilgang giver lige stor betydning til hver klasse, uanset hvor ubalanceret datasættet er.
balanced_accuracyaccuracy=21⋅PTP+21⋅NTN=P+NTP+TNHvor
- P=TP+FN – samlet antal positive forekomster (klasse 1);
- N=TN+FP – samlet antal positive forekomster (klasse 0).
I eksemplet med sjælden sygdom vil den balancerede nøjagtighed for en model, der altid forudsiger "sund", være 0,5 – hvilket effektivt fremhæver problemet. Dette problem bliver altså adresseret.
Dog skelner balanceret nøjagtighed stadig ikke mellem type 1 og type 2 fejl – ligesom almindelig nøjagtighed. Det er her, præcision og recall kommer ind.
Præcision
Målingen præcision angiver, hvor mange af de værdier, som modellen har forudsagt som positive, der faktisk var positive. Det er andelen af sande positive forudsigelser ud af alle positive forudsigelser, som modellen har lavet:
precision=TP+FPTPVed at anvende præcisionsmetrikken kan vi forstå, hvor ofte en type 1-fejl opstår. Høj præcision betyder, at type 1-fejl er sjældne, mens lav præcision indikerer, at type 1-fejl forekommer hyppigt.
Recall
Recall-metrikken viser andelen af faktiske positive tilfælde, som modellen korrekt har forudsagt:
recall=precision=TP+FNTPRecall-metrikken hjælper os med at forstå, hvor ofte en type 2-fejl opstår. Høj recall betyder, at type 2-fejl er sjældne, mens lav recall betyder, at de forekommer hyppigt.
Dog har både præcision og recall begrænsninger. For eksempel vil en model, der kun forudsiger den positive klasse (1), opnå perfekt recall, men dens præcision vil være dårlig. Omvendt vil en model, der korrekt forudsiger blot én positiv forekomst og mærker alt andet som negativt, have perfekt præcision, men elendig recall.
Dette viser, at det er let at bygge en model med perfekt præcision eller perfekt recall, men langt sværere at bygge en, der klarer sig godt på begge områder. Derfor er det vigtigt at tage begge metrikker i betragtning – og heldigvis findes der en metrik, der kombinerer dem.
F1-score
F1-score er det harmoniske gennemsnit af præcision og recall. Det harmoniske gennemsnit foretrækkes frem for det almindelige (aritmetiske) gennemsnit, fordi det straffer situationer, hvor en af værdierne (enten præcision eller recall) er lav, hvilket gør det til et mere balanceret mål for modellens ydeevne.
F1=precision1+recall12=precision+recall2⋅precision⋅recallF1-score kombinerer både præcision og recall i én enkelt måling. Den vil kun være høj, hvis både præcision og recall er relativt høje, hvilket gør den til et nyttigt mål, når der skal opnås balance mellem begge typer fejl.
Valg af den rette måling afhænger af den specifikke opgave. Nøjagtighed (eller balanceret nøjagtighed for ubalancerede datasæt) er intuitiv og giver et generelt indtryk af modellens samlede ydeevne. Hvis der ønskes mere detaljeret indsigt i de typer fejl, modellen laver, hjælper præcision med at identificere type 1-fejl, mens recall fremhæver type 2-fejl. F1-score viser, hvor velbalanceret modellen er i forhold til både type 1- og type 2-fejl.
En anden ofte anvendt metrisk er ROC/AUC, som du kan læse mere om i denne artikel.
Metrikker i Python
Scikit-learn tilbyder implementeringer af alle disse metrikker i modulet sklearn.metrics:
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 at få metrikker som precision, recall og F1-score på én gang, tilbyder sklearn funktionen 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 henviser til antallet af faktiske forekomster af hver klasse i testdatasættet. Macro avg beregner gennemsnittet af hver metrik (præcision, recall, F1) på tværs af alle klasser ligeligt, uden at tage højde for ubalance mellem klasserne. Weighted avg gennemsnitliggør også metrikkerne på tværs af alle klasser, men vægter klasser med flere forekomster højere (baseret på deres support).
Tak for dine kommentarer!