Mittarit
Pyyhkäise näyttääksesi valikon
Tähän asti olemme käyttäneet tarkkuutta (accuracy) mallin suorituskyvyn pääasiallisena mittarina. Tarkkuudella on kuitenkin joitakin rajoituksia. Tarkastellaan nyt näitä puutteita ja esitellään useita lisämittareita – perustuen TP, TN, FP ja FN – jotka auttavat ratkaisemaan näitä ongelmia.
Tarkkuus
Tarkkuus kuvaa oikeiden ennusteiden osuutta:
accuracy=correct+incorrectcorrect=TP+TN+FP+FNTP+TNTarkkuudella on kuitenkin haittapuolia. Kuvittele esimerkiksi, että yrität 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 tarkkuudeksi 0,999 – vaikka tällainen malli on täysin hyödytön.
Tällaisia aineistoja kutsutaan epätasapainoisiksi, ja näissä tilanteissa tasapainotettu tarkkuus on parempi mittari.
Tasapainotettu tarkkuus
Tasapainotettu tarkkuus laskee oikeiden positiivisten ennusteiden osuuden ja oikeiden negatiivisten ennusteiden osuuden erikseen ja ottaa näiden keskiarvon. Tämä lähestymistapa antaa yhtä suuren painoarvon molemmille luokille 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 aina ennustaa "terve", tasapainotettu tarkkuus olisi 0,5 – mikä tuo ongelman selvästi esiin. Näin tämä ongelma tulee huomioiduksi.
Tasapainotettu tarkkuus ei kuitenkaan erottele tyypin 1 ja tyypin 2 virheitä – aivan kuten tavallinen tarkkuuskaan ei tee. Tässä kohtaa precision ja recall tulevat mukaan.
Tarkkuus
Tarkkuus-mittari ilmaisee, kuinka moni mallin positiivisiksi ennustamista arvoista oli todella positiivisia. Se on oikeiden positiivisten ennusteiden osuus kaikista mallin tekemistä positiivisista ennusteista:
precision=TP+FPTPTarkkuusmittarin avulla voidaan arvioida, kuinka usein tyypin 1 virhe tapahtuu. Korkea tarkkuus tarkoittaa, että tyypin 1 virheet ovat harvinaisia, kun taas matala tarkkuus viittaa siihen, että tyypin 1 virheitä esiintyy usein.
Recall (herkkyys)
Recall-mittari ilmaisee, kuinka suuren osan todellisista positiivisista tapauksista malli ennusti oikein:
recall=TP+FNTPRecall-metriikka auttaa ymmärtämään, kuinka usein tyypin 2 virhe tapahtuu. Korkea recall tarkoittaa, että tyypin 2 virheet ovat harvinaisia, kun taas matala recall viittaa siihen, että niitä esiintyy usein.
Sekä precision- että recall-metriikoilla on kuitenkin rajoituksia. Esimerkiksi malli, joka ennustaa vain positiivisen luokan (1), saavuttaa täydellisen recallin, mutta sen precision on heikko. Toisaalta malli, joka tunnistaa vain yhden positiivisen tapauksen oikein ja luokittelee kaiken muun negatiiviseksi, saa täydellisen precisionin, mutta erittäin huonon recallin.
Tämä osoittaa, että vaikka on helppoa rakentaa malli, jolla on täydellinen precision tai recall, on paljon vaikeampaa rakentaa malli, joka suoriutuu hyvin molemmissa. Siksi on tärkeää ottaa huomioon molemmat metriikat – ja onneksi on olemassa metriikka, joka yhdistää ne.
F1-pisteet
F1-pisteet ovat precisionin ja recallin harmoninen keskiarvo. Harmonista keskiarvoa suositaan tavallisen (aritmeettisen) keskiarvon sijaan, koska se rankaisee tilanteissa, joissa jompikumpi arvo (precision tai recall) on matala, tehden siitä tasapainoisemman mittarin mallin suorituskyvylle.
F1=precision1+recall12=precision+recall2⋅precision⋅recallF1-pisteet yhdistävät sekä precisionin että recallin yhdeksi mittariksi. Se on korkea vain, jos sekä precision että recall ovat suhteellisen korkeita, mikä tekee siitä hyödyllisen mittarin silloin, kun molemmat virhetyypit täytyy ottaa huomioon.
Oikean mittarin valinta riippuu tehtävästä. Tarkkuus (tai tasapainotettu tarkkuus epätasapainoisille aineistoille) on intuitiivinen ja antaa yleiskuvan mallin kokonaissuorituskyvystä. Jos tarvitaan tarkempaa tietoa mallin tekemistä virheistä, precision auttaa tunnistamaan tyypin 1 virheet, kun taas recall korostaa tyypin 2 virheitä. F1-pisteet osoittavat, kuinka tasapainoinen malli on tyypin 1 ja 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 kaikki kerralla, 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 kunkin mittarin (precision, recall, F1) keskiarvon kaikille luokille tasapuolisesti, ottamatta huomioon luokkien epätasapainoa. Weighted avg laskee 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