Kas teie funktsioonid on olulised? See ei tähenda, et nad on head – KDnuggets

Kas teie funktsioonid on olulised? See ei tähenda, et nad on head – KDnuggets

Allikasõlm: 2893531

Kas teie funktsioonid on olulised? See ei tähenda, et nad on head
[Pilt autorilt]

 

Funktsiooni tähtsuse mõistet kasutatakse masinõppes laialdaselt kui mudeli seletatavuse kõige elementaarsemat tüüpi. Näiteks kasutatakse seda funktsioonis Recursive Feature Elimination (RFE), et iteratiivselt kaotada mudeli kõige vähem oluline omadus.

Siiski on selle kohta eksiarvamus.

See, et funktsioon on oluline, ei tähenda, et see on mudelile kasulik!

Tõepoolest, kui me ütleme, et funktsioon on oluline, tähendab see lihtsalt seda, et funktsioon annab suure panuse mudeli tehtud ennustustesse. Kuid me peaksime sellega arvestama selline panus võib olla vale.

Võtke lihtne näide: andmeteadlane unustab kogemata oma mudeli funktsioonide vahele kliendi ID. Mudel kasutab kliendi ID-d väga ennustava funktsioonina. Selle tulemusena on sellel funktsioonil suur funktsioonide tähtsus isegi siis, kui see tegelikult mudelit halvendab, kuna see ei saa hästi töötada nähtamatutel andmetel.

Asjade selgemaks muutmiseks peame tegema vahet kahel mõistel:

  • Prognooside panus: milline osa ennustustest tuleneb funktsioonist; see on samaväärne funktsiooni tähtsusega.
  • Viga kaastöö: milline osa ennustusvigadest on tingitud funktsiooni olemasolust mudelis.

Selles artiklis näeme, kuidas neid koguseid arvutada ja kuidas neid kasutada prognoositava mudeli kohta väärtusliku ülevaate saamiseks (ja selle täiustamiseks).

Märkus: see artikkel keskendub regressioonijuhtumile. Keda klassifikatsioonijuhtum rohkem huvitab, võib lugeda "Millised funktsioonid on teie klassifitseerimismudeli jaoks kahjulikud?"

Oletame, et ehitasime mudeli inimeste sissetulekute prognoosimiseks nende töö, vanuse ja rahvuse alusel. Nüüd kasutame mudelit kolme inimese ennustuste tegemiseks.

Seega on meil põhitõde, mudeli ennustus ja sellest tulenev viga:

 

Kas teie funktsioonid on olulised? See ei tähenda, et nad on head
Põhitõde, mudeli ennustus ja absoluutne viga (tuhandetes dollarites). [Pilt autorilt]

 

Kui meil on ennustusmudel, saame alati mudeli ennustused jaotada üksikute funktsioonide panusteks. Seda saab teha SHAP väärtuste kaudu (kui te ei tea, kuidas SHAP väärtused töötavad, võite lugeda minu artiklit: SHAP-i väärtused täpselt nii, nagu sa soovisid, et keegi sulle selgitaks).

Ütleme nii, et need on SHAP-i väärtused võrreldes meie kolme isiku mudeliga.

 

Kas teie funktsioonid on olulised? See ei tähenda, et nad on head
SHAP väärtused meie mudeli prognooside jaoks (tuhandetes dollarites). [Pilt autorilt]

 

SHAP väärtuste peamine omadus on nende liitmine. See tähendab, et – võttes iga rea ​​summa – saame oma mudeli ennustuse selle isiku kohta. Näiteks kui võtame teise rea: 72k $ +3k $ -22k $ = 53k $, mis on täpselt mudeli ennustus teise isiku kohta.

Nüüd näitavad SHAP-i väärtused hästi, kui oluline on funktsioon meie prognooside jaoks. Tõepoolest, mida kõrgem on (absoluutne) SHAP väärtus, seda mõjusam on omadus selle konkreetse isiku kohta ennustamisel. Pange tähele, et ma räägin absoluutsetest SHAP väärtustest, kuna siin olev märk ei oma tähtsust: funktsioon on sama oluline, kui see surub ennustust üles või alla.

Seetõttu tunnuse ennustuspanus on võrdne selle tunnuse absoluutsete SHAP väärtuste keskmisega. Kui teil on Pandase andmeraami salvestatud SHAP-väärtused, on see nii lihtne:

prediction_contribution = shap_values.abs().mean()

Meie näites on tulemus järgmine:

 

Kas teie funktsioonid on olulised? See ei tähenda, et nad on head
Prognooside panus. [Pilt autorilt]

 

Nagu näete, on töö selgelt kõige olulisem omadus, kuna keskmiselt moodustab see lõplikust ennustusest 71.67 XNUMX dollarit. Rahvus ja vanus on vastavalt teisel ja kolmandal kohal.

Kuid asjaolu, et antud funktsioon moodustab lõpliku ennustuse asjakohase osa, ei ütle funktsiooni toimivuse kohta midagi. Ka selle aspekti arvessevõtmiseks peame arvutama vea panuse.

Oletame, et tahame vastata järgmisele küsimusele: „Milliseid ennustusi teeks mudel, kui tal poleks seda funktsiooni töö?” SHAP väärtused võimaldavad meil sellele küsimusele vastata. Tegelikult, kuna need on aditiivsed, piisab SHAP-i väärtuste lahutamisest funktsiooni suhtes töö mudeli tehtud ennustustest.

Muidugi võime seda protseduuri iga funktsiooni puhul korrata. Pandas:

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

See on tulemus:

 

Kas teie funktsioonid on olulised? See ei tähenda, et nad on head
Ennustused, mille saaksime vastava funktsiooni eemaldamisel. [Pilt autorilt]

 

See tähendab, et kui meil seda funktsiooni poleks töö, siis ennustaks mudel esimesele isikule 20 19 $, teisele -8 XNUMX $ ja kolmandale -XNUMX XNUMX $. Selle asemel, kui meil seda funktsiooni poleks vanus, ennustaks mudel esimesele isikule 73 50 $, teise jaoks XNUMX XNUMX $ ja nii edasi.

Nagu näete, on ennustused iga inimese jaoks väga erinevad, kui eemaldame erinevad funktsioonid. Selle tulemusena oleksid ka ennustusvead väga erinevad. Saame need hõlpsalt arvutada:

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

Tulemus on järgmine:

 

Kas teie funktsioonid on olulised? See ei tähenda, et nad on head
Absoluutsed vead, mille saaksime vastava funktsiooni eemaldamisel. [Pilt autorilt]

 

Need on vead, mida saaksime vastava funktsiooni eemaldamisel. Intuitiivselt, kui viga on väike, ei ole funktsiooni eemaldamine mudeli jaoks probleem või isegi kasulik. Kui viga on suur, pole funktsiooni eemaldamine hea mõte.

Kuid me saame teha rohkem kui see. Tõepoolest, saame arvutada erinevuse täismudeli vigade ja ilma funktsioonita saadavate vigade vahel:

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

Mis on:

 

Kas teie funktsioonid on olulised? See ei tähenda, et nad on head
Erinevus mudeli vigade ja vigade vahel, mis meil oleks ilma selle funktsioonita. [Pilt autorilt]

 

Kui see number on:

  • negatiivne, siis funktsiooni olemasolu vähendab ennustusviga, seega toimib funktsioon selle vaatluse jaoks hästi!
  • positiivne, siis põhjustab tunnuse olemasolu ennustusvea suurenemist, seega on omadus selle vaatluse jaoks halb.

Saame iga funktsiooni jaoks arvutada nende väärtuste keskmisena "vea panuse".. Pandas:

error_contribution = error_diff.mean()

See on tulemus:

 

Kas teie funktsioonid on olulised? See ei tähenda, et nad on head
Viga kaastöö. [Pilt autorilt]

 

Kui see väärtus on positiivne, tähendab see, et keskmiselt toob funktsiooni olemasolu mudelis kaasa suurema vea. Seega oleks ilma selle funktsioonita ennustus üldiselt parem olnud. Teisisõnu, see funktsioon teeb rohkem kahju kui kasu!

Vastupidi, mida negatiivsem on see väärtus, seda kasulikum on funktsioon ennustuste jaoks, kuna selle olemasolu põhjustab väiksemaid vigu.

Proovime neid mõisteid kasutada reaalses andmekogumis.

Edaspidi kasutan andmestikku, mis on võetud Pycaret (Pythoni raamatukogu all MIT litsents). Andmestikku nimetatakse kuldseks ja see sisaldab finantsandmete aegridu.

 

Kas teie funktsioonid on olulised? See ei tähenda, et nad on head
Andmestiku näidis. Funktsioonid on kõik väljendatud protsentides, seega -4.07 tähendab tootlust -4.07%. [Pilt autorilt]

 

Tunnused koosnevad finantsvarade tootlustest vastavalt 22, 14, 7 ja 1 päeva enne vaatlushetke (“T-22”, “T-14”, “T-7”, “T-1”). Siin on kõigi prognoositavate funktsioonidena kasutatavate finantsvarade ammendav loetelu:

 

Kas teie funktsioonid on olulised? See ei tähenda, et nad on head
Saadaolevate varade loend. Iga vara vaadeldakse ajahetkel -22, -14, -7 ja -1. [Pilt autorilt]

 

Kokku on meil 120 funktsiooni.

Eesmärk on ennustada kulla hinda (tagasi) 22 päeva ette (“Gold_T+22”). Vaatame sihtmuutujat.

 

Kas teie funktsioonid on olulised? See ei tähenda, et nad on head
Muutuja histogramm. [Pilt autorilt]

 

Pärast andmestiku laadimist tegin järgmised sammud:

  1. Jagage kogu andmestik juhuslikult: 33% koolitusandmestiku ridadest, veel 33% valideerimisandmestiku ja ülejäänud 33% testandmestiku ridadest.
  2. Treenige treeningandmestikul LightGBM-regressorit.
  3. Tehke ennustusi koolituse, valideerimise ja testimise andmekogumite kohta, kasutades eelmises etapis treenitud mudelit.
  4. Arvutage väljaõppe, valideerimise ja testimise andmekogumite SHAP-väärtused Pythoni teegi "shap" abil.
  5. Arvutage iga andmekogumi (koolitus, valideerimine ja test) iga funktsiooni ennustuspanus ja vea panus, kasutades koodi, mida nägime eelmises lõigus.

Võrdleme treeningu andmestiku veapanust ja ennustuse panust. Kasutame hajuvusdiagrammi, nii et punktid tuvastavad mudeli 120 tunnust.

 

Kas teie funktsioonid on olulised? See ei tähenda, et nad on head
Prognoosi panus vs. vea panus (koolituse andmestikul). [Pilt autorilt]

 

Treeningkomplektis on prognoosimise panuse ja vea panuse vahel väga negatiivne korrelatsioon.

Ja see on mõistlik: kuna mudel õpib treenimisandmestikust, kipub see omistama suurt tähtsust (st suurt ennustuspanust) neile funktsioonidele, mis vähendavad ennustusviga oluliselt (st väga negatiivse vea panus).

Kuid see ei anna meie teadmistele palju juurde, eks?

Tõepoolest, meie jaoks on tõesti oluline valideerimisandmekogum. Valideerimisandmekogum on tegelikult parim puhverserver selle kohta, kuidas meie funktsioonid uute andmete puhul käituvad. Niisiis, teeme sama võrdluse valideerimiskomplekti kohta.

 

Kas teie funktsioonid on olulised? See ei tähenda, et nad on head
Prognooside panus vs. vigade panus (valideerimisandmestikul). [Pilt autorilt]

 

Sellest süžeest saame välja võtta palju huvitavamat teavet.

Graafiku alumises paremas osas olevad funktsioonid on need, millele meie mudel omistab õigesti suurt tähtsust, kuna need vähendavad tegelikult ennustusviga.

Samuti pange tähele, et "Gold_T-22" (kulla tagastamine 22 päeva enne vaatlusperioodi) töötab väga hästi, võrreldes mudeli poolt sellele omistatava tähtsusega. See tähendab, et see funktsioon on tõenäoliselt alasobiv. Ja see teave on eriti huvitav, kuna kuld on vara, mida püüame ennustada ("Gold_T+22").

Teiselt poolt, funktsioonid, mille vea panus on üle 0, muudavad meie ennustused halvemaks. Näiteks muudab "US Bond ETF_T-1" mudeli ennustust keskmiselt 0.092% (ennustuspanus), kuid see paneb mudeli prognoosima keskmiselt 0.013% (vea panus) halvemini, kui see oleks olnud ilma selle funktsioonita. .

Võime seda oletada kõik suure veapanusega funktsioonid (võrreldes nende ennustuspanusega) sobivad tõenäoliselt üle või üldiselt on neil koolituskomplektis ja valideerimiskomplektis erinev käitumine.

Vaatame, millistel funktsioonidel on suurim vigade panus.

 

Kas teie funktsioonid on olulised? See ei tähenda, et nad on head
Funktsioonid on sorteeritud vigade panuse vähendamise alusel. [Pilt autorilt]

 

Ja nüüd väikseima veapanusega funktsioonid:

 

Kas teie funktsioonid on olulised? See ei tähenda, et nad on head
Funktsioonid on sorteeritud vigade panuse suurendamise järgi. [Pilt autorilt]

 

Huvitaval kombel võime täheldada, et kõik suurema veapanusega tunnused on suhtelised T-1-ga (1 päev enne vaatlushetke), samas kui peaaegu kõik väiksema veapanusega tunnused on suhtelised T-22-ga (22 päeva enne vaatlushetke). ).

See näib viitavat sellele kõige uuemad funktsioonid kipuvad üle sobima, samas kui ajas kaugemad omadused kipuvad paremini üldistama.

Pange tähele, et ilma veateateta poleks me seda ülevaadet kunagi teada saanud.

Traditsioonilised rekursiivsete tunnuste kõrvaldamise (RFE) meetodid põhinevad ebaoluliste funktsioonide eemaldamisel. See võrdub funktsioonide eemaldamisega esmalt väikese ennustuspanusega.

Eelmises lõigus öeldu põhjal oleks aga mõistlikum esmalt eemaldada kõige suurema veapanusega funktsioonid.

Et kontrollida, kas meie intuitsioon on kontrollitud, võrdleme kahte lähenemisviisi:

  • Traditsiooniline RFE: esmalt eemaldage kasutud funktsioonid (väikseim ennustuspanus).
  • Meie RFE: kahjulike funktsioonide eemaldamine esimene (kõrgeim veapanus).

Vaatame valideerimiskomplekti tulemusi:

 

Kas teie funktsioonid on olulised? See ei tähenda, et nad on head
Valideerimiskomplekti kahe strateegia keskmine absoluutne viga. [Pilt autorilt]

 

Iga meetodi parim iteratsioon on ringiga ümbritsetud: see on traditsioonilise RFE (sinine joon) jaoks mõeldud 19 funktsiooniga mudel ja meie RFE (oranž joon) 17 funktsiooniga mudel.

Üldiselt tundub, et meie meetod töötab hästi: suurima veapanusega funktsiooni eemaldamine toob kaasa püsivalt väiksema MAE, võrreldes suurima ennustuspanusega funktsiooni eemaldamisega.

Siiski võite arvata, et see toimib hästi lihtsalt seetõttu, et sobitame valideerimiskomplekti üle. Lõppude lõpuks oleme huvitatud tulemusest, mille me testikomplektil saame.

Nii et vaatame sama võrdlust testikomplektis.

 

Kas teie funktsioonid on olulised? See ei tähenda, et nad on head
Testkomplekti kahe strateegia keskmine absoluutne viga. [Pilt autorilt]

 

Tulemus on sarnane eelmisele. Isegi kui kahe rea vahel on väiksem vahemaa, on suurima veakaastaja eemaldamisel saadud MAE selgelt parem kui madalaima ennustuse kaasaja eemaldamisel saadud MAE.

Kuna valisime valideerimiskomplekti väikseima MAE-ni viivad mudelid, vaatame nende tulemusi testikomplektis:

  • RFE-ennustuspanus (19 funktsiooni). MAE katsekomplektil: 2.04.
  • RFE-vea panus (17 funktsiooni). MAE katsekomplektil: 1.94.

Seega on meie meetodit kasutav parim MAE võrreldes traditsioonilise RFE-ga 5% parem!

Funktsiooni tähtsuse kontseptsioon mängib masinõppes olulist rolli. Siiski aetakse mõistet "olulisus" sageli ekslikult "headusega".

Nende kahe aspekti eristamiseks oleme kasutusele võtnud kaks mõistet: ennustuspanus ja vigade panus. Mõlemad kontseptsioonid põhinevad valideerimisandmestiku SHAP väärtustel ja artiklis oleme näinud Pythoni koodi nende arvutamiseks.

Oleme neid proovinud ka reaalses finantsandmestikus (mille ülesandeks on kulla hinna ennustamine) ja tõestanud, et veapanusel põhinev rekursiivne funktsioonide kõrvaldamine annab 5% parema keskmise absoluutse vea võrreldes traditsioonilise ennustamispanusel põhineva RFE-ga.

Kogu selle artikli jaoks kasutatud koodi leiate aadressilt see märkmik.

Tänan teid lugemise eest!

 
 
Samuele Mazzanti on Jakala juhtiv andmeteadlane ja elab praegu Roomas. Ta on lõpetanud statistika eriala ja tema peamised uurimisvaldkonnad on seotud masinõpperakendustega tööstuses. Ta on ka vabakutseline sisulooja.

 
Originaal. Loaga uuesti postitatud.
 

Ajatempel:

Veel alates KDnuggets