Gevinster:
- Evne til å produsere meningsfulle avledede funksjoner med domenekunnskap og kode kategoriske kategorier med passende metoder (one-hot, label, target)
- Evne til å skalere numeriske variabler i henhold til modelltype (standardisering, normalisering) og unngå unødvendig eller ufullstendig skalering
- Evne til å unngå funksjonslekkasje ved å lære alle transformasjoner etter trening/testdeling og kun fra trening
Det er et gammelt ordtak innen maskinlæring: "Anvendt maskinlæring er i hovedsak funksjonsteknikk." Fordi suksessen til en modell ofte kommer av hvilke input du gir til modellen, snarere enn hvilken algoritme du velger. Feature engineering er kunsten å produsere meningsfulle signaler fra rådata som modellen kan lære av. Kunstig intelligens er en rik kilde til ideer på dette stadiet: når du spør "hvilke funksjoner kan produseres fra disse dataene", viser den dusinvis av forslag. Men noen av disse forslagene kan være verdifulle, noen kan være ubrukelige, og noen kan være farlige (lekkasje). Det er din jobb å ordne opp.
Hvorfor funksjonsteknikk
Rådata kommer sjelden til modellen i sin beste form. Mens kolonnen "fødselsdato" alene er meningsløs, er "alder"-verdien generert fra den et sterkt signal. Du kan trekke ut attributter som "ukedag", "dag/natt", "er det en helligdag" fra "bestillingstidsstempelet". Du kan kombinere to kolonner for å produsere et forhold ("gjeld/inntektsforhold"). Her er funksjonsteknikk å oversette domenekunnskap til matematisk signal; Og det er nettopp derfor det er scenen som krever mest menneskelig intelligens.
Konvertering av kategoriske variabler til tall: koding
Modeller fungerer vanligvis med tall, ikke tekst. Å konvertere kategoriske variabler (som by, farge, produkttype) til tall kalles koding. Tre vanlige metoder:
One-hot-koding: Åpner en separat kolonne med en verdi på 0/1 for hver kategori. For "by" dannes kolonner i Istanbul, Ankara, Izmir; Hvis en kunde er fra Istanbul, vil bare den kolonnen være 1. Ideell når antallet kategorier er lite; Hvis det er for mange kategorier, produserer det hundrevis av kolonner (dette kalles "størrelseseksplosjon").
Etikettkoding: Gir et tall til hver kategori (Istanbul=0, Ankara=1). Det er enkelt, men det kan ved et uhell lære modellen en sekvens (som Ankara > Istanbul); så det brukes med forsiktighet i uordnede kategorier.
Målkoding: Erstatter hver kategori med gjennomsnittet av målvariabelen i den kategorien. Det er veldig kraftig, men den farligste kilden til lekkasje: hvis du tar hensyn til målet for testdataene, ser modellen fremtiden. Den skal kun beregnes fra treningsdata og nøye (innenfor kryssvalidering).
Skalering: store tall overvelder ikke modellen
Noen modeller (avstandsbaserte, lineære modeller, nevrale nettverk) er følsomme for størrelsen på variablene. Hvis "inntekt" (0-500 000) og "alder" (0-100) faller inn i samme mønster, kan inntekten dominere rett og slett fordi den er større. Skalering fikser dette. To vanlige metoder: standardisering (konverterer hver verdi til "hvor mange standardavvik unna gjennomsnittet") og normalisering (min-maks normalisering - komprimerer verdier til området 0-1). Trebaserte modeller (beslutningstrær, tilfeldig skog) er skala ufølsomme, de krever ikke skalering.
Forsiktig: Skalerings- og kodingsparametere (gjennomsnitt, standardavvik, kategori-gjennomsnittskartlegging) skal kun beregnes fra treningsdataene, deretter bør det samme brukes på testdataene. Å inkludere testdata er lekkasje og gjør at modellen din ser bedre ut enn den faktisk er.
Hjertet av lekkasje i funksjonsteknikk
Generering av funksjoner er der datalekkasjen oftest oppstår. To typiske feil: Tidslekkasje - produsere en funksjon som inkluderer fremtidig informasjon (inkludert dager etter prognosedagen når du beregner "gjennomsnittet for siste 30 dager"). Statistikklekkasje — beregner en funksjon (skaleringsgjennomsnitt, målkodingsverdi) fra alle dataene før trenings-/testdelingen. Regel: lær hver transformasjon etter å ha utført tog-/testdelingen først og kun fra treningsdataene. Den sikreste måten å gjøre dette regelmessig på er å bruke pipeline - en struktur som samler alle transformasjoner i en enkelt kjede og bruker dem etter splitting.
Metode
for hva
Fare for lekkasje
merk
One-hot-koding
Variabel med få kategorier
lav
Eksploderer størrelse i flere kategorier
Etikettkoding
Sortert kategori
lav
Ute av drift lærer feil rekkefølge
målkoding
Multi-kategori, sterkt signal
veldig høy
Bare fra utdanning, i CV
standardisering
Lineære/avstandsmodeller
medium
Parameter avhenger bare av utdanning
Tidsvindu-funksjon
tidsserier
høy
Legg til fremtiden
tre minisaker
Sak 1 — Verdifull eiendom. Et kredittteam genererte funksjonen "gjeld-til-inntektsforhold" fra kolonnene "månedlig inntekt" og "månedlig gjeldsbetaling". Denne enkeltavledede funksjonen økte modellnøyaktigheten fra 71 % til 79 %; fordi det var kursen, ikke den absolutte inntekten, som virkelig avgjorde risikoen. Leksjon: forhold generert av domenekunnskap er sterke signaler.
Tilfelle 2 — Målkodingslekkasje. Ett team konverterte "postnummeret" til et tall med målkodingen (den gjennomsnittlige churn rate i det området), men gjorde det fra alle dataene før de delte. Modellen ga 94 % på testsettet, og falt til 68 % i produksjon. 6 uker med innsats bortkastet. Leksjon: målkoding gjøres nøye, kun innenfor trening.
Tilfelle 3 — Skalering av glemme. En analytiker matet inntekter (0-400 000) og kundealder (18-75) inn i en avstandsbasert modell uten skalering. Modellen så nesten utelukkende på inntekt, og knuste alderseffekten. Når skalering ble lagt til, ble segmentering meningsfylt. Leksjon: skalering blir ikke neglisjert i avstands-/lineære modeller.
Fire kopierbare maler
1) Generering av funksjonsideer (eliminering er opp til deg):
Din rolle: funksjonsingeniørassistent. Mine df-kolonner: fødselsdato, ordretid (tidsstempel), inntekt_tl, debt_tl, by, produktkategori. Mål: «blir lånet tilbakebetalt» (0/1). Foreslå 15 funksjoner som kan genereres fra disse kolonnene; spesifiser risikoen for lekkasje (lav/middels/høy) for hver. Merk tydelig de som inneholder fremtidig informasjon.
2) Sikker koding (post-split):
Skriv kode som one-hot koder for "by" og "produktkategori". VIKTIG: Tilpass kodingen kun til treningsdataene, og transformer deretter testdataene (med sklearn OneHotEncoder). Forklar hvordan du håndterer den usett kategorien (handle_unknown) i utdanning.
3) Lekkasjefri konvertering med Pipeline:
Sett opp sklearn Pipeline: bruk StandardScaler på numeriske kolonner, OneHotEncoder på kategoriske kolonner, legg til en klassifisering på slutten. Garanterer at alle transformasjoner læres ETTER tog/testdeling og kun fra trening. Forklar koden og hvorfor den er lekkasjefri.
4) Tidsvindufunksjon (lekkasjekontroll):
Generer attributtet "antall bestillinger de siste 30 dagene" for hver kunde, men inkluderer ALDRI data etter prognosedagen. Forklar linje for linje at koden ikke ser inn i fremtiden. Jeg vil gi referansedatokolonnen.
Svak forespørsel / Sterk forespørsel
Svak melding:
Legg til gode egenskaper til disse dataene.
"Bra" er udefinert, målet er uklart, det er ingen lekkasjekontroll. AI genererer tilfeldige, kanskje lekke, funksjoner.
Kraftig ledetekst:
Din rolle: funksjonsingeniør. Mål: "avgang på 30 dager" (0/1), estimert referansedato: save_date. Det er transaksjonshistorikk i df.Task: Generer 8 funksjoner, svar på spørsmålet "Har jeg denne informasjonen på tidspunktet for prediksjon" for HVER. Legge til datoen etter referansedatoen i tidsvindufunksjonene. Skriv koden på en pipeline-kompatibel måte som skal utføres etter tog-/testseksjonen.
Her er mål, referansetid og lekkasjekontroll definert fra begynnelsen.
Vanlige feil
- Lære transformasjonen fra alle data før deling. Hvis skalerings-/kodingsparameteren ser testdataene, oppstår det lekkasje.
- Uforsiktig bruk av målkoding. Det er den kraftigste, men mest lekke metoden; bare fra trening, i kryssvalidering.
- Legger til fremtiden med en tidsvindufunksjon. Hvis "siste 30 dager"-beregning legges inn etter prognosedagen, ser modellen fremtiden.
- Unødvendig skalering i tremodellen og ufullstendig skalering i lineærmodellen. Skaleringsbeslutninger tas i henhold til modelltypen.
- Legger til AIs alle funksjonsforslag uten spørsmål. Forslag kan inkludere ubrukelige og lekke funksjoner.
Tips: Skriv ned ett enkelt spørsmål for hver funksjon du genererer: "Kan jeg beregne denne verdien med informasjonen jeg har på det tidspunktet jeg gjør spådommen?" Hvis svaret ikke er et klart "ja", ikke bruk funksjonen. Denne enkeltdisiplinen eliminerer de fleste funksjonsrelaterte lekkasjer.
Oppsummert
Funksjonsteknikk er kunsten å generere meningsfulle signaler fra rådata og bestemmer ofte suksessen til modellen mer enn algoritmen. Koding av kategorier (one-hot, label, target), skalering av numeriske tall (standardisering, normalisering) og produksjon av avledede funksjoner med domenekunnskap er de grunnleggende verktøyene. Men denne fasen er også kjernen i lekkasjen: alle transformasjoner må læres etter trenings-/testdelingen og kun fra treningsdataene. AI genererer mange ideer; Det er menneskelig dømmekraft som skiller det verdifulle fra det farlige.
Søknadsoppgave
Velg en målvariabel og utform minst fem avledede funksjoner fra kolonnene du har. For hver av dem, svar skriftlig på spørsmålet "er jeg tilgjengelig på tidspunktet for spådommen" og eliminer minst ett som "høy risiko for lekkasje". Kod deretter de sikre funksjonene i en pipeline som skal implementeres etter partisjon.
sjekkliste
- [ ] Brukte jeg alle transformasjoner etter tog-/testdelingen?
- [ ] Lærte jeg bare skalerings-/kodingsparametre fra trening?
- [ ] Har jeg svart på spørsmålet "har jeg det på prediksjonstidspunktet" for hver funksjon?
- [ ] Har jeg vært ekstra forsiktig med høyrisikometoder som målkoding?
- [ ] Har jeg bestemt meg for å skalere riktig for modelltypen (tre/lineær)?