Dobički:
- Sposobnost izdelave pomembnih izpeljanih funkcij z znanjem domene in kodiranje kategorijskih kategorij z ustreznimi metodami (one-hot, label, target)
- Sposobnost skaliranja numeričnih spremenljivk glede na vrsto modela (standardizacija, normalizacija) in izogibanje nepotrebnemu ali nepopolnemu skaliranju
- Sposobnost izogibanja uhajanju funkcij z učenjem vseh transformacij po razdelku usposabljanje/preizkus in samo iz usposabljanja
V strojnem učenju obstaja star pregovor: "Uporabno strojno učenje je v bistvu inženiring funkcij." Ker uspeh modela pogosto izhaja iz tega, kakšne vložke daste v model, in ne od tega, kateri algoritem izberete. Inženiring funkcij je umetnost proizvajanja smiselnih signalov iz neobdelanih podatkov, iz katerih se lahko model uči. Umetna inteligenca je na tej stopnji bogat vir idej: ko vprašate, "katere funkcije je mogoče ustvariti iz teh podatkov", navede na desetine predlogov. Toda nekateri od teh predlogov so lahko dragoceni, nekateri neuporabni, nekateri pa nevarni (puščanje). Vaša naloga je, da to uredite.
Zakaj inženiring funkcij
Neobdelani podatki redko pridejo do modela v svoji najboljši obliki. Medtem ko je sam stolpec "datum rojstva" nesmiseln, je vrednost "starost", ustvarjena iz njega, močan signal. Iz »časovnega žiga naročila« lahko izvlečete atribute, kot so »dan v tednu«, »dan/noč«, »ali je praznik«. Združite lahko dva stolpca, da dobite razmerje ("razmerje dolg/dohodek"). Tukaj inženiring funkcij prevaja znanje domene v matematični signal; In prav zato je oder tisti, ki zahteva največ človeške inteligence.
Pretvarjanje kategoričnih spremenljivk v števila: kodiranje
Modeli na splošno delujejo s številkami, ne z besedilom. Pretvarjanje kategoričnih spremenljivk (kot so mesto, barva, vrsta izdelka) v številke se imenuje kodiranje. Tri običajne metode:
Enkratno kodiranje: odpre ločen stolpec z vrednostjo 0/1 za vsako kategorijo. Za "mesto" so oblikovani stolpci Istanbul, Ankara, Izmir; Če je stranka iz Istanbula, bo samo ta stolpec 1. Idealno, če je število kategorij majhno; Če je kategorij preveč, ustvari na stotine stolpcev (to se imenuje "eksplozija velikosti").
Kodiranje oznak: vsaki kategoriji dodeli številko (Istanbul=0, Ankara=1). Preprosto je, vendar lahko model pomotoma nauči zaporedja (na primer Ankara > Istanbul); zato se v neurejenih kategorijah uporablja previdno.
Ciljno kodiranje: vsako kategorijo nadomesti s povprečjem ciljne spremenljivke v tej kategoriji. To je zelo močan, vendar najnevarnejši vir uhajanja: če upoštevate cilj testnih podatkov, model vidi prihodnost. Izračunati ga je treba samo iz podatkov o usposabljanju in previdno (znotraj navzkrižne validacije).
Skaliranje: velika števila ne preobremenijo modela
Nekateri modeli (na razdalji, linearni modeli, nevronske mreže) so občutljivi na obseg spremenljivk. Če "dohodek" (0-500.000) in "starost" (0-100) spadata v isti vzorec, lahko dohodek prevladuje preprosto zato, ker je večji. Skaliranje to popravi. Dve pogosti metodi: standardizacija (pretvori vsako vrednost v "koliko standardnih odstopanj od povprečja") in normalizacija (najmanjša normalizacija - stisne vrednosti v obseg 0-1). Drevesni modeli (odločitvena drevesa, naključni gozd) so neobčutljivi na lestvico in ne zahtevajo skaliranja.
Pozor: Parametre skaliranja in kodiranja (povprečje, standardno odstopanje, preslikavo povprečja kategorij) je treba izračunati samo iz podatkov o usposabljanju, nato pa je treba isto uporabiti za podatke testa. Vključitev testnih podatkov je uhajanje in naredi vaš model videti boljši, kot je v resnici.
Srce uhajanja v inženirstvu funkcij
Uhajanje podatkov najpogosteje izvira iz ustvarjanja funkcij. Dve tipični napaki: uhajanje časa — ustvarjanje funkcije, ki vključuje informacije o prihodnosti (vključno z dnevi po dnevu napovedi pri izračunu »povprečja zadnjih 30 dni«). Uhajanje statističnih podatkov — izračun funkcije (povprečje skaliranja, ciljna vrednost kodiranja) iz vseh podatkov pred razdelitvijo usposabljanja/testiranja. Pravilo: naučite se vsake transformacije, potem ko najprej opravite razdelek usposabljanje/test in samo iz podatkov o usposabljanju. Najvarnejši način, da to počnete redno, je uporaba cevovoda - strukture, ki zbira vse transformacije v eno verigo in jih uporablja po razdelitvi.
Metoda
za kaj
Nevarnost puščanja
opomba
Enkratno kodiranje
Spremenljivka z nekaj kategorijami
nizka
Raznese velikost v več kategorijah
Kodiranje etikete
Razvrščena kategorija
nizka
Izven reda uči napačnega reda
ciljno kodiranje
Več kategorij, močan signal
zelo visoko
Samo iz izobrazbe, v življenjepisu
standardizacija
Linearni/distančni modeli
srednje
Parameter je odvisen samo od izobrazbe
Funkcija časovnega okna
časovne vrste
visoka
Dodajte prihodnost
trije mini kovčki
Primer 1 – Dragocena lastnina. Kreditna skupina je ustvarila funkcijo »razmerje med dolgom in dohodkom« iz neobdelanih stolpcev »mesečni dohodek« in »mesečno plačilo dolga«. Ta ena sama izpeljana funkcija je povečala natančnost modela z 71 % na 79 %; ker je bila stopnja, ne absolutni dohodek, tista, ki je dejansko določala tveganje. Lekcija: razmerja, ki jih ustvarja poznavanje področja, so močni signali.
Primer 2 – Puščanje ciljnega kodiranja. Ena ekipa je pretvorila »poštno številko« v številko s ciljnim kodiranjem (povprečna stopnja odliva na tem območju), vendar je to storila iz vseh podatkov pred delitvijo. Model je na testnem nizu dal 94 %, v proizvodnji pa je padel na 68 %. 6 tednov truda zaman. Lekcija: ciljno kodiranje se izvaja previdno, samo v okviru usposabljanja.
Primer 3 – Pozabljanje skaliranja. En analitik je prihodek (0–400.000) in starost stranke (18–75) vnesel v model na podlagi razdalje brez skaliranja. Model se je oziral skoraj izključno na dohodek, pri čemer je zatrl učinek starosti. Ko je bilo dodano skaliranje, je segmentacija postala smiselna. Lekcija: skaliranje ni zanemarjeno pri modelih razdalje/linearnih modelih.
Štiri predloge za kopiranje
1) Generiranje idej za funkcije (izločitev je odvisna od vas):
Vaša vloga: asistent za inženiring funkcij. Moji stolpci df: rojstni_datum, naročilo_čas (časovni žig), dohodek_tl, dolg_tl, mesto, kategorija_izdelka. Cilj: "ali bo posojilo vrnjeno" (0/1). Predlagajte 15 funkcij, ki jih je mogoče ustvariti iz teh stolpcev; navedite tveganje uhajanja (nizko/srednje/visoko) za vsako. Jasno označite tiste, ki vsebujejo informacije o prihodnosti.
2) Varno kodiranje (po razdelitvi):
Napišite kodo, ki enkratno kodira "city" in "product_category". POMEMBNO: kodiranje prilagodite le podatkom o vadbi, nato preoblikujte testne podatke (s sklearn OneHotEncoder). Pojasnite, kako ravnate s kategorijo nevidno (handle_unknown) v izobraževanju.
3) Pretvorba brez puščanja s cevovodom:
Nastavite sklearn Pipeline: uporabite StandardScaler za številske stolpce, OneHotEncoder za kategorične stolpce, dodajte klasifikator na koncu. Jamstvo, da se vseh transformacij naučite PO razdelitvi usposabljanje/test in samo med usposabljanjem. Pojasnite kodo in zakaj ne pušča.
4) Funkcija časovnega okna (nadzor puščanja):
Ustvarite atribut "število naročil v zadnjih 30 dneh" za vsako stranko, vendar NIKOLI ne vključite podatkov po predvidenem dnevu. Vrsto za vrstico pojasnite, da koda ne gleda v prihodnost. Navedel bom stolpec referenčnega datuma.
Šibek poziv/močan poziv
Šibek poziv:
Tem podatkom dodajte dobre lastnosti.
»Dobro« je nedefinirano, cilj je nejasen, ni nadzora uhajanja. AI generira naključne, morda nezaupljive lastnosti.
Močan poziv:
Vaša vloga: inženir funkcij. Cilj: "odliv v 30 dneh" (0/1), predvideni referenčni datum: save_date. V df je zgodovina transakcij. Naloga: Ustvarite 8 funkcij, odgovorite na vprašanje "Ali imam te informacije v času napovedovanja" za VSAKO. Dodajanje datuma za referenčnim datumom v funkcijah časovnega okna. Napišite kodo na način, ki je združljiv s cevovodom, da se izvede po odseku vlak/test.
Tukaj so cilj, referenčni čas in nadzor puščanja definirani od začetka.
Pogoste napake
- Učenje transformacije iz vseh podatkov pred deljenjem. Če parameter skaliranja/kodiranja vidi testne podatke, pride do uhajanja.
- Nepazljiva uporaba ciljnega kodiranja. Je najmočnejša, a najbolj puščajoča metoda; samo iz usposabljanja, v navzkrižnem preverjanju.
- Dodajanje prihodnosti s funkcijo časovnega okna. Če se za dnevom napovedi vnese izračun »zadnjih 30 dni«, model vidi prihodnost.
- Nepotrebno skaliranje v drevesnem modelu in nepopolno skaliranje v linearnem modelu. Odločitve o velikosti se sprejemajo glede na vrsto modela.
- Dodajanje vseh predlogov funkcij AI brez vprašanj. Predlogi lahko vključujejo neuporabne in puščajoče funkcije.
Namig: za vsako funkcijo, ki jo ustvarite, zapišite eno vprašanje: "Ali lahko izračunam to vrednost s podatki, ki jih imam v času napovedovanja?" Če odgovor ni jasen "da", ne uporabljajte funkcije. Ta enotna disciplina odpravi večino uhajanj, povezanih s funkcijami.
Če povzamem
Inženiring funkcij je umetnost generiranja smiselnih signalov iz neobdelanih podatkov in pogosto bolj kot algoritem določa uspeh modela. Kodiranje kategorikal (one-hot, label, target), skaliranje števil (standardizacija, normalizacija) in izdelava izpeljanih funkcij z znanjem domene so osnovna orodja. Toda ta faza je tudi srce uhajanja: vseh transformacij se je treba naučiti po razdelitvi usposabljanje/test in samo iz podatkov o usposabljanju. AI ustvarja veliko idej; Človeška presoja je tista, ki loči dragoceno od nevarnega.
Aplikacijska naloga
Izberite ciljno spremenljivko in oblikujte vsaj pet izpeljanih funkcij iz stolpcev, ki jih imate. Za vsako izmed njih pisno odgovorite na vprašanje "ali sem dosegljiv v času napovedi" in vsaj eno izločite kot "visoko tveganje uhajanja". Nato kodirajte varne funkcije v cevovodu, ki bodo implementirani po particiji.
kontrolni seznam
- [ ] Ali sem uporabil vse transformacije po razdelitvi vlak/test?
- [ ] Ali sem se parametrov skaliranja/kodiranja naučil samo med usposabljanjem?
- [ ] Ali sem odgovoril na vprašanje "ali ga imam v času predvidevanja" za vsako funkcijo?
- [ ] Ali sem bil posebej previden pri metodah z visokim tveganjem, kot je ciljno kodiranje?
- [ ] Ali sem se odločil za ustrezno merilo glede na vrsto modela (drevesni/linearni)?