Kako izračunati intervale zaupanja za meritve uspešnosti v strojnem učenju z uporabo metode samodejnega zagona

Izvorno vozlišče: 1178501

Kako izračunati intervale zaupanja za meritve uspešnosti v strojnem učenju z uporabo metode samodejnega zagona

Ali so meritve delovanja vašega modela zelo natančne zaradi "velikega" testnega niza ali zelo negotova zaradi "majhnega" ali neuravnoteženega testnega niza?


By David B Rosen (dr.), vodilni podatkovni znanstvenik za avtomatizirano odobritev kreditov pri IBM Global Financing



Oranžna črta prikazuje 89.7 % kot spodnjo mejo intervala zaupanja uravnotežene natančnosti, zelena za prvotno opazovano uravnoteženo natančnost = 92.4 % (točkovna ocena) in rdeča za zgornjo mejo 94.7 %. (Ta in vse slike so last avtorja, razen če ni drugače navedeno.)

Predstavitev

 
 
Če poročate o uspešnosti svojega klasifikatorja, ki ima natančnost = 94.8 % in F1 = 92.3 % na testnem nizu, to ne pomeni veliko, ne da bi vedeli nekaj o velikosti in sestavi testnega niza. Meja napake teh meritev zmogljivosti se bo zelo razlikovala glede na velikost preskusnega niza ali, pri neuravnoteženem nizu podatkov, predvsem glede na to, koliko neodvisnih primerkov Manjšina razred, ki ga vsebuje (več kopij istih primerkov iz prekomernega vzorčenja za ta namen ne pomaga).

Če bi vam uspelo zbrati drug, neodvisen testni niz podobnega izvora, je malo verjetno, da bosta natančnost in F1 vašega modela na tem nizu podatkov enaka, toda koliko bi se verjetno razlikovala? Na podobno vprašanje v statistiki odgovarjajo kot interval zaupanja meritve.

Če bi črpali veliko neodvisnih vzorčnih naborov podatkov iz osnovne populacije, bi bila za 95 % teh naborov podatkov dejanska vrednost osnovne populacije metrike znotraj 95-odstotnega intervala zaupanja, ki bi ga izračunali za ta določen vzorčni nabor podatkov.

V tem članku vam bomo pokazali, kako izračunati intervale zaupanja za poljubno število meritev učinkovitosti strojnega učenja hkrati, z metodo zagona, ki samodejno določa, koliko podatkovnih nizov vzorcev zagona naj se privzeto ustvari.

Če želite samo videti, kako priklicati to kodo za izračun intervalov zaupanja, preskočite na razdelek "Izračunajte rezultate!" spodaj.

Metodologija bootstrap

 
 
Če bi lahko iz dejanske porazdelitve, na kateri temeljijo podatki, črpali dodatne testne nabore podatkov, bi lahko videli porazdelitev zanimivih meritev uspešnosti v teh naborih podatkov. (Pri risanju teh nizov podatkov ne bi storili ničesar, da bi preprečili večkratno risanje enakega ali podobnega primerka, čeprav se to lahko zgodi le redko.)

Ker tega ne moremo storiti, je naslednja najboljša stvar črpati dodatne nabore podatkov iz empirična porazdelitev tega preskusnega nabora podatkov, kar pomeni vzorčenje z zamenjavo iz njegovih primerkov za ustvarjanje novih vzorčnih naborov podatkov za zagon. Vzorčenje z zamenjavo pomeni, da ko narišemo določen primerek, ga vrnemo, da ga lahko znova narišemo za isti vzorčni nabor podatkov. Zato ima vsak tak nabor podatkov na splošno več kopij nekaterih primerkov in ne vključuje vseh primerkov, ki so v osnovnem preskusnem nizu.

Če smo vzorčili brez zamenjavo, potem bi preprosto vsakič dobili identično kopijo izvirnega nabora podatkov, premešano v drugačnem naključnem vrstnem redu, kar ne bi bilo uporabno.

Procenttil metodologija bootstrap za ocenjevanje intervala zaupanja je naslednja:

  1. Ustvarjajo nboots nabore podatkov »bootstrap sample«, od katerih je vsak enake velikosti kot prvotni preskusni niz. Vsak vzorčni niz podatkov je pridobljen z naključnim risanjem primerkov iz testnega niza z zamenjavo.
  2. Za vsak vzorčni niz podatkov izračunajte metriko in jo shranite.
  3. 95-odstotni interval zaupanja je podan z 2.5th na 97.5th percentil med nboots izračunane vrednosti metrike. če nboots=1001 in ste razvrstili vrednosti v seriji/matriki/seznamu X dolžine 1001, 0th percentil je X[0] in 100th percentil je X[1000], zato bi bil interval zaupanja podan z X[25] do X[975].

Seveda lahko v 2. koraku izračunate poljubno število metrik za vsak vzorčni nabor podatkov, v 3. koraku pa bi našli percentile za vsako metriko posebej.

Primer nabora podatkov in rezultatov intervala zaupanja

 
 
Kot primer bomo uporabili rezultate iz tega prejšnjega članka: Kako ravnati z neuravnoteženo klasifikacijo brez ponovnega uravnoteženja podatkovPreden razmislite o čezmernem vzorčenju izkrivljenih podatkov, poskusite prilagoditi svoj prag odločitve o razvrstitvi.

V tem članku smo uporabili zelo-neuravnotežen dvorazredni Kaggle identifikacijski nabor goljufij s kreditnimi karticami. Odločili smo se za uporabo klasifikacijskega praga, ki se precej razlikuje od privzetega praga 0.5, ki je impliciten pri uporabi metode predict(), zaradi česar ni potrebno uravnotežiti podatkov. Ta pristop se včasih imenuje premikanje praga, v katerem naš klasifikator dodeli razred z uporabo izbranega praga za napovedano verjetnost razreda, ki jo zagotavlja napoved_proba() metoda.

Obseg tega članka (in kode) bomo omejili na binarno klasifikacijo: razreda 0 in 1, pri čemer je razred 1 po dogovoru »pozitiven« razred in posebej manjšinski razred za neuravnotežene podatke, čeprav bi morala koda delovati za regresijo (enoten neprekinjen cilj).

Ustvarjanje enega zagonskega vzorčnega nabora podatkov

 
 
Čeprav lahko naša koda intervala zaupanja obravnava različno število podatkovnih argumentov, ki jih je treba posredovati metričnim funkcijam, se bomo osredotočili na metrike v slogu sklearn, ki vedno sprejemajo dva podatkovna argumenta, y_true in y_pred, kjer bo y_pred napovedi binarnega razreda (0 ali 1), ali zvezne napovedi razredne verjetnosti ali odločitvene funkcije ali celo zvezne regresijske napovedi, če je tudi y_true zvezen. Naslednja funkcija ustvari en sam zagonski vzorčni nabor podatkov. Sprejme vse data_args, vendar bodo v našem primeru ti argumenti ytest(naš dejanski/resnični test je nastavil ciljne vrednosti v prejšnji članek) in hardpredtst_tuned_thresh (predviden razred). Oba vsebujeta ničle in enice, ki označujeta pravi ali predvideni razred za vsak primerek.

Specifičnost metrike po meri() in uporabne funkcije

 
 
Določili bomo metrično funkcijo po meri za specifičnost, ki je le drugo ime za odpoklic negativna razred (razred 0). Tudi funkcija calc_metrics, ki uporablja zaporedje metrik, ki nas zanimajo za naše podatke, in nekaj uporabnih funkcij zanjo:

Tukaj naredimo seznam meritev in jih uporabimo za podatke. Natančnost se nam ni zdela relevantna metrika, ker je lažno negativno (napačno razvrščanje prave prevare kot zakonite) veliko dražje za podjetje kot lažno pozitivno (napačno razvrstitev prave prevare kot goljufije), medtem ko Natančnost obravnava obe vrsti napačne razvrstitve. so enako slabi in zato daje prednost pravilnemu razvrščanju tistih, katerih pravi razred je večinski razred, ker se ti pojavljajo veliko pogosteje in tako prispevajo veliko več k splošni natančnosti.

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



Izdelava vsakega vzorčnega nabora podatkov zagona in izračun meritev zanj

 
 
V raw_metric_samples() bomo dejansko ustvarili več vzorčnih nizov podatkov enega za drugim in shranili meritve vsakega:

Raw_metric_samples() podate seznam metrik (ali samo eno metriko), ki vas zanimajo, ter resnične in predvidene podatke o razredu, ta pa pridobi vzorčne nabore podatkov nboots in vrne podatkovni okvir s samo vrednostmi metrik, izračunanimi iz vsakega nabora podatkov. Prek _boot_generator() prikliče one_boot() enega za drugim v izrazu generatorja, namesto da shrani vse nize podatkov hkrati kot potencialnovelika seznam.

Oglejte si meritve na 7 vzorčnih nizih podatkov zagona

 
 
Naredimo seznam metričnih funkcij in pokličemo raw_metric_samples(), da dobimo rezultate za samo 7 vzorčnih naborov podatkov. Tukaj kličemo raw_metric_samples() zaradi razumevanja – ni nujno, da bi dobili intervale zaupanja z uporabo ci_auto() spodaj, čeprav podajamo seznam metrik (ali samo eno metriko) za ci_auto() is potrebno.

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



Vsak zgornji stolpec vsebuje metrike, izračunane iz enega nabora podatkov o vzorcu zagona (oštevilčenih od 0 do 6), tako da se izračunane vrednosti metrik razlikujejo zaradi naključnega vzorčenja.

Število zagonskih nizov podatkov z izračunano privzeto vrednostjo

 
 
V naši izvedbi je privzeto število zagonskih nizov podatkov nboots bo samodejno izračunan iz želene stopnje zaupanja (npr. 95 %), da bo izpolnjeno priporočilo do North, Curtis in Sham imeti najmanjše število rezultatov zagona v vsakem repu distribucije. (Pravzaprav to priporočilo velja za p-vrednosti in s tem preizkus hipotez sprejemne regije, Vendar intervali zaupanja so dovolj podobni tistim, da to uporabimo kot pravilo.) Čeprav ti avtorji priporočajo najmanj 10 zagonskih rezultatov v repu, Davidson & MacKinnon priporočamo vsaj 399 škornjev za 95-odstotno zaupanje, kar zahteva 11 škornjev v repu, zato uporabljamo to bolj konzervativno priporočilo.

Določimo alfa, ki je 1 – stopnja zaupanja. Npr. 95-odstotno zaupanje postane 0.95 in alfa=0.05. Če določite izrecno število škornjev (morda manjše nboots ker želite hitrejše rezultate), vendar to ni dovolj za vašo zahtevano alfa, bo samodejno izbrana višja alfa, da bi dobili natančen interval zaupanja za to število zagonov. Uporabljenih bo najmanj 51 škornjev, ker lahko kateri koli manj natančno izračuna le nenavadno majhne stopnje zaupanja (kot je 40-odstotno zaupanje, ki daje interval od 30th percentil na 70th percentil, ki ima 40 % znotraj intervala, vendar 60 % zunaj njega) in ni jasno, ali je priporočilo o minimalnih škornjih sploh predvidevalo tak primer.

Funkcija get_alpha_nboots() nastavi privzete nboots ali spremeni zahtevane alpha in nboots po zgoraj:

Pokažimo privzete nboots za različne vrednosti alfa:

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')



Evo, kaj se zgodi, če zahtevamo izrecno 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'))



Majhne vrednosti nboots so povečale alfa na 0.05 in 0.40, nboots=2 pa se spremeni na najmanj 51.

Histogram vzorčnih nizov podatkov zagonskega sistema, ki prikazuje interval zaupanja samo za uravnoteženo natančnost

 
 
Spet nam tega ni treba narediti, da bi s priklicem ci_auto() pridobili spodnje intervale zaupanja.

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



Oranžna črta prikazuje 89.7 % kot spodnjo mejo intervala zaupanja uravnotežene natančnosti, zelena za prvotno opazovano uravnoteženo natančnost = 92.4 % (točkovna ocena) in rdeča za zgornjo mejo 94.7 %. (Ista slika je prikazana na vrhu tega članka.)

Kako izračunati vse intervale zaupanja za seznam meritev

 
 
Tukaj je glavna funkcija, ki prikliče zgoraj navedeno in izračuna intervale zaupanja iz percentilov rezultatov metrike ter vstavi ocene točk kot prvi stolpec svojega izhodnega podatkovnega okvira rezultatov.

Izračunajte rezultate!

 
 
To je vse, kar smo res morali narediti: priklicati ci_auto(), kot sledi, s seznamom meritev (met dodeljeno zgoraj), da dobite njihove intervale zaupanja. Odstotno oblikovanje ni obvezno:

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



Razprava o dobljenih intervalih zaupanja

 
 
Tukaj je matrika zmede iz Originalni članek. Razred 0 so negativni (večinski razred), razred 1 pa pozitivni (zelo redki razred)



Priklic (resnična pozitivna stopnja) 134/(134+14) ima najširši interval zaupanja, ker je to binomski delež, ki vključuje majhna štetja.

Specifičnost (resnična negativna stopnja) je 80,388/(80,388+4,907), kar vključuje veliko večje število, zato ima izjemno ozek interval zaupanja le [94.11 % do 94.40 %].

Ker je uravnotežena natančnost izračunana kot preprosto povprečje priklica in specifičnosti, je širina njenega intervala zaupanja vmesna med njihovimi.

Netočnost metrične meritve zaradi variacij v preskusnih podatkih v primerjavi z variacijami v podatkih o vlaku

 
 
Tukaj nismo upoštevali variabilnosti v Model na podlagi naše naključnosti trening podatkov (čeprav je to lahko tudi zanimivo za nekatere namene, npr. če imate avtomatizirano ponavljajoče se ponovno usposabljanje in želite vedeti, koliko se lahko razlikuje zmogljivost prihodnjih modelov), temveč le variabilnost pri merjenju uspešnosti tega zlasti model (ustvarjen iz nekaterih posebnih podatkov o usposabljanju) zaradi naključnosti našega Test podatkov.

Če bi imeli dovolj neodvisnih testnih podatkov, bi lahko zelo natančno izmerili delovanje tega posebnega modela na osnovni populaciji in vedeli bi, kako bo deloval, če bo ta model uveden, ne glede na to, kako smo zgradili model in ali bi pridobite boljši ali slabši model z drugačnim naborom podatkov o vzorcu usposabljanja.

Neodvisnost posameznih instanc

 
 
Metoda zagona predvideva, da je vsak vaš primer (primeri, opažanja) izrisan neodvisno od temeljne populacije. Če ima vaš preskusni niz skupine vrstic, ki niso neodvisne druga od druge, na primer ponavljajoča se opazovanja iste entitete, ki bodo verjetno medsebojno povezane, ali primeri, ki so preveč vzorčeni/podvojeni/generirani iz drugih primerkov v vašem testu nastavljeno, rezultati morda ne bodo veljavni. Morda boste morali uporabiti združeni vzorčenje, kjer naključno izvlečete celotne skupine skupaj namesto posameznih vrstic, pri čemer se izognete razpadu katere koli skupine ali uporabi le njenega dela.

Prepričati se morate tudi, da nimate skupin, ki so bile razdeljene po naboru za usposabljanje in testiranje, ker potem nabor za testiranje ni nujno neodvisen in lahko pride do nezaznavnega prekomernega opremljanja. Na primer, če uporabljate prekomerno vzorčenje, morate na splošno narediti samo po je bil ločen od testnega niza, ne prej. Običajno bi prevzorčili vadbeni niz, ne pa testnega niza, saj mora testni niz ostati reprezentativen za primerke, ki jih bo model videl ob prihodnji uvedbi. In za navzkrižno preverjanje bi želeli uporabiti scikit-learn's model_selection.GroupKFold().

zaključek

 
 
Vedno lahko izračunate intervale zaupanja za meritve vrednotenja, da vidite, kako natančno vam vaši preskusni podatki omogočajo merjenje učinkovitosti vašega modela. Načrtujem še en članek, v katerem bom prikazal intervale zaupanja za metrike, ki ocenjujejo napovedi verjetnosti (ali ocene zaupanja – ni v povezavi s statističnim zaupanjem), tj. mehko klasifikacijo, kot je izguba dnevnika ali ROC AUC, namesto metrik, ki smo jih uporabili tukaj, ki ocenjujejo diskretna izbira razreda po modelu (trda klasifikacija). Ista koda deluje za oba, kot tudi za regresijo (napovedovanje neprekinjene ciljne spremenljivke) — posredovati ji morate le drugo vrsto napovedi (in drugačno vrsto pravih ciljev v primeru regresije).

Ta zvezek Jupyter je na voljo v githubu: bootConfIntAutoV1o_standalone.ipynb

Je bil ta članek informativen in/ali uporaben? Spodaj objavite komentar, če imate kakršne koli pripombe ali vprašanja o tem članku ali o intervalih zaupanja, zagonskem sistemu, številu zagonov, tej izvedbi, naboru podatkov, modelu, premikanju praga ali rezultatih.

Poleg omenjenega prejšnji članek, morda bi vas zanimalo tudi moje Kako samodejno zaznati stolpce datuma/datuma in nastaviti njihov tip podatkov pri branju datoteke CSV v pandah, čeprav ni neposredno povezan s tem člankom.

Nekatere pravice pridržane

 
Bio: David B Rosen (dr.) je vodilni podatkovni znanstvenik za avtomatizirano odobritev kreditov pri IBM Global Financing. Več o Davidovem pisanju najdete na dabruro.medium.com.

prvotni. Poročeno z dovoljenjem.

Povezano:

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

Časovni žig:

Več od KDnuggets