Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Mittarit | Mallien Vertailu
Practice
Projects
Quizzes & Challenges
Visat
Challenges
/
Luokittelu Pythonilla

bookMittarit

Pyyhkäise näyttääksesi valikon

Tähän asti olemme käyttäneet tarkkuutta (accuracy) mallin suorituskyvyn arvioinnin päämittarina. Tarkkuudella on kuitenkin joitakin rajoituksia. Tarkastellaan nyt sen heikkouksia ja esitellään useita lisämittareita – perustuen TP-, TN-, FP- ja FN-arvoihin – jotka auttavat ratkaisemaan näitä ongelmia.

Tarkkuus

Tarkkuus kuvaa oikeiden ennusteiden osuutta:

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}}}

Tarkkuudella on kuitenkin heikkouksia. Kuvitellaan esimerkiksi, että yritetään ennustaa, onko potilaalla harvinainen sairaus. Aineistossa on 99,9 % terveitä potilaita ja vain 0,1 % sairastuneita. Tässä tapauksessa, jos aina ennustetaan potilaan olevan terve, saavutetaan tarkkuus 0,999 – vaikka tällainen malli on täysin hyödytön.

Tällaisia aineistoja kutsutaan epätasapainoisiksi (imbalanced), ja näissä tilanteissa tasapainotettu tarkkuus (balanced accuracy) on parempi mittari.

Tasapainotettu tarkkuus

Tasapainotettu tarkkuus laskee oikeiden positiivisten ennusteiden osuuden ja oikeiden negatiivisten ennusteiden osuuden erikseen, ja keskimääräistää ne. Tämä lähestymistapa antaa yhtäläisen painoarvon jokaiselle luokalle riippumatta siitä, kuinka epätasapainoinen aineisto on.

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}

Missä

  • P=TP+FN\text{P} = \textcolor{green}{\text{TP}} + \textcolor{red}{\text{FN}} – positiivisten tapausten kokonaismäärä (luokka 1);
  • N=TN+FP\text{N} = \textcolor{green}{\text{TN}} + \textcolor{red}{\text{FP}} – negatiivisten tapausten kokonaismäärä (luokka 0).

Harvinaisen sairauden esimerkissä mallin, joka ennustaa aina "terve", tasapainotettu tarkkuus olisi 0.5 – mikä tuo ongelman selvästi esiin. Näin ollen tämä ongelma tulee huomioiduksi.

Kuitenkin tasapainotettu tarkkuus ei edelleenkään erottele tyypin 1 ja tyypin 2 virheitä – aivan kuten tavallinen tarkkuuskaan ei tee. Tässä kohtaa precisio ja herkkyys tulevat mukaan.

Precision

Precision-mittari ilmaisee, kuinka moni mallin positiivisiksi ennustamista arvoista oli todella positiivinen. Se on oikeiden positiivisten ennusteiden osuus kaikista mallin tekemistä positiivisista ennusteista:

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

Käyttämällä tarkkuusmittaria voidaan ymmärtää, kuinka usein tyypin 1 virhe esiintyy. Korkea tarkkuus tarkoittaa, että tyypin 1 virheet ovat harvinaisia, kun taas matala tarkkuus viittaa siihen, että tyypin 1 virheitä tapahtuu usein.

Recall

Recall-mittari osoittaa, kuinka suuri osa todellisista positiivisista tapauksista malli ennustaa oikein:

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

Recall-mittari auttaa ymmärtämään, kuinka usein tyypin 2 virhe esiintyy. Korkea recall tarkoittaa, että tyypin 2 virheet ovat harvinaisia, kun taas matala recall tarkoittaa, että niitä esiintyy usein.

Sekä tarkkuudella että recallilla on kuitenkin rajoituksia. Esimerkiksi malli, joka ennustaa vain positiivisen luokan (1), saavuttaa täydellisen recallin, mutta sen tarkkuus on huono. Toisaalta malli, joka ennustaa oikein vain yhden positiivisen tapauksen ja merkitsee kaiken muun negatiiviseksi, saavuttaa täydellisen tarkkuuden, mutta erittäin huonon recallin.

Tämä osoittaa, että on helppoa rakentaa malli, jolla on täydellinen tarkkuus tai täydellinen recall, mutta paljon vaikeampaa rakentaa malli, joka suoriutuu hyvin molemmissa. Siksi on tärkeää ottaa huomioon molemmat mittarit – ja onneksi on olemassa mittari, joka yhdistää ne.

F1-pisteet

F1-pisteet ovat tarkkuuden ja recallin harmoninen keskiarvo. Harmonista keskiarvoa suositaan tavallisen (aritmeettisen) keskiarvon sijaan, koska se rankaisee tilanteita, joissa toinen arvoista (joko tarkkuus tai recall) on matala, tehden siitä tasapainoisemman mittarin mallin suorituskyvylle.

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-pisteet yhdistävät sekä tarkkuuden että recallin yhdeksi mittariksi. Se on korkea vain, jos sekä tarkkuus että recall ovat suhteellisen korkeita, mikä tekee siitä hyödyllisen mittarin silloin, kun molempien virhetyyppien tasapainottaminen on tärkeää.

Oikean mittarin valinta riippuu tehtävästä. Tarkkuus (tai tasapainotettu tarkkuus epätasapainoisille aineistoille) on intuitiivinen ja antaa yleiskuvan mallin kokonaissuorituskyvystä. Jos tarvitset tarkempaa tietoa mallin tekemistä virheistä, tarkkuus auttaa tunnistamaan tyypin 1 virheet, kun taas recall korostaa tyypin 2 virheitä. F1-pisteet osoittavat, kuinka hyvin malli on tasapainossa sekä tyypin 1 että tyypin 2 virheiden suhteen.

Note
Opiskele lisää

Toinen yleisesti käytetty mittari on ROC/AUC, josta voit lukea lisää tästä artikkelista.

Mittarit Pythonissa

Scikit-learn tarjoaa toteutukset kaikille näille mittareille sklearn.metrics -moduulissa:

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)

Jos haluat saada mittarit kuten precision, recall ja F1-score yhdellä kertaa, sklearn tarjoaa classification_report() -funktion:

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
Huomio

Support tarkoittaa kunkin luokan todellisten esiintymien määrää testijoukossa. Macro avg laskee jokaisen mittarin (precision, recall, F1) keskiarvon kaikille luokille tasapuolisesti, ottamatta huomioon luokkien epätasapainoa. Weighted avg laskee myös mittareiden keskiarvon kaikille luokille, mutta antaa enemmän painoarvoa niille luokille, joissa on enemmän havaintoja (perustuen niiden support-arvoon).

question mark

Mikä arviointimittari tarjoaa tasapainon precisionin ja recallin välillä, antaen yhden pistemäärän, joka heijastaa molempia?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 5. Luku 2

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Osio 5. Luku 2
some-alt