Jedinica 5 / 11

Inženjering značajki: generiranje varijanti, kodiranje, skaliranje i izbjegavanje curenja

Dobici:

  • Sposobnost proizvodnje smislenih izvedenih značajki sa znanjem domene i kodiranje kategorijskih kategorija s odgovarajućim metodama (jednokratno, oznaka, cilj)
  • Sposobnost skaliranja numeričkih varijabli prema vrsti modela (standardizacija, normalizacija) i izbjegavanje nepotrebnog ili nepotpunog skaliranja
  • Sposobnost izbjegavanja curenja značajki učenjem svih transformacija nakon podjele obuke/testiranja i samo iz obuke

Postoji stara izreka u strojnom učenju: "Primijenjeno strojno učenje je u biti inženjering značajki." Budući da uspjeh modela često dolazi od toga koje inpute dajete modelu, a ne od toga koji algoritam odaberete. Inženjering značajki umjetnost je proizvodnje smislenih signala iz neobrađenih podataka iz kojih model može učiti. Umjetna inteligencija je bogat izvor ideja u ovoj fazi: kada pitate "koje se značajke mogu proizvesti iz ovih podataka", navodi se na desetke prijedloga. Ali neki od ovih prijedloga mogu biti vrijedni, neki mogu biti beskorisni, a neki mogu biti opasni (curenje). Tvoj je posao da to središ.

Zašto značajka inženjering

Sirovi podaci rijetko dolaze do modela u svom najboljem obliku. Iako je sam stupac "datum rođenja" besmislen, vrijednost "dob" koja se iz njega generira snažan je signal. Možete izdvojiti atribute kao što su "dan u tjednu", "dan/noć", "je li praznik" iz "vremenske oznake narudžbe". Možete kombinirati dva stupca da biste dobili omjer ("omjer duga/prihoda"). Ovdje inženjering značajki prevodi znanje domene u matematički signal; I baš zato je pozornica ta koja zahtijeva najviše ljudske inteligencije.

Pretvaranje kategoričkih varijabli u brojeve: kodiranje

Modeli općenito rade s brojevima, a ne s tekstom. Pretvaranje kategoričkih varijabli (kao što su grad, boja, vrsta proizvoda) u brojeve naziva se kodiranje. Tri uobičajene metode:

Jednokratno kodiranje: otvara zaseban stupac s vrijednošću 0/1 za svaku kategoriju. Za "grad", formiraju se stupci Istanbul, Ankara, Izmir; Ako je kupac iz Istanbula, samo će taj stupac biti 1. Idealno kada je broj kategorija mali; Ako postoji previše kategorija, proizvodi se stotine stupaca (ovo se naziva "eksplozija veličine").

Kodiranje oznake: Daje broj svakoj kategoriji (Istanbul=0, Ankara=1). Jednostavno je, ali može slučajno naučiti model slijedu (kao Ankara > Istanbul); pa se koristi s oprezom u nesređenim kategorijama.

Ciljno kodiranje: zamjenjuje svaku kategoriju prosjekom ciljne varijable u toj kategoriji. To je vrlo moćan, ali najopasniji izvor curenja: ako uzmete u obzir cilj testnih podataka, model vidi budućnost. Treba ga izračunati samo iz podataka o obuci i pažljivo (unutar unakrsne provjere).

Skaliranje: veliki brojevi ne opterećuju model

Neki modeli (oni koji se temelje na udaljenosti, linearni modeli, neuronske mreže) osjetljivi su na skalu varijabli. Ako "prihod" (0-500 000) i "dob" (0-100) spadaju u isti obrazac, prihod može dominirati jednostavno zato što je veći. Skaliranje to popravlja. Dvije uobičajene metode: standardizacija (pretvara svaku vrijednost u "koliko standardnih odstupanja od srednje vrijednosti") i normalizacija (min-max normalizacija — sažima vrijednosti u raspon 0-1). Modeli temeljeni na stablima (stabla odlučivanja, nasumične šume) neosjetljivi su na skalu, ne zahtijevaju skaliranje.

Oprez: Parametri skaliranja i kodiranja (srednja vrijednost, standardna devijacija, mapiranje srednje vrijednosti kategorije) trebaju se izračunati samo iz podataka o vježbanju, zatim se isto treba primijeniti na podatke testa. Uključivanje testnih podataka je curenje i čini da vaš model izgleda bolje nego što zapravo jest.

Srce curenja u inženjerstvu značajki

Generiranje značajki mjesto je gdje curenje podataka najčešće nastaje. Dvije tipične pogreške: curenje vremena — stvaranje značajke koja uključuje buduće informacije (uključujući dane nakon dana prognoze kada se izračunava "prosjek zadnjih 30 dana"). Curenje statistike — izračunavanje značajke (prosjek skaliranja, ciljana vrijednost kodiranja) iz svih podataka prije podjele obuke/testiranja. Pravilo: naučite svaku transformaciju nakon što ste prvo izvršili train/test split i samo iz podataka za obuku. Najsigurniji način da to činite redovito jest korištenje cjevovoda — strukture koja prikuplja sve transformacije u jednom lancu i primjenjuje ih nakon razdvajanja.

metoda

za što

Opasnost od curenja

bilješka

One-hot kodiranje

Varijabilno s nekoliko kategorija

nizak

Eksplodira veličinu u više kategorija

Kodiranje naljepnica

Razvrstana kategorija

nizak

Izvan reda uči krivi red

ciljno kodiranje

Više kategorija, jak signal

vrlo visoko

Samo iz obrazovanja, u životopisu

standardizacija

Linearni/udaljeni modeli

srednji

Parametar ovisi samo o obrazovanju

Značajka vremenskog prozora

vremenske serije

visoka

Dodajte budućnost

tri mini kućišta

Slučaj 1 — Vrijedna imovina. Kreditni tim generirao je značajku "omjer duga i prihoda" iz neobrađenih stupaca "mjesečni prihod" i "mjesečno plaćanje duga". Ova jedina izvedena značajka povećala je točnost modela sa 71% na 79%; jer je stopa, a ne apsolutni prihod, stvarno odredila rizik. Lekcija: omjeri generirani znanjem domene jaki su signali.

Slučaj 2 — curenje ciljanog kodiranja. Jedan je tim pretvorio "poštanski broj" u broj s ciljnim kodiranjem (prosječna stopa odljeva u tom području), ali je to učinio iz svih podataka prije razdvajanja. Model je dao 94% na testnom setu, pao je na 68% u proizvodnji. Uzalud izgubljenih 6 tjedana truda. Lekcija: ciljno kodiranje se provodi pažljivo, samo unutar obuke.

Slučaj 3 — Zaboravljanje skaliranja. Jedan analitičar unijeo je prihod (0-400.000) i dob korisnika (18-75) u model temeljen na udaljenosti bez skaliranja. Manekenka je gledala gotovo isključivo na prihode, uništavajući učinak dobi. Kada je dodano skaliranje, segmentacija je postala smislena. Lekcija: skaliranje nije zanemareno u udaljenim/linearnim modelima.

Četiri predloška za kopiranje

1) Generiranje ideja za značajke (eliminacija ovisi o vama):

Vaša uloga: asistent inženjeringa značajki. Moji df stupci: datum_rođenja, vrijeme_narudžbe (vremenska oznaka), prihod_tl, dug_tl, grad, kategorija_proizvoda. Cilj: "hoće li kredit biti vraćen" (0/1). Predložite 15 značajki koje se mogu generirati iz ovih stupaca; navedite rizik curenja (nizak/srednji/visok) za svaki. Jasno označite one koji sadrže buduće informacije.

2) Sigurno kodiranje (post-split):

Napišite kod koji jednokratno kodira "city" i "product_category". VAŽNO: prilagodite kodiranje samo podacima o vježbanju, zatim transformirajte testne podatke (sa sklearn OneHotEncoder). Objasnite kako postupate s neviđenom kategorijom (handle_unknown) u obrazovanju.

3) Konverzija bez curenja s cjevovodom:

Postavite sklearn Pipeline: primijenite StandardScaler na numeričke stupce, OneHotEncoder na kategoričke stupce, dodajte klasifikator na kraju. Jamstvo da se sve transformacije uče NAKON odvajanja trening/test i samo tijekom treninga. Objasnite kod i zašto ne curi.

4) Značajka vremenskog prozora (kontrola curenja):

Generirajte atribut "broj narudžbi u zadnjih 30 dana" za svakog kupca, ali NIKADA ne uključite podatke nakon predviđenog dana. Objasnite red po red da kod ne gleda u budućnost. Navest ću stupac referentnog datuma.

Slab upit / Jak upit

Slab upit:

Ovim podacima dodajte dobra svojstva.

"Dobro" je nedefinirano, cilj je nejasan, nema kontrole curenja. AI generira nasumične, možda nepropusne značajke.

Snažan upit:

Vaša uloga: inženjer značajki. Cilj: "odljev za 30 dana" (0/1), procijenjeni referentni datum: save_date. U df-u postoji povijest transakcija. Zadatak: Generirajte 8 značajki, odgovorite na pitanje "Imam li ove informacije u vrijeme predviđanja" za SVAKU. Dodavanje datuma nakon referentnog datuma u značajkama vremenskog prozora. Napišite kod na način kompatibilan s cjevovodom koji će se izvršiti nakon dijela vlaka/testiranja.

Ovdje su cilj, referentno vrijeme i kontrola curenja definirani od početka.

Uobičajene greške

  • Učenje transformacije iz svih podataka prije dijeljenja. Ako parametar skaliranja/kodiranja vidi testne podatke, dolazi do curenja.
  • Nemarno korištenje ciljanog kodiranja. To je najmoćnija, ali najpropustljivija metoda; samo s treninga, u unakrsnoj provjeri.
  • Dodavanje budućnosti sa značajkom vremenskog prozora. Ako se izračun "zadnjih 30 dana" unese nakon dana prognoze, model vidi budućnost.
  • Nepotrebno skaliranje u modelu stabla i nepotpuno skaliranje u linearnom modelu. Odluke o skaliranju donose se prema vrsti modela.
  • Dodavanje prijedloga svake značajke AI-a bez pitanja. Prijedlozi mogu uključivati ​​beskorisne i nepropusne značajke.
Savjet: Zapišite jedno pitanje za svaku značajku koju generirate: "Mogu li izračunati ovu vrijednost s informacijama koje imam u trenutku kada predviđam?" Ako odgovor nije jasan "da", nemojte koristiti ovu značajku. Ova jedinstvena disciplina eliminira većinu curenja vezanih uz značajke.

Ukratko

Inženjering značajki umjetnost je generiranja smislenih signala iz neobrađenih podataka i često određuje uspjeh modela više od algoritma. Kodiranje kategorikala (one-hot, label, target), numeričko skaliranje (standardizacija, normalizacija) i proizvodnja izvedenih značajki sa znanjem domene osnovni su alati. Ali ova je faza ujedno i srž curenja podataka: sve se transformacije moraju naučiti nakon podjele trening/test i samo iz podataka o treningu. AI stvara mnoštvo ideja; Ljudska je prosudba ta koja razlikuje vrijedno od opasnog.

Zadatak aplikacije

Odaberite ciljnu varijablu i dizajnirajte najmanje pet izvedenih značajki iz stupaca koje imate. Za svaki od njih pismeno odgovorite na pitanje "jesam li dostupan u vrijeme predviđanja" i eliminirajte barem jedan kao "visoki rizik od curenja". Zatim kodirajte sigurne značajke u cjevovodu koji će se implementirati nakon particije.

popis za provjeru

  • [ ] Jesam li primijenio sve transformacije nakon podjele vlak/test?
  • [ ] Jesam li parametre skaliranja/kodiranja naučio samo tijekom obuke?
  • [ ] Jesam li odgovorio na pitanje "imam li ga u vrijeme predviđanja" za svaku značajku?
  • [ ] Jesam li pazio s visokorizičnim metodama kao što je ciljano kodiranje?
  • [ ] Jesam li odlučio prikladno mjeriti za vrstu modela (stablo/linearno)?