Dobički:
- Sposobnost prepoznavanja vrst uhajanja podatkov (cilj, čas, predprocesiranje, združena vrstica) in povpraševanje po rezultatu "predobro, da bi bilo res" kot alarm
- Sposobnost preprečevanja uhajanja z zgodnjim ločevanjem preskusnega niza, cevovoda in pravilne razdelitve (kronološko/združeno)
- Sposobnost narediti analizo ponovljivo s fiksnimi semeni, nadzorom različic in odstranitvijo ročnih korakov
Obstajata dve napaki, zaradi katerih je največ truda v znanosti o podatkih in obe sta zahrbtni, ker vodita v katastrofo ravno takrat, ko se »zdi, da je vse v redu«. Prvi je uhajanje podatkov: model deluje odlično na testnem nizu, vendar se zruši v proizvodnji. Drugi je neponovljivost: izvedete analizo šest mesecev pozneje in dobite popolnoma drugačen rezultat. Ta enota je namenjena poglobljenemu poznavanju in izogibanju teh dveh pasti. Umetna inteligenca lahko poveča obe tveganji (generira hitro, nakazuje skrita uhajanja, vam olajša izvajanje ročnih korakov), vendar ju lahko tudi zmanjša, če se uporablja pravilno. Razlika je v disciplini.
Uhajanje podatkov: jasnovidni model
Uhajanje podatkov je, ko model med usposabljanjem vidi informacije, ki jih v času dejanske napovedi ne bo imel. Model "goljufa" s temi informacijami, na testnem kompletu je videti odlično, brez teh informacij pa se zruši v proizvodnji. Simptom puščanja je skoraj vedno enak: predobro, da bi bilo res. Preden se razveselite, ko vidite 99-odstotno natančnost, poiščite puščanja.
Glavne vrste puščanja so:
1. Uhajanje cilja: funkcija je rezultat cilja. V napovedi »je bil odpovedan« sta stolpca »datum preklica« ali »znesek vračila« rezultat cilja; Izpolnjene bodo šele, ko bo rezultat jasen.
2. Uhajanje časa: prenašanje prihodnjih informacij v preteklost. Pri izračunu "povprečja zadnjih 30 dni" vključite dneve po dnevu napovedi ali naključno razdelite časovno vrsto.
3. Uhajanje pred obdelavo: transformacije učenja, kot so skaliranje, polnjenje, kodiranje iz vseh podatkov pred particijo za usposabljanje/testiranje. Povprečenje testnih podatkov moti trening.
4. Podvojeno/združeno puščanje vrstic: Vrstice, ki pripadajo isti osebi, so prisotne tako pri usposabljanju kot pri testiranju (dva obiska istega pacienta v različnih nizih). Model si osebo zapomni.
Vrsta puščanja
Kako se rodi
Kako preprečiti
ciljno puščanje
Stolpec, ki je rezultat cilja
Test "Ali ga imam v času napovedi".
uhajanje časa
Prenašanje prihodnosti v preteklost
Kronološka delitev, nadzor okna
Puščanje predhodne obdelave
Pretvorba pred delitvijo
Pipeline, fit šele po treningu
Puščanje skupinske vrstice
Ista enota v dveh sklopih
Razdeli po skupinah (GroupKFold)
Edina disciplina za preprečevanje puščanja
Skupna rešitev za vse vrste uhajanj se skrči na en stavek: izolirajte testni niz čim prej, da posnemate resnično prihodnost, in ga ne "učite" ničesar. V praksi to pomeni: najprej razdelite, nato se naučite vseh transformacij samo iz usposabljanja in jih uporabite v cevovodu (struktura, ki združuje vse korake v eno verigo). Za vsako funkcijo postavite vprašanje "ali imam te informacije v času napovedi?" Če je čas, ga razdelite kronološko; Če se ista enota ponavlja, razdelite po skupinah.
Pozor: najnevarnejši vidik uhajanja je, da se predstavlja kot uspeh. Slab model bo očitno dal slabe rezultate in bo opažen; Model, ki je pricurljal v javnost, deluje odlično, ugaja vsem in je dan v proizvodnjo - tam se začne propad. Zato je "zelo dober" rezultat razlog za preplah, ne pa za slavje.
Ponovljivost: enak rezultat dvakrat
Ponovljivost je zmožnost, da dobite enak rezultat, ko znova izvedete analizo ob drugem času, na drugem stroju. Brez tega je vaša analiza naključna, ne znanstvena. Glavni vzroki in rešitve, ki poslabšajo ponovljivost:
Ročni koraki: Ročno spreminjanje celice v Excelu, ročno urejanje grafikona. Rešitev: vsak korak naj bo v kodi.
Nefiksna naključnost: usposabljanje modela, vzorčenje, delitev vključujejo naključnost. Rešitev: popravite naključno seme (začetno vrednost generatorja naključij) (random_state=42).
Premiki različic: rezultat se lahko spremeni, ko se spremeni različica knjižnice. Rešitev: popravite odvisnosti (requirements.txt, datoteka okolja).
Brez vodenja evidence: Ni jasno, kateri podatki, katera koda, kateri parameter so bili uporabljeni. Rešitev: nadzor različic (Git — sistem, ki shranjuje vse različice kode) in različica podatkov.
"Deluje samo na mojem računalniku": Rešitev: dokumentirajte okolje, po možnosti uporabite vsebnike (Docker).
trije mini kovčki
1. primer – Puščanje cilja. Zdravstvena analiza je vsebovala stolpec "zdravila po odpustu" pri napovedovanju "ali bo bolnik ponovno sprejet." Ta stolpec je bil izpolnjen šele po odpustu bolnika. Model je dal 96%, v proizvodnji 61%. 8-tedenski projekt je bil smeti. Lekcija: vsako funkcijo vprašajte "ali je prisotna v času napovedi?"
Primer 2 – Puščanje pri predhodni obdelavi. Ena ekipa je skalirala vse podatke in jih nato razdelila. Srednja vrednost testnih podatkov je bila vključena v skaliranje. CV rezultat 89 %, dejanska proizvodnja 76 %. Lažni uspeh je izginil, ko sem se preselil v Pipeline in sem se transformacij naučil šele na treningu. Lekcija: najprej razdeli, nato transformiraj.
Primer 3 – Neuspešno razmnoževanje. Analitik je hotel posodobiti grafikon, ki ga je predstavil vodstvu tri mesece kasneje, vendar se ni mogel spomniti, kako ga je izdelal; veliko korakov je bilo narejenih ročno v Excelu. Rezultat se ni izšel in zaupanje je bilo omajano. Lekcija: brez ročnih korakov, vse je v kodi in Gitu.
Štiri predloge za kopiranje
1) Pregled puščanja:
Vaša vloga: inšpektor za puščanje. Cilj: "odliv" (0/1), referenčni datum napovedi: datum_zapisa. Dal vam bom ta seznam funkcij. Za VSAKO funkcijo: (a) ali je posledica cilja, (b) mi je na voljo v času napovedi, (c) ali časovno okno vključuje prihodnost? Označite kot "nesafe/suspicious/leak" in napišite razlog. Lastnosti: [seznam]
2) Cevovod brez puščanja:
Nastavite cevovod sklearn: najprej razdelite niz/preizkus (stratificiran, seme=42), POTEM prilagodite vso predprocesiranje (imputiranje, skaliranje, kodiranje) v cevovod SAMO od usposabljanja. Pojasnite, zakaj koda ne pušča, kateri korak je bil naučen kje.
3) Koda kontrolnega seznama ponovljivosti:
Svojo analizo želim narediti ponovljivo. Predlagajte kodo/strukturo, ki doda: (1) trdo seme za vso naključnost, (2) uporabljene različice knjižnice za tiskanje, (3) oznako datuma/različice za podatke in izpis. Daj mi tudi kontrolni seznam, da se prepričam, da ni ročnih korakov.
4) Skupinska particija (puščanje iste enote):
V podatkih obstaja isti customer_id v več vrsticah. Naredite razdelitev (GroupKFold aliGroupShuffleSplit, group = customer_id), ki PREPREČUJE, da bi bila ista stranka v usposabljanju in testiranju. Vključite kodo za preverjanje, da po razdelitvi v obeh nizih ni nobene stranke.
Šibek poziv/močan poziv
Šibek poziv:
Moj model je vrnil 98-odstotno natančnost, ali ni to super? Optimizirajte kodo.
Praznovanje 98 % skrije uhajanje. Pred optimizacijo se je treba vprašati, ali je ta rezultat resničen ali ne.
Močan poziv:
Vaša vloga: inšpektor za puščanje. Moj model vrne 98-odstotno natančnost na testnem nizu, kar se mi zdi "prelepo, da bi bilo res". Preverite: (1) ali so katere koli lastnosti rezultat cilja, (2) ali so bile pretvorbe opravljene pred razdelitvijo, (3) so enake enote v dveh nizih, (4) ali prihaja do časovnih uhajanj. Navedite vse sumljive točke; Osredotočite se na iskanje puščanja, ne na popravljanje rezultata.
Tukaj se visoka ocena obravnava kot znak, ki ga je treba dvomiti, ne pa slaviti.
Pogoste napake
- Proslavljanje "zelo dobrega" rezultata. Rezultat, ki je preveč dober, da bi bil resničen, je opozorilo o uhajanju in ne dosežek.
- Učenje transformacije iz vseh podatkov pred deljenjem. Najpogostejše puščanje; Najprej razdelite s cevovodom.
- Naključno razdelitev časovne serije. Model vidi prihodnost; Kronološka delitev je nujna.
- Zapuščanje iste enote v dveh sklopih. Model si zapomni osebo; Razdelite po skupinah.
- Brez ročnega vstopanja in pisanja kode. Analiza postane neponovljiva; vse bi moralo biti v kodi in Gitu.
Namig: Na začetku svojega projekta napišite dvostavčno "zaobljubo časti": "Nisem se na noben način dotaknil testnega niza, preden ga vidim v proizvodnji. Vsak korak je v kodi in seme je določeno." Če teh dveh stavkov ne morete pošteno podpisati, vaš rezultat še ni zanesljiv.
Če povzamem
Uhajanje podatkov in neponovljivost sta dve najdražji tihi napaki v podatkovni znanosti. Puščanje je modelova vizija prihodnosti in se predstavlja kot lažen uspeh; Rešitev je, da zgodaj razdelite testni niz, se transformacij naučite samo iz usposabljanja (cevovod), vsaki funkciji postavite vprašanje "Ali jo imam v času napovedi" in naredite pravilno razdelitev (kronološko/združeno). Ponovljivost je zmožnost dvakratnega pridobivanja istega rezultata; njegova rešitev je, da ročno odstrani korake, pripne seme, zamrzne različice in vse ohrani v Gitu. AI lahko poveča ali zmanjša ta tveganja; Vaša disciplina je tista, ki določa.
Aplikacijska naloga
Vzemite seznam funkcij modela, ki ste ga zgradili (ali hipotetičnega) in vsaki funkciji zastavite vprašanje "ali imam te informacije v času napovedi?" pisno; Poiščite vsaj enega kandidata za uhajanje. Nato izpolnite kontrolni seznam, da bo vaša analiza ponovljiva: ali je seme popravljeno, ali obstajajo ročni koraki, ali so različice registrirane, ali so v Gitu. Odpravite pomanjkljivosti.
kontrolni seznam
- [ ] Ali sem vprašal oceno "prelepo, da bi bilo res" kot opozorilo o uhajanju?
- [ ] Ali sem se vseh transformacij po razhodu naučil samo na treningu?
- [ ] Ali sem razdelil glede na časovno/skupinsko strukturo (kronološko/GroupKFold)?
- [ ] Ali sem naredil vso naključnost ponovljivo s fiksnim semenom?
- [ ] Ali sem odstranil ročne korake in vse ohranil v kodi in nadzoru različic?