Jednotka 5 / 11

Inžinierstvo funkcií: Generovanie variantov, kódovanie, škálovanie a predchádzanie úniku

zisky:

  • Schopnosť produkovať zmysluplné odvodené funkcie so znalosťou domény a kódovať kategorické kategórie vhodnými metódami (one-hot, label, target)
  • Schopnosť škálovať číselné premenné podľa typu modelu (štandardizácia, normalizácia) a vyhnúť sa zbytočnému alebo neúplnému škálovaniu
  • Schopnosť vyhnúť sa úniku funkcií učením sa všetkých transformácií po rozdelení tréningu/testu a iba z tréningu

V strojovom učení platí staré príslovie: „Aplikované strojové učenie je v podstate inžinierstvo funkcií.“ Pretože úspech modelu často vychádza z toho, aké vstupy do modelu dávate, a nie z toho, aký algoritmus si vyberiete. Funkcionalita je umenie vytvárať zmysluplné signály z nespracovaných údajov, z ktorých sa model môže učiť. Umelá inteligencia je v tejto fáze bohatým zdrojom nápadov: keď sa spýtate „aké vlastnosti možno z týchto údajov vyrobiť“, uvádza desiatky návrhov. Ale niektoré z týchto návrhov môžu byť cenné, niektoré môžu byť zbytočné a niektoré môžu byť nebezpečné (únik). Vašou úlohou je to vyriešiť.

Prečo funkcia inžinierstva

Nespracované dáta sa zriedka dostanú do modelu v najlepšej forme. Kým samotný stĺpec „dátum narodenia“ nemá zmysel, hodnota „vek“ z neho vygenerovaná je silným signálom. Z „časovej pečiatky objednávky“ môžete extrahovať atribúty ako „deň v týždni“, „deň/noc“, „je sviatok“. Môžete skombinovať dva stĺpce a vytvoriť pomer („pomer dlhu a príjmu“). Funkciové inžinierstvo tu prevádza doménové znalosti do matematického signálu; A práve preto si práve toto štádium vyžaduje najviac ľudskej inteligencie.

Prevod kategorických premenných na čísla: kódovanie

Modely vo všeobecnosti pracujú s číslami, nie s textom. Prevod kategorických premenných (napríklad mesto, farba, typ produktu) na čísla sa nazýva kódovanie. Tri bežné metódy:

One-hot encoding: Otvorí samostatný stĺpec s hodnotou 0/1 pre každú kategóriu. Pre „mesto“ sa tvoria stĺpy Istanbul, Ankara, Izmir; Ak je zákazník z Istanbulu, iba tento stĺpec bude 1. Ideálne, keď je počet kategórií malý; Ak existuje príliš veľa kategórií, vytvorí sa stovky stĺpcov (toto sa nazýva "explózia veľkosti").

Kódovanie štítkov: Priraďuje číslo každej kategórii (Istanbul=0, Ankara=1). Je to jednoduché, ale môže to náhodne naučiť model sekvenciu (ako Ankara > Istanbul); preto sa používa opatrne v neusporiadaných kategóriách.

Cieľové kódovanie: Nahradí každú kategóriu priemerom cieľovej premennej v danej kategórii. Je to veľmi výkonný, ale najnebezpečnejší zdroj úniku: ak vezmete do úvahy cieľ testovacích údajov, model vidí budúcnosť. Mal by sa počítať iba z tréningových údajov a opatrne (v rámci krížovej validácie).

Zmena mierky: veľké čísla nepreťažia model

Niektoré modely (vzdialené modely, lineárne modely, neurónové siete) sú citlivé na rozsah premenných. Ak „príjem“ (0 ​​– 500 000) a „vek“ (0 – 100) spadajú do rovnakého vzorca, príjem môže dominovať jednoducho preto, že je vyšší. Škálovanie to opravuje. Dve bežné metódy: štandardizácia (prevedie každú hodnotu na „koľko štandardných odchýlok od priemeru“) a normalizácia (normalizácia min-max – stlačí hodnoty do rozsahu 0-1). Modely založené na stromoch (rozhodovacie stromy, náhodný les) nie sú citlivé na mierku, nevyžadujú úpravu mierky.

Upozornenie: Parametre škálovania a kódovania (priemer, smerodajná odchýlka, mapovanie strednej hodnoty kategórie) by sa mali vypočítať len z tréningových údajov, potom by sa to isté malo použiť na testovacie údaje. Zahrnutie testovacích údajov je únikom a váš model vyzerá lepšie, ako v skutočnosti je.

Srdce úniku v inžinierstve funkcií

Práve generovanie funkcií je miesto, kde únik dát najčastejšie vzniká. Dve typické chyby: Únik času – vytvorenie funkcie, ktorá obsahuje budúce informácie (vrátane dní po predpovedanom dni pri výpočte „priemeru za posledných 30 dní“). Únik štatistík — výpočet funkcie (priemer škálovania, cieľová hodnota kódovania) zo všetkých údajov pred rozdelením tréningu/testu. Pravidlo: naučte sa každú transformáciu po vykonaní rozdelenia vlaku/testu najskôr a len z trénovacích údajov. Najbezpečnejším spôsobom, ako to urobiť pravidelne, je použiť potrubie - štruktúru, ktorá zhromažďuje všetky transformácie v jednom reťazci a aplikuje ich po rozdelení.

Metóda

za čo

Riziko úniku

poznámka

Jednorazové kódovanie

Variabilné s niekoľkými kategóriami

nízka

Rozloží veľkosť vo viacerých kategóriách

Kódovanie štítkov

Triedená kategória

nízka

Mimo poriadok učí nesprávnemu poriadku

cieľové kódovanie

Viackategóriový, silný signál

veľmi vysoká

Len zo vzdelania, v životopise

štandardizácia

Lineárne/dištančné modely

stredná

Parameter závisí len od vzdelania

Funkcia časového okna

časové rady

vysoká

Pridajte budúcnosť

tri mini prípady

Prípad 1 – Cenný majetok. Úverový tím vygeneroval funkciu „pomer dlhu k príjmu“ z nespracovaných stĺpcov „mesačný príjem“ a „mesačná splátka dlhu“. Táto jediná odvodená funkcia zvýšila presnosť modelu zo 71 % na 79 %; pretože to bola sadzba, nie absolútny príjem, čo skutočne určovalo riziko. Poučenie: pomery generované znalosťou domény sú silné signály.

Prípad 2 – Únik cieľového kódovania. Jeden tím previedol „PSČ“ na číslo s cieľovým kódovaním (priemerná miera odchodu ľudí v danej oblasti), ale urobil tak zo všetkých údajov pred rozdelením. Model dal 94 % na testovacej súprave, pričom vo výrobe klesol na 68 %. 6 týždňov zbytočného úsilia. Ponaučenie: kódovanie cieľa sa robí opatrne, iba v rámci tréningu.

Prípad 3 – Zabudnutie na zmenu mierky. Jeden analytik vložil príjmy (0 – 400 000) a vek zákazníkov (18 – 75) do modelu založeného na vzdialenosti bez škálovania. Modelka sa pozerala takmer výlučne na príjem, čím drvila vekový efekt. Po pridaní škálovania sa segmentácia stala zmysluplnou. Ponaučenie: škálovanie nie je zanedbávané v dištančných/lineárnych modeloch.

Štyri kopírovateľné šablóny

1) Generovanie nápadov na funkcie (odstránenie je na vás):

Vaša úloha: asistent funkcie. Moje stĺpce df: dátum narodenia, čas_objednávky (časová pečiatka), príjem_tl, dlh_tl, mesto, kategória_produktu. Cieľ: „bude pôžička splatená“ (0/1). Navrhnite 15 funkcií, ktoré je možné vygenerovať z týchto stĺpcov; špecifikujte riziko úniku (nízke/stredné/vysoké) pre každý. Jasne označte tie, ktoré obsahujú budúce informácie.

2) Bezpečné kódovanie (po rozdelení):

Napíšte kód, ktorý jednoducho zakóduje „mesto“ a „kategória_produktu“. DÔLEŽITÉ: prispôsobte kódovanie iba trénovacím údajom a potom transformujte testovacie údaje (pomocou sklearn OneHotEncoder). Vysvetlite, ako zaobchádzate s neviditeľnou kategóriou (handle_unknown) vo vzdelávaní.

3) Konverzia bez úniku s potrubím:

Nastavte sklearn Pipeline: použite StandardScaler na číselné stĺpce, OneHotEncoder na kategorické stĺpce, na koniec pridajte klasifikátor. Zaručte, že všetky transformácie sa naučia PO rozdelení vlak/test a iba z tréningu. Vysvetlite kód a prečo je bez úniku.

4) Funkcia časového okna (kontrola úniku):

Pre každého zákazníka vygenerujte atribút „počet objednávok za posledných 30 dní“, NIKDY však nezahŕňajte údaje po predpovedanom dni. Riadok po riadku vysvetlite, že kód nepozerá do budúcnosti. Poskytnem stĺpec referenčného dátumu.

Slabá výzva / Silná výzva

Slabá výzva:

Pridajte k týmto údajom dobré vlastnosti.

„Dobré“ nie je definované, cieľ je nejasný, neexistuje žiadna kontrola úniku. AI generuje náhodné, možno deravé funkcie.

Výkonná výzva:

Vaša úloha: inžinier funkcií. Cieľ: "ukončiť za 30 dní" (0/1), odhadovaný referenčný dátum: save_date. V df je história transakcií. Úloha: Vygenerujte 8 funkcií, odpovedzte na otázku „Mám tieto informácie v čase predikcie“ pre KAŽDÚ. Pridanie dátumu za referenčný dátum vo funkciách časového okna. Napíšte kód spôsobom kompatibilným s potrubím, ktorý sa má vykonať po sekcii vlaku/testu.

Tu je od začiatku definovaný cieľ, referenčný čas a kontrola úniku.

Časté chyby

  • Učenie transformácie zo všetkých údajov pred delením. Ak parameter škálovania/kódovania vidí údaje testu, dôjde k úniku.
  • Neopatrné používanie cieľového kódovania. Je to najvýkonnejšia, ale najviac presakujúca metóda; len z tréningu, v krížovej validácii.
  • Pridanie budúcnosti pomocou funkcie časového okna. Ak je výpočet „posledných 30 dní“ zadaný po dni predpovede, model vidí budúcnosť.
  • Zbytočné škálovanie v stromovom modeli a neúplné škálovanie v lineárnom modeli. Rozhodnutia o mierke sa robia podľa typu modelu.
  • Pridanie každého návrhu funkcie AI bez akýchkoľvek otázok. Návrhy môžu obsahovať zbytočné a netesné funkcie.
Tip: Zapíšte si jednu otázku pre každú vygenerovanú funkciu: „Môžem vypočítať túto hodnotu s informáciami, ktoré mám v čase, keď robím predpoveď?“ Ak odpoveď nie je jasná „áno“, túto funkciu nepoužívajte. Táto jediná disciplína eliminuje väčšinu únikov súvisiacich s funkciami.

V súhrne

Funkcionálne inžinierstvo je umenie generovania zmysluplných signálov z nespracovaných údajov a často rozhoduje o úspechu modelu viac ako algoritmus. Základnými nástrojmi sú kódovanie kategoriál (one-hot, label, target), škálovanie čísel (štandardizácia, normalizácia) a vytváranie odvodených prvkov so znalosťou domény. Ale táto fáza je tiež jadrom úniku: všetky transformácie sa musia naučiť po rozdelení tréningu/testu a iba z údajov tréningu. AI generuje množstvo nápadov; Je to ľudský úsudok, ktorý odlišuje cenné od nebezpečného.

Aplikačná úloha

Vyberte cieľovú premennú a navrhnite aspoň päť odvodených prvkov zo stĺpcov, ktoré máte. Pri každom z nich písomne ​​odpovedzte na otázku „som v čase predpovede k dispozícii“ a vylúčte aspoň jeden ako „vysoké riziko úniku“. Potom nakódujte funkcie zabezpečenia v potrubí, ktoré sa má implementovať po rozdelení.

kontrolný zoznam

  • [ ] Použil som všetky transformácie po rozdelení vlaku/testu?
  • [ ] Naučil som sa škálovanie/kódovanie parametrov len zo školenia?
  • [ ] Odpovedal som pri každej funkcii na otázku „mám to v čase predpovede“?
  • [ ] Venoval som zvýšenú pozornosť vysoko rizikovým metódam, ako je cieľové kódovanie?
  • [ ] Rozhodol som sa pre primeranú mierku pre typ modelu (stromový/lineárny)?