Toate moduleleS11 · Evaluare și validare▾
Aici se câștigă sau se pierde concursul. Un model care pare bun pe clasamentul public poate fi slab pe cel ascuns, care contează la final. Modulul ăsta e despre cum să ai încredere justificată în scorul tău. E cea mai puțin spectaculoasă parte și cea care face diferența dintre un top 10 și un mijloc de clasament.
De ce acuratețea te minte
Acuratețea e procentul de predicții corecte. Sună rezonabil, dar pe clase dezechilibrate e înșelătoare. Dacă 98% din exemple sunt clasa nu, un model care spune mereu nu are 98% acuratețe și zero valoare. De asta ai nevoie de metrici care se uită la fiecare clasă separat.
Matricea de confuzie: temelia
Matricea de confuzie numără cele patru feluri de rezultat pentru o clasificare binară. E baza din care se calculează toate celelalte metrici, deci merită înțeleasă bine.
- TP (adevărat pozitiv): era pozitiv, ai zis pozitiv. Corect.
- TN (adevărat negativ): era negativ, ai zis negativ. Corect.
- FP (fals pozitiv): era negativ, ai zis pozitiv. Alarmă falsă.
- FN (fals negativ): era pozitiv, ai zis negativ. L-ai ratat.
Ce te doare mai tare depinde de problemă. La un test de boală, un fals negativ (bolnav trimis acasă) e mai grav decât un fals pozitiv. La un filtru de spam, invers. Metrica bună reflectă ce cost real are fiecare tip de greșeală.
Precizie, recall, F1
Precizia și recall-ul trag în direcții opuse. Dacă spui pozitiv doar când ești foarte sigur, precizia crește dar recall-ul scade. Dacă spui pozitiv des, invers. F1 le împacă într-un singur număr, media lor armonică, care e mică dacă oricare din ele e mică.
Validare fără scurgeri
O scurgere de informație (data leakage) e când, fără să vrei, informație din test ajunge în antrenare. Rezultatul: scor local grozav care se prăbușește pe clasamentul real. E cel mai perfid mod de a pierde puncte, pentru că totul pare în regulă.
Aperi-te împărțind datele corect. Ține un set de validare pe care modelul nu-l vede la antrenare și pe care îl folosești ca să estimezi scorul real. Mai bine, folosește k-fold: împarți datele în k părți, antrenezi pe k-1 și testezi pe una, rotind, apoi mediezi. Așa folosești toate datele și ai o estimare mai stabilă.
Când clasele sunt dezechilibrate, folosește k-fold stratificat, care păstrează proporția claselor în fiecare fold. Altfel un fold poate să nu conțină deloc clasa rară. Când datele au timp sau grupuri (același pacient în mai multe rânduri), split-ul trebuie să le respecte, altfel modelul trage cu ochiul.
from sklearn.model_selection import StratifiedKFold, cross_val_score
cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=0)
scoruri = cross_val_score(model, X, y, cv=cv, scoring="f1_macro")
print(scoruri.mean(), scoruri.std())Bias, varianță și curba de învățare
Două boli opuse. Bias mare (underfitting): modelul e prea simplu, merge slab și pe antrenare, și pe validare. Varianță mare (overfitting): modelul e prea complex, merge grozav pe antrenare dar slab pe validare, pentru că a memorat.
Curba de învățare le diagnostichează: desenezi scorul de antrenare și cel de validare pe măsură ce crești datele. Dacă amândouă sunt joase și apropiate, ai bias, îți trebuie model mai puternic. Dacă e o prăpastie mare între ele, ai varianță, îți trebuie mai multe date sau regularizare.
Cele două submisii finale
- Acuratețea minte pe clase dezechilibrate; folosește precizie, recall, F1.
- Matricea de confuzie (TP, TN, FP, FN) e baza tuturor metricilor.
- Precizia și recall-ul se bat cap în cap; F1 le împacă.
- K-fold stratificat estimează scorul stabil, fără scurgeri.
- Curba de învățare distinge bias (underfitting) de varianță (overfitting).
- Alege cele două submisii finale: una pe local, una pe public.