Metrikker
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=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 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_accuracyaccuracy=21⋅PTP+21⋅NTN=P+NTP+TNHvor
- P=TP+FN – totalt antall positive forekomster (class 1);
- N=TN+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=TP+FPTPVed å 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=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 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=precision1+recall12=precision+recall2⋅precision⋅recallF1-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.
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))
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).
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
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
Metrikker
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=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 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_accuracyaccuracy=21⋅PTP+21⋅NTN=P+NTP+TNHvor
- P=TP+FN – totalt antall positive forekomster (class 1);
- N=TN+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=TP+FPTPVed å 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=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 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=precision1+recall12=precision+recall2⋅precision⋅recallF1-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.
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))
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).
Takk for tilbakemeldingene dine!