Câștiguri:
- Abilitatea de a produce caracteristici derivate semnificative cu cunoștințe de domeniu și de a codifica categorii categorice cu metode adecvate (one-hot, label, target)
- Abilitatea de a scala variabile numerice în funcție de tipul de model (standardizare, normalizare) și de a evita scalarea inutilă sau incompletă
- Abilitatea de a evita scurgerea caracteristicilor prin învățarea tuturor transformărilor după împărțirea antrenamentului/testului și numai din antrenament
Există o veche zicală în învățarea automată: „Învățarea automată aplicată este, în esență, ingineria caracteristicilor”. Deoarece succesul unui model vine deseori din inputurile pe care le oferi modelului, mai degrabă decât din algoritmul pe care îl alegeți. Ingineria caracteristicilor este arta de a produce semnale semnificative din date brute din care modelul poate învăța. Inteligența artificială este o sursă bogată de idei în această etapă: când întrebi „ce caracteristici pot fi produse din aceste date”, ea listează zeci de sugestii. Dar unele dintre aceste sugestii pot fi valoroase, unele pot fi inutile, iar altele pot fi periculoase (scurgere). Este treaba ta să rezolvi.
De ce ingineria caracteristicilor
Datele brute ajung rareori la model în cea mai bună formă. În timp ce numai coloana „data nașterii” este lipsită de sens, valoarea „vârstei” generată de ea este un semnal puternic. Puteți extrage atribute precum „ziua săptămânii”, „ziua/noaptea”, „este sărbătoare” din „marca temporală a comenzii”. Puteți combina două coloane pentru a produce un raport („raport datorie/venit”). Aici, ingineria caracteristicilor traduce cunoștințele de domeniu în semnal matematic; Și tocmai de aceea este etapa care necesită cea mai mare inteligență umană.
Conversia variabilelor categoriale în numere: codificare
Modelele funcționează în general cu numere, nu cu text. Conversia variabilelor categoriale (cum ar fi orașul, culoarea, tipul de produs) în numere se numește codificare. Trei metode comune:
Codificare one-hot: deschide o coloană separată cu o valoare de 0/1 pentru fiecare categorie. Pentru „oraș”, se formează coloane Istanbul, Ankara, Izmir; Dacă un client este din Istanbul, doar acea coloană va fi 1. Ideal când numărul de categorii este mic; Dacă sunt prea multe categorii, se produc sute de coloane (aceasta se numește „explozie de dimensiune”).
Codificarea etichetei: dă un număr fiecărei categorii (Istanbul=0, Ankara=1). Este simplu, dar poate învăța accidental modelul o secvență (cum ar fi Ankara > Istanbul); deci este folosit cu prudență în categorii neordonate.
Codificare țintă: înlocuiește fiecare categorie cu media variabilei țintă din categoria respectivă. Este foarte puternic, dar cea mai periculoasă sursă de scurgere: dacă țineți cont de ținta datelor de testare, modelul vede viitorul. Ar trebui calculat numai din datele de instruire și cu atenție (în cadrul validării încrucișate).
Scalare: numerele mari nu coplesesc modelul
Unele modele (cele bazate pe distanță, modele liniare, rețele neuronale) sunt sensibile la scara variabilelor. Dacă „venitul” (0-500.000) și „vârsta” (0-100) se încadrează în același tipar, venitul poate domina pur și simplu pentru că este mai mare. Scalare remediază acest lucru. Două metode comune: standardizarea (conversează fiecare valoare în „câte abateri standard de la medie”) și normalizare (normalizare min-max - comprimă valorile în intervalul 0-1). Modelele bazate pe arbori (arbori de decizie, pădure aleatoare) sunt insensibile la scară, nu necesită scalare.
Atenție: Parametrii de scalare și codare (medie, abatere standard, mapare categorie-medie) ar trebui să fie calculați numai din datele de antrenament, apoi același lucru ar trebui aplicat datelor de testare. Includerea datelor de testare este o scurgere și face modelul dvs. să arate mai bine decât este în realitate.
Inima scurgerilor în ingineria caracteristicilor
Generarea de caracteristici este locul în care are loc cel mai adesea scurgerea de date. Două greșeli obișnuite: scurgere de timp — producerea unei funcții care include informații viitoare (inclusiv zile după ziua de prognoză când se calculează „media ultimelor 30 de zile”). Scurgere de statistici — calcularea unei caracteristici (media de scalare, valoarea de codare țintă) din toate datele înainte de împărțirea antrenamentului/testului. Regulă: învață fiecare transformare după ce ai făcut diviziunea tren/test mai întâi și numai din datele de antrenament. Cea mai sigură modalitate de a face acest lucru în mod regulat este să utilizați pipeline - o structură care colectează toate transformările într-un singur lanț și le aplică după divizare.
Metoda
pentru ce
Risc de scurgere
notă
Codificare one-hot
Variabilă cu câteva categorii
scăzută
Explodează dimensiunea în mai multe categorii
Codarea etichetei
Categorie sortată
scăzută
Defectul învață ordine greșită
codificare țintă
Multi-categorie, semnal puternic
foarte sus
Doar din educatie, in CV
standardizare
Modele liniare/distante
mediu
Parametrul depinde doar de educație
Caracteristica fereastră de timp
serii de timp
înalt
Adaugă viitorul
trei mini cutii
Cazul 1 – Proprietate de valoare. O echipă de creditare a generat caracteristica „raportul datorie-venit” din coloanele brute „venit lunar” și „plată lunară a datoriei”. Această caracteristică derivată unică a crescut precizia modelului de la 71% la 79%; pentru că rata, nu venitul absolut, a determinat cu adevărat riscul. Lecție: rapoartele generate de cunoștințele domeniului sunt semnale puternice.
Cazul 2 — Scurgere de codare țintă. O echipă a convertit „codul poștal” într-un număr cu codificarea țintă (rata medie de pierdere în acea zonă), dar a făcut acest lucru din toate datele înainte de împărțire. Modelul a dat 94% pe setul de testare, scăzând la 68% în producție. 6 săptămâni de efort irosit. Lecție: codarea țintei se face cu atenție, doar în cadrul antrenamentului.
Cazul 3 — Scalarea uitării. Un analist a alimentat veniturile (0-400.000) și vârsta clienților (18-75) într-un model bazat pe distanță fără scalare. Modelul s-a uitat aproape exclusiv la venituri, zdrobind efectul de vârstă. Când a fost adăugată scalarea, segmentarea a devenit semnificativă. Lecție: scalarea nu este neglijată în modelele de distanță/liniare.
Patru șabloane copiabile
1) Generarea ideii de caracteristici (eliminarea depinde de dvs.):
Rolul tău: asistent de inginerie caracteristică. Coloanele mele df: birth_date, order_time (timestamp), income_tl, debt_tl, city, product_category. Țintă: „va fi rambursat împrumutul” (0/1). Sugerați 15 caracteristici care pot fi generate din aceste coloane; specificați riscul de scurgere (scăzut/mediu/ridicat) pentru fiecare. Marcați clar pe cele care conțin informații viitoare.
2) Codare sigură (post-split):
Scrieți codul care codifică „oraș” și „categorie_produs”. IMPORTANT: potriviți codificarea numai la datele de antrenament, apoi transformați datele de testare (cu sklearn OneHotEncoder). Explicați cum gestionați categoria nevăzută (handle_unknown) în educație.
3) Conversie fără scurgeri cu Pipeline:
Configurați sklearn Pipeline: aplicați StandardScaler coloanelor numerice, OneHotEncoder coloanelor categorice, adăugați un clasificator la sfârșit. Garantați că toate transformările sunt învățate DUPĂ împărțirea tren/test și numai din antrenament. Explicați codul și de ce nu are scurgeri.
4) Caracteristica fereastră de timp (controlul scurgerilor):
Generați atributul „număr de comenzi în ultimele 30 de zile” pentru fiecare client, dar NU includeți NICIODATĂ date după ziua de prognoză. Explicați rând cu rând că codul nu privește în viitor. Voi furniza coloana cu data de referință.
Prompt slab / Prompt puternic
Prompt slab:
Adăugați proprietăți bune acestor date.
„Bun” este nedefinit, ținta este neclară, nu există control al scurgerilor. AI generează caracteristici aleatorii, probabil care nu au scurgeri.
Solicitare puternică:
Rolul tău: inginer de caracteristici. Țintă: „renunțare în 30 de zile” (0/1), data de referință estimată: data_salvare. Există un istoric de tranzacții în df.Task: Generați 8 caracteristici, răspundeți la întrebarea „Am aceste informații la momentul predicției” pentru fiecare. Adăugarea datei după data de referință în caracteristicile ferestrei de timp. Scrieți codul într-un mod compatibil cu conductele pentru a fi executat după secțiunea de tren/test.
Aici, ținta, timpul de referință și controlul scurgerilor sunt definite de la început.
Greșeli comune
- Învățarea transformării din toate datele înainte de divizare. Dacă parametrul de scalare/codificare vede datele de testare, are loc o scurgere.
- Utilizarea neglijentă a codării țintei. Este cea mai puternică, dar cea mai periculoasă metodă; doar din antrenament, în validare încrucișată.
- Adăugarea viitorului cu o funcție de fereastră de timp. Dacă calculul „ultimelor 30 de zile” este introdus după ziua de prognoză, modelul vede viitorul.
- Scalare inutilă în modelul arborescent și scalare incompletă în modelul liniar. Deciziile de scalare sunt luate în funcție de tipul de model.
- Adăugarea tuturor sugestiilor de caracteristici ale AI fără îndoială. Sugestiile pot include caracteristici inutile și care nu au scurgeri.
Sfat: notați o singură întrebare pentru fiecare caracteristică pe care o generați: „Pot calcula această valoare cu informațiile pe care le am în momentul în care fac predicția?” Dacă răspunsul nu este un „da” clar, nu utilizați funcția. Această disciplină unică elimină cele mai multe scurgeri legate de caracteristici.
În concluzie
Ingineria caracteristicilor este arta de a genera semnale semnificative din datele brute și adesea determină succesul modelului mai mult decât algoritmul. Codificarea categoriilor (one-hot, label, target), scalarea numerelor (standardizare, normalizare) și producerea de caracteristici derivate cu cunoștințe de domeniu sunt instrumentele de bază. Dar această fază este și inima scurgerii: toate transformările trebuie învățate după împărțirea antrenament/test și numai din datele de antrenament. AI generează o mulțime de idei; Judecata umană este cea care distinge valorosul de periculos.
Sarcina de aplicare
Alegeți o variabilă țintă și proiectați cel puțin cinci caracteristici derivate din coloanele pe care le aveți. Pentru fiecare dintre ele, răspundeți în scris la întrebarea „sunt disponibil la momentul predicției” și eliminați cel puțin una ca „risc ridicat de scurgere”. Apoi codificați caracteristicile securizate într-o conductă care urmează să fie implementată după partiție.
lista de verificare
- [ ] Am aplicat toate transformările după împărțirea tren/test?
- [ ] Am învățat doar parametrii de scalare/codificare din antrenament?
- [ ] Am răspuns la întrebarea „O am la momentul predicției” pentru fiecare caracteristică?
- [ ] Am avut grijă suplimentară cu metodele cu risc ridicat, cum ar fi codarea țintă?
- [ ] Am hotărât să o scalez corespunzător pentru tipul de model (arboresc/liniar)?