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

bookMetrikker

Til nå har vi brukt nøyaktighet som hovedmetrikken 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=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}}}

Nø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 en bedre metrikk å bruke.

Balansert nøyaktighet

Balansert nøyaktighet beregner andelen korrekte positive prediksjoner og andelen korrekte negative prediksjoner separat, og gjennomsnittet av disse. Denne tilnærmingen gir lik betydning til hver klasse, uavhengig av hvor ubalansert datasettet 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}} – totalt antall positive forekomster (class 1);
  • N=TN+FP\text{N} = \textcolor{green}{\text{TN}} + \textcolor{red}{\text{FP}} – totalt antall positive forekomster (class 0).

I eksempelet med sjelden sykdom vil den balanserte nøyaktigheten til en modell som alltid predikerer "frisk" være 0,5 – noe som effektivt fremhever problemet. Dermed blir dette problemet adressert.

Likevel skiller ikke balansert nøyaktighet mellom type 1 og type 2 feil – på samme måte som vanlig nøyaktighet. Det er her presisjon og tilbakekalling kommer inn.

Presisjon

Presisjon-metrikken angir hvor mange av verdiene modellen har predikert som positive som faktisk var positive. Det er andelen sanne positive prediksjoner av alle positive prediksjoner gjort av modellen:

precision=TPTP+FP\text{precision} = \frac{\textcolor{green}{\text{TP}}}{\textcolor{green}{\text{TP}} + \textcolor{red}{\text{FP}}}

Ved å bruke presisjonsmetrikken 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 har forutsagt:

recall=precision=TPTP+FN\text{recall} = \text{precision} = \frac{\textcolor{green}{\text{TP}}}{\textcolor{green}{\text{TP}} + \textcolor{red}{\text{FN}}}

Recall-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 forutsier den positive klassen (1) oppnå perfekt recall, men presisjonen vil være dårlig. På den andre siden vil en modell som korrekt forutsier kun ett positivt tilfelle og merker alt annet som negativt ha perfekt presisjon, men svært dårlig recall.

Dette viser at det er enkelt å bygge en modell med perfekt presisjon eller perfekt recall, men langt vanskeligere å bygge 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 tilbakekalling. Det harmoniske gjennomsnittet foretrekkes fremfor det vanlige (aritmetiske) gjennomsnittet fordi det straffer situasjoner der én av verdiene (enten presisjon eller tilbakekalling) er lav, noe som gjør det til et mer balansert mål på modellens ytelse.

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 presisjon og tilbakekalling i én enkelt måleparameter. Den vil kun være høy dersom både presisjon og tilbakekalling er relativt høye, noe som gjør den nyttig når det er behov for å balansere begge typer feil.

Valg av riktig måleparameter avhenger av den spesifikke oppgaven. Nøyaktighet (eller balansert nøyaktighet for ubalanserte datasett) er intuitivt og gir et generelt inntrykk av modellens samlede ytelse. Dersom det er behov for mer detaljert innsikt i hvilke typer feil modellen gjør, hjelper presisjon med å identifisere type 1-feil, mens tilbakekalling fremhever type 2-feil. F1-score viser hvor godt modellen balanserer mellom type 1- og type 2-feil.

Note
Les mer

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

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
Merk

Støtte refererer til antall faktiske forekomster av hver klasse i testsettet. Makro-gjennomsnitt beregner gjennomsnittet av hver metrikk (presisjon, tilbakekalling, F1) på tvers av alle klasser likt, uten å ta hensyn til skjevhet i klassene. Vektet gjennomsnitt beregner også gjennomsnittet av metrikker på tvers av alle klasser, men gir mer vekt til klasser med flere forekomster (basert på deres støtte).

question mark

Hvilken evalueringsmetrik gir en balanse mellom presisjon og tilbakekalling, og gir en enkelt score som reflekterer begge?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 5. Kapittel 2

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Awesome!

Completion rate improved to 4.17

bookMetrikker

Sveip for å vise menyen

Til nå har vi brukt nøyaktighet som hovedmetrikken 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=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}}}

Nø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 en bedre metrikk å bruke.

Balansert nøyaktighet

Balansert nøyaktighet beregner andelen korrekte positive prediksjoner og andelen korrekte negative prediksjoner separat, og gjennomsnittet av disse. Denne tilnærmingen gir lik betydning til hver klasse, uavhengig av hvor ubalansert datasettet 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}} – totalt antall positive forekomster (class 1);
  • N=TN+FP\text{N} = \textcolor{green}{\text{TN}} + \textcolor{red}{\text{FP}} – totalt antall positive forekomster (class 0).

I eksempelet med sjelden sykdom vil den balanserte nøyaktigheten til en modell som alltid predikerer "frisk" være 0,5 – noe som effektivt fremhever problemet. Dermed blir dette problemet adressert.

Likevel skiller ikke balansert nøyaktighet mellom type 1 og type 2 feil – på samme måte som vanlig nøyaktighet. Det er her presisjon og tilbakekalling kommer inn.

Presisjon

Presisjon-metrikken angir hvor mange av verdiene modellen har predikert som positive som faktisk var positive. Det er andelen sanne positive prediksjoner av alle positive prediksjoner gjort av modellen:

precision=TPTP+FP\text{precision} = \frac{\textcolor{green}{\text{TP}}}{\textcolor{green}{\text{TP}} + \textcolor{red}{\text{FP}}}

Ved å bruke presisjonsmetrikken 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 har forutsagt:

recall=precision=TPTP+FN\text{recall} = \text{precision} = \frac{\textcolor{green}{\text{TP}}}{\textcolor{green}{\text{TP}} + \textcolor{red}{\text{FN}}}

Recall-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 forutsier den positive klassen (1) oppnå perfekt recall, men presisjonen vil være dårlig. På den andre siden vil en modell som korrekt forutsier kun ett positivt tilfelle og merker alt annet som negativt ha perfekt presisjon, men svært dårlig recall.

Dette viser at det er enkelt å bygge en modell med perfekt presisjon eller perfekt recall, men langt vanskeligere å bygge 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 tilbakekalling. Det harmoniske gjennomsnittet foretrekkes fremfor det vanlige (aritmetiske) gjennomsnittet fordi det straffer situasjoner der én av verdiene (enten presisjon eller tilbakekalling) er lav, noe som gjør det til et mer balansert mål på modellens ytelse.

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 presisjon og tilbakekalling i én enkelt måleparameter. Den vil kun være høy dersom både presisjon og tilbakekalling er relativt høye, noe som gjør den nyttig når det er behov for å balansere begge typer feil.

Valg av riktig måleparameter avhenger av den spesifikke oppgaven. Nøyaktighet (eller balansert nøyaktighet for ubalanserte datasett) er intuitivt og gir et generelt inntrykk av modellens samlede ytelse. Dersom det er behov for mer detaljert innsikt i hvilke typer feil modellen gjør, hjelper presisjon med å identifisere type 1-feil, mens tilbakekalling fremhever type 2-feil. F1-score viser hvor godt modellen balanserer mellom type 1- og type 2-feil.

Note
Les mer

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

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
Merk

Støtte refererer til antall faktiske forekomster av hver klasse i testsettet. Makro-gjennomsnitt beregner gjennomsnittet av hver metrikk (presisjon, tilbakekalling, F1) på tvers av alle klasser likt, uten å ta hensyn til skjevhet i klassene. Vektet gjennomsnitt beregner også gjennomsnittet av metrikker på tvers av alle klasser, men gir mer vekt til klasser med flere forekomster (basert på deres støtte).

question mark

Hvilken evalueringsmetrik gir en balanse mellom presisjon og tilbakekalling, og gir en enkelt score som reflekterer begge?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 5. Kapittel 2
some-alt