Kasu:
- Võimalus tuvastada andmelekke tüüpe (sihtmärk, aeg, eeltöötlus, rühmitatud rida) ja küsida häirena skoori "liiga hea, et olla tõsi"
- Võimalus vältida lekkeid katsekomplekti, torujuhtme varajase eraldamise ja õige jaotusega (kronoloogiline/rühmitatud)
- Võimalus muuta analüüs reprodutseeritavaks fikseeritud seemnete, versioonikontrolli ja manuaalsete sammude eemaldamisega
Andmeteaduses on kaks viga, mis raiskavad kõige rohkem vaeva, ja mõlemad on salakavalad, sest viivad katastroofini just siis, kui kõik "näib olevat korras". Esimene on andmete leke: mudel töötab katsekomplektis suurepäraselt, kuid jookseb tootmises kokku. Teine on reprodutseerimatus: teete analüüsi kuus kuud hiljem ja saate täiesti teistsuguse tulemuse. See üksus on pühendatud nende kahe lõksu põhjalikule tundmisele ja vältimisele. AI võib suurendada mõlemat riski (tekitab kiiresti, soovitab varjatud lekkeid, hõlbustab käsitsi toimingute tegemist), kuid võib neid ka vähendada, kui seda kasutatakse õigesti. Erinevus on distsipliinis.
Andmeleke: selgeltnägija mudel
Andmeleke on siis, kui mudel näeb koolituse ajal teavet, mida tal tegeliku prognoosimise ajal ei ole. Mudel "petab" selle teabega, näib katsekomplektil suurepärane, kuid jookseb tootmises ilma selle teabeta kokku. Lekke sümptom on peaaegu alati sama: liiga hea, et olla tõsi. Enne kui rõõmustate, kui näete 99% täpsust, peaksite otsima lekkeid.
Peamised lekketüübid on:
1. Värava leke: funktsioon on eesmärgi tulemus. "Tühistati" prognoosis on veerud "tühistamiskuupäev" või "tagasimakse summa" eesmärgi tulemus; Need täidetakse alles siis, kui tulemus on selge.
2. Ajaleke: tulevikuteabe toomine minevikku. "Viimase 30 päeva keskmise" arvutamisel lisage prognoosipäevale järgnevad päevad või jagage aegrida juhuslikult.
3. Eeltöötluse leke: teisenduste (nt skaleerimine, täitmine, kodeerimine) õppimine kõigist andmetest enne koolituse/testimise sektsiooni. Testiandmete keskmistamine segab treenimist.
4. Dubleeritud/rühmitatud rea leke: samale isikule kuuluvad read esinevad nii koolitusel kui ka testimisel (sama patsiendi kaks visiiti erinevates komplektides). Modell jätab inimese pähe.
Lekke tüüp
Kuidas sünnib
Kuidas ennetada
siht leke
Veerg, mis on sihtmärgi tulemus
"Kas mul on see ennustamise ajal" test
aja leke
Tuleviku minevikku toomine
Kronoloogiline jaotus, akende juhtimine
Eeltöötluse leke
Eelnevalt jagatud teisendus
Torustik, sobib just treeningust
Grupeeritud rea leke
Sama üksus kahes komplektis
Rühmade kaupa jagatud (GroupKFold)
Ainus distsipliin lekke vältimiseks
Levinud lahendus igat tüüpi lekete puhul taandub ühele lausele: isoleerige testikomplekt võimalikult varakult, et jäljendada tegelikku tulevikku, ja ärge "õpetage" sellele midagi. Praktikas tähendab see: kõigepealt jaga, seejärel õpi alles koolituselt kõik teisendused ja rakenda neid konveier (struktuur, mis koondab kõik sammud ühte ahelasse). Esitage iga funktsiooni kohta küsimus "kas mul on see teave ennustuse ajal?" Kui aega on, jaga see kronoloogiliselt; Kui sama üksus kordub, jagage rühmadesse.
Ettevaatust: lekke kõige ohtlikum aspekt on see, et see osutub edukaks. Halb mudel annab ilmselt kehvad tulemused ja seda märgatakse; Lekkinud mudel töötab suurepäraselt, meeldib kõigile ja läheb tootmisse — sealt algab kokkuvarisemine. Seetõttu on "väga hea" tulemus ärevuse, mitte pidutsemise põhjus.
Reprodutseeritavus: kaks korda sama tulemuse saamine
Reprodutseeritavus on võimalus saada sama tulemus, kui käivitate analüüsi teisel ajal, teises masinas. Ilma selleta on teie analüüs juhuslik, mitte teaduslik. Peamised reprodutseeritavust kahjustavad põhjused ja lahendused:
Käsitsi toimingud: lahtri käsitsi muutmine Excelis, diagrammi käsitsi redigeerimine. Lahendus: sisestage iga samm koodis.
Fikseerimata juhuslikkus: mudeli koolitus, valimi võtmine, jagamine hõlmavad juhuslikkust. Lahendus: fikseerige juhuslik seeme (juhusliku generaatori algväärtus) (random_state=42).
Versiooni nihked: tulemus võib muutuda, kui teegi versioon muutub. Lahendus: parandage sõltuvused (requirements.txt, keskkonnafail).
Arvestust ei peeta: pole selge, milliseid andmeid, millist koodi, millist parameetrit kasutati. Lahendus: versioonikontroll (Git — süsteem, mis salvestab kõik koodi versioonid) ja andmete versioonide loomine.
"See töötab ainult minu masinas": Lahendus: dokumenteerige keskkond, kasutage võimalusel konteinereid (Docker).
kolm minikarpi
Juhtum 1 – sihtmärgi leke. Terviseanalüüsis oli veerg "väljakirjutamisjärgsed ravimid", mis ennustas, "kas patsient võetakse uuesti vastu". See veerg täideti alles pärast patsiendi väljakirjutamist. Mudel andis 96%, tootmises 61%. 8-nädalane projekt oli prügi. Õppetund: küsige igalt funktsioonilt "kas see on ennustamise ajal olemas?"
Juhtum 2 – eeltöötluse leke. Üks meeskond skaleeris kõik andmed ja jagas need seejärel pooleks. Katseandmete keskmine oli seotud skaleerimisega. CV skoor 89%, tegelik toodang 76%. Võlts edu kadus, kui kolisin Pipeline’i ja õppisin transformatsioonidest alles koolituselt. Õppetund: kõigepealt jaga, hiljem teisenda.
Juhtum 3 – reprodutseerimise ebaõnnestumine. Üks analüütik soovis kolm kuud hiljem juhtkonnale esitatud diagrammi värskendada, kuid ei mäletanud, kuidas ta selle koostas; paljud sammud tehti Excelis käsitsi. Tulemus ei õnnestunud ja usaldus kõikus. Õppetund: käsitsi samme pole, kõik on koodis ja Gitis.
Neli kopeeritavat malli
1) Lekkekontroll:
Teie roll: lekkeinspektor. Sihtmärk: "churn" (0/1), prognoosi võrdluskuupäev: rekordi_kuupäev. Ma annan teile selle funktsioonide loendi. IGA funktsiooni puhul: (a) kas see on eesmärgi tagajärg, (b) kas see on mulle ennustamise ajal kättesaadav, (c) kas ajaaken hõlmab tulevikku? Märkige see kui "ebaturvaline/kahtlane/lekib" ja kirjutage põhjus. Omadused: [loend]
2) Lekkevaba torujuhe:
Seadistage sklearn Pipeline: kõigepealt jagage rong/test (kihistatud, seemne = 42), SIIS mahutage kogu eeltöötlus (imputeerimine, skaala, kodeerimine) AINULT koolitusest pärinevasse torujuhtmesse. Selgitage, miks kood on lekkevaba, millist sammu kus õpiti.
3) Reprodutseeritavuse kontrollnimekirja kood:
Tahan muuta oma analüüsi reprodutseeritavaks. Soovitage koodi/struktuuri, mis lisab: (1) kõva seeme igasuguse juhuslikkuse jaoks, (2) kasutatavate teegi versioonide trükkimiseks, (3) andmete ja väljundi kuupäeva/versiooni silt. Andke mulle ka kontroll-loend, et veenduda, et pole käsitsi toiminguid.
4) Rühmitatud vahesein (sama seadme leke):
Andmetes on sama kliendi_id mitmel real. Tehke jaotus (GroupKFold võiGroupShuffleSplit, rühm = kliendi_id), mis TAKKAB sama kliendi viibimist nii koolitusel kui ka testimisel. Kaasake kood, et veenduda, et pärast jagamist pole mõlemas komplektis ühtegi klienti.
Nõrk viip / Tugev viip
Nõrk viip:
Minu mudel andis 98% täpsust, kas pole suurepärane? Optimeerige kood.
98% tähistamine peidab lekke. Enne optimeerimist tuleks küsida, kas see skoor on reaalne või mitte.
Võimas viip:
Teie roll: lekkeinspektor. Minu mudel tagastab testikomplektis 98% täpsuse, mis kõlab minu jaoks "liiga hea, et tõsi olla". Kontrollige: (1) kas mõni omadus tuleneb sihtmärgist, (2) kas konversioonid on tehtud enne jagamist, (3) on sama üksus kahes komplektis, (4) kas esineb ajalekkeid. Loetlege kõik kahtlased punktid; Keskenduge lekke leidmisele, mitte skoori parandamisele.
Siin käsitletakse kõrget tulemust kui märki, mida tuleb kahtluse alla seada, mitte tähistada.
Levinud vead
- Tähistame "väga head" tulemust. Liiga hea, et olla tõsi skoor on lekkehoiatus, mitte saavutus.
- Teisenduse õppimine kõigist andmetest enne jagamist. Kõige tavalisem leke; Lõigake kõigepealt torujuhtmega.
- Aegridade jagamine juhuslikult. Modell näeb tulevikku; Kronoloogiline jaotus on kohustuslik.
- Jättes sama üksuse kahes komplektis. Modell jätab inimese pähe; Jaga rühmade kaupa.
- Mitte käsitsi sisse astuda ja koodi sisse kirjutada. Analüüs muutub reprodutseerimatuks; kõik peaks olema koodis ja Gitis.
Näpunäide: kirjutage oma projekti algusesse kahelauseline "autõotus": "Ma ei ole testikomplekti mitte mingil moel puudutanud enne, kui seda tootmises näen. Iga samm on koodis ja seeme on fikseeritud." Kui te ei saa neid kahte lauset ausalt allkirjastada, pole teie tulemus veel usaldusväärne.
Kokkuvõttes
Andmete lekkimine ja reprodutseeritavus on kaks kõige kallimat vaikivat viga andmeteaduses. Leke on mudeli nägemus tulevikust ja esitleb end kui vale edu; Lahenduseks on testikomplekt varakult poolitada, teisendusi õppida ainult treeningutest (konveier), esitada igale funktsioonile küsimus "Kas see on mul ennustamise ajal" ja teha õige poolitamine (kronoloogiline/rühmitatud). Reprodutseeritavus on kaks korda sama tulemuse saamine; tema lahendus on sammude käsitsi eemaldamine, seemne kinnitamine, versioonide külmutamine ja kõik Gitis hoidmine. AI võib neid riske kas suurendada või vähendada; See on teie distsipliin, mis määrab.
Rakenduse ülesanne
Võtke teie loodud (või hüpoteetilise) mudeli funktsioonide loend ja esitage igale funktsioonile küsimus "kas mul on prognoosimise ajal see teave?" kirjalikult; Leidke vähemalt üks lekkekandidaat. Seejärel täitke kontrollnimekiri, et muuta analüüs reprodutseeritavaks: kas seeme on fikseeritud, kas on käsitsi toiminguid, kas versioonid on registreeritud, kas need on Gitis. Parandage puudused.
kontrollnimekiri
- [ ] Kas ma küsisin lekkehoiatuseks skoori "liiga hea, et olla tõsi"?
- [ ] Kas ma õppisin kõik teisendused pärast jagamist lihtsalt koolituse käigus?
- [ ] Kas olen jaganud aja/rühma struktuuri järgi (kronoloogiline/GroupKFold)?
- [ ] Kas ma olen muutnud kogu juhuslikkuse fikseeritud seemnega korratavaks?
- [ ] Kas eemaldasin käsitsi juhised ja jätsin kõik koodi ja versioonikontrolli alla?