Vienetas 10 / 11

Duomenų nutekėjimas ir atkuriamumas: tylios nelaimės ir disciplina

Pelnas:

  • Gebėjimas atpažinti duomenų nutekėjimo tipus (tikslas, laikas, išankstinis apdorojimas, sugrupuota eilutė) ir kaip pavojaus signalą pateikti užklausą „per gerai, kad būtų tiesa“
  • Gebėjimas užkirsti kelią nuotėkiui anksti atskiriant bandymo rinkinį, vamzdyną ir teisingai padalijus (chronologiškai / sugrupuota)
  • Galimybė atlikti analizę atkuriamą naudojant fiksuotas sėklas, versijos valdymą ir rankinių žingsnių pašalinimą

Yra dvi klaidos, kurios išeikvoja daugiausia pastangų duomenų moksle, ir jos abi yra klastingos, nes sukelia nelaimę tik tada, kai viskas „atrodo, kad viskas gerai“. Pirmasis yra duomenų nutekėjimas: modelis puikiai veikia bandomajame rinkinyje, tačiau gamyboje sugenda. Antrasis – neatkuriamumas: po šešių mėnesių atliekate analizę ir gaunate visiškai kitokį rezultatą. Šis skyrius skirtas giliai pažinti ir išvengti šių dviejų spąstų. Dirbtinis intelektas gali padidinti abi rizikas (sugeneruoja greitai, siūlo paslėptus nutekėjimus, palengvina veiksmus rankiniu būdu), bet taip pat gali ją sumažinti, jei naudojamas teisingai. Skirtumas yra disciplinoje.

Duomenų nutekėjimas: aiškiaregio modelis

Duomenų nutekėjimas yra tada, kai modelis mokymo metu mato informaciją, kurios neturės faktinio numatymo metu. Modelis „apgauna“ turėdamas šią informaciją, puikiai atrodo bandomajame rinkinyje, tačiau gamyboje sugenda be šios informacijos. Nuotėkio simptomas beveik visada yra tas pats: per gerai, kad būtų tiesa. Prieš apsidžiaugdami matydami 99% tikslumą, turėtumėte ieškoti nuotėkių.

Pagrindiniai nuotėkio tipai yra šie:

1. Įvarčio nutekėjimas: ypatybė yra įvarčio rezultatas. Prognozės „buvo atšaukta“ stulpeliai „atšaukimo data“ arba „grąžinama suma“ yra tikslo rezultatas; Jie bus užpildyti tik tada, kai bus aiškus rezultatas.

2. Laiko nutekėjimas: ateities informacijos perkėlimas į praeitį. Skaičiuodami „paskutinių 30 dienų vidurkį“, įtraukite dienas po prognozės dienos arba padalykite laiko eilutes atsitiktine tvarka.

3. Išankstinio apdorojimo nutekėjimas: transformacijų, tokių kaip mastelio keitimas, užpildymas, kodavimas iš visų duomenų, mokymasis prieš mokymo/testavimo skaidinį. Testo duomenų vidurkis trukdo treniruotis.

4. Pasikartojančios / sugrupuotos eilutės nutekėjimas: tam pačiam asmeniui priklausančios eilutės yra ir mokymuose, ir testuose (du to paties paciento apsilankymai skirtinguose rinkiniuose). Modelis įsimena žmogų.

Nuotėkio tipas

Kaip gimsta

Kaip užkirsti kelią

tikslinis nuotėkis

Stulpelis, kuris yra tikslo rezultatas

Testas „Ar turiu jį numatymo metu“.

laiko nuotėkis

Atnešti ateitį į praeitį

Chronologinis skirstymas, langų valdymas

Išankstinio apdorojimo nutekėjimas

Iš anksto padalintas konvertavimas

Vamzdynas, tinkamas tik iš treniruotės

Grupuotos eilės nuotėkis

Tas pats vienetas dviejuose komplektuose

Padalinta pagal grupę (GroupKFold)

Vienintelė disciplina, apsauganti nuo nutekėjimo

Bendras visų tipų nutekėjimų sprendimas susiveda į vieną sakinį: kuo anksčiau izoliuokite testų rinkinį, kad imituotumėte tikrąją ateitį, ir nieko jo „nemokykite“. Praktiškai tai reiškia: pirmiausia padalinkite, tada išmokite visas transformacijas tik iš mokymo ir pritaikykite jas konvejeriu (struktūra, kuri surenka visus žingsnius į vieną grandinę). Kiekvienai funkcijai užduokite klausimą „ar turiu šią informaciją numatymo metu?“ Jei yra laiko, suskirstykite jį chronologiškai; Jei tas pats vienetas kartojasi, padalinkite į grupę.

Atsargiai: pavojingiausias nutekėjimo aspektas yra tai, kad jis pasirodo kaip sėkmingas. Blogas modelis akivaizdžiai duos prastus rezultatus ir bus pastebėtas; Nutekėjęs modelis puikiai veikia, visiems patinka ir pradedamas gaminti – čia ir prasideda žlugimas. Štai kodėl „labai geras“ rezultatas kelia nerimą, o ne šventę.

Atkuriamumas: gauti tą patį rezultatą du kartus

Atkuriamumas – tai galimybė gauti tą patį rezultatą, kai analizę atliekate dar kartą kitu metu, kitame įrenginyje. Be to jūsų analizė yra atsitiktinė, o ne mokslinė. Pagrindinės priežastys ir sprendimai, kurie pablogina atkuriamumą:

Rankiniai veiksmai: neautomatinis langelio keitimas programoje „Excel“, rankinis diagramos redagavimas. Sprendimas: kiekvieną žingsnį įtraukite į kodą.

Nefiksuotas atsitiktinumas: modelio mokymas, atranka, padalijimas apima atsitiktinumą. Sprendimas: pataisykite atsitiktinę pradinę reikšmę (pradinė atsitiktinių generatoriaus reikšmė) (random_state=42).

Versija keičiasi: pasikeitus bibliotekos versijai, rezultatas gali pasikeisti. Sprendimas: ištaisykite priklausomybes (requirements.txt, aplinkos failas).

Nėra įrašų: neaišku, kokie duomenys, koks kodas, koks parametras buvo naudojamas. Sprendimas: versijos valdymas (Git – sistema, kuri išsaugo visas kodo versijas) ir duomenų versijų kūrimas.

„Tai veikia tik mano kompiuteryje“: Sprendimas: dokumentuokite aplinką, jei įmanoma, naudokite konteinerius („Docker“).

trys mini dėklai

1 atvejis – taikinio nuotėkis. Sveikatos analizėje buvo stulpelis „Vaistai po išrašymo“, numatantys, „ar pacientas bus priimtas pakartotinai“. Ši kolonėlė buvo užpildyta tik pacientą išleidus. Modelis davė 96%, gamyboje 61%. 8 savaičių projektas buvo šiukšlės. Pamoka: paklauskite kiekvienos funkcijos "ar ji yra numatymo metu?"

2 atvejis. Pirminio apdorojimo nutekėjimas. Viena komanda padidino visų duomenų mastelį ir išskaidė juos. Bandymo duomenų vidurkis buvo susijęs su masteliu. CV balas 89%, faktinė gamyba 76%. Netikra sėkmė dingo, kai persikėliau į „Pipeline“ ir apie transformacijas sužinojau tik iš treniruočių. Pamoka: pirma padalink, vėliau transformuok.

3 atvejis. Nepavyksta atgaminti. Analitikas norėjo atnaujinti diagramą, kurią vadovybei pateikė po trijų mėnesių, bet negalėjo prisiminti, kaip ją parengė; daugelis veiksmų buvo atlikti rankiniu būdu programoje „Excel“. Rezultatas nepasiteisino ir pasitikėjimas susvyravo. Pamoka: jokių rankinių veiksmų, viskas yra kode ir Git.

Keturi kopijuojami šablonai

1) Nuotėkio patikrinimas:

Jūsų vaidmuo: nuotėkio inspektorius. Tikslas: „Curn“ (0/1), prognozės atskaitos data: įrašo_data. Pateiksiu jums šį funkcijų sąrašą. KIEKVIENAI ypatybei: (a) ar tai yra tikslo pasekmė, (b) ar ji man prieinama numatymo metu, (c) ar į laiko langą įtraukta ateitis? Pažymėkite kaip „nesaugus/įtartinas/nutekęs“ ir parašykite priežastį. Savybės: [sąrašas]

2) Nesandarus vamzdynas:

Nustatykite sklearn dujotiekį: pirmiausia padalykite traukinį / bandymą (sluoksniuotas, pradinis = 42), PADĖKITE sutalpinkite visą išankstinį apdorojimą (įskaitymą, mastelį, kodavimą) TIK iš mokymo sistemos. Paaiškinkite, kodėl kodas nenutekėjo, kuris žingsnis buvo išmoktas kur.

3) Atkuriamumo kontrolinio sąrašo kodas:

Noriu, kad mano analizė būtų atkuriama. Pasiūlykite kodą/struktūrą, kuri prideda: (1) kietąją sėklą visam atsitiktinumui, (2) naudojamų bibliotekos versijų spausdinimą, (3) duomenų ir išvesties datos / versijos žymą. Taip pat pateikite man kontrolinį sąrašą, kad įsitikintumėte, jog nėra jokių rankinių veiksmų.

4) Sugrupuota pertvara (tas pats įrenginio nuotėkis):

Duomenyse tas pats kliento_id yra keliose eilutėse. Padarykite padalijimą (GroupKFold arbaGroupShuffleSplit, group = customer_id), kuris NLEIDŽIA tam pačiam klientui dalyvauti mokymuose ir bandymuose. Įtraukite kodą, kad patikrintumėte, ar po padalijimo abiejuose rinkiniuose nėra klientų.

Silpnas raginimas / Stiprus raginimas

Silpnas raginimas:

Mano modelis grąžino 98% tikslumą, argi ne puiku? Optimizuokite kodą.

Švenčiant 98 % nutekėjimas paslepia. Prieš optimizuojant reikėtų pasidomėti, ar šis balas tikras, ar ne.

Galingas raginimas:

Jūsų vaidmuo: nuotėkio inspektorius. Mano modelis grąžina 98 % bandymo rinkinio tikslumą, o tai man skamba „per gerai, kad būtų tiesa“. Patikrinkite: (1) ar yra kokių nors savybių taikinio rezultatas, (2) ar konversijos, atliktos prieš skaidant, (3) ar yra tas pats vienetas dviejuose rinkiniuose, (4) ar nėra laiko nutekėjimų. Išvardykite visus įtartinus taškus; Sutelkite dėmesį į nuotėkio radimą, o ne į balo taisymą.

Čia aukštas balas traktuojamas kaip ženklas, kuriuo reikia abejoti, o ne švęsti.

Dažnos klaidos

  • Švenčiame „labai gerą“ rezultatą. Per daug geras, kad būtų tiesa, rezultatas yra įspėjimas apie nutekėjimą, o ne pasiekimas.
  • Išmokti transformaciją iš visų duomenų prieš padalijimą. Dažniausias nuotėkis; Pirmiausia padalinkite vamzdynu.
  • Laiko eilučių padalijimas atsitiktinai. Modelis mato ateitį; Chronologinis skirstymas yra būtinas.
  • Paliekant tą patį įrenginį dviem komplektais. Modelis įsimena žmogų; Suskirstyti į grupes.
  • Neįeiti rankiniu būdu ir neįrašyti į kodą. Analizė tampa neatkuriama; viskas turėtų būti kode ir Git.
Patarimas: projekto pradžioje parašykite dviejų sakinių „garbės pasižadėjimą“: „Jokiu būdu neliečiau bandymo rinkinio, kol nepamačiau jo gamyboje. Kiekvienas žingsnis yra kode ir sėkla yra sutvarkyta“. Jei negalite sąžiningai pasirašyti šių dviejų sakinių, jūsų rezultatas dar nepatikimas.

Apibendrinant

Duomenų nutekėjimas ir neatkuriamumas yra dvi brangiausios tylios klaidos duomenų moksle. Nutekėjimas yra modelio ateities vizija ir pristatoma kaip klaidinga sėkmė; Išeitis – anksti padalyti testų rinkinį, išmokti transformacijas tik iš treniruočių (konvejerio), užduoti kiekvienai funkcijai klausimą „Ar turiu jį numatymo metu“ ir atlikti teisingą padalijimą (chronologiškai/grupuoti). Atkuriamumas yra galimybė gauti tą patį rezultatą du kartus; jo sprendimas yra rankiniu būdu pašalinti žingsnius, prisegti sėklą, užšaldyti versijas ir viską laikyti Git. AI gali padidinti arba sumažinti šią riziką; Jūsų disciplina lemia.

Taikymo užduotis

Paimkite savo sukurto modelio (arba hipotetinio) funkcijų sąrašą ir užduokite kiekvienai funkcijai klausimą „ar turiu šią informaciją numatymo metu? raštu; Raskite bent vieną nutekėjimo kandidatą. Tada užpildykite kontrolinį sąrašą, kad analizė būtų atkuriama: ar ištaisyta pradžia, ar yra rankinių veiksmų, ar užregistruotos versijos, ar jos yra Git. Ištaisyti trūkumus.

kontrolinis sąrašas

  • [ ] Ar pateikiau užklausą dėl balo „per gerai, kad būtų tiesa“ kaip įspėjimo apie nutekėjimą?
  • [ ] Ar visas transformacijas išmokau po padalijimo, tik iš treniruotės?
  • [ ] Ar skirstau pagal laiko/grupės struktūrą (chronologinė/GroupKFold)?
  • [ ] Ar padariau visus atsitiktinumus pakartojamus su fiksuota sėkla?
  • [ ] Ar pašalinau neautomatinius veiksmus ir viską palikau kodo ir versijos valdyme?