Blog5 min branja

Za firbce: Kako vemo, ali je model dejansko dober?

Recimo, da smo model učili na podatkih o stanovanjih. Hmmm?

Kako vemo, ali je model dejansko dober?

Recimo, da smo model učili na podatkih o stanovanjih.

Po treningu pogledamo rezultat:

98 % accuracy.

Super.

Model je skoraj perfekten.

Ali pa tudi ne.

Problem je v tem, na katerih podatkih smo dobili teh 98 %.

Če model ocenjujemo na istih podatkih, na katerih se je učil, je rezultat lahko precej zavajajoč.

To je približno tako, kot da bi pred izpitom dobil vprašanja skupaj z odgovori, jih nekajkrat prebral, potem pa dobil popolnoma isti test.

Verjetno bi izgledal precej pameten. 😄

Ampak pravo vprašanje je:

Kaj se zgodi, ko dobiš vprašanje, ki ga še nisi videl?

In pri Machine Learningu nas zanima isto.


Training rezultat ni dovolj

Med učenjem model stalno vidi training podatke.

Na njih:

  • dela napovedi,
  • računa napako,
  • spreminja parametre,
  • in postaja vedno boljši.

Zato ni nič čudnega, če je na koncu na teh podatkih zelo dober.

Težava nastane, če se je preveč prilagodil ravno njim.

Recimo:

Training accuracy: 99 %

potem pa:

Test accuracy: 72 %

To je precej velik znak, da nekaj ni v redu.

Model je odličen na podatkih, ki jih že pozna.

Na novih pa precej slabši.

To je tisti overfitting, ki smo ga omenili v prejšnjem postu.


Zato podatke ločimo

Pogosta razdelitev izgleda približno tako:

70 % → training

15 % → validation

15 % → test

Training podatke model uporablja za učenje.

Validation podatke uporabljamo med razvojem modela.

Test podatke pa poskusimo pustiti čisto pri miru do konca.

Zakaj?

Ker želimo imeti en dataset, na katerem model še ni imel možnosti “goljufati”.


Kaj je validation data?

Recimo, da treniramo nevronsko mrežo.

Poskusimo:

  • 10 layerjev,
  • learning rate 0,001,
  • batch size 256.

Dobimo nek rezultat.

Potem spremenimo learning rate.

Spet treniramo.

Potem spremenimo število layerjev.

Spet treniramo.

Kako vemo, katera verzija je boljša?

Pogledamo rezultat na validation podatkih.

Model se neposredno na njih ne uči, jih pa mi uporabljamo za svoje odločitve.

In ravno zato validation podatki sčasoma niso več popolnoma “neznani”.

Mi smo namreč na podlagi njih že spreminjali model.

Zato imamo še:

test data.


Test je zadnja kontrola

Ko smo model izbrali in nehali spreminjati nastavitve, ga ocenimo na test podatkih.

Ti naj bi čim bolje predstavljali situacijo:

Kaj se zgodi, ko model v resničnem svetu dobi nekaj novega?

Če imamo:

Training accuracy: 96 %

Validation accuracy: 94 %

Test accuracy: 93 %

je to precej bolj zdrava slika kot:

Training accuracy: 100 %

Validation accuracy: 78 %

Test accuracy: 74 %

Pri drugem modelu je očitno, da se je nekaj naučil preveč “na pamet”.


Ampak accuracy ima še en problem

Predstavljaj si model, ki odkriva neko zelo redko napako na proizvodni liniji.

Od 10.000 izdelkov jih je:

9.900 dobrih

in samo:

100 pokvarjenih.

Zdaj naredimo genialen model.

Njegovo pravilo je:

Vedno napovej, da je izdelek dober.

Kolikšen accuracy ima?

99 %.

Zveni odlično.

Ampak model ni našel niti enega pokvarjenega izdelka.

Kar pomeni, da je za naš dejanski problem praktično neuporaben.

Zato ena sama številka pogosto ni dovolj.


Precision in recall

Pri klasifikaciji pogosto pogledamo še dve stvari.

Recimo, da iščemo spam email.

Precision

Ko model reče:

“To je spam.”

Kako pogosto ima prav?

Če označi 100 emailov kot spam in jih je 90 dejansko spam:

precision = 90 %

Recall

Od vseh spam emailov, ki dejansko obstajajo:

koliko jih je model našel?

Če imamo 200 spam emailov in jih model odkrije 100:

recall = 50 %

In tukaj hitro vidiš, da je lahko model po eni metriki dober, po drugi pa slab.


Kaj je bolj pomembno?

Odvisno od problema.

Če spam filter enkrat spusti reklamni email v inbox:

ni konec sveta.

Če pa kot spam označi pomemben službeni email in ga skrije:

je mogoče precej bolj neprijetno.

Pri kakšnem drugem problemu je ravno obratno.

Če model išče nevarno okvaro na stroju, si mogoče bolj želiš nekaj lažnih alarmov, kot pa da spregleda pravo okvaro.

Zato ne obstaja ena univerzalna metrika, ki bi povedala:

Ta model je dober.

Vedno moraš vprašati:

Dober za kaj?


Pri regresiji pa gledamo druge napake

Če model napoveduje ceno stanovanja, accuracy nima veliko smisla.

Napoved:

298.000 €

Prava cena:

300.000 €

To ni “prav” ali “narobe” na isti način kot mačka/pes.

Zanima nas:

Kako daleč smo zgrešili?

Zato lahko gledamo stvari, kot so:

  • MAE,
  • MSE,
  • RMSE.

Imena so malo bolj strašljiva kot sama ideja.

MAE na primer v osnovi pove:

Koliko v povprečju zgrešimo?

Če je MAE:

18.000 €

to pomeni, da so napovedi v povprečju približno 18.000 € stran od prave vrednosti.

To je že precej bolj uporabna informacija.


In še ena stvar: s čim model sploh primerjamo?

Recimo, da naredimo model in dobimo:

82 % accuracy.

Je to dobro?

Ne vemo.

Če je preprost model prej dosegal 55 %, je 82 % mogoče odličen rezultat.

Če lahko že s čisto banalnim pravilom dosežemo 81 %, potem naš fancy neural network mogoče ni naredil skoraj nič.

Zato je zelo koristno imeti:

baseline.

Neko preprosto začetno rešitev.

In šele potem vprašamo:

Ali naš model dejansko naredi kaj bolje?


Torej, kako vemo, ali je model dober?

Ne pogledamo samo ene številke.

Pogledamo:

Kako dela na podatkih, ki jih še ni videl?

Ali je razlika med training in test rezultatom velika?

Ali uporabljamo pravo metriko za naš problem?

Kako se primerja s preprostim baseline modelom?

In mogoče najbolj pomembno:

Ali je dovolj dober za resnični problem, ki ga želimo rešiti?

Ker model z 99 % accuracy ni nujno dober model.

Včasih je 80 % odličen rezultat.

Včasih je 99 % katastrofa.

Vse je odvisno od podatkov in problema.

In tukaj pridemo do naslednje zanimive stvari:

Kaj se zgodi, ko podatki sami po sebi niso dobri?

Manjkajoče vrednosti.

Napačne oznake.

Čudni podatki.

Bias.

In tisti lep stavek:

garbage in, garbage out.

Next post ☺️

#MachineLearning #AI #DataScience #ModelEvaluation #ZaFirbce

Imaš zahteven izziv?

Poiščimo pravo rešitev.

[email protected]