Vienība 5 / 11

Līdzekļu inženierija: variantu ģenerēšana, kodēšana, mērogošana un noplūdes novēršana

Ieguvumi:

  • Spēja radīt jēgpilnus atvasinātus līdzekļus ar domēna zināšanām un kodēt kategoriskas kategorijas ar atbilstošām metodēm (viens karsts, etiķete, mērķis)
  • Spēja mērogot skaitliskos mainīgos atbilstoši modeļa tipam (standartizācija, normalizācija) un izvairīties no nevajadzīgas vai nepilnīgas mērogošanas
  • Spēja izvairīties no funkciju noplūdes, apgūstot visas transformācijas pēc apmācības/testa sadalījuma un tikai no apmācības

Mašīnmācībā ir vecs teiciens: "Lietišķā mašīnmācība būtībā ir funkciju inženierija." Tā kā modeļa panākumi bieži vien izriet no tā, kādu informāciju jūs piešķirat modelim, nevis no izvēlētā algoritma. Funkciju inženierija ir māksla radīt nozīmīgus signālus no neapstrādātiem datiem, no kuriem modelis var mācīties. Mākslīgais intelekts šajā posmā ir bagātīgs ideju avots: jautājot "kādas funkcijas var iegūt no šiem datiem", tas uzskaita desmitiem ieteikumu. Bet daži no šiem ieteikumiem var būt vērtīgi, daži var būt bezjēdzīgi, un daži var būt bīstami (noplūde). Jūsu uzdevums ir to sakārtot.

Kāpēc funkciju inženierija

Neapstrādāti dati reti nonāk modelī tā labākajā formā. Lai gan kolonnai “dzimšanas datums” vien nav nozīmes, no tās iegūtā “vecuma” vērtība ir spēcīgs signāls. No "pasūtījuma laikspiedola" varat iegūt tādus atribūtus kā "nedēļas diena", "diena/nakts", "vai tā ir brīvdiena". Varat apvienot divas kolonnas, lai izveidotu koeficientu ("parāda/ienākumu attiecība"). Šeit funkciju inženierija pārvērš domēna zināšanas matemātiskā signālā; Un tieši tāpēc tas ir posms, kas prasa vislielāko cilvēcisko inteliģenci.

Kategorisko mainīgo konvertēšana skaitļos: kodēšana

Modeļi parasti darbojas ar cipariem, nevis tekstu. Kategorisko mainīgo (piemēram, pilsēta, krāsa, produkta veids) pārveidošanu skaitļos sauc par kodēšanu. Trīs izplatītas metodes:

Vienreizējs kodējums: katrai kategorijai tiek atvērta atsevišķa kolonna ar vērtību 0/1. "Pilsētai" tiek veidotas Stambulas, Ankaras, Izmiras kolonnas; Ja klients ir no Stambulas, tikai šajā kolonnā būs 1. Ideāli, ja kategoriju skaits ir mazs; Ja kategoriju ir pārāk daudz, tas rada simtiem kolonnu (to sauc par "izmēra eksploziju").

Etiķetes kodējums: katrai kategorijai piešķir numuru (Stambula=0, Ankara=1). Tas ir vienkārši, taču tas var nejauši iemācīt modelim secību (piemēram, Ankara > Stambula); tāpēc tas tiek lietots piesardzīgi nesakārtotās kategorijās.

Mērķa kodējums: aizstāj katru kategoriju ar mērķa mainīgā vidējo vērtību šajā kategorijā. Tas ir ļoti spēcīgs, bet visbīstamākais noplūdes avots: ja ņem vērā testa datu mērķi, modelis redz nākotni. Tas jāaprēķina tikai no apmācības datiem un rūpīgi (savstarpējās validācijas ietvaros).

Mērogošana: lieli skaitļi nepārspēj modeli

Daži modeļi (uz attāluma balstīti, lineārie modeļi, neironu tīkli) ir jutīgi pret mainīgo lielumu mērogu. Ja "ienākumi" (0-500 000) un "vecums" (0-100) ietilpst vienā un tajā pašā modelī, ienākumi var dominēt tikai tāpēc, ka tie ir lielāki. Mērogošana to novērš. Divas izplatītas metodes: standartizācija (katru vērtību pārvērš par "cik standarta novirzes no vidējā") un normalizēšana (min-max normalizācija - saspiež vērtības diapazonā no 0 līdz 1). Uz kokiem balstīti modeļi (lēmumu koki, nejauši izvēlēti meži) ir nejutīgi pret mērogu, tiem nav nepieciešama mērogošana.

Uzmanību: Mērogošanas un kodēšanas parametri (vidējā, standarta novirze, kategoriju vidējā kartēšana) jāaprēķina tikai no apmācības datiem, pēc tam tas pats jāpiemēro testa datiem. Testa datu iekļaušana ir noplūde, un jūsu modelis izskatās labāk, nekā tas patiesībā ir.

Funkciju inženierijas noplūdes pamatā

Funkciju ģenerēšana ir vieta, kur visbiežāk rodas datu noplūde. Divas tipiskas kļūdas: Laika noplūde — tiek radīta funkcija, kas ietver nākotnes informāciju (tostarp dienas pēc prognozētās dienas, aprēķinot “pēdējo 30 dienu vidējo rādītāju”). Statistikas noplūde — objekta (mērogošanas vidējā, mērķa kodēšanas vērtības) aprēķināšana no visiem datiem pirms apmācības/testa sadalījuma. Noteikums: iemācieties katru transformāciju pēc vilciena/pārbaudes sadalījuma vispirms un tikai no apmācības datiem. Drošākais veids, kā to izdarīt regulāri, ir izmantot cauruļvadu — struktūru, kas apkopo visas transformācijas vienā ķēdē un piemēro tās pēc sadalīšanas.

Metode

priekš kam

Noplūdes risks

piezīme

Viena karstuma kodēšana

Mainīgais ar dažām kategorijām

zems

Eksplodē izmēru vairākās kategorijās

Etiķetes kodēšana

Sakārtota kategorija

zems

Ārpus kārtības māca nepareizu kārtību

mērķa kodējums

Vairāku kategoriju, spēcīgs signāls

ļoti augsts

Tikko no izglītības, CV

standartizācija

Lineārie/attāluma modeļi

vidējs

Parametrs ir atkarīgs tikai no izglītības

Laika loga funkcija

laika rindas

augsts

Pievienojiet nākotni

trīs mini futrāļi

1. gadījums — vērtīgs īpašums. Kredītu komanda izveidoja funkciju “parāda attiecība pret ienākumiem” no neapstrādātajām slejām “ikmēneša ienākumi” un “ikmēneša parāda maksājums”. Šī vienīgā atvasinātā funkcija palielināja modeļa precizitāti no 71% līdz 79%; jo tā bija likme, nevis absolūtie ienākumi, kas patiešām noteica risku. Nodarbība: domēna zināšanu radītās attiecības ir spēcīgi signāli.

2. gadījums — mērķa kodējuma noplūde. Viena komanda pārveidoja “pasta indeksu” par skaitli ar mērķa kodējumu (vidējais maiņas ātrums šajā apgabalā), taču pirms sadalīšanas to izdarīja no visiem datiem. Modelis testa komplektā deva 94%, ražošanā samazinoties līdz 68%. 6 nedēļu pūles ir izniekotas. Nodarbība: mērķa kodēšana tiek veikta rūpīgi, tikai apmācības ietvaros.

3. gadījums — mērogošanas aizmirstība. Viens analītiķis ieviesa ieņēmumus (0–400 000) un klientu vecumu (18–75) uz attālumu balstītā modelī bez mērogošanas. Modele skatījās gandrīz tikai uz ienākumiem, sagraujot vecuma efektu. Kad tika pievienota mērogošana, segmentācija kļuva nozīmīga. Nodarbība: attāluma/lineārajos modeļos mērogošana nav atstāta novārtā.

Četras kopējamas veidnes

1) Funkciju ideju ģenerēšana (novēršana ir jūsu ziņā):

Jūsu loma: funkciju inženiera palīgs. Manas df kolonnas: dzimšanas_datums, pasūtījuma_laiks (laikspiedols), ienākumu_tl, parāda_tl, pilsēta, produkta_kategorija. Mērķis: "vai kredīts tiks atmaksāts" (0/1). Iesakiet 15 līdzekļus, ko var ģenerēt no šīm kolonnām; norādiet noplūdes risku (zems/vidējs/augsts) katram. Skaidri atzīmējiet tos, kas satur turpmāko informāciju.

2) Droša kodēšana (pēc sadalīšanas):

Ierakstiet kodu, kas vienkāršā veidā kodē "pilsēta" un "produkta_kategorija". SVARĪGI: pielāgojiet kodējumu tikai apmācības datiem, pēc tam pārveidojiet testa datus (ar sklearn OneHotEncoder). Paskaidrojiet, kā izglītībā rīkojaties ar neredzamo kategoriju (handle_unknown).

3) Konversija bez noplūdēm ar cauruļvadu:

Sklearn Pipeline iestatīšana: izmantojiet StandardScaler ciparu kolonnām, OneHotEncoder kategoriskām kolonnām, beigās pievienojiet klasifikatoru. Garantija, ka visas pārvērtības tiek apgūtas PĒC vilciena/pārbaudes sadalījuma un tikai no apmācības. Paskaidrojiet kodu un to, kāpēc tajā nav noplūdes.

4) Laika loga funkcija (noplūdes kontrole):

Katram klientam ģenerējiet atribūtu "pasūtījumu skaits pēdējo 30 dienu laikā", taču NEKAD neiekļaujiet datus pēc prognozētās dienas. Paskaidrojiet, ka kods neskatās nākotnē. Es sniegšu atsauces datuma kolonnu.

Vāja uzvedne / spēcīga uzvedne

Vāja uzvedne:

Pievienojiet šiem datiem labas īpašības.

“Labi” nav definēts, mērķis nav skaidrs, nav noplūdes kontroles. AI ģenerē nejaušas, iespējams, noplūdes funkcijas.

Spēcīga uzvedne:

Jūsu uzdevums: inženierzinātņu inženieris. Mērķis: "novērst 30 dienu laikā" (0/1), paredzamais atsauces datums: save_date. Ir darījumu vēsture df.Task: ģenerējiet 8 līdzekļus, atbildiet uz jautājumu "Vai man ir šī informācija prognozēšanas brīdī" katram. Datuma pievienošana laika loga funkcijās aiz atsauces datuma. Uzrakstiet kodu ar konveijera saderīgā veidā, lai tas tiktu izpildīts pēc vilciena/pārbaudes sadaļas.

Šeit no sākuma tiek definēts mērķis, atskaites laiks un noplūdes kontrole.

Biežas kļūdas

  • Pārveidošanas apgūšana no visiem datiem pirms dalīšanas. Ja mērogošanas/kodēšanas parametrs redz testa datus, notiek noplūde.
  • Nevērīga mērķa kodēšanas izmantošana. Tā ir visspēcīgākā, bet necaurlaidīgākā metode; tikai no apmācības, savstarpējā validācijā.
  • Nākotnes pievienošana ar laika loga funkciju. Ja "pēdējo 30 dienu" aprēķins tiek ievadīts pēc prognozētās dienas, modelis redz nākotni.
  • Nevajadzīga mērogošana koka modelī un nepilnīga mērogošana lineārajā modelī. Mērogošanas lēmumi tiek pieņemti atbilstoši modeļa tipam.
  • Bez šaubām tiek pievienoti visi AI funkcijas ieteikumi. Ieteikumos var būt ietvertas nederīgas un necaurlaidīgas funkcijas.
Padoms. Pierakstiet vienu jautājumu par katru ģenerēto līdzekli: “Vai es varu aprēķināt šo vērtību, izmantojot informāciju, kas manā rīcībā ir prognozēšanas brīdī?” Ja atbilde nav skaidra "jā", neizmantojiet šo funkciju. Šī vienīgā disciplīna novērš lielāko daļu ar funkcijām saistīto noplūžu.

Rezumējot

Funkciju inženierija ir jēgpilnu signālu ģenerēšanas māksla no neapstrādātiem datiem, un bieži vien modeļa panākumus nosaka vairāk nekā algoritms. Kategoriju kodēšana (vienkāršā, etiķete, mērķis), skaitļu mērogošana (standartizācija, normalizācija) un atvasinātu pazīmju izveide ar domēna zināšanām ir pamata rīki. Bet šī fāze ir arī noplūdes sirds: visas transformācijas jāapgūst pēc apmācības/testa sadalījuma un tikai no apmācības datiem. AI rada daudz ideju; Cilvēka spriedums atšķir vērtīgo no bīstamā.

Lietojumprogrammas uzdevums

Izvēlieties mērķa mainīgo un izveidojiet vismaz piecas atvasinātās funkcijas no esošajām kolonnām. Par katru no tiem rakstveidā atbildiet uz jautājumu "vai esmu pieejams pareģošanas brīdī" un izslēdziet vismaz vienu kā "augstu noplūdes risku". Pēc tam kodējiet drošus līdzekļus konveijerā, kas jāievieš pēc nodalījuma.

kontrolsaraksts

  • [ ] Vai pēc vilciena/pārbaudes sadalījuma es izmantoju visas transformācijas?
  • [ ] Vai mērogošanas/kodēšanas parametrus es iemācījos tikai apmācībā?
  • [ ] Vai esmu atbildējis uz jautājumu "vai man tas ir paredzēšanas brīdī" par katru līdzekli?
  • [ ] Vai esmu īpaši piesardzīgs ar augsta riska metodēm, piemēram, mērķa kodēšanu?
  • [ ] Vai esmu nolēmis mērogot atbilstoši modeļa tipam (koks/lineārs)?