Enhet 5 / 11

Funktionsteknik: Generera varianter, kodning, skalning och undvikande av läckage

Vinster:

  • Förmåga att producera meningsfulla derivatfunktioner med domänkunskap och koda kategoriska kategorier med lämpliga metoder (one-hot, label, target)
  • Förmåga att skala numeriska variabler efter modelltyp (standardisering, normalisering) och undvika onödig eller ofullständig skalning
  • Möjlighet att undvika funktionsläckage genom att lära sig alla transformationer efter tränings-/testdelningen och endast från träning

Det finns ett gammalt talesätt inom maskininlärning: "Tillämpad maskininlärning är i huvudsak funktionsteknik." Eftersom framgången för en modell ofta kommer av vilka input du ger till modellen, snarare än vilken algoritm du väljer. Feature engineering är konsten att producera meningsfulla signaler från rådata som modellen kan lära sig av. Artificiell intelligens är en rik källa till idéer i detta skede: när du frågar "vilka funktioner kan produceras från denna data", listar den dussintals förslag. Men några av dessa förslag kan vara värdefulla, vissa kan vara värdelösa och vissa kan vara farliga (läcka). Det är ditt jobb att reda ut det.

Varför funktionsteknik

Rådata kommer sällan till modellen i sin bästa form. Medan kolumnen "födelsedatum" enbart är meningslös, är "ålder"-värdet som genereras från den en stark signal. Du kan extrahera attribut som "veckodag", "dag/natt", "är det en helgdag" från "beställ tidsstämpel". Du kan kombinera två kolumner för att skapa ett förhållande ("skuld/inkomstkvot"). Här är funktionsteknik att översätta domänkunskap till matematisk signal; Och det är just därför det är scenen som kräver mest mänsklig intelligens.

Konvertera kategoriska variabler till tal: kodning

Modeller fungerar i allmänhet med siffror, inte text. Att konvertera kategoriska variabler (som stad, färg, produkttyp) till tal kallas för kodning. Tre vanliga metoder:

One-hot encoding: Öppnar en separat kolumn med värdet 0/1 för varje kategori. För "stad" bildas kolumner i Istanbul, Ankara, Izmir; Om en kund är från Istanbul kommer endast den kolumnen att vara 1. Idealiskt när antalet kategorier är litet; Om det finns för många kategorier produceras hundratals kolumner (detta kallas "storleksexplosion").

Etikettkodning: Ger ett nummer till varje kategori (Istanbul=0, Ankara=1). Det är enkelt, men det kan av misstag lära modellen en sekvens (som Ankara > Istanbul); så det används med försiktighet i oordnade kategorier.

Målkodning: Ersätter varje kategori med genomsnittet av målvariabeln i den kategorin. Det är mycket kraftfullt, men den farligaste källan till läckage: om du tar hänsyn till målet för testdata, ser modellen framtiden. Den bör endast beräknas utifrån träningsdata och noggrant (inom korsvalidering).

Skalning: stora siffror överväldigar inte modellen

Vissa modeller (avståndsbaserade, linjära modeller, neurala nätverk) är känsliga för variablernas skala. Om "inkomst" (0-500 000) och "ålder" (0-100) faller in i samma mönster kan inkomsten dominera bara för att den är större. Skalning fixar detta. Två vanliga metoder: standardisering (konverterar varje värde till "hur många standardavvikelser bort från medelvärdet") och normalisering (min-max normalisering - komprimerar värden till intervallet 0-1). Trädbaserade modeller (beslutsträd, slumpmässig skog) är skalokänsliga, de kräver inte skalning.

Varning: Skalnings- och kodningsparametrar (medelvärde, standardavvikelse, kategori-medelmappning) bör endast beräknas från träningsdata, sedan bör detsamma tillämpas på testdata. Att inkludera testdata är läckage och gör att din modell ser bättre ut än den faktiskt är.

Hjärtat av läckage inom funktionsteknik

Funktionsgenerering är där dataläckaget oftast uppstår. Två typiska misstag: Tidsläcka — producerar en funktion som inkluderar framtida information (inklusive dagar efter prognosdagen vid beräkning av "genomsnittet för de senaste 30 dagarna"). Statistikläckage — beräknar en funktion (skalningsmedelvärde, målkodningsvärde) från all data före tränings-/testdelningen. Regel: lär dig varje transformation efter att ha gjort tåg-/testdelningen först och endast från träningsdata. Det säkraste sättet att göra detta regelbundet är att använda pipeline - en struktur som samlar alla transformationer i en enda kedja och tillämpar dem efter uppdelning.

Metod

för vad

Risk för läckage

notera

One-hot-kodning

Variabel med få kategorier

låg

Exploderar storlek i flera kategorier

Etikettkodning

Sorterad kategori

låg

Oordning lär fel ordning

målkodning

Flerkategori, stark signal

mycket hög

Bara från utbildning, i CV

standardisering

Linjära/distansmodeller

medium

Parameter beror bara på utbildning

Tidsfönsterfunktion

tidsserier

hög

Lägg till framtiden

tre minifodral

Fall 1 — Värdefull egendom. Ett kreditteam skapade funktionen "skuld i förhållande till inkomst" från kolumnerna "månadsinkomst" och "månatlig skuldbetalning". Denna enda härledda funktion ökade modellnoggrannheten från 71 % till 79 %; eftersom det var kursen, inte den absoluta inkomsten, som verkligen avgjorde risken. Lärdom: nyckeltal som genereras av domänkunskap är starka signaler.

Fall 2 — Målkodningsläcka. Ett team konverterade "postnumret" till ett nummer med målkodningen (den genomsnittliga churn-hastigheten i det området), men gjorde det från all data innan de delades. Modellen gav 94 % på testsetet, och sjönk till 68 % i produktionen. 6 veckors ansträngning bortkastade. Lektion: målkodning görs noggrant, endast inom träning.

Fall 3 — Skalning att glömma. En analytiker matade in intäkter (0-400 000) och kunders ålder (18-75) till en distansbaserad modell utan skalning. Modellen tittade nästan uteslutande på inkomst, vilket krossade ålderseffekten. När skalning lades till blev segmenteringen meningsfull. Lektion: skalning försummas inte i distans/linjära modeller.

Fyra kopierbara mallar

1) Generering av funktionsidéer (elimineringen är upp till dig):

Din roll: funktionsteknikassistent. Mina df-kolumner: födelsedatum, ordertid (tidsstämpel), inkomst_tl, debt_tl, stad, produktkategori. Mål: "kommer lånet att återbetalas" (0/1). Föreslå 15 funktioner som kan genereras från dessa kolumner; specificera risken för läckage (låg/medel/hög) för varje. Markera tydligt de som innehåller framtida information.

2) Säker kodning (post-split):

Skriv kod som one-hot kodar "stad" och "produktkategori". VIKTIGT: Anpassa endast kodningen till träningsdatan, transformera sedan testdata (med sklearn OneHotEncoder). Förklara hur du hanterar den osynliga kategorin (handle_unknown) inom utbildning.

3) Läckagefri konvertering med Pipeline:

Konfigurera sklearn Pipeline: tillämpa StandardScaler på numeriska kolumner, OneHotEncoder på kategoriska kolumner, lägg till en klassificerare i slutet. Garantera att alla transformationer lärs in EFTER tåget/testdelningen och endast från träning. Förklara koden och varför den är läckagefri.

4) Tidsfönsterfunktion (läckagekontroll):

Generera attributet "antal beställningar under de senaste 30 dagarna" för varje kund, men inkludera ALDRIG data efter prognosdagen. Förklara rad för rad att koden inte ser in i framtiden. Jag kommer att tillhandahålla referensdatumkolumnen.

Svag prompt / Stark prompt

Svag uppmaning:

Lägg till bra egenskaper till denna data.

"Bra" är odefinierat, målet är oklart, det finns ingen läckagekontroll. AI genererar slumpmässiga, kanske läckande, funktioner.

Kraftfull uppmaning:

Din roll: funktionsingenjör. Mål: "avgång på 30 dagar" (0/1), uppskattat referensdatum: save_date. Det finns transaktionshistorik i df. Task: Generera 8 funktioner, svara på frågan "Har jag denna information vid tidpunkten för förutsägelse" för VARJE. Lägga till datumet efter referensdatumet i tidsfönsterfunktioner. Skriv koden på ett pipeline-kompatibelt sätt som ska exekveras efter tåg-/testsektionen.

Här definieras mål, referenstid och läckagekontroll från början.

Vanliga misstag

  • Att lära sig transformationen från all data före delning. Om skalnings-/kodningsparametern ser testdata uppstår läckage.
  • Slarvig användning av målkodning. Det är den mest kraftfulla men mest läckande metoden; bara från träning, i korsvalidering.
  • Lägga till framtiden med en tidsfönsterfunktion. Om beräkningen "senaste 30 dagarna" läggs in efter prognosdagen ser modellen framtiden.
  • Onödig skalning i trädmodellen och ofullständig skalning i den linjära modellen. Skalningsbeslut fattas enligt modelltyp.
  • Lägger till AI:s alla funktionsförslag utan att ifrågasätta. Förslag kan innehålla värdelösa och läckande funktioner.
Tips: Skriv ner en fråga för varje funktion du genererar: "Kan jag beräkna detta värde med den information jag har när jag gör förutsägelsen?" Om svaret inte är ett tydligt "ja", använd inte funktionen. Denna enda disciplin eliminerar de flesta funktionsrelaterade läckor.

Sammanfattningsvis

Funktionsteknik är konsten att generera meningsfulla signaler från rådata och avgör ofta modellens framgång mer än algoritmen. Att koda kategorier (one-hot, label, target), skalning av numeriska tal (standardisering, normalisering) och framställning av derivativa funktioner med domänkunskap är de grundläggande verktygen. Men denna fas är också kärnan i läckan: alla transformationer måste läras efter tränings-/testdelningen och endast från träningsdata. AI genererar massor av idéer; Det är mänskligt omdöme som skiljer det värdefulla från det farliga.

Applikationsuppgift

Välj en målvariabel och designa minst fem derivatfunktioner från de kolumner du har. För var och en av dem, svara skriftligen på frågan "är jag tillgänglig vid tidpunkten för förutsägelsen" och eliminera minst en som "hög risk för läckage". Koda sedan de säkra funktionerna i en pipeline som ska implementeras efter partitionering.

checklista

  • [ ] Tillämpade jag alla transformationer efter tåg-/testdelningen?
  • [ ] Lärde jag mig bara skalnings-/kodningsparametrar från träning?
  • [ ] Har jag svarat på frågan "har jag det vid tidpunkten för förutsägelse" för varje funktion?
  • [ ] Har jag varit extra försiktig med högriskmetoder som målkodning?
  • [ ] Har jag bestämt mig för att skala på lämpligt sätt för modelltypen (träd/linjär)?