Kuidas arvutada masinõppes jõudlusmõõdikute usaldusvahemikke automaatse alglaadimismeetodi abil

Allikasõlm: 1178501

Kuidas arvutada masinõppes jõudlusmõõdikute usaldusvahemikke automaatse alglaadimismeetodi abil

Kas teie mudeli jõudluse mõõtmised on väga täpsed "suure" testikomplekti tõttu või väga ebakindlad "väikese" või tasakaalustamata testikomplekti tõttu?


By David B Rosen (PhD), IBM Global Financingu automatiseeritud krediidikinnituse juhtiv andmeteadlane



Oranž joon näitab tasakaalustatud täpsuse usaldusvahemiku alumise piirina 89.7%, algse vaadeldud tasakaalustatud täpsuse = 92.4% (punktihinnangu) puhul roheline ja 94.7% ülemise piirina punane. (See ja kõik pildid on autori poolt, kui pole märgitud teisiti.)

Sissejuhatus

 
 
Kui teatate oma klassifikaatori toimivuse kohta testikomplekti täpsusega 94.8% ja F1 = 92.3%, ei tähenda see palju, kui te ei tea midagi testikomplekti suuruse ja koostise kohta. Nende jõudlusmõõtmiste veamarginaal varieerub suuresti sõltuvalt testikomplekti suurusest või tasakaalustamata andmestiku puhul peamiselt sellest, mitu sõltumatut eksemplari on vähemus klass, mida see sisaldab (selleks ei aita samade eksemplaride rohkem koopiaid ülediskreetmisest).

Kui teil õnnestuks koguda teine, sarnase päritoluga sõltumatu testikomplekt, pole teie mudeli täpsus ja F1 selles andmestikus tõenäoliselt samad, kuid kui palju võivad need tõenäoliselt olla? Sellele sarnasele küsimusele vastatakse statistikas kui usaldusvahemik mõõtmisest.

Kui teeksime aluseks olevast populatsioonist palju sõltumatuid valimiandmekogumeid, jääks 95% nendest andmekogumitest mõõdiku tegelik aluspopulatsiooni väärtus 95% usaldusvahemikku, mille me selle konkreetse valimiandmestiku jaoks arvutaksime.

Selles artiklis näitame teile, kuidas arvutada usaldusvahemikke mis tahes arvu masinõppe jõudlusmõõdikute jaoks korraga, kasutades alglaadimismeetodit, mis automaatselt määrab, mitu alglaadimisnäidisandmestikku vaikimisi luua.

Kui soovite lihtsalt näha, kuidas seda koodi usaldusvahemike arvutamiseks kutsuda, minge jaotisse "Arvutage tulemused!” all.

Bootstrapi metoodika

 
 
Kui saaksime andmete tegeliku jaotuse põhjal koostada täiendavaid testandmekogumeid, näeksime huvipakkuva(te) toimivusmõõdiku(de) jaotust nende andmekogumite vahel. (Nende andmekogumite joonistamisel ei teeks me midagi, et takistada identse või sarnase eksemplari mitu korda joonistamist, kuigi see võib juhtuda harva.)

Kuna me seda teha ei saa, on järgmiseks parimaks võimaluseks hankida failist täiendavaid andmekogumeid empiiriline jaotus selle testandmestiku, mis tähendab proovide võtmist koos asendamisega selle eksemplaridest, et luua uued alglaadimisnäidisandmed. Asendusega valimi võtmine tähendab, et kui me konkreetse eksemplari joonistame, paneme selle uuesti sisse, et saaksime selle sama näidisandmestiku jaoks uuesti joonistada. Seetõttu on igal sellisel andmestikul üldiselt mõnest eksemplarist mitu koopiat ja see ei hõlma kõiki baastestikomplektis olevaid eksemplare.

Kui me prooviksime ilma asendus, siis saaksime lihtsalt iga kord originaalandmestiku identse koopia, mis on segatud erinevas juhuslikus järjekorras, millest poleks mingit kasu.

protsentiil Bootstrap metoodika usaldusvahemiku hindamiseks on järgmine:

  1. Tekitama nboots „bootstrap sample” andmestikud, millest igaüks on sama suur kui algne testkomplekt. Iga näidisandmekogum saadakse, joonistades katsekomplektist juhuslikult eksemplare koos asendamisega.
  2. Arvutage iga näidisandmekomplekti mõõdik ja salvestage see.
  3. 95% usaldusvahemik on antud 2.5th 97.5-ileth protsentiil seas nboots mõõdiku arvutatud väärtused. Kui nboots=1001 ja sorteerisite väärtused seeriasse/massiivi/loendisse X pikkusega 1001, 0th protsentiil on X[0] ja 100th protsentiil on X[1000], seega oleks usaldusvahemik antud väärtusega X[25] kuni X[975].

Loomulikult saate etapis 2 iga näidisandmestiku jaoks arvutada nii palju mõõdikuid, kui soovite, kuid 3. sammus leiate iga mõõdiku protsentiilid eraldi.

Andmekogumi ja usaldusvahemiku tulemuste näited

 
 
Näitena kasutame selle eelmise artikli tulemusi: Kuidas tulla toime tasakaalustamata klassifikatsiooniga ilma andmeid uuesti tasakaalustamataEnne kallutatud andmete ülevalimise kaalumist proovige kohandada oma klassifitseerimisotsuse läve.

Selles artiklis kasutasime kõrgelt-tasakaalustamata kaheklassiline Kaggle krediitkaardipettuse tuvastamise andmekogum. Valisime kasutada klassifitseerimisläve, mis erineb vaikimisi määratud 0.5-lävest, mis on ennustamismeetodi kasutamisel kaudselt ette nähtud, mistõttu ei ole andmete tasakaalustamine vajalik. Seda lähenemisviisi nimetatakse mõnikord läve nihutamine, milles meie klassifikaator määrab klassi, rakendades valitud läve ennustatud klassi tõenäosusele_proba() meetod.

Piirame selle artikli (ja koodi) ulatuse binaarse klassifikatsiooniga: klassid 0 ja 1, kusjuures klass 1 on kokkuleppeliselt "positiivne" klass ja täpsemalt tasakaalustamata andmete vähemusklass, kuigi kood peaks töötama regressiooni (üksik) korral pidev sihtmärk) samuti.

Ühe alglaadimisnäidise andmestiku genereerimine

 
 
Kuigi meie usaldusvahemiku kood suudab käsitleda erinevat arvu andmeargumente, mis edastatakse meetrikafunktsioonidele, keskendume sklearn-stiilis mõõdikutele, mis aktsepteerivad alati kahte andmeargumenti, y_true ja y_pred, kus y_pred on kas kahendklassi ennustused (0 või 1) või pidevad klassitõenäosuse või otsustusfunktsiooni prognoosid või isegi pidevad regressiooniprognoosid, kui y_true on samuti pidev. Järgmine funktsioon loob ühe alglaadimise näidisandmestiku. See aktsepteerib mis tahes data_args, kuid meie puhul on need argumendid ytest(meie tegelik/tegelik test seadis sihtväärtused eelmine artikkel) Ja hardpredtst_tuned_thresh (ennustatud klass). Mõlemad sisaldavad nulle ja ühtesid, mis näitavad iga eksemplari tõelist või ennustatud klassi.

Kohandatud mõõdiku specificity_score() ja kasulikud funktsioonid

 
 
Määratleme spetsiifilisuse jaoks kohandatud mõõdiku funktsiooni, mis on lihtsalt üks nimi funktsioonile Recall of the negatiivne klass (0. klass). Samuti funktsioon calc_metrics, mis rakendab meie andmetele huvipakkuvate mõõdikute jada ja paar selle jaoks kasulikku funktsiooni:

Siin koostame oma mõõdikute loendi ja rakendame need andmetele. Me ei pidanud täpsust asjakohaseks mõõdikuks, kuna valenegatiivne (tõelise pettuse väär klassifitseerimine legitiimseks) on ettevõttele palju kulukam kui valepositiivne tulemus (tõelise legitiimsuse väär klassifitseerimine pettuseks), samas kui täpsus käsitleb mõlemat tüüpi valesti klassifitseerimist. on võrdselt halvad ja soosib seetõttu nende õiget klassifitseerimist, kelle tegelik klass on enamusklass, kuna need esinevad palju sagedamini ja annavad seega palju suurema panuse üldisesse täpsusesse.

met=[ metrics.recall_score, specificity_score, metrics.balanced_accuracy_score ]
calc_metrics(met, ytest, hardpredtst_tuned_thresh)



Iga alglaadimisnäidise andmestiku koostamine ja selle jaoks mõõdikute arvutamine

 
 
Funktsioonis raw_metric_samples() loome tegelikult ükshaaval mitu näidisandmestikku ja salvestame igaühe mõõdikud:

Annate atribuudile raw_metric_samples() huvipakkuvate mõõdikute (või ainult ühe mõõdiku) loendi ning tõesed ja prognoositud klassiandmed ning see hangib nbootsi näidisandmekogumeid ja tagastab andmeraami, milles on ainult igast andmestikku arvutatud mõõdikute väärtused. _boot_generator() kaudu kutsub see generaatoriavaldises esile ükshaaval one_boot(), selle asemel, et salvestada kõik andmestikud korraga potentsiaalsetohutu nimekiri.

Vaadake 7 alglaadimisnäidisandmestiku mõõdikuid

 
 
Koostame mõõdikufunktsioonide loendi ja kutsume esile raw_metric_samples(), et saada ainult seitsme näidisandmestiku tulemused. Mõistmise huvides kasutame siinkohal raw_metric_samples() – see ei ole vajalik usaldusvahemike saamiseks, kasutades allolevat funktsiooni ci_auto(), kuigi määrab ci_auto() jaoks mõõdikute loendi (või ainult ühe mõõdiku) is vajalik.

np.random.seed(13)
raw_metric_samples(met, ytest, hardpredtst_tuned_thresh, nboots=7).style.format('{:.2%}') #optional #style



Iga ülaltoodud veerg sisaldab mõõdikuid, mis on arvutatud ühest alglaadimisnäidise andmestikust (nummerdatud 0 kuni 6), nii et arvutatud mõõdiku väärtused varieeruvad juhusliku valimi tõttu.

Alglaadimisandmete kogumite arv arvutatud vaikeväärtusega

 
 
Meie rakenduses vaikimisi alglaadimisandmekomplektide arv nboots arvutatakse automaatselt soovitud usaldustasemest (nt 95%), et täita soovitust North, Curtis ja Sham et distributsiooni igas sabas oleks minimaalne alglaadimistulemuste arv. (Tegelikult kehtib see soovitus p-väärtused ja seega hüpoteesi test vastuvõtupiirkonnad, Kuid usaldusvahemikud on piisavalt sarnased nendega, et seda rusikareeglina kasutada.) Kuigi need autorid soovitavad sabasse lisada vähemalt 10 alglaadimise tulemust, Davidson ja MacKinnon 399% kindluse tagamiseks soovitage vähemalt 95 saapaid, mis nõuab 11 saapaid sabas, seega kasutame seda konservatiivsemat soovitust.

Määrame alfa, mis on 1 – usaldusnivoo. Nt 95% usaldus muutub 0.95 ja alfa=0.05. Kui määrate selge alglaadimiste arvu (võib-olla väiksema nboots kuna soovite kiiremaid tulemusi), kuid sellest ei piisa teie taotletud alfa jaoks, valitakse automaatselt kõrgem alfa, et saada selle algarvu jaoks täpne usaldusvahemik. Kasutatakse vähemalt 51 saapaid, sest vähem saab täpselt arvutada ainult veidralt väikese usaldustaseme (nt 40% usaldusnivoo, mis annab intervalli alates 30.th protsentiil 70-nith protsentiil, millel on 40% intervalli sees, kuid 60% sellest väljaspool) ja pole selge, kas saapa miinimumsoovituses oli selline juhtum isegi ette nähtud.

Funktsioon get_alpha_nboots() määrab vaikeväärtused nboots või muudab nõutud alfa- ja nboots-i ülaltoodud viisil:

Näitame vaikimisi nbootsid erinevate alfa väärtuste jaoks:

g = get_alpha_nboots pd.DataFrame( [ g(0.40), g(0.20, None), g(0.10), g(), g(alpha=0.02), g(alpha=0.01, nboots=None), g(0.005, nboots=None) ], columns=['alpha', 'default nboots'] ).set_index('alpha')



Siin on, mis juhtub, kui taotleme selgesõnalist nboots:

req=[(0.01,3000), (0.01,401), (0.01,2)]
out=[get_alpha_nboots(*args) for args in req]
mydf = lambda x: pd.DataFrame(x, columns=['alpha', 'nboots'])
pd.concat([mydf(req),mydf(out)],axis=1, keys=('Requested','Using'))



Väikeste nboots-väärtuste puhul suurendati alfa väärtust 0.05 ja 0.40-ni ning nboots=2 muudetakse minimaalseks 51-ks.

Alglaadimisnäidiste andmekogumite histogramm, mis näitab usaldusvahemikku ainult tasakaalustatud täpsuse jaoks

 
 
Jällegi ei pea me seda tegema, et saada allpool toodud usaldusvahemikud, kutsudes esile ci_auto().

np.random.seed(13)
metric_boot_histogram (metrics.balanced_accuracy_score, ytest, hardpredtst_tuned_thresh)



Oranž joon näitab tasakaalustatud täpsuse usaldusvahemiku alumise piirina 89.7%, algse vaadeldud tasakaalustatud täpsuse = 92.4% (punktihinnangu) puhul roheline ja 94.7% ülemise piirina punane. (Sama pilt on selle artikli ülaosas.)

Kuidas arvutada mõõdikute loendi kõiki usaldusvahemikke

 
 
Siin on põhifunktsioon, mis kutsub esile ülaltoodu ja arvutab mõõdikute tulemuste protsentiilide põhjal usaldusvahemikud ning lisab punkthinnangud oma tulemuste väljundandmeraami esimesse veergu.

Arvutage tulemused!

 
 
See on kõik, mida me tegelikult tegema pidime: kutsuge ci_auto() järgmiselt koos mõõdikute loendiga (met ülal määratud), et saada nende usaldusvahemikud. Protsentuaalne vorming on valikuline:

np.random.seed(13)
ci_auto( met, ytest, hardpredtst_tuned_thresh ).style.format('{:.2%}')



Saadud usaldusvahemike arutelu

 
 
Siin on segaduse maatriks saidilt algse artikli. Klass 0 on negatiivsed (enamusklass) ja klass 1 on positiivsed (väga harv klass)



Tagasikutsumisel (tõeline positiivne määr) 134/(134+14) on kõige laiem usaldusvahemik, kuna see on binoomne osa, mis hõlmab väikseid loendusi.

Spetsiifilisus (tõeline negatiivne määr) on 80,388 80,388/(4,907 XNUMX+XNUMX XNUMX), mis hõlmab palju suurem arv, seega on selle väga kitsas usaldusvahemik vaid [94.11% kuni 94.40%].

Kuna tasakaalustatud täpsus arvutatakse lihtsalt tagasikutsumise ja spetsiifilisuse keskmisena, on selle usaldusvahemiku laius nende omade vahepealne.

Mõõtmise ebatäpsus, mis on tingitud katseandmete erinevustest vs. rongi andmete erinevusest

 
 
Siin me ei ole arvesse võtnud varieeruvust mudel meie juhuslikkuse põhjal koolitus andmed (kuigi see võib teatud eesmärkidel huvi pakkuda, nt kui olete automatiseerinud korduvat ümberõpet ja soovite teada, kui palju tulevaste mudelite jõudlus võib erineda), vaid pigem ainult selle toimivuse mõõtmise varieeruvus. eriline mudel (loodud mõne konkreetse koolitusandmete põhjal) meie juhuslikkuse tõttu test andmed.

Kui meil oleks piisavalt sõltumatuid katseandmeid, saaksime väga täpselt mõõta selle konkreetse mudeli toimivust aluspopulatsioonis ja me teaksime, kuidas see toimib, kui see mudel kasutusele võetakse, olenemata sellest, kuidas me mudeli koostasime ja kas me võiksime seda teha. saada parem või halvem mudel erineva treeningu näidisandmestikuga.

Üksikjuhtumite sõltumatus

 
 
Alglaadimismeetod eeldab, et kõik teie juhtumid (juhtumid, vaatlused) on koostatud aluseks olevast populatsioonist sõltumatult. Kui teie testkomplektis on ridade rühmi, mis ei ole üksteisest sõltumatud, näiteks sama üksuse korduvad vaatlused, mis on tõenäoliselt üksteisega korrelatsioonis, või eksemplarid, mis on ülevalimitud / replitseeritud / genereeritud teie testi teistest eksemplaridest seatud, ei pruugi tulemused kehtida. Võimalik, et peate kasutama grupeeritud valimi võtmine, mille käigus joonistate üksikute ridade asemel juhuslikult kokku terved rühmad, vältides samal ajal ühegi rühma tükeldamist või lihtsalt osa kasutamist.

Samuti soovite veenduda, et teil poleks treening- ja testikomplekti vahel jagatud rühmi, sest siis ei ole testikomplekt tingimata sõltumatu ja võite saada märkamatult ülepaigutamist. Näiteks kui kasutate üleproovimist, peaksite seda tavaliselt tegema ainult pärast see on testikomplektist eraldatud, mitte varem. Ja tavaliselt võtaksite ülevalimi koolituskomplektist, kuid mitte testikomplektist, kuna testikomplekt peab jääma esindama eksemplare, mida mudel edaspidisel kasutuselevõtul näeb. Ja ristvalideerimiseks võiksite kasutada scikit-learn'si model_selection.GroupKFold().

Järeldus

 
 
Saate alati arvutada oma hindamismõõdiku(te) usaldusvahemikke, et näha, kui täpselt teie testiandmed võimaldavad teil oma mudeli toimivust mõõta. Kavandan veel üht artiklit, et demonstreerida tõenäosusprognoose hindavate mõõdikute usaldusvahemikke (või usaldusskoore – pole seost statistilise usaldusväärsusega), st pehmet klassifikatsiooni (nt Log Loss või ROC AUC), mitte siin kasutatud mõõdikuid, mis hindavad diskreetne klassi valik mudeli järgi (raske klassifikatsioon). Sama kood töötab nii mõlema kui ka regressiooni jaoks (prognoosides pidevat sihtmuutujat) - selleks peate lihtsalt edastama teist tüüpi ennustuse (ja regressiooni korral teistsugused tõelised sihtmärgid).

See jupyteri märkmik on saadaval Githubis: bootConfIntAutoV1o_standalone.ipynb

Kas see artikkel oli informatiivne ja/või kasulik? Kui teil on selle artikli või usaldusvahemike, alglaadimisriba, algkäivituste arvu, selle juurutuse, andmekogumi, mudeli, läve teisaldamise või tulemuste kohta kommentaare või küsimusi, postitage allpool kommentaar.

Lisaks eelnimetatule eelmine artikkel, võite olla huvitatud ka minu vastu Kuidas Pandas CSV-faili lugemisel automaatselt tuvastada kuupäeva / kuupäeva ja kellaaja veerge ja määrata nende andmetüüp, kuigi see ei ole käesoleva artikliga otseselt seotud.

Mõned õigused kaitstud

 
Bio: David B Rosen (PhD) on IBM Global Financingu automatiseeritud krediidikinnituse juhtiv andmeuurija. Lisateavet Davidi kirjutistest leiate aadressilt dabruro.medium.com.

Originaal. Loaga uuesti postitatud.

Seotud:

Allikas: https://www.kdnuggets.com/2021/10/calculate- luottamus-intervals-performance-metrics-machine-learning.html

Ajatempel:

Veel alates KDnuggets