Jednotka 5 / 11

Funkce: Generování variant, kódování, škálování a zamezení úniku

zisky:

  • Schopnost vytvářet smysluplné odvozené funkce se znalostí domény a kódovat kategorické kategorie vhodnými metodami (one-hot, label, target)
  • Schopnost škálovat číselné proměnné podle typu modelu (standardizace, normalizace) a vyhnout se zbytečnému nebo neúplnému škálování
  • Schopnost vyhnout se úniku funkcí tím, že se naučíte všechny transformace po rozdělení tréninku/testu a pouze ze školení

Ve strojovém učení platí staré přísloví: „Aplikované strojové učení je v podstatě inženýrství funkcí.“ Protože úspěch modelu často vychází z toho, jaké vstupy do modelu dáte, spíše než z toho, jaký algoritmus zvolíte. Funkce je umění produkovat smysluplné signály z nezpracovaných dat, ze kterých se model může učit. Umělá inteligence je v této fázi bohatým zdrojem nápadů: když se zeptáte, „jaké funkce lze z těchto dat vyrobit“, uvádí desítky návrhů. Ale některé z těchto návrhů mohou být cenné, některé mohou být zbytečné a některé mohou být nebezpečné (únik). Vaším úkolem je to vyřešit.

Proč funkce inženýrství

Nezpracovaná data se zřídkakdy dostanou do modelu ve své nejlepší formě. Zatímco samotný sloupec „datum narození“ je nesmyslný, hodnota „věku“ z něj vygenerovaná je silným signálem. Z „časového razítka objednávky“ můžete extrahovat atributy jako „den v týdnu“, „den/noc“, „je svátek“. Můžete zkombinovat dva sloupce a vytvořit poměr („poměr dluh/příjmy“). Zde inženýrství funkcí převádí znalosti domény do matematického signálu; A právě proto je to fáze, která vyžaduje nejvíce lidské inteligence.

Převod kategoriálních proměnných na čísla: kódování

Modely obecně pracují s čísly, nikoli s textem. Převod kategoriálních proměnných (jako je město, barva, typ produktu) na čísla se nazývá kódování. Tři běžné metody:

One-hot encoding: Otevře samostatný sloupec s hodnotou 0/1 pro každou kategorii. Pro "město", Istanbul, Ankara, Izmir sloupy jsou tvořeny; Pokud je zákazník z Istanbulu, pouze tento sloupec bude 1. Ideální, když je počet kategorií malý; Pokud je kategorií příliš mnoho, vytvoří se stovky sloupců (toto se nazývá „exploze velikosti“).

Kódování štítků: Přiděluje číslo každé kategorii (Istanbul=0, Ankara=1). Je to jednoduché, ale může to náhodně naučit model sekvenci (jako Ankara > Istanbul); proto se používá opatrně v neuspořádaných kategoriích.

Cílové kódování: Nahradí každou kategorii průměrem cílové proměnné v dané kategorii. Je to velmi výkonný, ale nejnebezpečnější zdroj úniku: pokud vezmete v úvahu cíl testovacích dat, model vidí budoucnost. Mělo by se počítat pouze z tréninkových dat a pečlivě (v rámci křížové validace).

Měřítko: velká čísla nepřetěžují model

Některé modely (vzdálené, lineární, neuronové sítě) jsou citlivé na měřítko proměnných. Pokud „příjem“ (0–500 000) a „věk“ (0–100) spadají do stejného vzorce, příjem může dominovat jednoduše proto, že je vyšší. Škálování to řeší. Dvě běžné metody: standardizace (převede každou hodnotu na "kolik standardních odchylek od průměru") a normalizace (normalizace min-max — komprimuje hodnoty do rozsahu 0-1). Modely založené na stromech (rozhodovací stromy, náhodný les) jsou necitlivé na měřítko, nevyžadují měřítko.

Upozornění: Parametry škálování a kódování (střední hodnota, směrodatná odchylka, mapování střední hodnoty kategorie) by měly být vypočítány pouze z trénovacích dat, poté by totéž mělo být aplikováno na testovací data. Zahrnutí testovacích dat je únik a váš model vypadá lépe, než ve skutečnosti je.

Srdce úniků v inženýrství funkcí

Generování funkcí je místo, kde únik dat nejčastěji vzniká. Dvě typické chyby: Únik času – vytvoření funkce, která zahrnuje budoucí informace (včetně dnů po dni předpovědi při výpočtu „průměru za posledních 30 dní“). Únik statistik — výpočet funkce (průměr škálování, hodnota cílového kódování) ze všech dat před rozdělením školení/testu. Pravidlo: naučte se každou transformaci po provedení rozdělení vlaku/testu nejprve a pouze z trénovacích dat. Nejbezpečnějším způsobem, jak toho dosáhnout pravidelně, je používat pipeline – strukturu, která shromažďuje všechny transformace v jediném řetězci a aplikuje je po rozdělení.

Metoda

za co

Nebezpečí úniku

poznámka

One-hot kódování

Variabilní s několika kategoriemi

nízká

Rozloží velikost v několika kategoriích

Kódování štítků

Seřazená kategorie

nízká

Mimo pořadí učí nesprávný řád

cílové kódování

Vícekategorie, silný signál

velmi vysoká

Jen ze vzdělání, v CV

standardizace

Lineární/dálkové modely

střední

Parametr závisí pouze na vzdělání

Funkce časového okna

časové řady

vysoká

Přidejte budoucnost

tři mini pouzdra

Případ 1 – Cenný majetek. Úvěrový tým vygeneroval funkci „poměr dluhu k příjmu“ z nezpracovaných sloupců „měsíční příjem“ a „měsíční splátka dluhu“. Tato jediná odvozená vlastnost zvýšila přesnost modelu ze 71 % na 79 %; protože to byla sazba, nikoli absolutní příjem, co skutečně určovalo riziko. Ponaučení: poměry generované znalostí domény jsou silné signály.

Případ 2 – Únik cílového kódování. Jeden tým převedl „PSČ“ na číslo s cílovým kódováním (průměrná rychlost odchodu v dané oblasti), ale udělal to ze všech dat před rozdělením. Model dal 94 % na testovací sadě, ve výrobě klesl na 68 %. 6 týdnů vynaloženého úsilí. Lekce: kódování cíle se provádí pečlivě, pouze v rámci školení.

Případ 3 – Zapomenutí změny měřítka. Jeden analytik převedl tržby (0–400 000) a věk zákazníků (18–75) do modelu založeného na vzdálenosti bez škálování. Modelka hleděla téměř výhradně na příjem, čímž rozdrtila věkový efekt. Když bylo přidáno škálování, segmentace začala mít smysl. Lekce: škálování není zanedbáváno v distančních/lineárních modelech.

Čtyři kopírovatelné šablony

1) Generování nápadů na funkci (eliminace je na vás):

Vaše role: asistent funkce. Moje sloupce df: datum narození, čas_objednávky (časové razítko), příjem_tl, dluh_tl, město, kategorie_produktu. Cíl: „bude půjčka splacena“ (0/1). Navrhněte 15 funkcí, které lze z těchto sloupců vygenerovat; u každého uveďte riziko úniku (nízké/střední/vysoké). Jasně označte ty, které obsahují budoucí informace.

2) Bezpečné kódování (post-split):

Napište kód, který jednoduše zakóduje „město“ a „kategorie_produktu“. DŮLEŽITÉ: přizpůsobte kódování pouze trénovacím datům a poté transformujte testovací data (pomocí sklearn OneHotEncoder). Vysvětlete, jak ve vzdělávání zacházíte s neviditelnou kategorií (handle_unknown).

3) Konverze bez úniku s potrubím:

Nastavte sklearn Pipeline: použijte StandardScaler na číselné sloupce, OneHotEncoder na kategorické sloupce, přidejte klasifikátor na konec. Zaručte, že všechny transformace se naučíte PO rozdělení vlaku/testu a pouze z tréninku. Vysvětlete kód a proč je bez úniku.

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

Pro každého zákazníka vygenerujte atribut „počet objednávek za posledních 30 dní“, NIKDY však nezahrnujte data po předpovídaném dni. Vysvětlete řádek po řádku, že kód nehledí do budoucnosti. Poskytnu sloupec referenčního data.

Slabá výzva / Silná výzva

Slabá výzva:

Přidejte k těmto datům dobré vlastnosti.

„Dobré“ není definováno, cíl je nejasný, neexistuje žádná kontrola úniku. AI generuje náhodné, možná děravé funkce.

Výkonná výzva:

Vaše role: celovečerní inženýr. Cíl: "ukončit za 30 dní" (0/1), odhadované referenční datum: save_date. V df je historie transakcí. Úloha: Vygenerujte 8 funkcí, pro KAŽDOU odpovězte na otázku „Mám tyto informace v době predikce“. Přidání data za referenční datum ve funkcích časového okna. Napište kód způsobem kompatibilním s kanálem, který bude proveden po sekci vlaku/testu.

Zde je od začátku definován cíl, referenční čas a kontrola úniku.

Časté chyby

  • Učení transformace ze všech dat před rozdělením. Pokud parametr škálování/kódování vidí testovací data, dojde k úniku.
  • Neopatrné používání cílového kódování. Je to nejvýkonnější, ale nejděravější metoda; jen ze školení, v křížové validaci.
  • Přidání budoucnosti pomocí funkce časového okna. Pokud je výpočet „posledních 30 dní“ zadán po dni předpovědi, model vidí budoucnost.
  • Zbytečné škálování ve stromovém modelu a neúplné škálování v lineárním modelu. Rozhodnutí o změně měřítka se provádějí podle typu modelu.
  • Přidání všech návrhů funkcí AI bez otázek. Návrhy mohou obsahovat zbytečné a netěsné funkce.
Tip: Zapište si jednu otázku pro každý objekt, který vygenerujete: „Mohu vypočítat tuto hodnotu s informacemi, které mám v době, kdy předpovídám?“ Pokud odpověď není jasná „ano“, funkci nepoužívejte. Tato jediná disciplína eliminuje většinu úniků souvisejících s funkcemi.

V souhrnu

Funkce je umění generovat smysluplné signály z nezpracovaných dat a často rozhoduje o úspěchu modelu více než algoritmus. Základními nástroji jsou kódování kategorií (one-hot, label, target), škálování čísel (standardizace, normalizace) a vytváření odvozených vlastností se znalostí domény. Ale tato fáze je také jádrem úniku: všechny transformace se musí naučit po rozdělení tréninku/testu a pouze z dat tréninku. AI generuje spoustu nápadů; Je to lidský úsudek, který odlišuje cenné od nebezpečného.

Aplikační úkol

Vyberte cílovou proměnnou a navrhněte alespoň pět odvozených prvků ze sloupců, které máte. U každého z nich odpovězte písemně na otázku „jsem v době predikce k dispozici“ a alespoň jednu vyřaďte jako „vysoké riziko úniku“. Poté nakódujte zabezpečené funkce v kanálu, který se má implementovat po rozdělení.

kontrolní seznam

  • [ ] Použil jsem všechny transformace po rozdělení vlaku/testu?
  • [ ] Naučil jsem se parametry škálování/kódování pouze ze školení?
  • [ ] Odpověděl jsem u každé funkce na otázku „mám to v době predikce“?
  • [ ] Věnoval jsem zvýšenou pozornost vysoce rizikovým metodám, jako je cílové kódování?
  • [ ] Rozhodl jsem se vhodně upravit měřítko pro typ modelu (stromový/lineární)?