Unitate 10 / 11

Scurgerea datelor și reproductibilitatea: dezastre tăcute și disciplină

Câștiguri:

  • Abilitatea de a recunoaște tipurile de scurgeri de date (țintă, timp, preprocesare, rând grupat) și de a interoga scorul „prea bun pentru a fi adevărat” ca alarmă
  • Capacitatea de a preveni scurgerile prin separarea timpurie a setului de testare, conductei și împărțirea corectă (cronologică/grupată)
  • Abilitatea de a face analiza reproductibilă cu semințe fixe, control al versiunii și eliminarea pașilor manuali

Există două greșeli care irosesc cel mai mult efort în știința datelor și ambele sunt insidioase, deoarece duc la dezastru exact atunci când totul „pare să fie bine”. Prima este scurgerea de date: modelul funcționează excelent pe setul de testare, dar se blochează în producție. A doua este ireproductibilitatea: efectuați o analiză șase luni mai târziu și obțineți un rezultat complet diferit. Această unitate este dedicată cunoașterii și evitării acestor două capcane în profunzime. AI poate crește ambele riscuri (generează rapid, sugerează scurgeri ascunse, vă ajută să luați pași manuali), dar le poate și reduce dacă este utilizată corect. Diferența este în disciplină.

Scurgere de date: model clarvăzător

Scurgerea datelor este atunci când modelul vede informații în timpul antrenamentului pe care nu le va avea în momentul predicției efective. Modelul „trișează” cu aceste informații, arată grozav pe setul de testare, dar se prăbușește în producție fără aceste informații. Simptomul unei scurgeri este aproape întotdeauna același: prea frumos pentru a fi adevărat. Înainte de a vă bucura când vedeți o precizie de 99%, ar trebui să căutați scurgeri.

Principalele tipuri de scurgeri sunt:

1. Scurgerea obiectivului: O caracteristică este un rezultat al obiectivului. În prognoza „a fost anulată”, coloanele „data anulării” sau „suma rambursării” sunt rezultatul țintei; Acestea vor fi completate numai atunci când rezultatul este clar.

2. Scurgere de timp: Aducerea informațiilor viitoare în trecut. Când calculați „media ultimelor 30 de zile”, includeți zilele de după ziua de prognoză sau împărțiți seria temporală aleatoriu.

3. Scurgeri de pre-procesare: Transformări de învățare, cum ar fi scalarea, completarea, codificarea din toate datele înainte de partiția de antrenament/testare. Media datelor de testare interferează cu antrenamentul.

4. Scurgere de rânduri duplicate/grupate: Rândurile aparținând aceleiași persoane sunt prezente atât la antrenament, cât și la testare (două vizite ale aceluiași pacient în seturi diferite). Modelul memorează persoana.

Tip de scurgere

Cum se naste

Cum să previi

scurgere țintă

Coloană care este rezultatul țintei

Testul „Îl am la momentul predicției”.

scurgere de timp

Aducerea viitorului în trecut

Împărțirea cronologică, controlul ferestrei

Scurgere de preprocesare

Conversie pre-divizată

Pipeline, potrivit doar de la antrenament

Scurgere în rânduri grupate

Aceeași unitate în două seturi

Împărțit pe grup (GroupKFold)

Singura disciplină pentru a preveni scurgerea

Soluția comună pentru toate tipurile de scurgeri se rezumă la o singură propoziție: izolați setul de testare cât mai devreme posibil pentru a imita viitorul real și nu îl „învățați” nimic. În practică, aceasta înseamnă: mai întâi împărțiți, apoi învățați toate transformările doar din antrenament și aplicați-le într-o conductă (o structură care adună toți pașii într-un singur lanț). Pentru fiecare caracteristică, puneți întrebarea „Am aceste informații în momentul predicției?” Dacă există timp, împărțiți-l cronologic; Dacă aceeași unitate este repetitivă, împărțiți pe grupe.

Atenție: Cel mai periculos aspect al unei scurgeri este că se prezintă ca un succes. Un model prost va produce evident rezultate slabe și va fi observat; Un model scurs funcționează grozav, mulțumește pe toată lumea și este pus în producție - de acolo începe colapsul. De aceea un rezultat „foarte bun” este motiv de alarmă, nu de sărbătoare.

Reproductibilitate: obținem același rezultat de două ori

Reproductibilitatea este capacitatea de a obține același rezultat atunci când rulați o analiză din nou la un alt moment, pe o altă mașină. Fără aceasta, analiza ta este întâmplătoare, nu științifică. Principalele cauze și soluții care afectează reproductibilitatea:

Pași manuali: modificarea manuală a unei celule în Excel, editarea manuală a unei diagrame. Soluție: aveți fiecare pas în cod.

Aleatorie nefixată: antrenamentul modelului, eșantionarea, împărțirea implică aleatorie. Soluție: se fixează sămânța aleatoare (valoarea inițială a generatorului aleator) (random_state=42).

Schimbări de versiune: rezultatul se poate schimba atunci când versiunea bibliotecii se modifică. Soluție: remediați dependențele (requirements.txt, fișier de mediu).

Fără evidență: nu este clar ce date, ce cod, ce parametru a fost utilizat. Soluție: controlul versiunilor (Git — sistemul care salvează toate versiunile de cod) și versiunea datelor.

„Funcționează doar pe mașina mea”: Soluție: documentați mediul, utilizați containere (Docker) dacă este posibil.

trei mini cutii

Cazul 1 — Scurgere țintă. O analiză a sănătății a prezentat coloana „medicament după externare” pentru a prezice „dacă pacientul va fi readmis”. Această coloană a fost completată numai după ce pacientul a fost externat. Modelul a dat 96%, în producție 61%. Proiectul de 8 săptămâni a fost un gunoi. Lecție: întrebați fiecare caracteristică „este prezentă în momentul predicției?”

Cazul 2 — Scurgere de preprocesare. O echipă a scalat toate datele și apoi le-a împărțit. Media datelor de testare a fost implicată în scalare. Scorul CV 89%, producția reală 76%. Falsul succes a dispărut când m-am mutat la Pipeline și am aflat despre transformări doar din antrenament. Lecția: împărțiți mai întâi, transformați mai târziu.

Cazul 3 – Eșecul reproducerii. Un analist a vrut să actualizeze graficul pe care l-a prezentat conducerii trei luni mai târziu, dar nu-și amintea cum l-a produs; mulți pași au fost făcuți manual în Excel. Rezultatul nu a funcționat și încrederea a fost zdruncinată. Lecție: fără pași manuali, totul este în cod și Git.

Patru șabloane copiabile

1) Verificarea scurgerilor:

Rolul tău: inspector de scurgeri. Țintă: „turn” (0/1), data de referință prognozată: data_înregistrare. Vă voi oferi această listă de caracteristici. Pentru FIECARE caracteristică: (a) este o consecință a obiectivului, (b) este disponibil pentru mine în momentul predicției, (c) include fereastra de timp viitorul? Marcați-l ca „nesigur/suspect/scurgere” și scrieți un motiv. Caracteristici: [listă]

2) Conductă fără scurgeri:

Configurați sklearn Pipeline: mai întâi împărțiți trenul/testul (stratificat, semințe=42), APOI potriviți toate preprocesarea (imputare, scalare, codificare) în conductă NUMAI de la antrenament. Explicați de ce codul nu are scurgeri, care pas a fost învățat unde.

3) Codul listei de verificare a reproductibilității:

Vreau să fac analiza mea reproductibilă. Sugerați cod/structură care adaugă: (1) semințe dure pentru toate aleatoriile, (2) versiuni de bibliotecă de tipărire utilizate, (3) etichetă de dată/versiune pentru date și rezultate. Dați-mi și o listă de verificare pentru a vă asigura că nu există pași manuali.

4) Partiție grupată (scurgere în aceeași unitate):

În date, același customer_id există pe mai multe rânduri. Faceți o împărțire (GroupKFold sauGroupShuffleSplit, group = customer_id) care IMPIEDIA aceluiași client să fie atât la instruire, cât și la testare. Includeți codul pentru a verifica dacă nu există clienți în ambele seturi după împărțire.

Prompt slab / Prompt puternic

Prompt slab:

Modelul meu a returnat o precizie de 98%, nu este grozav? Optimizați codul.

Sărbătorirea a 98% ascunde scurgerea. Înainte de optimizare, ar trebui să ne întrebăm dacă acest scor este real sau nu.

Solicitare puternică:

Rolul tău: inspector de scurgeri. Modelul meu returnează o precizie de 98% pe setul de testare, ceea ce mi se pare „prea bine pentru a fi adevărat”. Verificați: (1) sunt caracteristici rezultatul țintei, (2) sunt conversiile efectuate înainte de împărțire, (3) sunt aceeași unitate în două seturi, (4) există scurgeri de timp. Enumerați punctele suspecte; Concentrați-vă pe găsirea scurgerii, nu pe fixarea scorului.

Aici, un scor mare este tratat ca un semn de pus sub semnul întrebării, nu de celebrat.

Greșeli comune

  • Sărbătorind rezultatul „foarte bun”. Un scor prea bun pentru a fi adevărat este o alertă de scurgere, nu o realizare.
  • Învățarea transformării din toate datele înainte de divizare. Cea mai comună scurgere; Împărțiți mai întâi cu conducta.
  • Împărțirea aleatorie a seriei de timp. Modelul vede viitorul; Împărțirea cronologică este obligatorie.
  • Lăsând aceeași unitate în două seturi. Modelul memorează persoana; Împărțiți pe grupe.
  • Nu intervin manual și nu scriu în cod. Analiza devine ireproductibilă; totul ar trebui să fie în cod și Git.
Sfat: scrieți un „gaj de onoare” din două propoziții la începutul proiectului dvs.: „Nu am atins în niciun fel setul de testare înainte de a-l vedea în producție. Fiecare pas este în cod și semințele sunt fixate.” Dacă nu poți semna aceste două propoziții sincer, rezultatul tău nu este încă de încredere.

Pe scurt

Scurgerea datelor și nereproductibilitatea sunt cele mai scumpe două erori silențioase din știința datelor. Scurgerea este viziunea modelului asupra viitorului și se prezintă ca un fals succes; Soluția este să împărțiți din timp setul de test, să învățați transformările numai din antrenament (pipeline), să puneți fiecărei caracteristici întrebarea „O am la momentul predicției” și să faceți împărțirea corectă (cronologică/grupată). Reproductibilitatea înseamnă a putea obține același rezultat de două ori; soluția lui este de a elimina manual pașii, de a fixa semințele, de a îngheța versiunile și de a păstra totul în Git. AI poate crește sau reduce aceste riscuri; disciplina ta este cea care determină.

Sarcina de aplicare

Luați lista de caracteristici a unui model pe care l-ați construit (sau unul ipotetic) și adresați fiecărei caracteristici întrebarea „Am această informație la momentul predicției?” în scris; Găsiți cel puțin un candidat pentru scurgeri. Apoi completați o listă de verificare pentru a face analiza dvs. reproductibilă: semințele sunt fixe, există pași manuali, sunt versiunile înregistrate, sunt în Git. Remediați deficiențele.

lista de verificare

  • [ ] Am interogat scorul „prea bun pentru a fi adevărat” ca alertă de scurgere?
  • [ ] Am învățat toate transformările post-split, doar din antrenament?
  • [ ] Am împărțit în funcție de structura de timp/grup (cronologic/GroupKFold)?
  • [ ] Am făcut ca toate aleatoriile să fie repetabile cu semințe fixe?
  • [ ] Am eliminat pașii manuali și am păstrat totul în cod și controlul versiunilor?