Vienetas 6 / 11

Modelio kūrimas: problemos apibrėžimas, algoritmo pasirinkimas ir mokymo/testo padalijimas

Pelnas:

  • Gebėjimas apibrėžti problemos tipą (klasifikavimas, regresija, klasterizavimas) ir sėkmės kriterijus pagal realią darbo kainą
  • Gebėjimas sąžiningai padalyti duomenis (neliečiant testų rinkinio; chronologiškai laiko eilutėje) ir sukurti vertinimo pagrindą be nutekėjimo
  • Galimybė pasirinkti interpretuojamą modelį pradedant nuo paprasto pagrindo ir pridėti sudėtingumo tik tada, kai jis to nusipelno.

Iki šiol rinkome duomenis, išvalėme, ištyrėme ir sukūrėme funkcijas. Dabar pereiname prie tikro darbo – modelio kūrimo. Modelis yra matematinė struktūra, kuri iš duomenų išmoksta šabloną ir sukuria naujų situacijų prognozes. Tačiau svarbiausia modelio kūrimo dalis yra ne pats kodas, o du prieš jį priimti sprendimai: tinkamos problemos apibrėžimas ir teisingas duomenų padalijimas. AI yra galingas algoritmų pasirinkimo, kodo rašymo ir parametrų derinimo patarėjas; bet ką prognozuoti ir ką reiškia sėkmė, gali nuspręsti kiekvienas. Netinkamai apibrėžta problema neveiks net su tobulai parašytu modeliu.

Pirmiausia problemos apibrėžimas: ką mes prognozuojame

Kiekvienas modeliavimo darbas prasideda nuo klausimo, o šis klausimas lemia modelio tipą. Klasifikacija – išvestis yra kategorija: "Ar šis klientas išeis ar pasiliks?", "Ar ši operacija netikra?". Regresija (angliškai regression – išvestis yra skaičius): „Kiek vertas šis namas?“, „Kiek užsakymų bus kitą mėnesį?“. Klasterizavimas (nepažymėtų duomenų padalijimas į natūralias grupes): „Į kiek natūralių segmentų yra suskirstyti mano klientai?“.

Antroji problemos teiginio dalis – sėkmės kriterijus: ką reiškia, kad šis modelis yra „geras“? Sukčiavimo modelyje praleisti sukčius yra daug brangiau nei netyčia užblokuoti sąžiningą klientą; Todėl iškyla ne „bendras tikslumas“, o „sukčių gaudymo rodiklis“. Jei šio kriterijaus neapibrėžsite nuo pat pradžių, kartu su įmonės savininku, gausite „labai tikslų“ modelį, kuris neveikia (7 skyriuje panagrinėsime metriką).

Atsargiai: „Tikslumas“ gali būti klaidinantis. Jei 10 iš 1000 operacijų yra apgaulingos, kvailas modelis, kuriame sakoma, kad „nė vienas nėra apgaulinga“, užtikrins 99% tikslumą, bet nesugaus nė vieno sukčiaus. Pasirinkite sėkmės kriterijus, atsižvelgdami į tikrąją problemos kainą.

Mokymas/testo padalijimas: sąžiningas modelio patikrinimas

Modelio testavimas su jo išmoktais duomenimis prilygsta studentui užduoti tuos pačius klausimus, kuriuos jis mokėsi per egzaminą; Jis gauna aukštus balus, bet neparodo to, ką iš tikrųjų žino. Taigi mes padalijame duomenis į du (dažnai tris):

  • Treniruočių rinkinys (mokymo rinkinys anglų kalba, paprastai 70–80%): modelis mokosi apie tai.
  • Bandymo rinkinys (bandymo rinkinys, paprastai 20-30%): modelis to visiškai nemato; čia matuojamas tikras našumas.
  • Patvirtinimo rinkinys: tarpinis rinkinys, naudojamas modeliui nustatyti (kuris parametras geresnis); kad bandymo rinkinys būtų „švarus“.

Pati pagrindinė taisyklė: treniruotės metu testo rinkinys niekada neliečiamas. Mastelio keitimas, kodavimas, funkcijų pasirinkimas – visa tai tiesiog išmokstama iš mokymo rinkinio, tada taikoma bandymams (nuotėkio principas iš 5 skyriaus). Bandymų rinkinys yra pirmasis kartas, kai modelis mato realų pasaulį; Jei įjungsite jį per anksti, niekada nesužinosite tikrojo veikimo.

Laiko eilutės išimtis: jei jūsų duomenys priklauso nuo laiko (pardavimas, akcijų rinka, paklausa), atsitiktinis padalijimas neatliekamas. Kadangi atsitiktinis padalijimas leidžia modeliui pamatyti ateitį ir numatyti praeitį - tai yra nutekėjimas. Vietoj to skirstykite chronologiškai: treniruokitės su senuoju laikotarpiu, išbandykite naująjį laikotarpį.

Algoritmo pasirinkimas: nuo paprasto iki sudėtingo

Dažniausia pradedančiųjų klaida – pradėti nuo sudėtingiausio modelio. Teisingas požiūris yra priešingas: pirmiausia nustatykite paprastą bazinę liniją. „visada atspėk daugumos klasę“ klasifikacijoje; „visada įvertink vidurkį“ regresijoje. Šis kvailas modelis suteikia pagrindą; Jei jūsų tikrasis modelis negali to išlaikyti, yra problema. Tada pereikite prie paprastų ir interpretuojamų modelių.

modelis

Problemos tipas

stiprioji vieta

silpnumas

Pradinis lygis (dauguma / vidurkis)

tiek

Suteikia etaloną

neišmoksta

Logistinė regresija

Klasifikacija

Paprasta, interpretuojama

Tik tiesinis ryšys

Tiesinė regresija

regresija

Paprasta, greita

tiesinė prielaida

sprendimų medis

tiek

interpretuojama

Lengvas įsiminimas

atsitiktinis miškas

tiek

Stiprus, patvarus

Mažiau interpretuojama

Gradiento didinimas (XGBoost ir kt.)

tiek

labai stiprus

Sunku prisitaikyti, rizika įsiminti

Taisyklė: pasirinkite patį paprasčiausią „pakankamai gerą“ modelį. Daugumoje verslo kontekstų aiškinamumas yra vertingesnis už galią; Geriau paaiškinti paskolos atmetimą „dėl to, kad jūsų skolos ir pajamų santykis yra didelis“, nei „dėl to, kad taip parašyta juodojoje dėžėje“.

trys mini dėklai

1 atvejis – neteisingas problemos apibrėžimas. Komanda sukūrė klasifikavimo modelį, pagrįstą „ar klientas patenkintas“, tačiau pasirinko „tikslumą“ kaip sėkmės kriterijų. duomenimis patenkinti 88% klientų; Modelis gavo 88% tikslumą, nes visus vadino „patenkintais“ ir nepatenkintų žmonių nė karto neužfiksavo, nors tikrasis tikslas buvo juos surasti. Pamoka: pasirinkite sėkmės kriterijus pagal tikrąjį tikslą.

2 atvejis – laiko nuotėkis skyriuje. Paklausos prognozavimo projekte duomenys buvo padalyti atsitiktinai. Modelis davė 93% tikslumą, tačiau gamyboje sudužo, nes mokymų metu jis numatė sausį, tada lapkritį su gruodžio mėnesio duomenimis – matė ateitį. Kai perėjome prie chronologinio padalijimo, tikrasis našumas padidėjo iki 74%. Pamoka: chronologinis skirstymas laiko eilutėse.

3 atvejis – nereikalingas sudėtingumas. Vienas analitikas pradėjo tiesiogiai nuo gilaus neuroninio tinklo, derino jį kelias savaites ir gavo 81% tikslumą. Tada kolega gavo 80 % su 20 logistinės regresijos eilučių – daug greitesnė, aiškinama ir lengviau prižiūrima. Pamoka: pradėkite nuo pradinio taško ir paprasto modelio, padidinkite sudėtingumą, kai to nusipelno.

Keturi kopijuojami šablonai

1) Paaiškinkite problemos apibrėžimą:

Jūsų vaidmuo: modelio konsultantas. Padėkite man apibrėžti šį darbą: „Noriu sumažinti klientų trūkumą“. Paklauskite manęs ir paaiškinkite: (1) ar tai yra klasifikacija ar regresija, (2) kas tiksliai yra tikslinis kintamasis ir kaip jis turėtų būti apibrėžtas, (3) kokie turėtų būti sėkmės kriterijai ir kodėl. Sprendimas yra mano; pateikiate klausimus ir galimybes.

2) Saugi treniruočių / bandymų skyrius:

Padalinkite mano df į mokymus / testavimą 80% / 20%. Išlaikyti klasių pasiskirstymą (sluoksniuoti).random_state=42. Tai NĖRA LAIKO SELA (nepriklausomi stebėjimai). Atspausdinkite kiekvieno rinkinio klasių santykį po padalijimo. Tiesiog suteikite skaidymo kodą bandymo rinkiniui netaikant jokios transformacijos.

3) Laiko eilučių chronologinis padalijimas:

Duomenys priklauso nuo laiko (datos stulpelis: order_date). NE atsitiktinai, skirstykite chronologiškai: seniausias 80% mokymas, naujausias 20% testavimas. Atsispausdinkite mokymo ir testavimo datas, kad galėčiau patikrinti, ar ateitis nenutekėjo.

4) Bazinės linijos nustatymas:

Turiu klasifikavimo problemą (tikslas: churn 0/1). Pirmiausia nustatykite bazinę liniją: išmatuokite treniruočių / testavimo tikslumą naudodami DummyClassifier, kuris visada numato daugumos klasę. Tada išmokykite paprastą logistinę regresiją ir palyginkite, ar ji pranoksta bazinę liniją. Rodyti dviejų metriką šalia.

Silpnas raginimas / Stiprus raginimas

Silpnas raginimas:

Sukurkite geriausią modelį naudodami šiuos duomenis.

"Geriausias" yra neapibrėžtas; Nėra problemos tipo, tikslo, sėkmės kriterijų ir padalijimo strategijos. AI sukuria atsitiktinį modelį, galbūt nesandarią.

Galingas raginimas:

Jūsų vaidmuo: modelio asistentas. Problema: klasifikacija, tikslinis „nukreipimas“ (0/1), yra klasių disbalansas (~12% churn). Sėkmės kriterijus: pirmenybė teikiama besiblaškančių asmenų atšaukimui. Nuo duomenų nepriklausomas stebėjimas (ne laiko eilutės). Užduotis: (1) 80/20% stratifikuotas padalijimas, (2) DummyClassifier pradinė linija, (3) logistinė regresija, visos transformacijos vyksta ir išmoktos tik iš mokymo. Nelieskite bandymo rinkinio prieš padalijimą.

Čia aiškus problemos tipas, disbalansas, kriterijus ir nuotėkio matas.

Dažnos klaidos

  • Nesirenkant sėkmės kriterijų pagal tikrąjį tikslą. Nesubalansuotų duomenų „tikslumas“ yra klaidinantis; Jei norite užfiksuoti mažumų klasę, prisiminimas iškyla į pirmą planą.
  • Bandymo rinkinio palietimas treniruotės metu. Mastelio keitimas / kodavimas prieš skaidymą yra nesandarus ir paslepia tikrąjį našumą.
  • Atsitiktinis padalijimas laiko eilutėse. Modelis mato ateitį, žlunga gamyboje; Chronologinis skirstymas yra būtinas.
  • Peršokti į sudėtingą modelį nenustačius bazinės linijos. Be etalonų negalite žinoti, ar modelis tikrai geras, ar ne.
  • Aiškinamumo ignoravimas. Verslo sprendimuose paprastas paaiškinamas modelis dažnai yra vertingesnis už juodąją dėžę.
Patarimas: prieš pradėdami kurti modelį, parašykite vieną sakinį: „Šis modelis numatys _____, jo sėkmė bus matuojama metrika _____, nes tikroji darbo kaina yra _____“. Jei negalite užpildyti šio sakinio, dar nesate pasiruošę rašyti kodą.

Apibendrinant

Svarbiausia modelio kūrimo dalis yra ne kodas, o prieš jį priimami sprendimai: tinkamos problemos apibrėžimas (klasifikacija ar regresija, koks tikslas, koks sėkmės kriterijus) ir teisingas duomenų skaidymas (neliečiant testų rinkinio; chronologiškai laiko eilutėje). Visada pradėkite nuo paprasto pagrindo ir padidinkite sudėtingumą tik tada, kai to nusipelno; aiškinamumas daugumoje verslo kontekstų vertinamas prieš galią. AI yra galingas patarėjas pasirenkant ir koduojant algoritmus, tačiau žmogus nusprendžia, ką ir kodėl prognozuojate.

Taikymo užduotis

Apibrėžkite numatymo problemą ir raštu užpildykite šį sakinį: „Šis modelis numatys ___ (klasifikacija / regresija), tikslas yra ___, sėkmės kriterijus yra ___, nes ___. Tada suskirstykite duomenis naudodami tinkamą strategiją (chronologiškai, jei tai laiko eilutė), nustatykite bazinę liniją ir įvertinkite, ar paprastas modelis pažeidžia tą bazinę liniją.

kontrolinis sąrašas

  • [ ] Ar aiškiai apibrėžiau problemos tipą (klasifikaciją / regresiją) ir tikslą?
  • [ ] Ar sėkmės kriterijus pasirinkau pagal faktines darbo kainas?
  • [ ] Ar treniruotės metu palikau nepaliestą testo rinkinį?
  • [ ] Jei tai laiko eilutė, ar padalijau ją chronologiškai?
  • [ ] Ar prieš pereidamas prie sudėtingo modelio nustačiau bazinę liniją?