Unitate 2 / 11

Conducta de date: colectare, curățare, etichetare și versiuni

Câștiguri:

  • Abilitatea de a configura o conductă de date (colectare, validare, curățare, transformare, împărțire, versiuni) și plasarea validării schemei la începutul conductei
  • Abilitatea de a lua decizii privind valoarea lipsă și de etichetare pe baza semnificației câmpului și a diviziunii pentru a preveni scurgerea datelor (de grup și temporale)
  • Abilitatea de a crea o bază de date reproductibilă prin repararea versiunii datelor și a semințelor aleatorii

Puterea reală a fiecărui sistem de învățare automată constă în date, nu în model. Inginerii cu experiență știu: „gunoi în, gunoi afară” – chiar și cel mai avansat model alimentat cu date proaste va produce rezultate proaste. În această unitate, stabilim conducta de date (conducta de date: lanțul de pași care pregătesc datele brute pentru antrenamentul modelului) cap la cap și aflăm la ce pas din această linie putem folosi în siguranță inteligența artificială.

Etapele liniei de date

O linie de date trece de obicei prin aceste opriri:

  1. Colectare (asimilare): extragerea datelor din surse (bază de date, API, fișiere jurnal, fluxuri de evenimente).
  2. Validare: se verifică dacă datele sunt conforme cu schema, tipurile și intervalele așteptate.
  3. Curățare: gestionarea valorilor lipsă, înregistrărilor duplicate, valori aberante și inconsecvențe.
  4. Transformare: Transformarea datelor brute în atribute - cum ar fi conversia unei variabile categoriale într-un număr, producând o „zi a săptămânii” dintr-o dată.
  5. Divizarea: Separarea în seturi de instruire, validare și testare.
  6. Versiune: Înregistrarea modelului a fost antrenat cu ce date.

Inteligența artificială economisește timp prin generarea de schițe și idei de cod, în special în pașii 2, 3 și 4. Dar decizii precum ce înregistrare să arunce, ce valoare lipsă de completat și cum aparțin inginerului care cunoaște datele; deoarece curățarea necorespunzătoare poate injecta o părtinire ascunsă în model.

Verificarea datelor: apărarea timpurie a liniei

Cele mai scumpe erori încep nu în producție, ci în cazul în care pasul de verificare este sărit. Validarea schemei verifică automat dacă fiecare lot de date primit este conform cu structura așteptată. De exemplu, coloana de vârstă este între 0-120, câmpul de e-mail este gol, s-a modificat numărul de coloane?

Sfat: Puneți verificarea la începutul liniei. Cu cât datele corupte sunt capturate mai devreme, cu atât este mai ieftin să repari. O eroare de schemă prinsă în producție este de multe ori mai costisitoare decât una prinsă în faza de antrenament.

Scrieți o schemă de validare cu pandera (sau Great Expectations) pentru următoarea schemă de date. Coloane și reguli:- user_id: întreg, nu poate fi nul, unic- vârsta: întreg, nu poate fi de la 0-120- signup_date: data, nu poate fi în viitor- țara: categoric, din setul {TR, DE, US, UK}- sold: zecimal, nu poate fi negativ Produceți un mesaj de eroare semnificativ pentru fiecare încălcare a regulii. Afișați testul cu un exemplu de linie întreruptă la sfârșitul codului.

Curatenie: omul este cel care decide

Valorile lipsă sunt o realitate a fiecărui set de date. Modalități de manipulare:

  • Ștergere: eliminarea unui rând/coloană cu o rată foarte mare de lipsuri. Dar există riscul de pierdere a informațiilor și de părtinire.
  • Imputare: Imputare cu medie, mediană, cea mai frecventă valoare sau predicție bazată pe model.
  • Semnal: Stocarea informațiilor „lipsește” într-o coloană separată de steag - uneori, lipsa în sine este semnalul.

Care este corect depinde de problemă. Într-un set de date medicale, informațiile „valoarea sângelui nemăsurată” ar trebui păstrate mai degrabă decât șterse; Pentru că până și refuzul medicului de a face măsurători este un semnal. AI vă poate oferi opțiuni și cod; Tu alegi care se potrivește realității domeniului.

Prompt slab / Prompt puternic

Prompt slab: „Completați valorile lipsă”.

Prompt puternic: „Lipsesc valori în următoarele coloane: venit (lipsesc 12%, distribuție înclinată spre dreapta), last_login (lipsește 30%). Sugerați să completați venitul cu mediană, dar explicați de ce mediană și nu medie. Pentru last_login, presupuneți că valoarea lipsă ar putea fi semnificativă (utilizatorul poate să nu se fi autentificat niciodată în loc de autentificare; părtinirea fiecărei abordări ar adăuga modelului”.

Diferență: promptul puternic oferă informații despre distribuție și semnificația zonei; inteligența artificială produce suport de decizie în loc de umplere mecanică.

Etichetare: calitatea este măsurată

În învățarea supervizată (învățare în care sunt date exemple cu răspunsurile corecte), ceea ce modelul învață sunt etichete (etichete: răspunsul corect pentru fiecare exemplu). Calitatea etichetei stabilește un plafon - dacă oamenii etichetează inconsecvent, modelul învață inconsecvent.

Acordul între adnotatori măsoară rata cu care diferiți oameni dau aceeași etichetă aceluiași eșantion; Este exprimat printr-un coeficient precum Kappa lui Cohen. Conformitatea scăzută indică fie sarcina este neclară, fie instrucțiunea este slabă.

Inteligența artificială ajută la etichetare în două moduri: (1) redactarea ghidului de adnotare, (2) pre-etichetare și ca umanul să o corecteze doar. Dar preetichetarea cu LLM are o capcană: eroarea sistematică a modelului se poate scurge în întregul set de etichete. De aceea, oamenii verifică întotdeauna unele dintre etichetele LLM.

Atenție: Nu considerați etichetele produse de LLM drept „adevăr de bază”. Verificați o probă cu un om și măsurați potrivirea LLM-uman. Dacă conformitatea este scăzută, pre-etichetarea va face mai mult rău decât bine.

Partiție de date: previne scurgerea

Cea mai periculoasă greșeală la împărțirea datelor în formare/validare/testare este scurgerea datelor: amestecarea informațiilor de testare în formare. Exemple:

  • Înregistrările aceluiași utilizator se încadrează atât în instruire, cât și în testare (scurgere de grup).
  • Utilizarea viitorului în antrenament și a trecutului în testare în serii de timp (scurgere temporală).
  • Calcularea parametrilor de scalare (normalizare) din toate datele și apoi împărțirea.

Diviziunea temporală este esențială pentru problemele care implică timp: antrenați-vă cu trecutul, testați în viitor. Împărțirea aleatorie oferă un beneficiu „viitor” care nu se va întâmpla niciodată în producție și umflă valorile.

Versiune și reproductibilitate a datelor

„Cu ce ​​date am antrenat acest model?” A putea răspunde la întrebare luni mai târziu este semnul distinctiv al ingineriei ML serioase. Versiunea datelor stochează fiecare instantaneu de date cu un ID (hash sau etichetă de versiune). Instrumente precum DVC (Data Version Control) datele versiunii, cum ar fi codul.

Pentru a reproduce rezultatul unui model, trebuie remediate trei lucruri: versiunea datelor, versiunea codului și semința aleatorie. Nu se poate spune „am obținut același rezultat” fără acest trio. Vom aprofunda Reproductibilitatea în unitatea 11; dar fixarea semințelor în conducta de date începe de aici.

trei mini cutii

Cazul 1 - Ziua de validare a schemei salvată. Când o echipă a convertit un câmp de preț al sistemului din amonte din bănuți în lire, toate prețurile au scăzut de 100 de ori. Validarea schemei a respins lotul ca „preț în afara intervalului” și modelul nu a fost antrenat cu date corupte. Fără verificare, eroarea ar fi observată doar în producție, cu previziuni incorecte.

Cazul 2 - Prejudecata de umplere incorectă. Într-un model de credit, valorile venitului lipsă au fost completate cu media. Dar veniturile lipsă au fost predominant în grupul cu venituri mici; media a „îmbogățit” artificial acest grup, iar modelul le-a oferit o limită nejustificat de mare. S-a rezolvat problema cu mediana + indicatorul lipsă.

Cazul 3 - Scurgere temporală. Un model de prognoză a cererii arăta grozav pe setul de testare (precizie de 95%), dar s-a prăbușit în producție. De ce: din cauza divizării aleatorii, modelul a văzut viitorul. Trecerea la binning temporal a scăzut acuratețea testului la 78% - dar aceasta a fost performanță reală și a menținut-o în producție.

Șabloane copiabile

Împărțiți următorul set de date în trei seturi: antrenament/validare/testare. Constrângere: Aceasta este o serie de timp; Utilizați divizarea TEMPORALĂ (antrenați în trecut, testați în viitor). Preveniți scurgerea lotului: aveți același „customer_id” doar într-un singur cluster. Calculați parametrii de scalare NUMAI din setul de antrenament, apoi aplicați tuturor. Imprimați câte linii au rămas în cod la fiecare pas și adăugați o afirmație care verifică dacă nu există scurgeri.

Scrieți o schiță de ghid de adnotare pentru această sarcină de etichetare. Sarcină: [de ex. Etichetați recenzia clientului pozitiv/negativ/neutru]Clarificați cazurile limită: sarcasm, emoție amestecată, cum să etichetați recenzia fără legătură cu produsul? Dă 5 exemple și 3 cazuri dificile care vor crește coerența între etichetatori.

Produceți o listă de verificare a reproductibilității pentru această conductă de date:- Cum ar trebui să fie remediată versiunea datelor?- Ce semințe ale aleatoriei ar trebui setate unde?- Ce metadate (hash de date, număr de rânduri, dată) ar trebui să fie înregistrate? Baza mea de cod: [limba/biblioteca]

Verificați acest cod de curățare pentru scurgeri de date. Priviți în mod specific acest lucru: parametrii de scalare/codificare sunt calculați ÎNAINTE de împărțire? Sunt statistici calculate din toate datele sau doar de antrenament? Cod: [cod]

Tabel de decizie: strategia valorii lipsă

Stare

Abordare recomandată

De ce

Distribuție numerică, distorsionată

umple cu mediana

Media este afectată de valori aberante

Numerică, simetrică

umple cu medie

Protejează informațiile

Deficiența poate fi semnificativă

Coloana de semnalizare + umplere

Lipsa este un semnal

Rată lipsă > 60%

Coloana evaluați/renunțați

Zgomotul este prea mult

categoric

Categoria „Necunoscută”.

Nu creează majoritate artificială

Greșeli comune

  • Sari peste verificare. Fără controlul schemei, datele corupte se strecoară în tăcere.
  • Scalare înainte de împărțire. Scurge statisticile testelor în educație.
  • Utilizarea împărțirii aleatorii în serii de timp. Produce valori false înalte.
  • Încredere oarbă în etichetele LLM. Eroarea sistematică se răspândește în toate datele.
  • Nu se salvează versiunea datelor. Nu puteți reproduce rezultatul.
  • Umplere mecanică cu medie. Ignoră sensul câmpului, adaugă părtinire.

Pe scurt

Conducta de date este baza sistemului ML și merită mai mult efort decât modelul. Pune verificarea sus; luați decizii de curățare și etichetare cu cunoștințe de domeniu; previne scurgerile (de grup și temporale) în compartiment; remediați versiunea datelor și seed. Inteligența artificială generează cod și idei pe această linie, dar depinde de tine să decizi ce date să procesezi și cum, deoarece fiecare decizie greșită aici trece în model ca un defect ascuns.

Sarcina de aplicare

Scrieți o schemă de validare (pandera/Great Expectations) pe propriul set de date și adăugați în mod deliberat un rând prost și arătați că a fost prins. Apoi împărțiți datele în timp sau în loturi, calculați parametrii de scalare numai din antrenament și verificați că nu există scurgeri cu o afirmație. Scrieți versiunea datelor și numărul de rânduri într-un fișier de metadate.

lista de verificare

  • [ ] Validarea schemei rulează în partea de sus a liniei.
  • [ ] Am ales strategia valorii lipsă pe baza semnificației câmpului, nu am completat-o ​​mecanic.
  • [ ] Am măsurat calitatea etichetei (conformitatea); Am verificat etichetele LLM.
  • [ ] Am prevenit scurgerile de grup și temporale în panou.
  • [ ] Scalare/codificare calculată numai din setul de antrenament.
  • [ ] Versiunea datelor, numărul de rânduri și semințele înregistrate.