HyppÀÀ sisÀltöön

📝 TehtĂ€vĂ€t

TehtÀvÀ: Automaattivaihteet (Pt. 1)

Kouluta Decision Tree ja/tai Random Forest -luokittelumalli. TehtÀvÀnÀsi on luoda koneoppimismalli, joka pyrkii ennustamaan muiden kenttien avulla, onko kyseessÀ automaattiauto. Datan voit ladata alkuperÀisestÀ lÀhteestÀÀn, Kaggle: Car Features and MSRP tai repositoriosta, jossa sitÀ jakavat edelleen sitÀ kÀyttÀneet. NÀistÀ yksi on: Github: Car-Prices-Prediction

Huomaa, ettÀ datasettiÀ on lÀhtökohtaisesti kÀytetty MSRP:n (Manufacturer's Suggested Retail Price) ennustamiseen, mutta tÀssÀ tehtÀvÀssÀ keskitymme vain automaattiauton tunnistamiseen. KÀytÀmme siis eri ennustettavaa muuttujaa kuin useimmissa Kaggle-koodeissa, joita tulet löytÀmÀÀn datasettiin liittyen. TÀmÀ ei poista sitÀ, ettÀ saatat saada hyviÀ ideoita datan kÀsittelyyn muista repositorioista.

KÀÀnnÀ arvot esimerkiksi seuraavalla tavalla kahdeksi luokaksi:

AlkuperÀinen arvo (str) Uusi arvo (bool) N samplea
AUTOMATIC 1 8266
MANUAL 0 2935
AUTOMATED_MANUAL 0/1 626
DIRECT_DRIVE (drop) 68
UNKNOWN (drop) 56

Pudota siis rivit, joissa Transmission Type on DIRECT_DRIVE tai UNKNOWN. Sen sijaan arvon AUTOMATED_MANUAL voit kÀÀntÀÀ joko 0:ksi tai 1:ksi. Kokeile, kumman kanssa saat paremman tuloksen. Arvo 1 viittaa siis True arvoon, eli automaattiautoon.

Jos kÀytÀt jotakin muuta jakoa, kuten luokittelet UNKNOWN tai DIRECT_DRIVE vaihteistot manuaaliseksi, dokumentoi se oppimispÀivÀkirjassasi ja perustele valintasi.

Tip

Dataa on kÀytetty useissa eri projekteissa, koska se löytyy KagglestÀ. MikÀli et tiedÀ, mistÀ aloittaa eksploratiivinen data-analyysi ja featureiden muokkaus tai valinta, voit etsiÀ apua Kagglesta. Valtaosa esimerkeistÀ ennustaa hintaa, mutta tÀstÀ huolimatta datan kÀsittely on muiden muuttujien osalta samanlaista. Jos et halua ladata dataa Kagglesta, voit ladata sen myös esimerkiksi Github: Car-Prices-Prediction -repositoriosta, mistÀ löytyy myös esimerkkiÀ datan kÀsittelystÀ.

VinkkejÀ

Kirjastot

Aivan kuten aiemmassa tehtÀvÀssÀ, myös tÀssÀ tulet tarvisemaan scikit-learn-kirjastoa. TÀmÀ pÀtee kaikkiin kurssin tehtÀviin. Kenties seuraavista löytyy apuja?

from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn import metrics
from sklearn.metrics import classification_report

One Hot Encoding

KentÀt Make ja Model ovat kategorisia muuttujia, joilla on todella suuri mÀÀrÀ uniikkeja arvoja. TÀmÀ pÀtee myös muihin kenttiin, mutta nÀmÀ kentÀt ovat erityisen ongelmallisia, joten keskitytÀÀn niihin tÀssÀ vinkissÀ.

Tip

Kuinka paljon? SelvitÀ! Tee eksploratiivinen data-analyysi datasetille.

KentÀt eivÀt ole numeerisia vaan kategorisia. Ne on muunnettava numeeriseen muotoon. Toisin kuin vaikkapa "Transmission Type", jossa on vain muutama uniikki arvo, nÀiden kenttien arvot omaavat suuren granulariteetin eli uniikkien arvojen mÀÀrÀn. TÀmÀ tuskin on mallillle hyvÀksi: mallin tulee oppia generalisoimaan ongelma, joten on ongemallista, jos datasetissÀ on vaikkapa vain kolme Bugatti Veyronia.

Kenties sinun siis kannattaa kÀsitellÀ data siten, ettÀ kÀytÀt one hot encoding -menetelmÀÀ, joka muuttaa kategoriset muuttujat numeeriseen muotoon siten, ettÀ jokainen uniikki arvo saa oman sarakkeensa, mutta pidÀt vain n yleisintÀ. TÀmÀn voi tehdÀ monella tavalla, mutta yksi tapa on OneHotEncoder(..., min_frequency=10), jolloin kaikki ne arvot, jotka esiintyvÀt alle 10 kertaa, muutetaan luokan infrequent edustajaksi.

TÀhÀn soveltuu esimerkiksi seuraava luokka:

from sklearn.preprocessing import OneHotEncoder

Tip

LisĂ€haasteena sarakkeilla on keskinĂ€inen, toiminnallinen riippuvuus (Make → Model). TĂ€mĂ€ one-to-many suhde, jossa Make on Modelin ylĂ€luokka, voi vaikuttaa siihen, kuinka One Hot Encoding kannattaa toteuttaa.

Keksitkö tavan yhdistÀÀ nÀiden tiedot? Jos keksit, muistathan vertailla mallin suorituskykyÀ ennen ja jÀlkeen tÀmÀn yhdistÀmisen. Onko mallin tarkkuus parempi vai huonompi? Vai pitÀisikö jompi kumpi kenttÀ pudottaa kokonaan?

Tulkittavuus

Puumallien yksi etu, varsinkin neuroverkkoihin nÀhden, on niiden tulkittavuus (engl. interpretability, explainability). Tutustu seuraaviin tapoihin tulkita eri kenttien vaikutusta mallin ennusteeseen:

  • feature_importances_-attribuutti, joka kertoo, kuinka paljon kukin piirre vaikuttaa mallin ennusteeseen.
  • plot_tree-funktio, joka piirtÀÀ puun rakenteen ja nĂ€yttÀÀ, miten eri kentĂ€t vaikuttavat ennusteeseen.

Voit kokeilla myös haastaa itseÀsi edistyneemmillÀ tavoilla, kuten SHAP ja sen violin summary plot, mutta ÀlÀ keskity niihin liikaa. Muista, ettÀ oppimispÀivÀkirjan merkinnÀn aihe ovat puumallit.