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?