Vienetas 5 / 11

Funkcijų inžinerija: variantų generavimas, kodavimas, mastelio keitimas ir nutekėjimo išvengimas

Pelnas:

  • Gebėjimas sukurti prasmingas išvestines ypatybes, žinant domeną ir tinkamais metodais koduoti kategorines kategorijas (vienas karštas, etiketė, taikinys)
  • Galimybė keisti skaitinius kintamuosius pagal modelio tipą (standartizavimas, normalizavimas) ir išvengti nereikalingo ar nepilno mastelio keitimo
  • Galimybė išvengti funkcijų nutekėjimo mokantis visas transformacijas po mokymo/testo padalijimo ir tik iš treniruotės

Yra senas mašininio mokymosi posakis: „Taikomasis mašinų mokymasis iš esmės yra funkcijų inžinerija“. Kadangi modelio sėkmę dažnai lemia tai, kokius duomenis suteikiate modeliui, o ne nuo to, kokį algoritmą pasirenkate. Funkcijų inžinerija – tai prasmingų signalų kūrimo iš neapdorotų duomenų menas, iš kurio modelis gali mokytis. Dirbtinis intelektas šiame etape yra gausus idėjų šaltinis: paklausus „kokias savybes galima sukurti iš šių duomenų“, jis pateikia dešimtis pasiūlymų. Tačiau kai kurie iš šių pasiūlymų gali būti vertingi, kai kurie gali būti nenaudingi, o kai kurie gali būti pavojingi (nutekėjimas). Jūsų darbas tai sutvarkyti.

Kodėl funkcijų inžinerija

Neapdoroti duomenys retai patenka į modelį geriausios formos. Nors vien stulpelis „gimimo data“ yra beprasmis, iš jo sugeneruota „amžiaus“ reikšmė yra stiprus signalas. Iš „užsakymo laiko žymos“ galite išskirti tokius atributus kaip „savaitės diena“, „diena/naktis“, „ar atostogos“. Galite sujungti du stulpelius, kad gautumėte santykį („skolos ir pajamų santykis“). Čia funkcijų inžinerija paverčia srities žinias matematiniais signalais; Ir kaip tik todėl būtent ta scena reikalauja daugiausiai žmogiško intelekto.

Kategorinių kintamųjų konvertavimas į skaičius: kodavimas

Modeliai paprastai veikia su skaičiais, o ne su tekstu. Kategorinių kintamųjų (tokių kaip miestas, spalva, prekės tipas) pavertimas skaičiais vadinamas kodavimu. Trys įprasti metodai:

Vienkartinis kodavimas: atidaromas atskiras stulpelis, kurio vertė yra 0/1 kiekvienai kategorijai. „Miestui“ formuojamos Stambulo, Ankaros, Izmiro kolonos; Jei klientas yra iš Stambulo, tik ta stulpelis bus 1. Idealu, kai kategorijų skaičius mažas; Jei kategorijų yra per daug, susidaro šimtai stulpelių (tai vadinama „dydžio sprogimu“).

Etiketės kodavimas: kiekvienai kategorijai suteikiamas numeris (Stambulas=0, Ankara=1). Tai paprasta, bet gali atsitiktinai išmokyti modelį sekos (pvz., Ankara > Stambulas); todėl nerūšiuotose kategorijose jis naudojamas atsargiai.

Tikslinė koduotė: kiekviena kategorija pakeičiama tos kategorijos tikslinio kintamojo vidurkiu. Tai labai galingas, tačiau pavojingiausias nuotėkio šaltinis: jei atsižvelgsite į bandymo duomenų tikslą, modelis mato ateitį. Jis turėtų būti skaičiuojamas tik iš treniruočių duomenų ir atsargiai (kryžminio patvirtinimo metu).

Mastelio keitimas: dideli skaičiai modelio neužgožia

Kai kurie modeliai (pagrįsti atstumu, linijiniai modeliai, neuroniniai tinklai) yra jautrūs kintamųjų skalei. Jei „pajamos“ (0–500 000) ir „amžius“ (0–100) patenka į tą patį modelį, pajamos gali dominuoti vien todėl, kad jos yra didesnės. Mastelio keitimas tai išsprendžia. Du paplitę metodai: standartizavimas (kiekvieną reikšmę paverčia į „kiek standartinių nuokrypių nuo vidurkio“) ir normalizavimas (min-maks normalizavimas – suspaudžia reikšmes į intervalą 0-1). Medžių modeliai (sprendimų medžiai, atsitiktinis miškas) yra nejautrūs masteliui, jiems nereikia keisti mastelio.

Atsargiai: mastelio keitimo ir kodavimo parametrai (vidurkis, standartinis nuokrypis, kategorijų vidurkio atvaizdavimas) turėtų būti skaičiuojami tik iš mokymo duomenų, tada tą patį reikėtų taikyti ir bandymo duomenims. Bandymo duomenų įtraukimas yra nutekėjimas, todėl jūsų modelis atrodo geriau nei yra iš tikrųjų.

Funkcijos inžinerijos nuotėkio esmė

Funkcijų generavimas yra ta vieta, kur dažniausiai nuteka duomenys. Dvi tipiškos klaidos: Laiko nutekėjimas – funkcijos, apimančios būsimą informaciją (įskaitant dienas po prognozuojamos dienos, skaičiuojant „paskutinių 30 dienų vidurkį“), kūrimas. Statistikos nutekėjimas – funkcijos (mastelio vidurkio, tikslinės kodavimo vertės) apskaičiavimas iš visų duomenų prieš treniruotės / testo padalijimą. Taisyklė: išmokite kiekvieną transformaciją pirmiausia atlikę traukinio/bandymo padalijimą ir tik iš mokymo duomenų. Saugiausias būdas tai daryti reguliariai yra naudoti dujotiekį – konstrukciją, kuri surenka visas transformacijas į vieną grandinę ir pritaiko jas po padalijimo.

Metodas

už ką

Nutekėjimo pavojus

pastaba

Vienkartinis kodavimas

Kintamasis su keliomis kategorijomis

žemas

Sprogsta dydis keliose kategorijose

Etikečių kodavimas

Surūšiuota kategorija

žemas

Iš eilės moko neteisingos tvarkos

taikinio kodavimas

Kelių kategorijų, stiprus signalas

labai aukštas

Tik iš išsilavinimo, CV

standartizavimas

Linijiniai/atstumo modeliai

vidutinis

Parametras priklauso tik nuo išsilavinimo

Laiko lango funkcija

laiko eilutes

aukštas

Pridėkite ateitį

trys mini dėklai

1 atvejis – vertingas turtas. Kreditų komanda sukūrė „skolos ir pajamų santykio“ funkciją iš neapdorotų „mėnesinių pajamų“ ir „mėnesio skolos mokėjimo“ stulpelių. Ši vienintelė išvestinė funkcija padidino modelio tikslumą nuo 71% iki 79%; nes riziką iš tikrųjų lėmė norma, o ne absoliučios pajamos. Pamoka: srities žinių sugeneruoti koeficientai yra stiprūs signalai.

2 atvejis – tikslinės kodavimo nutekėjimas. Viena komanda konvertavo „pašto kodą“ į skaičių su tiksline koduote (vidutinis toje srityje), tačiau tai padarė iš visų duomenų prieš išskaidydama. Modelis davė 94% bandymo rinkinio, o gamyboje sumažėjo iki 68%. 6 savaičių pastangos buvo švaistomos. Pamoka: tikslo kodavimas atliekamas atsargiai, tik treniruočių metu.

3 atvejis – mastelio keitimo pamiršimas. Vienas analitikas įtraukė pajamas (0–400 000) ir klientų amžių (18–75) į nuotoliu pagrįstą modelį be mastelio. Modelis žiūrėjo beveik vien į pajamas, sugniuždydamas amžiaus efektą. Pridėjus mastelio keitimą, segmentavimas tapo prasmingas. Pamoka: atstumo / linijiniuose modeliuose mastelio keitimas neapleidžiamas.

Keturi kopijuojami šablonai

1) Funkcijų idėjos generavimas (pašalinimas priklauso nuo jūsų):

Jūsų vaidmuo: funkcijų inžinieriaus asistentas. Mano df stulpeliai: gimimo_data, užsakymo_laikas (laiko žyma), pajamų_tl, skolos_tl, miestas, produkto_kategorija. Tikslas: „ar paskola bus grąžinta“ (0/1). Pasiūlykite 15 funkcijų, kurias galima sugeneruoti iš šių stulpelių; nurodykite nuotėkio riziką (mažas/vidutinis/didelis). Aiškiai pažymėkite tuos, kuriuose yra būsimos informacijos.

2) Saugus kodavimas (po padalijimo):

Parašykite kodą, kuris „one-hot“ koduoja „city“ ir „product_category“. SVARBU: pritaikykite kodavimą tik treniruočių duomenims, tada transformuokite testo duomenis (su sklearn OneHotEncoder). Paaiškinkite, kaip elgiatės su nematoma kategorija (handle_unknown) švietime.

3) Konversija be nuotėkio naudojant vamzdyną:

Nustatyti sklearn Pipeline: pritaikykite StandardScaler skaitiniams stulpeliams, OneHotEncoder – kategoriškiems stulpeliams, pabaigoje pridėkite klasifikatorių. Garantuojame, kad visos transformacijos bus išmoktos PO traukinio / bandymo padalijimo ir tik treniruotėse. Paaiškinkite kodą ir kodėl jame nėra nuotėkio.

4) Laiko lango funkcija (nuotėkio kontrolė):

Kiekvienam klientui generuokite atributą „užsakymų skaičius per pastarąsias 30 dienų“, bet NIEKADA neįtraukite duomenų po prognozuojamos dienos. Eilutę po eilutės paaiškinkite, kad kodas nežiūri į ateitį. Pateiksiu nuorodos datos stulpelį.

Silpnas raginimas / Stiprus raginimas

Silpnas raginimas:

Pridėkite gerų savybių prie šių duomenų.

„Geras“ neapibrėžtas, tikslas neaiškus, nėra nuotėkio kontrolės. AI generuoja atsitiktines, galbūt nesandarias funkcijas.

Galingas raginimas:

Jūsų vaidmuo: funkcijų inžinierius. Tikslas: „nutraukti per 30 dienų“ (0/1), numatoma atskaitos data: išsaugojimo_data. Yra operacijų istorija df.Task: Sugeneruokite 8 funkcijas, atsakykite į klausimą "Ar turiu šią informaciją numatymo metu" kiekvienam. Datos įtraukimas po nuorodos datos laiko lango funkcijose. Parašykite kodą su konvejeriu suderinamu būdu, kad jis būtų įvykdytas po traukinio / bandymo sekcijos.

Čia nuo pat pradžių apibrėžiamas tikslas, atskaitos laikas ir nuotėkio kontrolė.

Dažnos klaidos

  • Išmokti transformaciją iš visų duomenų prieš padalijimą. Jei mastelio / kodavimo parametras mato bandymo duomenis, įvyksta nuotėkis.
  • Neatsargus tikslinio kodavimo naudojimas. Tai pats galingiausias, bet labiausiai nesandarus metodas; tik iš mokymo, kryžminis patvirtinimas.
  • Ateities pridėjimas naudojant laiko lango funkciją. Jei „paskutinės 30 dienų“ skaičiavimas įvedamas po prognozės dienos, modelis mato ateitį.
  • Nereikalingas mastelio keitimas medžio modelyje ir neišsamus mastelio keitimas tiesiniame modelyje. Mastelio sprendimai priimami pagal modelio tipą.
  • Be jokių klausimų pridedamas kiekvienos AI funkcijos pasiūlymas. Pasiūlymai gali apimti nenaudingas ir nesandarias funkcijas.
Patarimas: kiekvienai sugeneruotai funkcijai užrašykite po vieną klausimą: „Ar galiu apskaičiuoti šią vertę pagal informaciją, kurią turiu tuo metu, kai darau numatymą? Jei atsakymas nėra aiškus „taip“, nenaudokite šios funkcijos. Ši vienintelė disciplina pašalina daugumą su savybėmis susijusių nutekėjimų.

Apibendrinant

Funkcijų inžinerija yra prasmingų signalų generavimo iš neapdorotų duomenų menas ir dažnai labiau nulemia modelio sėkmę nei algoritmas. Pagrindiniai įrankiai yra kategorijų kodavimas (vienkartinis, etiketė, taikinys), skaitmenų mastelio keitimas (standartizavimas, normalizavimas) ir išvestinių ypatybių kūrimas naudojant srities žinias. Tačiau ši fazė taip pat yra nutekėjimo esmė: visas transformacijas reikia išmokti po mokymo/testo padalijimo ir tik iš mokymo duomenų. AI generuoja daug idėjų; Žmogaus sprendimas skiria vertingą nuo pavojingo.

Taikymo užduotis

Pasirinkite tikslinį kintamąjį ir suprojektuokite bent penkias išvestines funkcijas iš turimų stulpelių. Kiekvienam iš jų raštu atsakykite į klausimą „ar esu pasiekiamas prognozės metu“ ir bent vieną pašalinkite kaip „didelę nutekėjimo riziką“. Tada užkoduokite saugias funkcijas, kurios bus įdiegtos po skaidinio.

kontrolinis sąrašas

  • [ ] Ar pritaikiau visas transformacijas po traukinio / bandomojo padalijimo?
  • [ ] Ar mastelio / kodavimo parametrus išmokau tik iš mokymo?
  • [ ] Ar atsakiau į kiekvienos funkcijos klausimą „ar turiu jį numatymo metu“?
  • [ ] Ar naudojau ypač pavojingus metodus, pvz., tikslinį kodavimą?
  • [ ] Ar nusprendžiau pritaikyti atitinkamą mastelį modelio tipui (medžio / linijinio)?