×

Ми використовуємо файли cookie, щоб зробити LingQ кращим. Відвідавши сайт, Ви погоджуєтесь з нашими cookie policy.


image

Tölvunarfræði. María Óskarsdóttir - fyrirlestrar, Leiðir til að finna þýði (sampling strategies)

Leiðir til að finna þýði (sampling strategies)

Heyriði, í dag þá hérna, erum við með tvær notebook-ir, annars vegar sem sagt um svona samplings strategies, sem sagt hvernig, um þetta hérna, split sample method og hins vegar cross validation, og svo er hin notebook-in hún hérna, er um þessar, þessi sem sagt mál og hvernig maður á að sem sagt, koma á, á jafnvægi í gagnasafninu. Og í þeirri fyrstu þá hérna, sem sagt, erum við að nota gagnasafn af hérna, Kaggle um, um svona, hérna, telco churn eða sem sagt brotthvarf úr, úr símafyrirtækjum. Þetta er bara eitthvað sem ég valdi af, af handahófi og, sem sagt fyrstu, hérna, línurnar snúast bara um það að, sem sagt undirbúa þetta gagnasafn. Það lítur svona út, við erum með þarna nokkrar breytur og hérna, customer ID og svo alls konar upplýsingar um hvern viðskiptavin og svo það hvort að þeir sem sagt hættu hjá fyrirtækinu eða ekki. Og maður getur notað þetta gagnasafn til þess að spá fyrir um það hvers vegna eða hvaða viðskiptavinir eru líklegir til þess að, sem sagt yfirgefa fyrirtækið. Kannski fá þeir betra tilboð annars staðar eða þeir eru bara ósáttir með þjónustuna og ákveða þess vegna að fara í annað fyrirtæki eða kannski er, þú veist, allir vinir þeirra hjá hinu fyrirtækinu og þá ákveða þeir að hætta. En maður sér svona ýmislegar, ýmsar upplýsingar um hérna, þá þjónustu sem þeir eru að nota sér og ýmislegt. Og þetta er hérna, mjög gjarnan gert hjá fyrirtækjum að spá fyrir um það hvaða viðskiptavinir eru líklegir til þess að hætta og þegar að fyrirtækið veit það að já, hann hérna þessi, hann er, er í hættu á því að, sem sagt, að fara að hætta hjá okkur, þá kannski geta þeir gefið honum, gefið honum eitthvað tilboð og sagt hérna, þú veist, þú færð ókeypis mánuð eða eitthvað. Og það sem þetta snýst um í þessum, þessum marketing bransa er að reyna að halda í þessa viðskiptavini sem eru að fara að hætta. Að hérna, gera þeim tilboð sem þeir geta ekki hafnað. En allavegana, þá erum við með þetta gagnasafn hér og svo hérna, er bara svona alls konar preprocessing, við erum að breyta þessum dálkum í hérna svona dummy-breytur til þess að nota í classifier-num okkar og eyða út hérna, N/As og alls konar. Og svo hérna, þetta er mjög algengt að maður skipti gagnasafninu í y og X þar sem að ypsilonið er raunverulega target-breytan okkar og X-ið er allt nema target-breytan. Af því að í Python, þegar maður er að nota þessa, hérna, machine learning algóriþma, þá vilja þeir oft fá gögnin á þessu formatti. Á annars vegar X sem eru allar breyturnar nema target-ið og ypsilon, sem er þá target-ið. Það er búið að gera það hér líka. Og svo þegar við erum komin með hérna, já, þið sjáið sem sagt hérna að, að, hérna X-ið okkar, það er sem sagt allar breyturnar, það eru sjö þúsund línur og fjörutíu breytur. Og svo er target-ið, ypsilonið, það eru jafnmargar línur, auðvitað, af því þetta eru allar mælingarnar okkar, en bara einn dálkur, af því að þetta er bara target, þetta er bara núll eða einn. Þar sem að einn stendur fyrir churn og núll stendur fyrir not churn. Og svo já, við erum með sem sagt sjö þúsund línur í þessu gagnasafni sem þýðir það að við gætum vel gert cross validation, af því það er það lítið, það er alveg góður hérna, möguleiki fyrir því. En ég ætla að sýna ykkur sem sagt, hvernig maður getur splittað, og við erum með hérna fyrst bara venjulegt split og þá getur maður notað hérna úr scikit learn model selection sem heitir train test split. Og maður setur það upp svona, þið sjáið það er hérna, hérna er sem sagt kallið train test split á X-ið, sem að er allar breyturnar, á ypsilonið sem er target-ið. Og svo segjum við hversu stórt við viljum að test-safnið sé, þannig að hérna, af því það er sem sagt tuttugu prósent þá þýðir það að train, train-settið myndi vera áttatíu prósent. Og hérna getur maður sett, þú veist, hvað sem er, þrjátíu eða, eða fjörutíu eða hvað sem er, bara eftir því hvernig maður vill splitta. Og það er engin, engin, hérna, föst regla um það nákvæmlega hversu stórt það á að vera. Það er bara svona um það bil eitthvað. Og svo náttúrulega random state til þess að geta, sem sagt, búið til sömu, sama splittið aftur, að þetta er bara random og ef maður gefur upp hérna random state þá getur maður verið fullviss um það að geta búið til sama splittið aftur, sem getur verið mikilvægt ef maður er að endurtaka mikið tilraunir. En ef við keyrum þetta þá sjáið þið það að við fáum hérna, já fyrirgefið, ég ætla að bæta líka við að, að sem sagt við assign-um þetta á sem sagt þessa fjóra gaura hér, að hérna, við búum til, raunverulega, fjögur gagnasöfn, þar sem við erum með X train og X test, sem eru, hérna, línurnar fyrir allar breyturnar, annars vegar fyrir þjálfunarsettið og hins vegar fyrir test-settið. Og svo erum við með eins fyrir ypsilonið okkar fyrir target-ið, við erum með train og test. Og þá sem sagt erum við búin að búa til þessa fjóra hluta úr þessum tveimur sem við vorum með. Og svo ef við tjá, sjáum hvað þetta er stórt, þá sjáið þið það að þjálfunarsafnið okkar, þetta á að vera test hérna. Já, að sem sagt þjálfunarsafnið okkar er hérna, sem sagt, fimm þúsund línur og test-settið okkar er, er hérna, fjórtán hundruð línur. Þannig að við erum búin að skipta þessu í þessa tvo hluta. Og þá getum við tekið eitthvað módel, eins og til dæmis decision trees eða support vector machines, og þjálfað á sem sagt x train og y train, og svo myndum við beita því á X test og y test til þess að spá fyrir og meta hversu gott módelið er. En ég ætla ekki að gera það hér því það er eitthvað sem þið ætlið að gera í ykkar fyrirlestrum. En þetta er svona, þetta er hvernig, þið sjáið hérna hvernig þið getið undirbúið það áður en þið ætlið að byrja að, að hérna, nota þessa algóriþma. Þetta var sem sagt bara svona split method. Svo erum við með cross validation, og þá notum við úr sama pakkanum hérna, import-um það sem heitir k-fold. Og þá þurfum við að búa til svona k-fold object, þar sem við segjum hversu mörg split við viljum, við viljum tíu split. Og svo tökum við þetta object og beitum því á, hérna, gagnasafnið okkar. Og við gerum það hér, sjáið þið, bara við X-ið, það er svo bara, bætir maður y-inu við á eftir. En, sem sagt þetta segir bara hversu mörg split við erum með og svo getum við séð hérna bara með því að ítra yfir öll split-in, en þetta, það sem þetta hérna gerir er bara að búa til split-in. Raunverulega það sem það gerir er að það tekur hérna, observation-irnar, við erum kannski með, við erum með svona margar observation-ir. Segjum að við værum með twofold, er að það sem að þetta fall gerir er bara að segja: ókei, þú ert í fold-i eitt, þú ert í fold-i eitt, þú ert í fold-i eitt og svo framvegis, þú ert í fold-i eitt. Og þá eru hinir í fold tvö, fold tvö. Þannig að þetta bara býr til þessa skiptingu, það bara skiptir þeim í tíu, í tíu hluta. En svo getum við skoðað hversu stór, svo getum við skoðað þessa, hérna, þessi folds, þessa parta sem við bjuggum til. Þannig að þið sjáið hérna, til dæmis, að þetta eru þessir tíu partar sem voru búnir til og þeir eru eiginlega allir jafnstórir, ekki nákvæmlega, af því að hérna, kannski gengur ekki alveg upp þessi deiling. En þið sjáið það að núna, ef við ætluðum að, hérna, þjálfa módel á þessu, þá myndum við þjálfa tíu módel, eitt módel af hverju train-setti, og svo beita hverju módeli á hvert test-sett þannig að við fengjum út tíu performance indicator-a. Og við getum þá, þannig ef við myndum til dæmis mæla accuracy-ið á hverju einasta test-setti þá fengjum við út tíu accuracy-gildi og þá getum við tekið meðaltalið og sagt að meðal accuracy-ið er x. Og svo á sama hátt þá getum við gert svona leave one out cross validation, það sem, þið munið, við tökum alltaf bara eina breytu út í einu og þá notum við þetta hérna leave one out úr sama pakkanum. Og á sama hátt þá getum við séð hérna að train-settið okkar er alltaf jafnstórt, það alltaf allir nema einn. Og það er einn, ein mæling í test-settinu í hvert skipti. Eru einhverjar spurningar um svona splitting strategies? Nei, ókei. Já, og sem sagt, bara það hvaða aðferð þið veljið í hvert skipti, bara fer eftir gagnasafninu og hvað þið ætlið að gera við það. En ég myndi alveg mæla með því að gera, reyna alltaf að gera cross validation. Sérstaklega ef maður þarf að tjúna parametra þá er mjög mikilvægt að gera cross validation, þó það sé bara á hluta af gagnasafninu þá er það svona venjan að gera það með, með þessu. En allavegana. Varðandi sem sagt, performance-málin, þá erum við með annað notebook hérna. Og það sem ég er búin að gera hér er að ég tók, hérna, þetta churn-safn hérna, sem ég var að vinna með í byrjun, og ég bjó til basic classification módel og ég spáði fyrir um, sem sagt, churn og ekki churn hjá þessum viðskiptavinum. Og ég seifaði það hérna í tveimur hérna csv-fælum. Annars vegar, sem sagt við erum með test-sett, þar sem við erum með hérna, sönnu gildin og svo erum við með gildin sem við spáðum fyrir um. Þannig að ef ég keyri inn báða þessa hérna þá sjáið þið það að þessi true target breyta hérna, hún er, segir til um það hvaða klassa, segir til um það hvaða viðskiptavinir voru churners og hvaða viðskiptavinir voru ekki churners í test-settinu mínu. Og svo hins vegar erum við með þetta hérna churn prob, sem að eru líkurnar á því að hver viðskiptavinur sé, sem sagt, churner, er að fara að hætta. Og þetta er sem sagt það sem ég fékk út úr módelinu sem ég bjó til, þannig að hér erum við með svona predicted probability á því að vera churner. Og það sem við viljum gera núna er að bera saman sem sagt hið sanna target, það sem við vitum hvað er, við það sem við spáðum fyrir um. Og ef við notum cut off sem er hálfur til þess að meta hver sem sagt, hinn spáði, hérna, hvert spáða gildið er, hvort það sé churn eða ekki churn, þá búum hérna til breytu sem heitir predicted target, bara með því að condition-a á þetta probability, og þá sjáum við að módelið okkar spáir fyrir um það að þúsund áttatíu og einn viðskiptavinur sé ekki að fara að hætta en að þrjú hundruð tuttugu og átta eru að fara að hætta. Og ef við bara berum þetta saman við, hérna, það sem við vitum að er satt, þá stemmir þetta ekki. Þannig að módelið okkar er greinilega ekki fullkomið. Það nær ekki að spá fyrir um hvern einasta viðskiptavin sem er að fara að hætta. En það er alveg viðbúið, það ekkert allt fullkomið. En hérna eru þessar, þessi mál sem við ætlum að nota, þannig að þið sjáið það að við erum með hérna A U C score, við erum með ROC curve, við erum með confusion matrix, accuracy recall, precision og F-einn score, eins og við ræddum um áðan. Þannig að við getum bara import-að þessu úr þessu sem heitir scikit learn metrics, þau eru öll þar. Og svo getum við fundið hvað confusion matrix-ið er fyrir okkar spá. Þannig að við tökum þá þetta predicted target og true target. Þannig að actual class og predicted class. Og þá getum við séð að svona lítur confusion matrix-ið okkar út í þessu tilfelli. Og það er sett upp nákvæmlega eins og áðan, við erum með hérna, sem sagt, níu hundruð og sjö sem eru, ekk, sem sagt, ekk, sem sagt, eru ekki churners og módelið spáir sem ekki churners, og svo á sama hátt eru tvö hundruð og fjórir churnes sem módelið spáir sem churners. Þannig að þetta bara lítur nákvæmlega eins út og áður. Og þá getum við reiknað út accuracy-ið, eins og við gerðum líka áðan, bara með því að telja hversu oft módelið hafði rétt fyrir sér og deila með heildarfjölda mælinga í test-settinu okkar, og fáum út hérna núll komma átta níu sjö. Eða við getum notað fallið sem er til í scikit learn, þetta hérna accuracy score, og fáum út sama, sama gildið. Og svo aðrar, hérna, önnur mál, við erum með recall, við erum með precision og við erum með f-einn score. Bara reiknum þetta svona einfaldlega með því að nota innbyggðu föllin á annars vegar hið sanna gildi og gildið sem var spáð. Og þetta er sem sagt miðað við cut off núll komma fimm. En svo getum við líka reiknað sem sagt AUC-ið, sem munið þið var, hérna, flatarmálið undir kúrfunni. Og það er núll komma átta fimm níu, og svo að lokum getum við plottað upp, hérna, kúrfuna okkar. Þannig að flatarmálið undir þessari gulu línu hérna er núll komma átta fimm níu. Og því hærra sem A U C-ið er, því betra er módelið. Ókei. Og sem sagt, já, hérna, minna á það líka að sem sagt, A U C-ið, það er cut off independent, þannig að það er á suman hátt betra heldur en að mæla accuracy eins og við sáum áðan með ójafna gagnasafnið sem við vorum með. Ókei, nú ætla ég að tala um sem sagt þessi, þessar aðferðir til þess að jafna, eða koma á jafnvægi í gagnasafninu okkar. Og við byrjum á því hérna, að bara búa til eitthvað random gagnasafn. Það er hérna í scikit learn, þar er maður með sem sagt library þar sem að heitir bara, hérna, dataset, þar sem maður getur bara generate-að randomly gagnasöfn með ákveðna eiginleika. Eins og hérna, þetta er gagnasafn sem maður getur notað í svona classification-algóriþmum. Og þá einfaldlega segir maður hvað eiga að vera margar, hérna, mælingar, hversu margar, hérna, breytur, hversu margir klassar, þannig að við erum hérna með fimm þúsund mælingar, þrjár breytur og tvo klassa. Þannig að þetta myndi vera binary classification, og svo getum við meira að segja sagt líka hversu stórt hlutfall af báðum, hérna, klössunum mega vera. Þannig að þetta n classes vísar til þá target-sins okkar, og við viljum að þrjú prósent sé, hérna, af öðrum klassanum og níutíu og sjö prósent af hinum klassanum. Þannig að það sem við fáum út úr þessu er gagnasafn sem er mjög óbalansað, það er mikið ójafnvægi þarna, af því að, eins og við sögðum þeim, þá vildum við að það væru þrjú prósent í öðrum og níutíu og sjö prósent í hinum. Þannig að þetta er vel undir þessu tíu prósent viðmiði sem að við töluðum um. Ókei, og svo er hérna, ætla ég að fara í nokkrar aðferðir til þess að balance-a. Við erum með random oversampling og random undersampling og svo líka smote, þannig að ef við sjáum hérna, og við getum import-að úr þessu, hérna, imb learn pakka, það sem heitir bara random oversampler, og svo getum við samplað, sem að við sjáum, setjum inn hérna í random, sem sagt búum til svona object sem heitir random oversampler, og við viljum nota þetta hérna strategy. Maður getur valið hvaða strategy maður vill. Minority þýðir að það á að sampla minority-klassann þangað til það er komið jafnvægi. Og af því þetta var oversample, þetta þýðir það að við erum að búa til, við erum að tvöfalda línur af, sem sagt, af mælingunum sem að tilheyra minority-klassanum, þangað til að, hérna, þetta er orðin balance-að. Þannig að við erum raunverulega búin að vera að duplicate-a þessar hundrað áttatíu og eina mælingu þar til þær eru átta þúsund talsins. Þannig að hver kemur fyrir, hversu oft? Alveg þrjátíu sinnum eða eitthvað, er það ekki? Fjögur þúsund og átta hundruð deilt með hundrað og áttatíu og einum, svo oft kemur hver þessara mælinga fyrir. En allavegana, þannig að þetta myndi kannski ekkert vera mjög gott gagnasafn til að vinna með, af því það er, þær eru svo ótrúlega, það myndi vera svo ótrúlega bjagað. En við getum sem sagt notað annað sampling strategy, sagt bara núll komma tveir, og það þá þýðir að hlutfallið á milli eins og núll á að vera núll komma tveir. Þannig að þið sjáið, hérna, hérna myndum við vera með aðeins, hérna, allavega ekki jafn jafnt, en samt alveg nógu jafnt. Og svo, hérna, á sama hátt, undersampling, við erum bara með random undersampler, og þá sem sagt munið þið ef við erum undersample-a þá erum við að henda í burt mælingum sem eru í majority-klassanum þannig að við erum að fækka, við erum að minnka gagnasafnið, fá út jafnvægi, og svo á sama hátt, ef við setjum sampling strategy saman við, jafnt og einhver tala, þá fáum við, sem sagt, þetta hérna hlutfall á milli, milli þessara tveggja hópa. Og svo, að lokum, smote. Það sem við erum búin að segja, við viljum bara hafa, þetta er bara, sem sagt, out of the box smote, nei, heyrðu við erum hérna, bara sem sagt out of the box, og þá verður þetta alveg jafnt, sjáið þið, fifty fifty, en við getum líka sagt, hérna, við viljum ekki endilega fifty fifty, það má alveg vera bara tuttugu prósent, og þá segjum við bara hérna, að við viljum tuttugu prósent. Þannig að þetta virkar allt svona á mjög svipaðan hátt en gagnasafnið sem verður til í hvert sinn er mismunandi. Þannig að ein seinasta æfing sem ég ætla að fara í gegnum er, hérna, að sameina þetta tvennt. Við ætlum að, sem sagt, að taka gagnasafn sem við vitum að er ekki í jafnvægi, og við ætlum að búa til módel og spá fyrir um eitthvað, mæla hversu gott módelið okkar er, og svo ætlum við að balance-a gagnasafnið, og aftur að spá fyrir og sjá hvort að spáin okkar breytist. Þannig að ég ætla að nota hérna random forests. Þið getið notað hvað sem er, þetta snýst náttúrulega ekkert um hvaða algóriþma við erum að nota, ég bara tók einhvern, og þennan af því að hann er uppáhaldið mitt. En allavegana. Og svo ætla ég að taka hérna gagnasafn sem að er í þessu imb learn library-i. Í imb learn er fullt af gagnasöfnum sem eru með miklum imbalance, sem fólk er að nota þegar það er að þróa nýjar aðferðir til þess að balance-a gagnasafn. Þannig að þetta er svona bara svona standard safn af gögnum sem allir hafa aðgang að, þannig að ef allir eru, ef einhverjir eru að þróa nýja aðferð þá geta allir prófað þessa aðferð á þessum gagnasöfnum, til þess að sjá hvort að þetta sé, hérna, að virka. Þetta er svona gott fyrir validation í, í svona þessum vísindaheimi, og þegar að fólk er að reyna að búa til betri aðferðir. En allavegana, ég er að nota gagnasafn sem heitir hérna car eval fjögur. Og ég bara les það inn, og sjáið þið hérna, ég er með aftur með þetta X, sem eru allar breyturnar, og ég er með y, sem að er target-ið, og svo, hérna, sjáið þið að í þessu tilfelli þá erum við með sextán hundruð sextíu og þrjá sem að eru af klassanum núll og sextíu og fimm sem eru af klassanum einum, þannig að þetta er mjög mikið ójafnvægi í þessi gagnasafni. Ókei, og svo ætla ég að taka þetta hérna gagnasafn, þetta X og y, og skipta því í tvennt, ég ætla að búa til, sem sagt, þetta er svona, hérna, þessi splitting method sem við töluðum um, ég er að búa til train- og test-gagnasafn. Þar sem ég er að nota stratified sampling til að vera viss um það að það er sama hlutfall af báðum í báðum gagnasöfnunum. Þannig að við sjáum að í train-settinu okkar erum við með fjörutíu og níu af klassa einum og tólf hundruð fjörutíu og sjö af klassa núll. Og, þannig að restin myndi vera í, í test-settinu okkar. Já, sem er þá hér. Þannig að við erum með fjögur hundruð og sextán núll og sextán einn, þannig að það eru bara mjög fáir hérna sem eru í einum. Ókei, og svo bara bjó ég til hérna svona smá fall sem, sem mælir mismunandi performance. Við erum með accuracy, við erum með recall, precision og A U C. Og þetta var bara svona til þess að þurfa ekki að endurtaka mig oft. Ókei, og svo kemur hérna aðalskrefið. Við búum til random forest classifier, sem heitir bara s, CLF, og svo tökum við þennan classifier og beitum honum á train-gögnin okkar, á X train og y train. Og svo mælum við performance-inn á test-settinu. Þannig að við keyrum, það kemur meira að segja error, af því það er allt bara núll, en þið sjáið það að accuracy-ið er bara nokkuð gott, níutíu og sex prósent. En recall-ið okkar, það er núll og precision-ið er núll. Sem sagt, við náum ekki að finna neinn sem er í þessum minority-klassa. Enginn sem er true positive finnst, true positive er núll. Sem þýðir það, að þetta er ekkert voðalega gott módel, af því að það finnur ekki, hérna, þennan minority-klassa. Þannig að í þessu tilfelli þá mundi allt spam-ið fara beint inn í inbox-ið ykkar, er það ekki? Það finnst ekki. Ókei. En ef við tökum okkur til og prófum að oversample-a training-settið okkar, við hérna notum random oversampler, og nota bene, ef við gerum þetta við þjálfunargögnin okkar, ekki allt X-ið, bara við þjálfunargögnin okkar, af því við viljum að test-settið haldi sér eins og það er, við viljum bara gera það við þjálfunargögnin. En við gerum þetta við þau, við oversample-um, munið þið að við, við bætum við, við duplicate-um, hérna, mælingarnar í training-settinu okkar, þannig að við gerum það. Þá sjáið þið að við erum með hérna tólf hundruð fjörutíu og sjö eins og áður af klassanum núll, en það eru komnir fjögur hundruð níutíu og átta af klassanum einn. Þannig að við erum raunverulega búin að tífalda hverja einustu, hverja einustu minority-klassa mælingu. Og svo ef við gerum það sama aftur, búum aftur til random forest með, núna, sem sagt oversample-aða X-inu og y-inu, og mælum aftur á test-settunum okkar, performance-inn, þá sjáið þið það, ókei, við erum komin með betra accuracy og við erum komin með mjög gott recall og mjög gott precision. Við erum virkilega að ná öllum minority-klassa, hérna, gildunum okkar. Og A U C-ið, já, er líka aðeins búið að hækka. Þannig að þetta er, þetta er það sem að þessir, þessar balancing-aðferðir gera. Þær gera okkur kleift að finna minority-mælingar í gagnasafninu okkar, og að læra þeirra mynstur líka. Já, og það er allt og sumt. Eru einhverjar spurningar varðandi þetta? Hafið þið gert svona einhvern tímann áður? Er þetta allt saman nýtt? Ókei. Sem sagt, þegar þið byrjið að gera þetta í Python, þá eru alls konar svona aðferðir til þess að gera þetta allt saman í einu pipeline-i, maður er ekkert að gera þetta svona mikið step by step, þetta er meira bara svona, hérna, pipeline-að. En ég vildi bara sýna, sýna ykkur nákvæmlega hvað, hver áhrifin af, af hverju og einu er. Já, og kannski eitt að lokum, það er hérna kennslukönnun. Það væri voðalega gott ef þið mynduð svara henni. Fenguð örugglega email um það fyrir helgi er það ekki? Endilega svara kennslukönnuninni. Það er mjög gott fyrir okkur. Af því þá getum við bætt okkur, kennt ykkur betur, þannig að endilega svarið þið henni. Hérna, já, eru einhverjar spurningar varðandi model evaluation? Nei, ókei. Hérna, þá bara segi ég takk í dag og sjáumst næsta mánudag. Enginn tími á föstudaginn, munið þið. Enginn tími á föstudaginn. Já, bíddu, ég ætla að stoppa.


Leiðir til að finna þýði (sampling strategies)

Heyriði, í dag þá hérna, erum við með tvær notebook-ir, annars vegar sem sagt um svona samplings strategies, sem sagt hvernig, um þetta hérna, split sample method og hins vegar cross validation, og svo er hin notebook-in hún hérna, er um þessar, þessi sem sagt mál og hvernig maður á að sem sagt, koma á, á jafnvægi í gagnasafninu. Og í þeirri fyrstu þá hérna, sem sagt, erum við að nota gagnasafn af hérna, Kaggle um, um svona, hérna, telco churn eða sem sagt brotthvarf úr, úr símafyrirtækjum. Þetta er bara eitthvað sem ég valdi af, af handahófi og, sem sagt fyrstu, hérna, línurnar snúast bara um það að, sem sagt undirbúa þetta gagnasafn. Það lítur svona út, við erum með þarna nokkrar breytur og hérna, customer ID og svo alls konar upplýsingar um hvern viðskiptavin og svo það hvort að þeir sem sagt hættu hjá fyrirtækinu eða ekki. Og maður getur notað þetta gagnasafn til þess að spá fyrir um það hvers vegna eða hvaða viðskiptavinir eru líklegir til þess að, sem sagt yfirgefa fyrirtækið. Kannski fá þeir betra tilboð annars staðar eða þeir eru bara ósáttir með þjónustuna og ákveða þess vegna að fara í annað fyrirtæki eða kannski er, þú veist, allir vinir þeirra hjá hinu fyrirtækinu og þá ákveða þeir að hætta. En maður sér svona ýmislegar, ýmsar upplýsingar um hérna, þá þjónustu sem þeir eru að nota sér og ýmislegt. Og þetta er hérna, mjög gjarnan gert hjá fyrirtækjum að spá fyrir um það hvaða viðskiptavinir eru líklegir til þess að hætta og þegar að fyrirtækið veit það að já, hann hérna þessi, hann er, er í hættu á því að, sem sagt, að fara að hætta hjá okkur, þá kannski geta þeir gefið honum, gefið honum eitthvað tilboð og sagt hérna, þú veist, þú færð ókeypis mánuð eða eitthvað. Og það sem þetta snýst um í þessum, þessum marketing bransa er að reyna að halda í þessa viðskiptavini sem eru að fara að hætta. Að hérna, gera þeim tilboð sem þeir geta ekki hafnað. En allavegana, þá erum við með þetta gagnasafn hér og svo hérna, er bara svona alls konar preprocessing, við erum að breyta þessum dálkum í hérna svona dummy-breytur til þess að nota í classifier-num okkar og eyða út hérna, N/As og alls konar. Og svo hérna, þetta er mjög algengt að maður skipti gagnasafninu í y og X þar sem að ypsilonið er raunverulega target-breytan okkar og X-ið er allt nema target-breytan. Af því að í Python, þegar maður er að nota þessa, hérna, machine learning algóriþma, þá vilja þeir oft fá gögnin á þessu formatti. Á annars vegar X sem eru allar breyturnar nema target-ið og ypsilon, sem er þá target-ið. Það er búið að gera það hér líka. Og svo þegar við erum komin með hérna, já, þið sjáið sem sagt hérna að, að, hérna X-ið okkar, það er sem sagt allar breyturnar, það eru sjö þúsund línur og fjörutíu breytur. Og svo er target-ið, ypsilonið, það eru jafnmargar línur, auðvitað, af því þetta eru allar mælingarnar okkar, en bara einn dálkur, af því að þetta er bara target, þetta er bara núll eða einn. Þar sem að einn stendur fyrir churn og núll stendur fyrir not churn. Og svo já, við erum með sem sagt sjö þúsund línur í þessu gagnasafni sem þýðir það að við gætum vel gert cross validation, af því það er það lítið, það er alveg góður hérna, möguleiki fyrir því. En ég ætla að sýna ykkur sem sagt, hvernig maður getur splittað, og við erum með hérna fyrst bara venjulegt split og þá getur maður notað hérna úr scikit learn model selection sem heitir train test split. Og maður setur það upp svona, þið sjáið það er hérna, hérna er sem sagt kallið train test split á X-ið, sem að er allar breyturnar, á ypsilonið sem er target-ið. Og svo segjum við hversu stórt við viljum að test-safnið sé, þannig að hérna, af því það er sem sagt tuttugu prósent þá þýðir það að train, train-settið myndi vera áttatíu prósent. Og hérna getur maður sett, þú veist, hvað sem er, þrjátíu eða, eða fjörutíu eða hvað sem er, bara eftir því hvernig maður vill splitta. Og það er engin, engin, hérna, föst regla um það nákvæmlega hversu stórt það á að vera. Það er bara svona um það bil eitthvað. Og svo náttúrulega random state til þess að geta, sem sagt, búið til sömu, sama splittið aftur, að þetta er bara random og ef maður gefur upp hérna random state þá getur maður verið fullviss um það að geta búið til sama splittið aftur, sem getur verið mikilvægt ef maður er að endurtaka mikið tilraunir. En ef við keyrum þetta þá sjáið þið það að við fáum hérna, já fyrirgefið, ég ætla að bæta líka við að, að sem sagt við assign-um þetta á sem sagt þessa fjóra gaura hér, að hérna, við búum til, raunverulega, fjögur gagnasöfn, þar sem við erum með X train og X test, sem eru, hérna, línurnar fyrir allar breyturnar, annars vegar fyrir þjálfunarsettið og hins vegar fyrir test-settið. Og svo erum við með eins fyrir ypsilonið okkar fyrir target-ið, við erum með train og test. Og þá sem sagt erum við búin að búa til þessa fjóra hluta úr þessum tveimur sem við vorum með. Og svo ef við tjá, sjáum hvað þetta er stórt, þá sjáið þið það að þjálfunarsafnið okkar, þetta á að vera test hérna. Já, að sem sagt þjálfunarsafnið okkar er hérna, sem sagt, fimm þúsund línur og test-settið okkar er, er hérna, fjórtán hundruð línur. Þannig að við erum búin að skipta þessu í þessa tvo hluta. Og þá getum við tekið eitthvað módel, eins og til dæmis decision trees eða support vector machines, og þjálfað á sem sagt x train og y train, og svo myndum við beita því á X test og y test til þess að spá fyrir og meta hversu gott módelið er. En ég ætla ekki að gera það hér því það er eitthvað sem þið ætlið að gera í ykkar fyrirlestrum. En þetta er svona, þetta er hvernig, þið sjáið hérna hvernig þið getið undirbúið það áður en þið ætlið að byrja að, að hérna, nota þessa algóriþma. Þetta var sem sagt bara svona split method. Svo erum við með cross validation, og þá notum við úr sama pakkanum hérna, import-um það sem heitir k-fold. Og þá þurfum við að búa til svona k-fold object, þar sem við segjum hversu mörg split við viljum, við viljum tíu split. Og svo tökum við þetta object og beitum því á, hérna, gagnasafnið okkar. Og við gerum það hér, sjáið þið, bara við X-ið, það er svo bara, bætir maður y-inu við á eftir. En, sem sagt þetta segir bara hversu mörg split við erum með og svo getum við séð hérna bara með því að ítra yfir öll split-in, en þetta, það sem þetta hérna gerir er bara að búa til split-in. Raunverulega það sem það gerir er að það tekur hérna, observation-irnar, við erum kannski með, við erum með svona margar observation-ir. Segjum að við værum með twofold, er að það sem að þetta fall gerir er bara að segja: ókei, þú ert í fold-i eitt, þú ert í fold-i eitt, þú ert í fold-i eitt og svo framvegis, þú ert í fold-i eitt. Og þá eru hinir í fold tvö, fold tvö. Þannig að þetta bara býr til þessa skiptingu, það bara skiptir þeim í tíu, í tíu hluta. En svo getum við skoðað hversu stór, svo getum við skoðað þessa, hérna, þessi folds, þessa parta sem við bjuggum til. Þannig að þið sjáið hérna, til dæmis, að þetta eru þessir tíu partar sem voru búnir til og þeir eru eiginlega allir jafnstórir, ekki nákvæmlega, af því að hérna, kannski gengur ekki alveg upp þessi deiling. En þið sjáið það að núna, ef við ætluðum að, hérna, þjálfa módel á þessu, þá myndum við þjálfa tíu módel, eitt módel af hverju train-setti, og svo beita hverju módeli á hvert test-sett þannig að við fengjum út tíu performance indicator-a. Og við getum þá, þannig ef við myndum til dæmis mæla accuracy-ið á hverju einasta test-setti þá fengjum við út tíu accuracy-gildi og þá getum við tekið meðaltalið og sagt að meðal accuracy-ið er x. Og svo á sama hátt þá getum við gert svona leave one out cross validation, það sem, þið munið, við tökum alltaf bara eina breytu út í einu og þá notum við þetta hérna leave one out úr sama pakkanum. Og á sama hátt þá getum við séð hérna að train-settið okkar er alltaf jafnstórt, það alltaf allir nema einn. Og það er einn, ein mæling í test-settinu í hvert skipti. Eru einhverjar spurningar um svona splitting strategies? Nei, ókei. Já, og sem sagt, bara það hvaða aðferð þið veljið í hvert skipti, bara fer eftir gagnasafninu og hvað þið ætlið að gera við það. En ég myndi alveg mæla með því að gera, reyna alltaf að gera cross validation. Sérstaklega ef maður þarf að tjúna parametra þá er mjög mikilvægt að gera cross validation, þó það sé bara á hluta af gagnasafninu þá er það svona venjan að gera það með, með þessu. En allavegana. Varðandi sem sagt, performance-málin, þá erum við með annað notebook hérna. Og það sem ég er búin að gera hér er að ég tók, hérna, þetta churn-safn hérna, sem ég var að vinna með í byrjun, og ég bjó til basic classification módel og ég spáði fyrir um, sem sagt, churn og ekki churn hjá þessum viðskiptavinum. Og ég seifaði það hérna í tveimur hérna csv-fælum. Annars vegar, sem sagt við erum með test-sett, þar sem við erum með hérna, sönnu gildin og svo erum við með gildin sem við spáðum fyrir um. Þannig að ef ég keyri inn báða þessa hérna þá sjáið þið það að þessi true target breyta hérna, hún er, segir til um það hvaða klassa, segir til um það hvaða viðskiptavinir voru churners og hvaða viðskiptavinir voru ekki churners í test-settinu mínu. Og svo hins vegar erum við með þetta hérna churn prob, sem að eru líkurnar á því að hver viðskiptavinur sé, sem sagt, churner, er að fara að hætta. Og þetta er sem sagt það sem ég fékk út úr módelinu sem ég bjó til, þannig að hér erum við með svona predicted probability á því að vera churner. Og það sem við viljum gera núna er að bera saman sem sagt hið sanna target, það sem við vitum hvað er, við það sem við spáðum fyrir um. Og ef við notum cut off sem er hálfur til þess að meta hver sem sagt, hinn spáði, hérna, hvert spáða gildið er, hvort það sé churn eða ekki churn, þá búum hérna til breytu sem heitir predicted target, bara með því að condition-a á þetta probability, og þá sjáum við að módelið okkar spáir fyrir um það að þúsund áttatíu og einn viðskiptavinur sé ekki að fara að hætta en að þrjú hundruð tuttugu og átta eru að fara að hætta. Og ef við bara berum þetta saman við, hérna, það sem við vitum að er satt, þá stemmir þetta ekki. Þannig að módelið okkar er greinilega ekki fullkomið. Það nær ekki að spá fyrir um hvern einasta viðskiptavin sem er að fara að hætta. En það er alveg viðbúið, það ekkert allt fullkomið. En hérna eru þessar, þessi mál sem við ætlum að nota, þannig að þið sjáið það að við erum með hérna A U C score, við erum með ROC curve, við erum með confusion matrix, accuracy recall, precision og F-einn score, eins og við ræddum um áðan. Þannig að við getum bara import-að þessu úr þessu sem heitir scikit learn metrics, þau eru öll þar. Og svo getum við fundið hvað confusion matrix-ið er fyrir okkar spá. Þannig að við tökum þá þetta predicted target og true target. Þannig að actual class og predicted class. Og þá getum við séð að svona lítur confusion matrix-ið okkar út í þessu tilfelli. Og það er sett upp nákvæmlega eins og áðan, við erum með hérna, sem sagt, níu hundruð og sjö sem eru, ekk, sem sagt, ekk, sem sagt, eru ekki churners og módelið spáir sem ekki churners, og svo á sama hátt eru tvö hundruð og fjórir churnes sem módelið spáir sem churners. Þannig að þetta bara lítur nákvæmlega eins út og áður. Og þá getum við reiknað út accuracy-ið, eins og við gerðum líka áðan, bara með því að telja hversu oft módelið hafði rétt fyrir sér og deila með heildarfjölda mælinga í test-settinu okkar, og fáum út hérna núll komma átta níu sjö. Eða við getum notað fallið sem er til í scikit learn, þetta hérna accuracy score, og fáum út sama, sama gildið. Og svo aðrar, hérna, önnur mál, við erum með recall, við erum með precision og við erum með f-einn score. Bara reiknum þetta svona einfaldlega með því að nota innbyggðu föllin á annars vegar hið sanna gildi og gildið sem var spáð. Og þetta er sem sagt miðað við cut off núll komma fimm. En svo getum við líka reiknað sem sagt AUC-ið, sem munið þið var, hérna, flatarmálið undir kúrfunni. Og það er núll komma átta fimm níu, og svo að lokum getum við plottað upp, hérna, kúrfuna okkar. Þannig að flatarmálið undir þessari gulu línu hérna er núll komma átta fimm níu. Og því hærra sem A U C-ið er, því betra er módelið. Ókei. Og sem sagt, já, hérna, minna á það líka að sem sagt, A U C-ið, það er cut off independent, þannig að það er á suman hátt betra heldur en að mæla accuracy eins og við sáum áðan með ójafna gagnasafnið sem við vorum með. Ókei, nú ætla ég að tala um sem sagt þessi, þessar aðferðir til þess að jafna, eða koma á jafnvægi í gagnasafninu okkar. Og við byrjum á því hérna, að bara búa til eitthvað random gagnasafn. Það er hérna í scikit learn, þar er maður með sem sagt library þar sem að heitir bara, hérna, dataset, þar sem maður getur bara generate-að randomly gagnasöfn með ákveðna eiginleika. Eins og hérna, þetta er gagnasafn sem maður getur notað í svona classification-algóriþmum. Og þá einfaldlega segir maður hvað eiga að vera margar, hérna, mælingar, hversu margar, hérna, breytur, hversu margir klassar, þannig að við erum hérna með fimm þúsund mælingar, þrjár breytur og tvo klassa. Þannig að þetta myndi vera binary classification, og svo getum við meira að segja sagt líka hversu stórt hlutfall af báðum, hérna, klössunum mega vera. Þannig að þetta n classes vísar til þá target-sins okkar, og við viljum að þrjú prósent sé, hérna, af öðrum klassanum og níutíu og sjö prósent af hinum klassanum. Þannig að það sem við fáum út úr þessu er gagnasafn sem er mjög óbalansað, það er mikið ójafnvægi þarna, af því að, eins og við sögðum þeim, þá vildum við að það væru þrjú prósent í öðrum og níutíu og sjö prósent í hinum. Þannig að þetta er vel undir þessu tíu prósent viðmiði sem að við töluðum um. Ókei, og svo er hérna, ætla ég að fara í nokkrar aðferðir til þess að balance-a. Við erum með random oversampling og random undersampling og svo líka smote, þannig að ef við sjáum hérna, og við getum import-að úr þessu, hérna, imb learn pakka, það sem heitir bara random oversampler, og svo getum við samplað, sem að við sjáum, setjum inn hérna í random, sem sagt búum til svona object sem heitir random oversampler, og við viljum nota þetta hérna strategy. Maður getur valið hvaða strategy maður vill. Minority þýðir að það á að sampla minority-klassann þangað til það er komið jafnvægi. Og af því þetta var oversample, þetta þýðir það að við erum að búa til, við erum að tvöfalda línur af, sem sagt, af mælingunum sem að tilheyra minority-klassanum, þangað til að, hérna, þetta er orðin balance-að. Þannig að við erum raunverulega búin að vera að duplicate-a þessar hundrað áttatíu og eina mælingu þar til þær eru átta þúsund talsins. Þannig að hver kemur fyrir, hversu oft? Alveg þrjátíu sinnum eða eitthvað, er það ekki? Fjögur þúsund og átta hundruð deilt með hundrað og áttatíu og einum, svo oft kemur hver þessara mælinga fyrir. En allavegana, þannig að þetta myndi kannski ekkert vera mjög gott gagnasafn til að vinna með, af því það er, þær eru svo ótrúlega, það myndi vera svo ótrúlega bjagað. En við getum sem sagt notað annað sampling strategy, sagt bara núll komma tveir, og það þá þýðir að hlutfallið á milli eins og núll á að vera núll komma tveir. Þannig að þið sjáið, hérna, hérna myndum við vera með aðeins, hérna, allavega ekki jafn jafnt, en samt alveg nógu jafnt. Og svo, hérna, á sama hátt, undersampling, við erum bara með random undersampler, og þá sem sagt munið þið ef við erum undersample-a þá erum við að henda í burt mælingum sem eru í majority-klassanum þannig að við erum að fækka, við erum að minnka gagnasafnið, fá út jafnvægi, og svo á sama hátt, ef við setjum sampling strategy saman við, jafnt og einhver tala, þá fáum við, sem sagt, þetta hérna hlutfall á milli, milli þessara tveggja hópa. Og svo, að lokum, smote. Það sem við erum búin að segja, við viljum bara hafa, þetta er bara, sem sagt, out of the box smote, nei, heyrðu við erum hérna, bara sem sagt out of the box, og þá verður þetta alveg jafnt, sjáið þið, fifty fifty, en við getum líka sagt, hérna, við viljum ekki endilega fifty fifty, það má alveg vera bara tuttugu prósent, og þá segjum við bara hérna, að við viljum tuttugu prósent. Þannig að þetta virkar allt svona á mjög svipaðan hátt en gagnasafnið sem verður til í hvert sinn er mismunandi. Þannig að ein seinasta æfing sem ég ætla að fara í gegnum er, hérna, að sameina þetta tvennt. Við ætlum að, sem sagt, að taka gagnasafn sem við vitum að er ekki í jafnvægi, og við ætlum að búa til módel og spá fyrir um eitthvað, mæla hversu gott módelið okkar er, og svo ætlum við að balance-a gagnasafnið, og aftur að spá fyrir og sjá hvort að spáin okkar breytist. Þannig að ég ætla að nota hérna random forests. Þið getið notað hvað sem er, þetta snýst náttúrulega ekkert um hvaða algóriþma við erum að nota, ég bara tók einhvern, og þennan af því að hann er uppáhaldið mitt. En allavegana. Og svo ætla ég að taka hérna gagnasafn sem að er í þessu imb learn library-i. Í imb learn er fullt af gagnasöfnum sem eru með miklum imbalance, sem fólk er að nota þegar það er að þróa nýjar aðferðir til þess að balance-a gagnasafn. Þannig að þetta er svona bara svona standard safn af gögnum sem allir hafa aðgang að, þannig að ef allir eru, ef einhverjir eru að þróa nýja aðferð þá geta allir prófað þessa aðferð á þessum gagnasöfnum, til þess að sjá hvort að þetta sé, hérna, að virka. Þetta er svona gott fyrir validation í, í svona þessum vísindaheimi, og þegar að fólk er að reyna að búa til betri aðferðir. En allavegana, ég er að nota gagnasafn sem heitir hérna car eval fjögur. Og ég bara les það inn, og sjáið þið hérna, ég er með aftur með þetta X, sem eru allar breyturnar, og ég er með y, sem að er target-ið, og svo, hérna, sjáið þið að í þessu tilfelli þá erum við með sextán hundruð sextíu og þrjá sem að eru af klassanum núll og sextíu og fimm sem eru af klassanum einum, þannig að þetta er mjög mikið ójafnvægi í þessi gagnasafni. Ókei, og svo ætla ég að taka þetta hérna gagnasafn, þetta X og y, og skipta því í tvennt, ég ætla að búa til, sem sagt, þetta er svona, hérna, þessi splitting method sem við töluðum um, ég er að búa til train- og test-gagnasafn. Þar sem ég er að nota stratified sampling til að vera viss um það að það er sama hlutfall af báðum í báðum gagnasöfnunum. Þannig að við sjáum að í train-settinu okkar erum við með fjörutíu og níu af klassa einum og tólf hundruð fjörutíu og sjö af klassa núll. Og, þannig að restin myndi vera í, í test-settinu okkar. Já, sem er þá hér. Þannig að við erum með fjögur hundruð og sextán núll og sextán einn, þannig að það eru bara mjög fáir hérna sem eru í einum. Ókei, og svo bara bjó ég til hérna svona smá fall sem, sem mælir mismunandi performance. Við erum með accuracy, við erum með recall, precision og A U C. Og þetta var bara svona til þess að þurfa ekki að endurtaka mig oft. Ókei, og svo kemur hérna aðalskrefið. Við búum til random forest classifier, sem heitir bara s, CLF, og svo tökum við þennan classifier og beitum honum á train-gögnin okkar, á X train og y train. Og svo mælum við performance-inn á test-settinu. Þannig að við keyrum, það kemur meira að segja error, af því það er allt bara núll, en þið sjáið það að accuracy-ið er bara nokkuð gott, níutíu og sex prósent. En recall-ið okkar, það er núll og precision-ið er núll. Sem sagt, við náum ekki að finna neinn sem er í þessum minority-klassa. Enginn sem er true positive finnst, true positive er núll. Sem þýðir það, að þetta er ekkert voðalega gott módel, af því að það finnur ekki, hérna, þennan minority-klassa. Þannig að í þessu tilfelli þá mundi allt spam-ið fara beint inn í inbox-ið ykkar, er það ekki? Það finnst ekki. Ókei. En ef við tökum okkur til og prófum að oversample-a training-settið okkar, við hérna notum random oversampler, og nota bene, ef við gerum þetta við þjálfunargögnin okkar, ekki allt X-ið, bara við þjálfunargögnin okkar, af því við viljum að test-settið haldi sér eins og það er, við viljum bara gera það við þjálfunargögnin. En við gerum þetta við þau, við oversample-um, munið þið að við, við bætum við, við duplicate-um, hérna, mælingarnar í training-settinu okkar, þannig að við gerum það. Þá sjáið þið að við erum með hérna tólf hundruð fjörutíu og sjö eins og áður af klassanum núll, en það eru komnir fjögur hundruð níutíu og átta af klassanum einn. Þannig að við erum raunverulega búin að tífalda hverja einustu, hverja einustu minority-klassa mælingu. Og svo ef við gerum það sama aftur, búum aftur til random forest með, núna, sem sagt oversample-aða X-inu og y-inu, og mælum aftur á test-settunum okkar, performance-inn, þá sjáið þið það, ókei, við erum komin með betra accuracy og við erum komin með mjög gott recall og mjög gott precision. Við erum virkilega að ná öllum minority-klassa, hérna, gildunum okkar. Og A U C-ið, já, er líka aðeins búið að hækka. Þannig að þetta er, þetta er það sem að þessir, þessar balancing-aðferðir gera. Þær gera okkur kleift að finna minority-mælingar í gagnasafninu okkar, og að læra þeirra mynstur líka. Já, og það er allt og sumt. Eru einhverjar spurningar varðandi þetta? Hafið þið gert svona einhvern tímann áður? Er þetta allt saman nýtt? Ókei. Sem sagt, þegar þið byrjið að gera þetta í Python, þá eru alls konar svona aðferðir til þess að gera þetta allt saman í einu pipeline-i, maður er ekkert að gera þetta svona mikið step by step, þetta er meira bara svona, hérna, pipeline-að. En ég vildi bara sýna, sýna ykkur nákvæmlega hvað, hver áhrifin af, af hverju og einu er. Já, og kannski eitt að lokum, það er hérna kennslukönnun. Það væri voðalega gott ef þið mynduð svara henni. Fenguð örugglega email um það fyrir helgi er það ekki? Endilega svara kennslukönnuninni. Það er mjög gott fyrir okkur. Af því þá getum við bætt okkur, kennt ykkur betur, þannig að endilega svarið þið henni. Hérna, já, eru einhverjar spurningar varðandi model evaluation? Nei, ókei. Hérna, þá bara segi ég takk í dag og sjáumst næsta mánudag. Enginn tími á föstudaginn, munið þið. Enginn tími á föstudaginn. Já, bíddu, ég ætla að stoppa.