Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Metrikker | Sammenligning af Modeller
Klassifikation med Python

bookMetrikker

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=correctcorrect+incorrect=TP+TNTP+TN+FP+FN\text{accuracy} = \frac{\text{correct}}{\text{correct} + \text{incorrect}} = \frac{\textcolor{green}{\text{TP}} + \textcolor{green}{\text{TN}}}{\textcolor{green}{\text{TP}} + \textcolor{green}{\text{TN}} + \textcolor{red}{\text{FP}} + \textcolor{red}{\text{FN}}}

Dog 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_accuracy=12TPP+12TNNaccuracy=TP+TNP+N\begin{aligned} \text{balanced\_accuracy} &= \frac12 \cdot \frac{\textcolor{green}{\text{TP}}}{\text{P}} + \frac12 \cdot \frac{\textcolor{green}{\text{TN}}}{\text{N}}\\ \text{accuracy} &= \frac{\textcolor{green}{\text{TP}} + \textcolor{green}{\text{TN}}}{\text{P} + \text{N}} \end{aligned}

Hvor

  • P=TP+FN\text{P} = \textcolor{green}{\text{TP}} + \textcolor{red}{\text{FN}} – samlet antal positive forekomster (klasse 1);
  • N=TN+FP\text{N} = \textcolor{green}{\text{TN}} + \textcolor{red}{\text{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=TPTP+FP\text{precision} = \frac{\textcolor{green}{\text{TP}}}{\textcolor{green}{\text{TP}} + \textcolor{red}{\text{FP}}}

Ved 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=TPTP+FN\text{recall} = \text{precision} = \frac{\textcolor{green}{\text{TP}}}{\textcolor{green}{\text{TP}} + \textcolor{red}{\text{FN}}}

Recall-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=21precision+1recall=2precisionrecallprecision+recall\text{F1} = \frac{2}{\frac{1}{\text{precision}} + \frac{1}{\text{recall}}} = \frac{2 \cdot \text{precision} \cdot \text{recall}}{\text{precision} + \text{recall}}

F1-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.

Note
Læs Mere

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():

12345678910111213
import 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))
copy
Note
Bemærk

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).

question mark

Hvilken evalueringsmetrik giver en balance mellem præcision og recall og leverer en enkelt score, der afspejler begge?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 5. Kapitel 2

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Suggested prompts:

Can you explain the difference between precision and recall in more detail?

When should I use F1 score instead of accuracy?

How do I interpret the classification report output in scikit-learn?

Awesome!

Completion rate improved to 4.17

bookMetrikker

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=correctcorrect+incorrect=TP+TNTP+TN+FP+FN\text{accuracy} = \frac{\text{correct}}{\text{correct} + \text{incorrect}} = \frac{\textcolor{green}{\text{TP}} + \textcolor{green}{\text{TN}}}{\textcolor{green}{\text{TP}} + \textcolor{green}{\text{TN}} + \textcolor{red}{\text{FP}} + \textcolor{red}{\text{FN}}}

Dog 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_accuracy=12TPP+12TNNaccuracy=TP+TNP+N\begin{aligned} \text{balanced\_accuracy} &= \frac12 \cdot \frac{\textcolor{green}{\text{TP}}}{\text{P}} + \frac12 \cdot \frac{\textcolor{green}{\text{TN}}}{\text{N}}\\ \text{accuracy} &= \frac{\textcolor{green}{\text{TP}} + \textcolor{green}{\text{TN}}}{\text{P} + \text{N}} \end{aligned}

Hvor

  • P=TP+FN\text{P} = \textcolor{green}{\text{TP}} + \textcolor{red}{\text{FN}} – samlet antal positive forekomster (klasse 1);
  • N=TN+FP\text{N} = \textcolor{green}{\text{TN}} + \textcolor{red}{\text{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=TPTP+FP\text{precision} = \frac{\textcolor{green}{\text{TP}}}{\textcolor{green}{\text{TP}} + \textcolor{red}{\text{FP}}}

Ved 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=TPTP+FN\text{recall} = \text{precision} = \frac{\textcolor{green}{\text{TP}}}{\textcolor{green}{\text{TP}} + \textcolor{red}{\text{FN}}}

Recall-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=21precision+1recall=2precisionrecallprecision+recall\text{F1} = \frac{2}{\frac{1}{\text{precision}} + \frac{1}{\text{recall}}} = \frac{2 \cdot \text{precision} \cdot \text{recall}}{\text{precision} + \text{recall}}

F1-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.

Note
Læs Mere

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():

12345678910111213
import 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))
copy
Note
Bemærk

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).

question mark

Hvilken evalueringsmetrik giver en balance mellem præcision og recall og leverer en enkelt score, der afspejler begge?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 5. Kapitel 2
some-alt