Jedinica 10 / 11

Curenje podataka i ponovljivost: tihe katastrofe i disciplina

Dobici:

  • Sposobnost prepoznavanja vrsta curenja podataka (cilj, vrijeme, pretprocesiranje, grupirani redak) i upit o rezultatu "previše dobro da bi bilo istinito" kao alarm
  • Sposobnost sprječavanja curenja s ranim odvajanjem ispitnog seta, cjevovoda i ispravnom podjelom (kronološki/grupirano)
  • Sposobnost da se analiza učini ponovljivom s fiksnim početnim vrijednostima, kontrolom verzija i uklanjanjem ručnih koraka

Postoje dvije pogreške koje oduzimaju najviše truda u znanosti o podacima, a obje su podmukle jer vode u katastrofu baš kad se "čini da je sve u redu". Prvi je curenje podataka: model radi odlično na testnom setu, ali se ruši u proizvodnji. Drugi je neponovljivost: provedete analizu šest mjeseci kasnije i dobijete potpuno drugačiji rezultat. Ova je jedinica posvećena dubinskom upoznavanju i izbjegavanju ovih dviju zamki. AI može povećati oba rizika (generira brzo, sugerira skrivena curenja, olakšava vam poduzimanje ručnih koraka), ali ih može i smanjiti ako se pravilno koristi. Razlika je u disciplini.

Curenje podataka: vidoviti model

Curenje podataka je kada model vidi informacije tijekom obuke koje neće imati u trenutku stvarnog predviđanja. Model "vara" s ovim podacima, izgleda odlično na testu, ali pada u proizvodnji bez tih podataka. Simptom curenja gotovo je uvijek isti: predobro da bi bilo istinito. Prije nego što se radujete kada vidite 99% točnost, trebali biste potražiti curenja.

Glavne vrste curenja su:

1. Curenje cilja: Značajka je rezultat cilja. U prognozi "otkazano", stupci "datum otkazivanja" ili "iznos povrata" rezultat su cilja; Ispunit će se tek kada rezultat bude jasan.

2. Curenje vremena: Prenošenje budućih informacija u prošlost. Kada izračunavate "prosjek zadnjih 30 dana", uključite dane nakon dana prognoze ili nasumično podijelite vremensku seriju.

3. Curenje prije obrade: transformacije učenja kao što su skaliranje, punjenje, kodiranje iz svih podataka prije particije za obuku/testiranje. Prosjek podataka testa ometa trening.

4. Dvostruko/grupirano curenje reda: Redovi koji pripadaju istoj osobi prisutni su i u obuci i u testiranju (dva posjeta istog pacijenta u različitim skupovima). Model pamti osobu.

Vrsta curenja

Kako se rađa

Kako spriječiti

ciljno curenje

Stupac koji je rezultat cilja

Test "Imam li ga u trenutku predviđanja".

curenje vremena

Dovođenje budućnosti u prošlost

Kronološka podjela, kontrola prozora

Curenje predobrade

Pre-split konverzija

Cjevovod, fit tek s treninga

Curenje grupiranog retka

Ista jedinica u dva kompleta

Podijeli po grupi (GroupKFold)

Jedina disciplina za sprječavanje curenja

Zajedničko rješenje za sve vrste curenja svodi se na jednu rečenicu: Izolirajte testni set što je ranije moguće kako biste oponašali stvarnu budućnost i nemojte ga ničemu "učiti". U praksi to znači: prvo podijelite, zatim naučite sve transformacije samo iz treninga i primijenite ih u cjevovodu (struktura koja okuplja sve korake u jednom lancu). Za svaku značajku postavite pitanje "imam li ove informacije u vrijeme predviđanja?" Ako ima vremena, podijelite ga kronološki; Ako se ista jedinica ponavlja, podijelite je po grupi.

Oprez: Najopasniji aspekt curenja je da se predstavlja kao uspjeh. Loš model očito će dati loše rezultate i bit će zapažen; Model koji je procurio radi odlično, sviđa se svima i pušten je u proizvodnju — tu počinje kolaps. Zato je "vrlo dobar" rezultat razlog za uzbunu, a ne slavlje.

Ponovljivost: dobivanje istog rezultata dva puta

Ponovljivost je mogućnost dobivanja istog rezultata kada ponovno pokrenete analizu u drugo vrijeme, na drugom stroju. Bez ovoga, vaša je analiza usputna, a ne znanstvena. Glavni uzroci i rješenja koja oštećuju ponovljivost:

Ručni koraci: Ručno mijenjanje ćelije u Excelu, ručno uređivanje grafikona. Rješenje: neka svaki korak bude u kodu.

Nefiksna slučajnost: obuka modela, uzorkovanje, razdvajanje uključuju slučajnost. Rješenje: popraviti nasumično sjeme (početna vrijednost generatora nasumičnog odabira) (random_state=42).

Promjene verzija: rezultat se može promijeniti kada se promijeni verzija biblioteke. Rješenje: popraviti ovisnosti (requirements.txt, datoteka okruženja).

Nema evidencije: Nije jasno koji su podaci, koja šifra, koji parametar korišteni. Rješenje: kontrola verzija (Git — sustav koji sprema sve verzije koda) i verzija podataka.

"Radi samo na mom stroju": Rješenje: dokumentirajte okolinu, koristite spremnike (Docker) ako je moguće.

tri mini kućišta

Slučaj 1 — Curenje cilja. Zdravstvena analiza uključila je stupac "lijekovi nakon otpusta" u predviđanju "hoće li pacijent biti ponovno primljen". Ovaj stupac je popunjen tek nakon otpusta bolesnika. Model je dao 96%, u proizvodnji 61%. Projekt od 8 tjedana bio je smeće. Lekcija: pitajte svaku značajku "je li prisutna u vrijeme predviđanja?"

Slučaj 2 — Curenje predprocesiranja. Jedan tim skalirao je sve podatke i zatim ih podijelio. Srednja vrijednost testnih podataka bila je uključena u skaliranje. CV rezultat 89%, stvarna proizvodnja 76%. Lažni uspjeh je nestao kada sam prešao u Pipeline i o transformacijama učio tek na treningu. Lekcija: prvo podijeli, transformiraj kasnije.

Slučaj 3 — Nemogućnost reprodukcije. Analitičar je htio ažurirati grafikon koji je predstavio upravi tri mjeseca kasnije, ali se nije mogao sjetiti kako ga je napravio; mnogi su koraci napravljeni ručno u Excelu. Rezultat je izostao i povjerenje je poljuljano. Lekcija: nema ručnih koraka, sve je u kodu i Gitu.

Četiri predloška za kopiranje

1) Inspekcija curenja:

Vaša uloga: inspektor curenja. Cilj: "odljev" (0/1), referentni datum prognoze: record_date. Dat ću vam ovaj popis značajki. Za SVAKU značajku: (a) je li posljedica cilja, (b) je li mi dostupna u trenutku predviđanja, (c) uključuje li vremenski prozor budućnost? Označite to kao "nesigurno/sumnjivo/curenje" i napišite razlog. Značajke: [popis]

2) Cjevovod bez curenja:

Postavite sklearn cjevovod: prvo podijelite niz/test (stratificirani, sjeme=42), ONDA uklopite svu predobradu (imputiranje, skaliranje, kodiranje) u cjevovod SAMO iz treninga. Objasnite zašto kod ne curi, koji je korak gdje naučen.

3) Kod popisa za provjeru ponovljivosti:

Želim svoju analizu učiniti ponovljivom. Predložite kod/strukturu koja dodaje: (1) čvrsto početno mjesto za svu slučajnost, (2) korištene verzije biblioteke za ispis, (3) oznaku datuma/verzije za podatke i izlaz. Također mi daj popis za provjeru da budem siguran da nema ručnih koraka.

4) Grupirana particija (iste curenje jedinice):

U podacima isti customer_id postoji u više redaka. Napravite podjelu (GroupKFold iliGroupShuffleSplit, group = customer_id) koja SPRIJEČAVA da isti korisnik bude i na obuci i na testiranju. Uključite kod za potvrdu da nema kupaca u oba skupa nakon podjele.

Slab upit / Jak upit

Slab upit:

Moj model vratio je 98% točnosti, nije li to sjajno? Optimizirajte kod.

Slavljenje 98% skriva curenje. Prije optimizacije treba ispitati je li ta ocjena stvarna ili ne.

Snažan upit:

Vaša uloga: inspektor curenja. Moj model daje 98% točnosti na testnom setu, što mi zvuči "predobro da bi bilo istinito". Provjerite: (1) jesu li neke značajke rezultat cilja, (2) jesu li pretvorbe izvršene prije dijeljenja, (3) jesu li iste jedinice u dva skupa, (4) postoje li curenja vremena. Navedite sve sumnjive točke; Usredotočite se na pronalaženje curenja, a ne na popravljanje rezultata.

Ovdje se visok rezultat tretira kao znak koji treba preispitivati, a ne slaviti.

Uobičajene greške

  • Proslava "vrlo dobrog" rezultata. Rezultat koji je previše dobar da bi bio istinit je upozorenje o curenju, a ne postignuće.
  • Učenje transformacije iz svih podataka prije dijeljenja. Najčešće curenje; Split prvi s cjevovodom.
  • Nasumično dijeljenje vremenske serije. Model vidi budućnost; Kronološka podjela je nužna.
  • Ostavljanje iste jedinice u dva seta. Model pamti osobu; Podijelite po grupama.
  • Ne ulazite ručno i ne upisujete kod. Analiza postaje neponovljiva; sve bi trebalo biti u kodu i Gitu.
Savjet: Napišite "zavjet časti" u dvije rečenice na početku svog projekta: "Nisam ni na koji način dirao testni set prije nego što sam ga vidio u proizvodnji. Svaki korak je u kodu i početna vrijednost je fiksirana." Ako ne možete pošteno potpisati ove dvije rečenice, vaš rezultat još nije pouzdan.

Ukratko

Curenje podataka i neponovljivost dvije su najskuplje tihe pogreške u znanosti o podacima. Curenje je vizija budućnosti modela i predstavlja se kao lažni uspjeh; Rješenje je rano podijeliti testni skup, naučiti transformacije samo iz treninga (cijevovodi), postaviti svakoj značajki pitanje "Imam li to u vrijeme predviđanja" i izvršiti ispravno dijeljenje (kronološko/grupirano). Ponovljivost je mogućnost dobivanja istog rezultata dva puta; njegovo rješenje je da ručno ukloni korake, prikvači sjeme, zamrzne verzije i sve zadrži u Gitu. AI može povećati ili smanjiti te rizike; Vaša disciplina je ta koja određuje.

Zadatak aplikacije

Uzmite popis značajki modela koji ste izgradili (ili hipotetskog) i postavite svakoj značajki pitanje "imam li ove informacije u vrijeme predviđanja?" pismeno; Pronađite barem jednog kandidata za curenje. Zatim ispunite popis za provjeru kako bi vaša analiza bila ponovljiva: je li početna vrijednost fiksirana, postoje li ručni koraci, jesu li verzije registrirane, jesu li u Gitu. Ispravite nedostatke.

popis za provjeru

  • [ ] Jesam li postavio upit o ocjeni "previše dobro da bi bilo istinito" kao upozorenje o curenju?
  • [ ] Jesam li naučio sve transformacije nakon razvoda, samo na treningu?
  • [ ] Jesam li podijelio prema strukturi vremena/grupe (kronološki/GroupKFold)?
  • [ ] Jesam li sve slučajnosti učinio ponovljivim s fiksnim sjemenom?
  • [ ] Jesam li uklonio ručne korake i zadržao sve u kodu i kontroli verzija?