Jedinica 10 / 11

Curenje podataka i reproduktivnost: tihe katastrofe i disciplina

Dobici:

  • Sposobnost prepoznavanja vrsta curenja podataka (cilj, vrijeme, prethodna obrada, grupirani red) i upitati ocjenu 'previše dobro da bi bilo istinito' kao alarm
  • Sposobnost prevencije curenja ranim odvajanjem testnog seta, cjevovoda i pravilnom podjelom (hronološki/grupisani)
  • Sposobnost da se analiza učini ponovljivom sa fiksnim sjemenom, kontrolom verzija i uklanjanjem ručnih koraka

Postoje dvije greške koje troše najviše truda u nauci o podacima, a obje su podmukle jer dovode do katastrofe baš kada se čini da je sve u redu. Prvi je curenje podataka: model radi odlično na testnom setu, ali ruši u proizvodnji. Druga je neponovljivost: izvršite analizu šest mjeseci kasnije i dobijete potpuno drugačiji rezultat. Ova jedinica je posvećena detaljnom poznavanju i izbjegavanju ove dvije zamke. AI može povećati oba rizika (generira brzo, sugerira skrivena curenja, olakšava vam poduzimanje ručnih koraka), ali ih također može smanjiti ako se pravilno koristi. Razlika je u disciplini.

Curenje podataka: vidoviti model

Curenje podataka je kada model tokom treninga vidi informacije koje neće imati u trenutku stvarnog predviđanja. Model "vara" sa ovim informacijama, izgleda odlično na testnom setu, ali pada u proizvodnji bez te informacije. Simptom curenja je gotovo uvijek isti: previše dobro da bi bilo istinito. Prije nego se radujete kada vidite 99% tačnosti, trebali biste potražiti curenje.

Glavne vrste curenja su:

1. Propuštanje cilja: karakteristika je rezultat cilja. U predviđanju "je otkazan", kolone "datum otkazivanja" ili "iznos povrata" rezultat su cilja; Oni će biti popunjeni samo kada je rezultat jasan.

2. Curenje vremena: Donošenje budućih informacija u prošlost. Prilikom izračunavanja "prosjeka za posljednjih 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, popunjavanje, kodiranje iz svih podataka prije particije za obuku/testiranje. Usrednjavanje podataka testa ometa obuku.

4. Dupli/grupisani redovi curenja: Redovi koji pripadaju istoj osobi prisutni su i u obuci i u testiranju (dvije posjete istog pacijenta u različitim setovima). Model pamti osobu.

Vrsta curenja

Kako se rodi

Kako spriječiti

curenje cilja

Kolona koja je rezultat cilja

Test "Da li ga imam u trenutku predviđanja".

curenje vremena

Dovođenje budućnosti u prošlost

Hronološka podjela, kontrola prozora

Curenje predobrade

Pre-split konverzija

Pipeline, fit tek sa treninga

Grupirano curenje u redovima

Ista jedinica u dva seta

Podijeli po grupi (GroupKFold)

Jedina disciplina koja sprečava curenje

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

Oprez: Najopasniji aspekt curenja informacija je to što se predstavlja kao uspjeh. Loš model će očito proizvesti loše rezultate i bit će primjećen; Model koji je procurio odlično radi, dopada svima i pušta se u proizvodnju — tu počinje kolaps. Zato je "veoma dobar" rezultat razlog za uzbunu, a ne za slavlje.

Reproducibilnost: dobijanje istog rezultata dvaput

Reproducibilnost je mogućnost da se dobije isti rezultat kada ponovo pokrenete analizu u neko drugo vrijeme, na drugom stroju. Bez toga, vaša analiza je slučajna, a ne naučna. Glavni uzroci i rješenja koja narušavaju reproduktivnost:

Ručni koraci: Ručna promjena ćelije u Excelu, ručno uređivanje grafikona. Rješenje: imajte svaki korak u kodu.

Nefiksna slučajnost: Obuka modela, uzorkovanje, podela uključuje slučajnost. Rješenje: popravite nasumično sjeme (početna vrijednost generatora slučajnih rezultata) (random_state=42).

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

Bez vođenja evidencije: Nije jasno koji su podaci, koji kod, koji parametar korišteni. Rješenje: kontrola verzija (Git — sistem koji čuva sve verzije koda) i upravljanje verzijama podataka.

"Radi samo na mojoj mašini": Rješenje: dokumentirajte okruženje, koristite kontejnere (Docker) ako je moguće.

tri mini kofera

Slučaj 1 — Ciljno curenje. Zdravstvena analiza je uključivala kolonu "lijekovi nakon otpusta" u predviđanju "hoće li pacijent biti ponovo primljen". Ova kolona je popunjena tek nakon što je pacijent otpušten. Model je dao 96%, u proizvodnji 61%. Osmosedmični projekat je bio smeće. Lekcija: pitajte svaku karakteristiku "da li je prisutna u vrijeme predviđanja?"

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

Slučaj 3 — Neuspjeh reprodukcije. Analitičar je želeo da ažurira grafikon koji je predstavio menadžmentu tri meseca kasnije, ali nije mogao da se seti kako ga je napravio; mnogi koraci su urađeni ručno u Excel-u. Rezultat nije uspio i povjerenje je poljuljano. Lekcija: nema ručnih koraka, sve je u kodu i Gitu.

Četiri šablona za kopiranje

1) Inspekcija curenja:

Vaša uloga: inspektor curenja. Cilj: "churn" (0/1), referentni datum prognoze: record_date. Daću vam ovu listu karakteristika. Za SVAKU karakteristiku: (a) da li je posledica cilja, (b) da li mi je dostupna u trenutku predviđanja, (c) da li vremenski okvir uključuje budućnost? Označite to kao "nesigurno/sumnjivo/curenje" i napišite razlog. Karakteristike: [lista]

2) Cjevovod bez curenja:

Postavite sklearn Pipeline: prvo podijelite train/test (stratificirano, sjeme=42), ONDA ugradite svu pretprocesu (imputiranje, skaliranje, kodiranje) u cjevovod SAMO iz obuke. Objasnite zašto je kod bez curenja, koji je korak naučen gdje.

3) Kôd kontrolne liste obnovljivosti:

Želim da svoju analizu učinim ponovljivom. Predložite kod/strukturu koja dodaje: (1) tvrdo sjeme za sve slučajnosti, (2) korištene verzije biblioteke za štampanje, (3) oznaku datuma/verzije za podatke i izlaz. Također mi dajte kontrolnu listu da se uvjerim da nema ručnih koraka.

4) Grupirana particija (curenje iste jedinice):

U podacima isti customer_id postoji u više redova. Napravite podjelu (GroupKFold iliGroupShuffleSplit, group = customer_id) koja SPREČAVA da isti klijent bude i na obuci i na testiranju. Uključite kod kako biste provjerili da nema kupaca u oba skupa nakon razdvajanja.

Slaba prompt / Jaka prompt

Slab upit:

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

Proslava 98% skriva curenje. Prije optimizacije treba se zapitati da li je ovaj rezultat stvaran ili ne.

Snažan upit:

Vaša uloga: inspektor curenja. Moj model daje 98% tačnosti na test setu, što mi zvuči "previše dobro da bi bilo istinito". Provjerite: (1) jesu li neke karakteristike rezultat cilja, (2) jesu li konverzije obavljene prije razdvajanja, (3) jesu li ista jedinica u dva seta, (4) ima li curenja vremena. Navedite sve sumnjive tačke; Fokusirajte se na pronalaženje curenja, a ne na popravljanje rezultata.

Ovdje se visok rezultat tretira kao znak da se dovodi u pitanje, a ne da se slavi.

Uobičajene greške

  • Slavimo "veoma dobar" rezultat. Rezultat previše dobar da bi bio istinit je upozorenje na curenje podataka, a ne postignuće.
  • Učenje transformacije iz svih podataka prije dijeljenja. Najčešće curenje; Prvo podijelite s cjevovodom.
  • Podjela vremenske serije nasumično. Model vidi budućnost; Hronološka podjela je obavezna.
  • Ostavljanje iste jedinice u dva seta. Model pamti osobu; Podijelite po grupama.
  • Ne ulaziti ručno i upisivati ​​kod. Analiza postaje neponovljiva; sve bi trebalo biti u kodu i Gitu.
Savjet: Napišite "zakletvu časti" u dvije rečenice na početku vašeg projekta: "Nisam ni na koji način dotaknuo testni set prije nego što sam ga vidio u produkciji. Svaki korak je u kodu i sjeme je fiksirano." Ako ne možete pošteno da potpišete ove dvije rečenice, vaš rezultat još nije pouzdan.

Ukratko

Curenje podataka i neponovljivost su dvije najskuplje tihe greške u nauci o podacima. Curenje je vizija modela budućnosti i predstavlja se kao lažni uspjeh; Rješenje je da rano podijelite testni set, naučite transformacije samo iz treninga (pipeline), postavite svakoj osobini pitanje "Da li ga imam u vrijeme predviđanja" i uradite ispravno podjelu (hronološko/grupirano). Reproducibilnost je mogućnost da se dvaput dobije isti rezultat; njegovo rješenje je da ručno ukloni korake, zakači sjeme, zamrzne verzije i sve zadrži u Gitu. AI može ili povećati ili smanjiti ove rizike; Vaša disciplina je ta koja određuje.

Zadatak aplikacije

Uzmite listu karakteristika modela koji ste izgradili (ili hipotetičkog) i postavite svakoj osobini pitanje "imam li ove informacije u vrijeme predviđanja?" pismeno; Pronađite barem jednog kandidata za curenje. Zatim ispunite kontrolnu listu da bi vaša analiza bila reproducibilna: da li je seme fiksirano, da li postoje ručni koraci, da li su verzije registrovane, da li su u Gitu. Ispravite nedostatke.

kontrolna lista

  • [ ] Da li sam postavio upit za rezultat "previše dobro da bi bilo istinito" kao upozorenje o curenja?
  • [ ] Jesam li naučio sve transformacije nakon razdvajanja, samo iz treninga?
  • [ ] Jesam li podijelio prema strukturi vremena/grupe (hronološki/GroupKFold)?
  • [ ] Jesam li napravio sve slučajnosti ponovljive sa fiksnim sjemenom?
  • [ ] Jesam li uklonio ručne korake i zadržao sve u kontroli koda i verzija?