Mittarit
Tähän asti olemme käyttäneet tarkkuutta (accuracy) pääasiallisena mittarina mallin suorituskyvyn arvioinnissa. Tarkkuudella on kuitenkin joitakin rajoituksia. Tarkastellaan nyt sen heikkouksia ja esitellään useita lisämittareita – jotka perustuvat TP-, TN-, FP- ja FN-arvoihin – ja 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ä yrität ennustaa, onko potilaalla harvinainen sairaus. Aineistossa on 99,9 % terveitä potilaita ja vain 0,1 % sairaita. Tässä tapauksessa, jos aina ennustetaan potilaan olevan terve, tarkkuudeksi saadaan 0,999 – vaikka tällainen malli on täysin hyödytön.
Tällaisia aineistoja kutsutaan epätasapainoisiksi (imbalanced), ja näissä tapauksissa 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ä suuren painoarvon jokaiselle luokalle riippumatta siitä, kuinka epätasapainoinen aineisto on.
balanced_accuracyaccuracy=21⋅PTP+21⋅NTN=P+NTP+TNMissä
- P=TP+FN – positiivisten havaintojen kokonaismäärä (luokka 1);
- N=TN+FP – negatiivisten havaintojen kokonaismäärä (luokka 0).
Harvinaisen sairauden esimerkissä mallin tasapainotettu tarkkuus, joka ennustaa aina "terve", 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 precision ja recall tulevat mukaan.
Precision
Precision-mittari ilmaisee, kuinka moni mallin positiivisista ennusteista 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ä esiintyy usein.
Recall
Recall-mittari osoittaa, kuinka suuren osan 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 heikko. Toisaalta malli, joka ennustaa oikein vain yhden positiivisen tapauksen ja luokittelee 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 palautuksen harmoninen keskiarvo. Harmonista keskiarvoa suositaan tavallisen (aritmeettisen) keskiarvon sijaan, koska se rankaisee tilanteita, joissa toinen arvoista (joko tarkkuus tai palautus) on matala, tehden siitä tasapainoisemman mittarin mallin suorituskyvylle.
F1=precision1+recall12=precision+recall2⋅precision⋅recallF1-pisteet yhdistävät sekä tarkkuuden että palautuksen yhdeksi mittariksi. Arvo on korkea vain, jos sekä tarkkuus että palautus ovat suhteellisen korkeita, mikä tekee siitä hyödyllisen mittarin, kun molempien virhetyyppien tasapainottaminen on tärkeää.
Oikean mittarin valinta riippuu tehtävästä. Tarkkuus (tai tasapainotettu tarkkuus epätasapainoisissa aineistoissa) on intuitiivinen ja antaa yleiskuvan mallin kokonaissuorituskyvystä. Jos tarvitset tarkempaa tietoa mallin tekemistä virheistä, tarkkuus auttaa tunnistamaan tyypin 1 virheet, kun taas palautus 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ässä artikkelissa.
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
Awesome!
Completion rate improved to 4.17
Mittarit
Pyyhkäise näyttääksesi valikon
Tähän asti olemme käyttäneet tarkkuutta (accuracy) pääasiallisena mittarina mallin suorituskyvyn arvioinnissa. Tarkkuudella on kuitenkin joitakin rajoituksia. Tarkastellaan nyt sen heikkouksia ja esitellään useita lisämittareita – jotka perustuvat TP-, TN-, FP- ja FN-arvoihin – ja 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ä yrität ennustaa, onko potilaalla harvinainen sairaus. Aineistossa on 99,9 % terveitä potilaita ja vain 0,1 % sairaita. Tässä tapauksessa, jos aina ennustetaan potilaan olevan terve, tarkkuudeksi saadaan 0,999 – vaikka tällainen malli on täysin hyödytön.
Tällaisia aineistoja kutsutaan epätasapainoisiksi (imbalanced), ja näissä tapauksissa 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ä suuren painoarvon jokaiselle luokalle riippumatta siitä, kuinka epätasapainoinen aineisto on.
balanced_accuracyaccuracy=21⋅PTP+21⋅NTN=P+NTP+TNMissä
- P=TP+FN – positiivisten havaintojen kokonaismäärä (luokka 1);
- N=TN+FP – negatiivisten havaintojen kokonaismäärä (luokka 0).
Harvinaisen sairauden esimerkissä mallin tasapainotettu tarkkuus, joka ennustaa aina "terve", 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 precision ja recall tulevat mukaan.
Precision
Precision-mittari ilmaisee, kuinka moni mallin positiivisista ennusteista 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ä esiintyy usein.
Recall
Recall-mittari osoittaa, kuinka suuren osan 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 heikko. Toisaalta malli, joka ennustaa oikein vain yhden positiivisen tapauksen ja luokittelee 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 palautuksen harmoninen keskiarvo. Harmonista keskiarvoa suositaan tavallisen (aritmeettisen) keskiarvon sijaan, koska se rankaisee tilanteita, joissa toinen arvoista (joko tarkkuus tai palautus) on matala, tehden siitä tasapainoisemman mittarin mallin suorituskyvylle.
F1=precision1+recall12=precision+recall2⋅precision⋅recallF1-pisteet yhdistävät sekä tarkkuuden että palautuksen yhdeksi mittariksi. Arvo on korkea vain, jos sekä tarkkuus että palautus ovat suhteellisen korkeita, mikä tekee siitä hyödyllisen mittarin, kun molempien virhetyyppien tasapainottaminen on tärkeää.
Oikean mittarin valinta riippuu tehtävästä. Tarkkuus (tai tasapainotettu tarkkuus epätasapainoisissa aineistoissa) on intuitiivinen ja antaa yleiskuvan mallin kokonaissuorituskyvystä. Jos tarvitset tarkempaa tietoa mallin tekemistä virheistä, tarkkuus auttaa tunnistamaan tyypin 1 virheet, kun taas palautus 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ässä artikkelissa.
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!