Mittarit
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=correct+incorrectcorrect=TP+TN+FP+FNTP+TNTarkkuudella 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_accuracyaccuracy=21⋅PTP+21⋅NTN=P+NTP+TNMissä
- P=TP+FN – positiivisten tapausten kokonaismäärä (luokka 1);
- N=TN+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=TP+FPTPKä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=TP+FNTPRecall-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=precision1+recall12=precision+recall2⋅precision⋅recallF1-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.
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:
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 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).
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme