Praktikumi abiline

See leht ei lahenda praktikumi ära. Ta aitab sul vaadata õigesse kohta, selgitab, mida mõõdikud tähendavad, ja annab vihjeid kolmes astmes — võta järgmine alles siis, kui eelmisest ei piisanud.

1Kuidas töötada

Praktikumi mõte ei ole leida „õiget” eeltöötlust, vaid harjutada otsustamist olukorras, kus õiget vastust ei ole ette antud. Iga valik on hüpotees, mille sa mõõdad ära.

SammMida teedKuidas tead, et valmis
ÜlevaatusVaatad iga veeru läbi ja paned kirja, mis on katkiSul on tabel: veerg → probleem → plaan
Variant AMinimaalne töötlus, et mudel üldse käima läheksSul on number, mida ületada
Variant B, C …Üks muudatus korraga, iga muudatuse ette hüpoteesTead, mis tulemust muutis ja mis mitte
VõrdlusVõrdlustabel, graafikud, vastused küsimusteleOskad põhjendada, miks valisid just selle
Kaks reeglit, mida ei muudeta. Variante võrdled cv_auc järgi, mitte test_auc järgi — testandmeid vaatad alles päris lõpus. Ja kui samm arvutab midagi andmete põhjal (mediaan, sagedaseim, kategooriate loend, skaleerija piirid), kuulub see Pipeline'i, mitte enne jagamist tehtud töötlusse.

Kui hinda() kirjutab „Eeltöötlus tehti enne jagamist”, ei ole see viga, vaid meeldetuletus: kontrolli, kas mõni su samm õppis andmetest.

2Ülevaatuse kontroll-leht

Kümme küsimust, mida andmestiku kohta küsida. Ava küsimus, kui ei tea, kust alustada. Vihjed avanevad ükshaaval — kolmas vihje ütleb, mida otsida, aga mitte, mida teha.

3Kui tunnuse kuju on vale

Enamik eeltöötlust parandab vigu. Aga mõnikord ei ole tunnus katki — ta on lihtsalt vales kujus. Kõige sagedasem juhtum: arv, mille suurus ei tähenda midagi. Kliendi number, artiklinumber, sihtnumber, osakonna kood. Pandas loeb need int64-ks ja mudel kohtleb neid mõõdetud suurustena.

Puumudel saab arvulise tunnusega teha ainult ühte asja: lõigata selle lävendi järgi kaheks (kood < 4718). Kui koodi number anti registreerimise järjekorras, ei tähenda selline lõige midagi. Mudel kas jätab tunnuse kasutamata või jätab üksikud koodid meelde — ja siis sobitub üle.

28 koodi, iga punkt on üks kood, kõrgus = ostumäär

Kuidas aru saada, kas arv on tegelikult silt

Rühmitamise (binnimise) võimalused

ViisMillal see mõttesse tuleb
merge või map abitabeligaKui kood vastab millelegi sisukale ja see vastavus on kuskil kirjas
Vahemike tabel (pd.IntervalIndex)Kui tähendus on seotud väärtuse vahemikuga, mitte üksiku väärtusega
pd.cut etteantud piiridegaKui piirid tulevad valdkonnateadmisest (vanuserühmad, hinnaklassid)
pd.qcut, KBinsDiscretizerKui tahad ühtlase suurusega rühmi ja piiridel pole sisulist tähendust
Harvade tasemete liitmine "muu"-ksKui kategooriaid on palju ja osa neist esineb paar korda
Mõtle kaasa, mitte mehaaniliselt. Need neli rida on tööriistad, mitte retsept. Pidev mõõdetud suurus (vanus, sissetulek) on puumudeli jaoks juba heas kujus — puu leiab lõikepunktid ise ja täpsemalt, kui sinu käsitsi valitud piirid. Kui binnid sellise tunnuse, võid infot kaotada. Mõõda ära, kas kaotad.

4Leke: kas see info on ennustamise hetkel olemas?

Andmeleke ei ole viga andmetes, vaid viga ajas. Tunnus, mis tekib pärast sündmust, mida ennustame, teeb mudeli treenides suurepäraseks ja päriselus kasutuks. Harjuta küsimust igal real: kas see väärtus on teada hetkel, mil ennustus tehakse?

Kuidas lekke ära tunneb. Ebatavaliselt kõrge tulemus (AUC üle 0,95 päris äriandmetel on peaaegu alati leke), üks tunnus, mille tähtsus on kõigist teistest kordades suurem, või tunnus, mille väärtus on kõigil ühe klassi liikmetel täpselt sama. Kui tulemus tundub liiga hea, on see tavaliselt liiga hea.

5Torustik: mis läheb enne jagamist, mis pärast

Küsi iga sammu kohta: kas tulemus sõltub sellest, millised teised read andmestikus on?

Ei sõltu → reegel → tohib olla enne jagamistSõltub → õpib → kuulub torustikku
tüübi teisendus · peidetud puuduvate märkimine · kirjapildi ühtlustamine · duplikaatide eemaldamine · võimatute väärtuste piiramine valdkonnateadmise järgi · kuupäevade teisendus · abitabeliga liitmine · tunnuse eemaldamine puuduvate täitmine keskmise, mediaani või sagedaseimaga · skaleerimine · one-hot kategooriate loend · kvantiilidel põhinev binnimine · erindite piirid andmetest · sihtkodeerimine · tunnuste valik

Praktikumi hinda() võtab vastu valmis torustiku ja fitib selle ainult treeningosal — ka iga ristvalideerimise foldi sees eraldi. Skelett, mille sisu on sinu otsustada:

from sklearn.compose import ColumnTransformer from sklearn.pipeline import Pipeline from sklearn.impute import SimpleImputer from sklearn.preprocessing import OneHotEncoder, OrdinalEncoder torustik = ColumnTransformer([ ("arv", ..., arvulised_veerud), # täita? jätta NaN? skaleerida? ("nom", Pipeline([ ("taida", ...), # mis strateegia? ("kodeeri", OneHotEncoder(handle_unknown="ignore")), ]), nominaalsed_veerud), ("jrk", ..., jarjestatud_veerud), # kas järjestus on oluline? ], verbose_feature_names_out=False) hinda(X, y, "variant B", eeltootlus=torustik)

handle_unknown="ignore" on seal põhjusega: foldis võib ette tulla kategooria, mida treeningosas polnud. Mõtle, mis juhtuks ilma selleta.

6Mõõdikute lugemine

VeergMida ütlebMida sellega teha
cv_aucROC AUC treeningosa 5-kordsest ristvalideerimisestSelle järgi võrdled variante. Ainus number, mille põhjal otsustad.
cv_stdFoldide hajuvusKui kahe variandi vahe on väiksem kui cv_std, ei ole vahet tõestatud.
train_auc − test_aucÜlesobitusSuur vahe ei ole iseenesest viga, kui test ei kannata. Random forestil on see loomulikult suur.
accuracyÕigete ennustuste osakaalTasakaalust väljas klasside korral eksitav. Vaata, mida annaks „alati 0”.
recallKui suur osa tegelikest ostjatest leitiOluline, kui vahelejäänud positiivne on kallis.
f1Täpsuse ja saagise tasakaalSõltub lävendist 0,5 — AUC ei sõltu.

Lävend muudab kõike peale AUC

Mudel annab tõenäosuse, mitte otsust. predict() kasutab vaikimisi lävendit 0,5, aga see ei ole püha number. Liiguta lävendit ja vaata, mis juhtub.

ROC AUC on kõigi lävendite kokkuvõte: tõenäosus, et juhuslik ostja saab kõrgema skoori kui juhuslik mitteostja. Seepärast ei muutu ta lävendist ja seepärast on ta variantide võrdlemiseks mugav.

7Kolm mudelit

Kõik kolm ehitavad otsustuspuid, aga erinevalt. See seletab, miks nad sinu eeltöötlusele erinevalt reageerivad.

Mida kõik kolm jagavad

Peamised parameetrid

ParameeterMida reguleerib
max_depthKui keerulisi reegleid üks puu tohib õppida
min_samples_leafKui väike võib leht olla — kaitse üksikute ridade meeldejätmise eest
n_estimatorsPuude arv. Metsas rohkem ei kahjusta, boostingus võib üle treenida
learning_rateBoostingus: kui suure sammu iga järgmine puu teeb
class_weight, scale_pos_weightKui haruldasem klass on tähtsam kui tema osakaal
Praktikumis on mudelite parameetrid fikseeritud meelega: kui iga variant kasutaks eri seadistust, ei teaks sa, kas tulemust muutis eeltöötlus või parameeter. Parameetrite häälestamine on omaette töö, mis käib samamoodi — üks muutus korraga, otsus ristvalideerimise järgi.

8Pandase spikker

Lühike meeldetuletus meetoditest, mis selles praktikumis ette tulevad. Kolm asja, mis segadust tekitavad:

Siin on ainult see, mida meetod teeb. Mis veeruga ja millise argumendiga seda rakendada, on sinu otsustada.

9Kui jääd kinni

Vali olukord, mis sulle kõige lähemal on.

10Enne esitamist

Kiire kontroll. Märgi ära, mis on tehtud.