Ovatko ominaisuudet tärkeitä? Se ei tarkoita, että ne olisivat hyviä - KDnuggets

Ovatko ominaisuudet tärkeitä? Se ei tarkoita, että ne olisivat hyviä – KDnuggets

Lähdesolmu: 2893531

Ovatko ominaisuudet tärkeitä? Se ei tarkoita, että he olisivat hyviä
[Kuva tekijältä]

 

"Ominaisuuden tärkeys" -käsitettä käytetään laajalti koneoppimisessa perusmallin selitettävyyden tyyppinä. Sitä käytetään esimerkiksi RFE:ssä (Recursive Feature Elimination) mallin vähiten tärkeimmän ominaisuuden iteratiivisesti pudottamiseksi.

Siitä on kuitenkin olemassa väärä käsitys.

Se, että ominaisuus on tärkeä, ei tarkoita, että se olisi hyödyllinen mallille!

Todellakin, kun sanomme, että ominaisuus on tärkeä, tämä tarkoittaa yksinkertaisesti, että ominaisuus tuo suuren panoksen mallin tekemiin ennusteisiin. Mutta meidän pitäisi harkita sitä tällainen panos voi olla väärä.

Otetaan yksinkertainen esimerkki: datatieteilijä unohtaa vahingossa asiakastunnuksen mallinsa ominaisuuksien väliin. Malli käyttää asiakastunnusta erittäin ennakoivana ominaisuutena. Tämän seurauksena tällä ominaisuudella on suuri ominaisuuden merkitys, vaikka se todella huonontaa mallia, koska se ei voi toimia hyvin näkymättömällä tiedolla.

Jotta asiat olisivat selvempiä, meidän on tehtävä ero kahden käsitteen välillä:

  • Ennakointipanos: mikä osa ennusteista johtuu ominaisuudesta; tämä vastaa ominaisuuden tärkeyttä.
  • Error Contribution: mikä osa ennustevirheistä johtuu ominaisuuden läsnäolosta mallissa.

Tässä artikkelissa näemme, kuinka nämä suuret lasketaan ja miten niitä käytetään arvokkaiden oivallusten saamiseksi ennustemallista (ja sen parantamiseen).

Huomautus: tämä artikkeli keskittyy regressiotapaukseen. Jos olet enemmän kiinnostunut luokittelutapauksesta, voit lukea "Mitkä ominaisuudet ovat haitallisia luokitusmallillesi?"

Oletetaan, että rakennamme mallin ihmisten tulojen ennustamiseksi heidän työn, iän ja kansallisuuden perusteella. Nyt käytämme mallia ennusteiden tekemiseen kolmesta ihmisestä.

Näin ollen meillä on perustotuus, malliennuste ja tuloksena oleva virhe:

 

Ovatko ominaisuudet tärkeitä? Se ei tarkoita, että he olisivat hyviä
Perustotuus, malliennuste ja absoluuttinen virhe (tuhansissa dollareissa). [Kuva tekijältä]

 

Kun meillä on ennakoiva malli, voimme aina jakaa malliennusteet yksittäisten ominaisuuksien tuomiin panoksiin. Tämä voidaan tehdä SHAP-arvojen avulla (jos et tiedä kuinka SHAP-arvot toimivat, voit lukea artikkelini: SHAP-arvot selitettiin juuri niin kuin toivoit jonkun selittävän sinulle).

Oletetaan siis, että nämä ovat SHAP-arvoja suhteessa malliimme kolmelle yksilölle.

 

Ovatko ominaisuudet tärkeitä? Se ei tarkoita, että he olisivat hyviä
SHAP-arvot mallimme ennusteille (tuhansissa dollareissa). [Kuva tekijältä]

 

SHAP-arvojen tärkein ominaisuus on, että ne ovat additiivisia. Tämä tarkoittaa, että - ottamalla kunkin rivin summan - saamme mallimme ennusteen kyseiselle henkilölle. Esimerkiksi jos otamme toisen rivin: 72k $ +3k $ -22k $ = 53k $, mikä on täsmälleen mallin ennuste toiselle yksilölle.

Nyt SHAP-arvot ovat hyvä osoitus siitä, kuinka tärkeä ominaisuus on ennusteillemme. Todellakin, mitä korkeampi (absoluuttinen) SHAP-arvo on, sitä vaikutusvaltaisempi ominaisuus on kyseistä henkilöä koskevasta ennusteesta. Huomaa, että puhun absoluuttisista SHAP-arvoista, koska etumerkillä ei ole tässä väliä: ominaisuus on yhtä tärkeä, jos se työntää ennustetta ylös tai alas.

Näin ollen, piirteen ennusteosuus on yhtä suuri kuin kyseisen ominaisuuden absoluuttisten SHAP-arvojen keskiarvo. Jos SHAP-arvot on tallennettu Pandas-tietokehykseen, tämä on niin yksinkertaista kuin:

prediction_contribution = shap_values.abs().mean()

Esimerkissämme tulos on tämä:

 

Ovatko ominaisuudet tärkeitä? Se ei tarkoita, että he olisivat hyviä
Ennakointipanos. [Kuva tekijältä]

 

Kuten näette, työ on selvästi tärkein ominaisuus, koska sen osuus lopullisesta ennustuksesta on keskimäärin 71.67k $. Kansallisuus ja ikä ovat vastaavasti toiseksi ja kolmanneksi tärkeimmät tekijät.

Se, että tietty ominaisuus muodostaa olennaisen osan lopullisesta ennusteesta, ei kuitenkaan kerro mitään ominaisuuden toimivuudesta. Ottaaksemme huomioon myös tämän näkökohdan, meidän on laskettava "virheen vaikutus".

Oletetaan, että haluamme vastata seuraavaan kysymykseen: "Mitä ennusteita malli tekisi, jos siinä ei olisi ominaisuutta Työpaikka?” SHAP-arvot antavat meille mahdollisuuden vastata tähän kysymykseen. Itse asiassa, koska ne ovat additiivisia, riittää, että SHAP-arvot vähennetään ominaisuuden suhteen Työpaikka mallin tekemien ennusteiden perusteella.

Voimme tietysti toistaa tämän menettelyn jokaiselle ominaisuudelle. Pandasissa:

y_pred_wo_feature = shap_values.apply(lambda feature: y_pred - feature)

Tämä on tulos:

 

Ovatko ominaisuudet tärkeitä? Se ei tarkoita, että he olisivat hyviä
Ennusteet, jotka saisimme, jos poistaisimme vastaavan ominaisuuden. [Kuva tekijältä]

 

Tämä tarkoittaa, että jos meillä ei olisi tätä ominaisuutta Työpaikka, niin malli ennustaisi 20k $ ensimmäiselle henkilölle, -19k $ toiselle ja -8k $ kolmannelle. Sen sijaan, jos meillä ei olisi tätä ominaisuutta ikä, malli ennustaisi 73 50 $ ensimmäiselle henkilölle, XNUMX XNUMX $ toiselle ja niin edelleen.

Kuten näet, kunkin henkilön ennusteet vaihtelevat paljon, jos olemme poistaneet erilaisia ​​ominaisuuksia. Tämän seurauksena myös ennustevirheet olisivat hyvin erilaisia. Voimme laskea ne helposti:

abs_error_wo_feature = y_pred_wo_feature.apply(lambda feature: (y_true - feature).abs())

Tulos on seuraava:

 

Ovatko ominaisuudet tärkeitä? Se ei tarkoita, että he olisivat hyviä
Absoluuttiset virheet, jotka saisimme, jos poistaisimme vastaavan ominaisuuden. [Kuva tekijältä]

 

Nämä ovat virheet, jotka saisimme, jos poistaisimme vastaavan ominaisuuden. Intuitiivisesti, jos virhe on pieni, ominaisuuden poistaminen ei ole ongelma - tai se on jopa hyödyllistä - mallille. Jos virhe on suuri, ominaisuuden poistaminen ei ole hyvä idea.

Mutta voimme tehdä enemmän kuin tämä. Voimme todellakin laskea eron koko mallin virheiden ja virheiden välillä, jotka saisimme ilman ominaisuutta:

error_diff = abs_error_wo_feature.apply(lambda feature: abs_error - feature)

Joka on:

 

Ovatko ominaisuudet tärkeitä? Se ei tarkoita, että he olisivat hyviä
Ero mallin virheiden ja virheiden välillä, joita meillä olisi ilman ominaisuutta. [Kuva tekijältä]

 

Jos tämä numero on:

  • negatiivinen, ominaisuuden läsnäolo johtaa ennustevirheen vähenemiseen, joten ominaisuus toimii hyvin kyseisessä havainnoissa!
  • positiivinen, ominaisuuden läsnäolo johtaa ennustevirheen kasvuun, joten ominaisuus on huono tälle havainnolle.

Voimme laskea "Error Contribution" näiden arvojen keskiarvona kullekin ominaisuudelle. Pandasissa:

error_contribution = error_diff.mean()

Tämä on tulos:

 

Ovatko ominaisuudet tärkeitä? Se ei tarkoita, että he olisivat hyviä
Error Contribution. [Kuva tekijältä]

 

Jos tämä arvo on positiivinen, se tarkoittaa, että ominaisuuden esiintyminen mallissa johtaa keskimäärin suurempaan virheeseen. Näin ollen ilman tätä ominaisuutta ennuste olisi ollut yleensä parempi. Toisin sanoen ominaisuus tuottaa enemmän haittaa kuin hyötyä!

Päinvastoin, mitä negatiivisempi tämä arvo, sitä hyödyllisempi ominaisuus on ennusteille, koska sen esiintyminen johtaa pienempiin virheisiin.

Yritetään käyttää näitä käsitteitä todellisessa tietojoukossa.

Jatkossa käytän tietojoukkoa, joka on otettu kohteesta Pycaret (Python-kirjasto alla MIT-lisenssi). Tietojoukko on nimeltään "Gold" ja se sisältää aikasarjan taloustietoja.

 

Ovatko ominaisuudet tärkeitä? Se ei tarkoita, että he olisivat hyviä
Tietojoukon näyte. Ominaisuudet on ilmaistu prosentteina, joten -4.07 tarkoittaa -4.07 %:n tuottoa. [Kuva tekijältä]

 

Ominaisuudet koostuvat rahoitusvarojen tuotoista 22, 14, 7 ja 1 päivää ennen havaintohetkeä ("T-22", "T-14", "T-7", "T-1"). Tässä on kattava luettelo kaikista ennakoivina ominaisuuksina käytetyistä rahoitusvaroista:

 

Ovatko ominaisuudet tärkeitä? Se ei tarkoita, että he olisivat hyviä
Luettelo käytettävissä olevista varoista. Jokainen omaisuus havaitaan ajanhetkellä -22, -14, -7 ja -1. [Kuva tekijältä]

 

Yhteensä meillä on 120 ominaisuutta.

Tavoitteena on ennustaa kullan hinta (tuotto) 22 päivää etukäteen ("Gold_T+22"). Katsotaanpa kohdemuuttujaa.

 

Ovatko ominaisuudet tärkeitä? Se ei tarkoita, että he olisivat hyviä
Muuttujan histogrammi. [Kuva tekijältä]

 

Kun olen ladannut tietojoukon, suoritin seuraavat vaiheet:

  1. Jaa koko tietojoukko satunnaisesti: 33 % koulutustietojoukon riveistä, toiset 33 % validointitietojoukossa ja loput 33 % testitietojoukossa.
  2. Harjoittele LightGBM Regressor harjoitustietojoukossa.
  3. Tee ennusteita koulutus-, validointi- ja testitietojoukoista käyttämällä edellisessä vaiheessa koulutettua mallia.
  4. Laske koulutus-, validointi- ja testitietojoukkojen SHAP-arvot Python-kirjaston "shap" avulla.
  5. Laske kunkin ominaisuuden ennusteosuus ja virheosuus jokaisessa tietojoukossa (koulutus, validointi ja testi) käyttämällä edellisessä kappaleessa nähtyä koodia.

Verrataanpa harjoitustietojoukon Error Contribution ja Prediction Contribution. Käytämme sirontadiagrammia, joten pisteet tunnistavat mallin 120 ominaisuutta.

 

Ovatko ominaisuudet tärkeitä? Se ei tarkoita, että he olisivat hyviä
Ennusteen lisäys vs. virheen lisäys (koulutustietojoukossa). [Kuva tekijältä]

 

Ennusteosuuden ja virheosuuden välillä on erittäin negatiivinen korrelaatio koulutussarjassa.

Ja tässä on järkeä: koska malli oppii harjoitustietojoukosta, se antaa suuren merkityksen (eli korkean ennustusosuuden) niille ominaisuuksille, jotka johtavat ennustevirheen huomattavaan vähenemiseen (eli erittäin negatiiviseen virhevaikutukseen)..

Mutta tämä ei lisää paljon tietoomme, eikö niin?

Meille todellakin tärkeää on validointitietojoukko. Validointitietojoukko on itse asiassa paras välityspalvelin, joka meillä voi olla sen suhteen, kuinka ominaisuudet käyttäytyvät uusissa tiedoissa. Tehdään siis sama vertailu validointijoukolle.

 

Ovatko ominaisuudet tärkeitä? Se ei tarkoita, että he olisivat hyviä
Ennusteen lisäys vs. virheiden lisäys (validointitietojoukossa). [Kuva tekijältä]

 

Tästä juonesta voimme poimia paljon mielenkiintoisempaa tietoa.

Kaavion oikeassa alakulmassa olevat piirteet ovat sellaisia, joille mallimme antaa oikein suuren merkityksen, koska ne itse asiassa vähentävät ennustevirhettä.

Huomaa myös, että "Gold_T-22" (kullan palautus 22 päivää ennen havaintojaksoa) toimii todella hyvin verrattuna mallin sille antamaan merkitykseen. Se tarkoittaa, että tämä ominaisuus on mahdollisesti riittämätön. Ja tämä tieto on erityisen mielenkiintoinen, koska kulta on omaisuus, jota yritämme ennustaa ("Gold_T+22").

Toisaalta, ominaisuudet, joiden virheosuus on yli 0, heikentävät ennusteitamme. Esimerkiksi "US Bond ETF_T-1" muuttaa mallin ennustetta keskimäärin 0.092 % (ennusteosuus), mutta se saa mallin tekemään ennusteen keskimäärin 0.013 % (virhevaikutus) huonommin kuin se olisi ollut ilman tätä ominaisuutta. .

Voimme olettaa, että kaikki ominaisuudet, joilla on suuri virheosuus (verrattuna niiden ennustusosuuteen), ovat todennäköisesti ylisopivia tai yleensä heillä on erilainen käyttäytyminen koulutussarjassa ja validointijoukossa.

Katsotaanpa, millä ominaisuuksilla on suurin virhevaikutus.

 

Ovatko ominaisuudet tärkeitä? Se ei tarkoita, että he olisivat hyviä
Ominaisuudet lajiteltu vähentämällä virheiden määrää. [Kuva tekijältä]

 

Ja nyt ominaisuudet, joilla on pienin virheosuus:

 

Ovatko ominaisuudet tärkeitä? Se ei tarkoita, että he olisivat hyviä
Ominaisuudet lajiteltu kasvavan Error Contribution mukaan. [Kuva tekijältä]

 

Mielenkiintoista on, että voimme havaita, että kaikki ominaisuudet, joilla on suurempi virheosuus, ovat suhteessa T-1:een (1 päivä ennen havaintohetkeä), kun taas melkein kaikki ominaisuudet, joilla on pienempi virheosuus, ovat suhteessa T-22:een (22 päivää ennen havaintohetkeä ).

Tämä näyttää viittaavan siihen uusimmat ominaisuudet ovat alttiita ylisovituksille, kun taas ajassa kauempana olevat ominaisuudet yleistyvät paremmin.

Huomaa, että ilman Error Contributionia emme olisi koskaan saaneet tätä tietoa.

Perinteiset RFE (Recursive Feature Elimination) -menetelmät perustuvat merkityksettömien ominaisuuksien poistamiseen. Tämä vastaa ominaisuuksien poistamista ensin pienellä ennustusosuudella.

Kuitenkin sen perusteella, mitä sanoimme edellisessä kappaleessa, olisi järkevämpää poistaa ensin ominaisuudet, joilla on suurin virhevaikutus.

Tarkistaaksemme, onko intuitiomme todennettu, verrataan kahta lähestymistapaa:

  • Perinteinen RFE: poista ensin turhat ominaisuudet (pienin ennusteosuus).
  • RFE:mme: haitallisten ominaisuuksien poistaminen ensimmäinen (korkein virheosuus).

Katsotaanpa vahvistusjoukon tuloksia:

 

Ovatko ominaisuudet tärkeitä? Se ei tarkoita, että he olisivat hyviä
Validointijoukon kahden strategian keskimääräinen absoluuttinen virhe. [Kuva tekijältä]

 

Jokaisen menetelmän paras iteraatio on ympyröity: se on malli, jossa on 19 ominaisuutta perinteiselle RFE:lle (sininen viiva) ja malli, jossa on 17 ominaisuutta RFE:lle (oranssi viiva).

Yleisesti ottaen menetelmämme näyttää toimivan hyvin: suurimman virheosuuden omaavan ominaisuuden poistaminen johtaa johdonmukaisesti pienempään MAE-arvoon verrattuna ominaisuuden poistamiseen, jolla on korkein ennusteosuus.

Saatat kuitenkin ajatella, että tämä toimii hyvin vain siksi, että sovitamme vahvistusjoukon liikaa. Loppujen lopuksi olemme kiinnostuneita tuloksesta, jonka saamme testisarjalla.

Katsotaanpa siis samaa vertailua testisarjassa.

 

Ovatko ominaisuudet tärkeitä? Se ei tarkoita, että he olisivat hyviä
Kahden testijoukon strategian keskimääräinen absoluuttinen virhe. [Kuva tekijältä]

 

Tulos on samanlainen kuin edellinen. Vaikka näiden kahden rivin välinen etäisyys olisi pienempi, MAE, joka saadaan poistamalla suurin virheentekijä, on selvästi parempi kuin MAE, joka saadaan poistamalla pienin ennusteen tekijä.

Koska valitsimme mallit, jotka johtavat validointijoukon pienimpään MAE:hen, katsotaanpa niiden tuloksia testijoukossa:

  • RFE-ennustusosuus (19 ominaisuutta). MAE testisarjassa: 2.04.
  • RFE-Error Contribution (17 ominaisuutta). MAE testisarjassa: 1.94.

Paras menetelmäämme käyttävä MAE on siis 5 % parempi verrattuna perinteiseen RFE:hen!

Ominaisuuden tärkeyden käsitteellä on keskeinen rooli koneoppimisessa. Kuitenkin käsite "tärkeys" erehtyy usein "hyvyyteen".

Tehdäksemme eron näiden kahden näkökohdan välillä olemme ottaneet käyttöön kaksi käsitettä: Ennakointipanos ja Virhepanos. Molemmat käsitteet perustuvat validointitietojoukon SHAP-arvoihin, ja artikkelissa olemme nähneet Python-koodin niiden laskemiseen.

Olemme myös kokeilleet niitä todellisessa taloustietojoukossa (jossa tehtävänä on ennustaa kullan hintaa) ja osoittaneet, että Rekursiivisen ominaisuuksien eliminointi virheiden vaikutuksesta johtaa 5 % parempaan keskimääräiseen absoluuttiseen virheeseen verrattuna perinteiseen ennusteosuuteen perustuvaan RFE:hen.

Kaikki tässä artikkelissa käytetty koodi löytyy osoitteesta tämä muistikirja.

Kiitos, että luit!

 
 
Samuele Mazzanti on johtava tietotutkija Jakalassa ja asuu tällä hetkellä Roomassa. Hän valmistui tilastotieteestä ja hänen pääasiallinen tutkimuskohde liittyy teollisuuden koneoppimissovelluksiin. Hän on myös freelance-sisällöntuottaja.

 
Alkuperäinen. Postitettu luvalla.
 

Aikaleima:

Lisää aiheesta KDnuggets