Eenheid 5 / 11

Functie-engineering: varianten genereren, coderen, schalen en lekkage voorkomen

Winst:

  • Mogelijkheid om betekenisvolle afgeleide kenmerken te produceren met domeinkennis en categorische categorieën te coderen met de juiste methoden (one-hot, label, target)
  • Mogelijkheid om numerieke variabelen te schalen volgens modeltype (standaardisatie, normalisatie) en onnodige of onvolledige schaling te voorkomen
  • Mogelijkheid om lekkage van functies te voorkomen door alle transformaties te leren na de training/test-splitsing en alleen van de training

Er is een oud gezegde op het gebied van machine learning: "Toegepast machine learning is in essentie feature engineering." Omdat het succes van een model vaak voortkomt uit de input die u aan het model geeft, en niet zozeer uit het algoritme dat u kiest. Feature engineering is de kunst van het produceren van betekenisvolle signalen uit ruwe data waar het model van kan leren. Kunstmatige intelligentie is in dit stadium een ​​rijke bron van ideeën: als je vraagt ​​‘welke functies uit deze data kunnen worden geproduceerd’, worden er tientallen suggesties gegeven. Maar sommige van deze suggesties kunnen waardevol zijn, andere nutteloos en sommige kunnen gevaarlijk zijn (lekken). Het is jouw taak om het op te lossen.

Waarom feature-engineering

Ruwe gegevens komen zelden in de beste vorm in het model terecht. Hoewel de kolom 'geboortedatum' alleen zinloos is, is de waarde voor 'leeftijd' die daaruit wordt gegenereerd een krachtig signaal. U kunt attributen zoals "dag van de week", "dag/nacht", "is het een feestdag" uit de "tijdstempel van de bestelling" halen. U kunt twee kolommen combineren om een ​​verhouding te verkrijgen ("schuld/inkomensratio"). Hier vertaalt feature engineering domeinkennis naar een wiskundig signaal; En dat is precies waarom dit het stadium is dat de meeste menselijke intelligentie vereist.

Categorische variabelen omzetten in getallen: codering

Modellen werken over het algemeen met cijfers, niet met tekst. Het omzetten van categorische variabelen (zoals stad, kleur, producttype) in getallen wordt codering genoemd. Drie veel voorkomende methoden:

One-hot-codering: opent een afzonderlijke kolom met een waarde van 0/1 voor elke categorie. Voor "stad" worden kolommen van Istanbul, Ankara en Izmir gevormd; Als een klant uit Istanbul komt, is alleen die kolom 1. Ideaal als het aantal categorieën klein is; Als er te veel categorieën zijn, worden er honderden kolommen geproduceerd (dit wordt "grootte-explosie" genoemd).

Labelcodering: geeft een nummer aan elke categorie (Istanbul=0, Ankara=1). Het is eenvoudig, maar het kan het model per ongeluk een reeks leren (zoals Ankara > Istanbul); dus het wordt met voorzichtigheid gebruikt in ongeordende categorieën.

Doelcodering: vervangt elke categorie door het gemiddelde van de doelvariabele in die categorie. Het is zeer krachtig, maar de gevaarlijkste bron van lekkage: als je rekening houdt met het doel van de testgegevens, ziet het model de toekomst. Het mag alleen op basis van trainingsgegevens en zorgvuldig worden berekend (binnen kruisvalidatie).

Schaalvergroting: grote aantallen overweldigen het model niet

Sommige modellen (op afstand gebaseerde modellen, lineaire modellen, neurale netwerken) zijn gevoelig voor de schaal van de variabelen. Als ‘inkomen’ (0-500.000) en ‘leeftijd’ (0-100) in hetzelfde patroon vallen, kan het inkomen domineren simpelweg omdat het groter is. Schalen lost dit op. Twee veelgebruikte methoden: standaardisatie (converteert elke waarde naar "hoeveel standaardafwijkingen verwijderd van het gemiddelde") en normalisatie (min-max normalisatie - comprimeert waarden in het bereik 0-1). Op bomen gebaseerde modellen (beslissingsbomen, willekeurig bos) zijn schaalongevoelig, ze vereisen geen schaalvergroting.

Let op: Schaal- en coderingsparameters (gemiddelde, standaarddeviatie, categorie-gemiddelde mapping) mogen alleen worden berekend op basis van de trainingsgegevens, en vervolgens moet hetzelfde worden toegepast op de testgegevens. Het opnemen van testgegevens is lekkage en zorgt ervoor dat uw model er beter uitziet dan het in werkelijkheid is.

Het hart van lekkage in functie-engineering

Bij het genereren van functies ontstaat het vaakst datalekken. Twee typische fouten: Tijdlekken – het produceren van een functie die toekomstige informatie bevat (inclusief dagen na de voorspelde dag bij het berekenen van het “gemiddelde van de afgelopen 30 dagen”). Statistische lekkage: het berekenen van een kenmerk (schaalgemiddelde, doelcoderingswaarde) op basis van alle gegevens vóór de training/testsplitsing. Regel: leer elke transformatie eerst na het uitvoeren van de trein/test-splitsing en alleen uit de trainingsgegevens. De veiligste manier om dit regelmatig te doen is door pijplijn te gebruiken: een structuur die alle transformaties in één keten verzamelt en deze na splitsing toepast.

Methode

waarvoor

Risico op lekkage

opmerking

One-hot-codering

Variabel met weinig categorieën

laag

Explodeert de grootte in meerdere categorieën

Etiketcodering

Gesorteerde categorie

laag

Een verkeerde volgorde leert een verkeerde volgorde

doelcodering

Multi-categorie, sterk signaal

zeer hoog

Gewoon uit de opleiding, in CV

standaardisatie

Lineaire/afstandsmodellen

middelmatig

Parameter is alleen afhankelijk van opleiding

Tijdvensterfunctie

tijdreeksen

hoog

Voeg de toekomst toe

drie minikoffers

Geval 1 — Waardevolle eigendommen. Een kredietteam genereerde de functie ‘schuld-inkomensverhouding’ uit de ruwe kolommen ‘maandelijks inkomen’ en ‘maandelijkse schuldbetaling’. Deze enkele afgeleide functie verhoogde de modelnauwkeurigheid van 71% naar 79%; omdat het de rente was, en niet het absolute inkomen, die het risico werkelijk bepaalde. Les: ratio's gegenereerd door domeinkennis zijn sterke signalen.

Geval 2 — Doelcoderingslek. Eén team heeft de ‘postcode’ omgezet in een getal met de doelcodering (het gemiddelde klantverloop in dat gebied), maar deed dit op basis van alle gegevens voordat het ging splitsen. Het model gaf 94% op de testset en daalde in productie tot 68%. 6 weken moeite verspild. Les: doelcodering gebeurt zorgvuldig, alleen binnen de training.

Geval 3 – Vergeten op schaal. Eén analist voegde de omzet (0-400.000) en de leeftijd van de klant (18-75) toe aan een op afstand gebaseerd model zonder schaalvergroting. Het model keek bijna uitsluitend naar inkomen, waardoor het leeftijdseffect werd verpletterd. Toen schaalvergroting werd toegevoegd, werd segmentatie betekenisvol. Les: schaalvergroting wordt niet verwaarloosd in afstands-/lineaire modellen.

Vier kopieerbare sjablonen

1) Genereren van feature-ideeën (eliminatie is aan jou):

Jouw rol: functie technisch assistent. Mijn df-kolommen: geboortedatum, besteltijd (tijdstempel), inkomen_tl, schuld_tl, stad, productcategorie. Doelstelling: "wordt de lening terugbetaald" (0/1). Stel 15 features voor die uit deze kolommen kunnen worden gegenereerd; specificeer voor elk het risico op lekkage (laag/gemiddeld/hoog). Markeer duidelijk degene die toekomstige informatie bevatten.

2) Veilige codering (post-split):

Schrijf code die one-hot codeert voor "stad" en "product_category". BELANGRIJK: pas de codering alleen aan op de trainingsgegevens en transformeer vervolgens de testgegevens (met sklearn OneHotEncoder). Leg uit hoe je omgaat met de onzichtbare categorie (handle_unknown) in het onderwijs.

3) Lekvrije conversie met pijpleiding:

Stel sklearn Pipeline in: pas StandardScaler toe op numerieke kolommen, OneHotEncoder op categorische kolommen en voeg aan het einde een classificatie toe. Garandeer dat alle transformaties NA de trein-/testsplitsing worden geleerd en alleen tijdens de training. Leg de code uit en waarom deze lekvrij is.

4) Tijdvensterfunctie (lekcontrole):

Genereer voor elke klant het kenmerk 'aantal bestellingen in de afgelopen 30 dagen', maar neem NOOIT gegevens op na de prognosedag. Leg regel voor regel uit dat de code niet in de toekomst kijkt. Ik zal de kolom met de referentiedatum opgeven.

Zwakke prompt/sterke prompt

Zwakke prompt:

Voeg goede eigenschappen toe aan deze gegevens.

“Goed” is niet gedefinieerd, het doel is onduidelijk, er is geen controle op lekkage. AI genereert willekeurige, misschien lekkende, functies.

Krachtige prompt:

Jouw rol: feature engineer. Doel: "churn in 30 dagen" (0/1),geschatte referentiedatum: save_date. Er is een transactiegeschiedenis in df. Taak: Genereer 8 functies, beantwoord de vraag "Heb ik deze informatie op het moment van de voorspelling" voor ELK. Het toevoegen van de datum na de referentiedatum in tijdvensterfuncties. Schrijf de code op een pijplijncompatibele manier die na de trein-/testsectie moet worden uitgevoerd.

Hier worden het doel, de referentietijd en de lekkagecontrole vanaf het begin gedefinieerd.

Veel voorkomende fouten

  • Het leren van de transformatie van alle data vóór de deling. Als de schaal-/coderingsparameter de testgegevens ziet, treedt er lekkage op.
  • Onzorgvuldig gebruik van doelcodering. Het is de krachtigste maar meest lekkende methode; gewoon uit training, in kruisvalidatie.
  • De toekomst toevoegen met een tijdvensterfunctie. Als de berekening van de "laatste 30 dagen" na de voorspellingsdag wordt ingevoerd, ziet het model de toekomst.
  • Onnodige schaling in het boommodel en onvolledige schaling in het lineaire model. Schaalbeslissingen worden genomen op basis van het modeltype.
  • Zonder twijfel elke functiesuggestie van AI toevoegen. Suggesties kunnen nutteloze en lekkende functies bevatten.
Tip: Schrijf één vraag op voor elk kenmerk dat u genereert: “Kan ik deze waarde berekenen met de informatie die ik heb op het moment dat ik de voorspelling doe?” Als het antwoord niet duidelijk ‘ja’ is, gebruik de functie dan niet. Deze enkele discipline elimineert de meeste functiegerelateerde lekken.

Samengevat

Feature engineering is de kunst van het genereren van betekenisvolle signalen uit ruwe data en bepaalt vaak meer het succes van het model dan het algoritme. Het coderen van categoriale waarden (one-hot, label, target), het schalen van numerieke waarden (standaardisatie, normalisatie) en het produceren van afgeleide kenmerken met domeinkennis zijn de basisinstrumenten. Maar deze fase is ook de kern van het lek: alle transformaties moeten worden geleerd na de training/test-splitsing en alleen uit de trainingsgegevens. AI genereert veel ideeën; Het is het menselijk oordeel dat het waardevolle van het gevaarlijke onderscheidt.

Applicatie taak

Kies een doelvariabele en ontwerp ten minste vijf afgeleide kenmerken uit de kolommen die u heeft. Beantwoord voor elk van hen de vraag "ben ik beschikbaar op het moment van de voorspelling" schriftelijk en elimineer er minstens één als "hoog risico op lekkage". Codeer vervolgens de beveiligde functies in een pijplijn die na de partitie moeten worden geïmplementeerd.

controlelijst

  • [ ] Heb ik alle transformaties toegepast na de trein/test-splitsing?
  • [ ] Heb ik de schaal-/coderingsparameters alleen tijdens de training geleerd?
  • [ ] Heb ik voor elk kenmerk de vraag 'heb ik het op het moment van de voorspelling' beantwoord?
  • [ ] Heb ik extra voorzichtigheid betracht bij risicovolle methoden, zoals doelcodering?
  • [ ] Heb ik besloten om op de juiste manier te schalen voor het modeltype (boom/lineair)?