Dobici:
- Sposobnost da se proizvedu značajne izvedene karakteristike sa znanjem o domeni i kodiraju kategorične kategorije odgovarajućim metodama (one-hot, label, target)
- Sposobnost skaliranja numeričkih varijabli prema tipu modela (standardizacija, normalizacija) i izbjegavanje nepotrebnog ili nepotpunog skaliranja
- Sposobnost izbjegavanja curenja karakteristika učenjem svih transformacija nakon treninga/testiranja i samo iz treninga
Postoji stara izreka u mašinskom učenju: "Primenjeno mašinsko učenje je u suštini inženjering karakteristika." Jer uspjeh modela često dolazi od toga koje inpute dajete modelu, a ne koji algoritam odaberete. Inženjering karakteristika je umjetnost proizvodnje značajnih signala iz sirovih podataka iz kojih model može učiti. Umjetna inteligencija je bogat izvor ideja u ovoj fazi: kada pitate "koje karakteristike se mogu proizvesti iz ovih podataka", ona navodi desetine prijedloga. Ali neki od ovih prijedloga mogu biti vrijedni, neki beskorisni, a neki opasni (curenje). Tvoj je posao da to središ.
Zašto karakterističan inženjering
Sirovi podaci rijetko dolaze do modela u svom najboljem obliku. Dok je sama kolona "datum rođenja" besmislena, vrijednost "starosti" generirana iz nje je snažan signal. Možete izdvojiti atribute kao što su "dan u sedmici", "dan/noć", "da li je praznik" iz "vremenske oznake narudžbe". Možete kombinovati dvije kolone da dobijete omjer („omjer duga/prihoda“). Ovde inženjering karakteristika prevodi znanje iz domena u matematički signal; I upravo zato je to faza koja zahtijeva najviše ljudske inteligencije.
Pretvaranje kategoričkih varijabli u brojeve: kodiranje
Modeli uglavnom 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:
One-hot encoding: Otvara zasebnu kolonu sa vrijednošću 0/1 za svaku kategoriju. Za "grad", formiraju se kolone Istanbul, Ankara, Izmir; Ako je kupac iz Istanbula, samo će ta kolona biti 1. Idealno kada je broj kategorija mali; Ako ima previše kategorija, proizvodi se stotine stupaca (ovo se zove "eksplozija veličine").
Kodiranje etikete: Daje broj svakoj kategoriji (Istanbul=0, Ankara=1). Jednostavno je, ali može slučajno naučiti model sekvenci (kao Ankara > Istanbul); pa se koristi s oprezom u neuređ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 unakrsnog provjeravanja).
Skaliranje: veliki brojevi ne preopterećuju model
Neki modeli (zasnovani na udaljenosti, linearni modeli, neuronske mreže) su osjetljivi 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 ovo popravlja. Dvije uobičajene metode: standardizacija (konvertuje svaku vrijednost u "koliko je standardnih devijacija udaljeno od srednje vrijednosti") i normalizacija (min-max normalizacija — kompresuje vrijednosti u raspon 0-1). Modeli zasnovani na stablu (stabla odlučivanja, slučajna šuma) su neosjetljivi 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 obuci, a zatim isto treba primijeniti na podatke testa. Uključivanje testnih podataka predstavlja curenje i čini da vaš model izgleda bolje nego što zapravo jeste.
Srce curenja u inženjeringu karakteristika
Generiranje karakteristika je mjesto gdje najčešće dolazi do curenja podataka. Dvije tipične greške: curenje vremena — stvaranje funkcije koja uključuje buduće informacije (uključujući dane nakon dana prognoze kada se izračunava „prosjek za posljednjih 30 dana“). Curenje statistike — izračunavanje karakteristike (prosjek skaliranja, ciljna vrijednost kodiranja) iz svih podataka prije podjele obuke/testiranja. Pravilo: naučite svaku transformaciju nakon što prvo obavite split/testiranje i samo iz podataka o obuci. Najsigurniji način da to redovno radite je da koristite pipeline — strukturu koja prikuplja sve transformacije u jednom lancu i primjenjuje ih nakon razdvajanja.
Metoda
za šta
Rizik od curenja
napomena
One-hot encoding
Varijabilna s nekoliko kategorija
nisko
Eksplodira veličinu u više kategorija
Kodiranje etikete
Sortirana kategorija
nisko
Van reda uči pogrešnom redoslijedu
ciljno kodiranje
Višekategorija, jak signal
veoma visoko
Samo iz obrazovanja, u CV-u
standardizacija
Linearni/distancijski modeli
srednje
Parametar zavisi samo od obrazovanja
Funkcija vremenskog prozora
vremenske serije
visoko
Dodajte budućnost
tri mini kofera
Slučaj 1 — Vrijedna imovina. Kreditni tim je generirao funkciju „odnos duga i prihoda“ iz sirovih kolona „mjesečni prihod“ i „mjesečno plaćanje duga“. Ova pojedinačna izvedena karakteristika povećala je tačnost modela sa 71% na 79%; jer je stopa, a ne apsolutni prihod, ono što je zaista odredilo rizik. Pouka: omjeri generirani znanjem o domeni su jaki signali.
Slučaj 2 — Curenje ciljnog kodiranja. Jedan tim je konvertovao "poštanski broj" u broj sa 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 test setu, pavši na 68% u proizvodnji. Protraćeno 6 nedelja truda. Lekcija: kodiranje cilja se radi pažljivo, samo u okviru treninga.
Slučaj 3 — Skaliranje zaboravljanja. Jedan analitičar je unio prihod (0-400.000) i starost kupaca (18-75) u model zasnovan na udaljenosti bez skaliranja. Manekenka je gledala gotovo isključivo na prihode, uništavajući efekat starosti. Kada je dodano skaliranje, segmentacija je postala značajna. Pouka: skaliranje nije zanemareno u daljinskim/linearnim modelima.
Četiri šablona za kopiranje
1) Generisanje ideja o značajkama (eliminacija je na vama):
Vaša uloga: asistent inženjeringa. Moje df kolone: 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 karakteristika koje se mogu generisati iz ovih kolona; navedite rizik od 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 kodira "grad" i "kategorija_proizvoda". VAŽNO: prilagodite kodiranje samo podacima za obuku, a zatim transformirajte podatke testa (sa sklearn OneHotEncoder). Objasnite kako postupate s kategorijom nevidljivo (handle_unknown) u obrazovanju.
3) Konverzija bez curenja sa cjevovodom:
Podesite sklearn Pipeline: primenite StandardScaler na numeričke kolone, OneHotEncoder na kategoričke kolone, dodajte klasifikator na kraju. Garantujemo da se sve transformacije nauče NAKON razdvajanja treninga/testiranja i samo iz treninga. Objasnite kod i zašto ne propušta.
4) Funkcija vremenskog prozora (kontrola curenja):
Generirajte atribut "broj narudžbi u posljednjih 30 dana" za svakog kupca, ali NIKADA nemojte uključivati podatke nakon dana prognoze. Objasnite red po red da kod ne gleda u budućnost. Navest ću kolonu referentnog datuma.
Slaba prompt / Jaka prompt
Slab upit:
Dodajte dobra svojstva ovim podacima.
„Dobro“ je nedefinisano, cilj je nejasan, nema kontrole curenja. AI generiše nasumične, možda nepropusne karakteristike.
Snažan upit:
Vaša uloga: inženjer karakteristika. Cilj: "odbacivanje za 30 dana" (0/1), procijenjeni referentni datum: save_date. Postoji istorija transakcija u df.Task: Generirajte 8 karakteristika, odgovorite na pitanje "Da li imam ove informacije u trenutku predviđanja" za SVAKI. Dodavanje datuma nakon referentnog datuma u funkcijama vremenskog prozora. Napišite kod na način kompatibilan s cevovodom koji će se izvršiti nakon odsjeka za vlak/test.
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.
- Nepažljivo korištenje ciljnog kodiranja. To je najmoćnija, ali metoda koja najviše curi; samo sa treninga, u unakrsnoj validaciji.
- Dodavanje budućnosti sa funkcijom vremenskog prozora. Ako se kalkulacija "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 tipu modela.
- Dodavanje AI svih prijedloga funkcija bez pitanja. Prijedlozi mogu uključivati beskorisne i nepropusne funkcije.
Savjet: Zapišite jedno pitanje za svaku karakteristiku koju generišete: „Mogu li izračunati ovu vrijednost s informacijama koje imam u trenutku kada predviđam?“ Ako odgovor nije jasan "da", nemojte koristiti ovu funkciju. Ova jedinstvena disciplina eliminiše većinu curenja vezanih za karakteristike.
Ukratko
Inženjering karakteristika je umjetnost generiranja značajnih signala iz sirovih podataka i često određuje uspjeh modela više od algoritma. Kodiranje kategorija (one-hot, label, target), skaliranje numerika (standardizacija, normalizacija) i proizvodnja izvedenih karakteristika sa znanjem o domeni su osnovni alati. Ali ova faza je također srce curenja: sve transformacije se moraju naučiti nakon podjele obuke/testiranja i samo iz podataka o obuci. AI generiše obilje ideja; Ljudsko rasuđivanje je ono što razlikuje vrijedno od opasnog.
Zadatak aplikacije
Odaberite ciljnu varijablu i dizajnirajte najmanje pet izvedenih karakteristika iz kolona koje imate. Za svaki od njih pismeno odgovorite na pitanje „da li sam dostupan u vrijeme predviđanja“ i eliminirajte barem jedno kao „visok rizik od curenja“. Zatim kodirajte sigurne karakteristike u cjevovodu koji će se implementirati nakon particije.
kontrolna lista
- [ ] Da li sam primijenio sve transformacije nakon podjele vlak/test?
- [ ] Jesam li naučio parametre skaliranja/kodiranja samo iz treninga?
- [ ] Da li sam odgovorio na pitanje "da li ga imam u trenutku predviđanja" za svaku funkciju?
- [ ] Jesam li posebno pazio na metode visokog rizika kao što je kodiranje cilja?
- [ ] Da li sam odlučio da skaliram odgovarajuće za tip modela (stablo/linearni)?