Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Kuinka laskea hajonta binääriluokittelussa

mpni [12.01.2024 21:08:09]

#

Hei,

Löytyykö putkasta matemaatikkoja? Ongelmani on seuraava:

Suoritan 50 toistoa luokittimella, joka antaa tulokseksi joko 0 tai 1. Saan 35 toistolla tulokseksi 0 ja 15 toistolla tulokseksi 1. Oletetaan, että oikea tulos on vaikka 0 ja algoritmi antaa moodiin perustuen tulokseksi 0. Mikä on järkevin tapa esittää tuloksen hajonta? Normaalilla keskihajonnan kaavalla tulos on valtavan suuri. Voiko tässä tehdä jotain jakaumaoletuksia? Esim. Bernoullin jakauma, jne. Tai voiko käyttää standardivirheen kaavaa?

P.S. Oletetaan vielä, että minulla on satarivinen matriisi (sata kappaletta jäseniä luokasta 0 tai 1), jossa jokaisella rivillä on yhden luokan jäsenen ennustustulokset. Sarakkeita tuo 50 kappaletta (toistojen määrä).

Voiko toistojen lukumäärällä vaikuttaa tuloksiin?

Tässä jotakin aiheesta:
https://stats.stackexchange.com/questions/29641/standard-error-for-the-mean-of-a-sample-of-binomial-random-variables/29644#29644

EDIT:

Tämä taitaa olla oikea tapa:
https://en.wikipedia.org/wiki/Sensitivity_and_specificity

Eli matriisista vain katsoo nuo oikeat nollat ja ykköset (sensitivity).

P.S. Tiede ei määrä minua, vaan minä määrään tiedettä (lääkärit sanoo mitä sanokoon). :d
P.P.S. Pitäisi kirjoittaa yksi artikkeli ja yksi apurahahakemus ja aikaa alle yksi kuukausi. Just do it.. (en ole se armeija-ajan gonahtunut sihteeriupseeri, kuin ehkä vain vähän)

Metabolix [13.01.2024 12:32:52]

#

Järkevin tapa riippuu varmasti kontekstista.

Löytämäsi sensitiivisyys ja spesifisyys ovat olennaisia mittareita, jos kyseessä on lääketietellinen diagnostinen testi. Pelkkä sensitiivisyys ei kuvaa testin laatua, vaan molemmat luvut tarvitaan. Esimerkiksi jos testi antaa aina positiivisen tuloksen, testin sensitiivisyys on 100% mutta spesifisyys on 0%, ja on sanomattakin selvää, että tällä testillä ei tee mitään. Täydellisen testin luvut olisivat molemmat 100%, mutta koska näin ei useinkaan ole, lukujen perusteella pitää ymmärtää, mihin testiä voi käyttää ja miten sen tuloksia voi tulkita eri tilanteissa.

Lisäksi tuo selityksesi, että testaat samaa arvoa 50 kertaa ja tulos vaihtelee, ei tyypillisesti sovi lääketieteeseen. Yleensä jos toistetaan samalle näytteelle testi 50 kertaa, tuloksen oletetaan pysyvän samana, eli mahdollinen virhe ei johdu testin sisäisestä satunnaisvaihtelusta vaan näytteestä (esim. juuri tämän aamun räkäklönttiin ei tullut tutkittavaa mikrobia) tai henkilöstä (esim. juuri tällä henkilöllä tutkittavaa ainetta X on poikkeava määrä jostain muusta kuin tutkittavasta syystä). Jos testi itsessään sisältäisi suurta satunnaisvaihtelua, voitaisiin suoraan määritellä "testiksi" vaikka, että 50 toistolla saadaan vähintään 10 positiivista, ja laskea sitten sensitiivisyys ja spesifisyys tästä yhdistelmätestistä.

Kun sinulla on nyt taulukossa suuri määrä ennusteita jokaiselle jäsenelle, voisit laskea näistä kullekin jäsenelle keskiarvon eli ykkösen todennäköisyyden. Sitten voisit määritellä raja-arvon, jolla näistä ennusteista muodostetaan lopullinen ykkönen tai nolla. Raja-arvoa säätämällä voit vaihtaa testin sensitiivisyyttä ja spesifisyyttä: jos raja on korkea, sensitiivisyys laskee ja spesifisyys paranee, ja jos raja on matala, sensitiivisyys nousee mutta spesifisyys paranee. Sopiva raja-arvo riippuu testin käytöstä eli minkälaiseen joukkoon sitä on tarkoitus soveltaa ja mitä tuloksia siitä toivotaan. Esimerkiksi lentokentän räjähdeainetestaus halutaan luultavasti pitää hyvin herkkänä, vaikka olisi epätarkka, ja puolestaan vaikka rikostutkinnassa syyllisyyttä osoittavan testin tulisi olla riittävän tarkka virheellisen tuomion välttämiseksi.

mpni [13.01.2024 14:29:11]

#

Avaan ongelmaa vähän paremmin. Minulla on olemassa luokittelumalli, joka on virheherkkä satunnaisuudelle johtuen mallin rakenteesta. Tässä tapauksessa itse luokiteltava kohde on yhtä tärkeä eli olipa se nolla tai yksi. Todennäköisesti malli ennustaa nollan tai ykkösen jollakin todennäköisyydellä (esim. 70%, että tulos on nolla). Minulla ei ole kuitenkaan tätä todennäköisyystietoa käytettävissä.

Tarkoituksenani olisi pystyä kuvaamaan virheherkkyyttä jollain tilastollisella tunnusluvulla hyödyntämällä kaikkea matriisissa olevaa tietoa (toistettuja ennustustuloksia jokaiselle luokan nolla tai yksi jäsenelle). Mietin, että matriisin sensitiivisyys voisi olla oikea tapa ilmaista tämä satunnaisuuteen perustuva epävarmuus itse luokittelumallissa.

Hajonta matriisissa on huono tapa ilmaista epävarmuutta, koska vaihtelu on aivan liian suurta. Malli itsessään on toimiva, koska moodeihin perustuvat luokittelut antavat aineistolle yli 70% ennustustarkkuuksia.

Mutta joo, pitää vielä miettiä tuota tulosten raportointia.

Metabolix [13.01.2024 18:15:54]

#

Aika vaikea tuon selityksen perusteella saada kiinni, minkälaisen luvun tarvitset.

Oletan, että mallilla on jotain rivikohtaista syötettä, jolloin olisi mielekästä laskea mallin toimivuus kullakin rivillä. Tiedät oikeat tulokset, joten pystyt laskemaan jokaiselle riville, montako prosenttia rivin ennusteista on oikein. Voit laskea näistä todennäköisyyksistä keskiarvon ja vaikka sitten keskihajonnan tms. ihan tavallisen tilastoluvun. Luvut kuvaavat silloin sitä, mikä osuus (ja millä keskihajonnalla) ennusteista on oikein, kun tehdään 50 toistoa samoilla parametreilla.

Moodista puheen ollen, miten olet tulkinnut tasatilanteen? Jos 50 ennusteen moodin avulla saa 70% oikein, yksittäinen ennuste on merkittävästi huonompi (jopa alle 55 prosenttia, tarkka lukema riippuu tasatilanteen käsittelystä).

Esimerkiksi seuraava Python-koodi tuottaa 100 riviä dataa, joissa on 50 ennustetta, ykkösen todennäköisyys 0,547. Yksinkertaisuuden vuoksi nyt ykkönen on oikein ja nolla on väärin.

import random
for i in range(100):
    for j in range(50):
        print((random.random() < 0.547) | 0, end="\t")
    print()

Kun nämä avaa taulukkolaskentaan ja laskee joka riviltä oikeiden ennusteiden osuuden, tulee rivikohtaisia lukuja esim. väliltä 0,38–0,72, näiden keskiarvoksi esim. 0,5542 (kohtuullisen lähellä koodiin asetettua todennäköisyyttä 0,547) ja keskihajonnaksi esim. 0,0692. Näistä tuloksista voisi sitten sanoa, että kun mallilla tuotetaan samoilla parametreilla 50 ennustetta, näistä menee oikein keskimäärin 55,42 prosenttia, keskihajonta 6,92 prosenttiyksikköä. Yksittäisen ennusteen oikeellisuus esimerkkiotoksessa on tuo sama 55,42 prosenttia, mutta keskihajonta koko binääristen ennusteiden aineistosta on esim. 49,23 prosenttiyksikköä, ja tämän käytännön merkitystä onkin sitten vaikeampi käsittää.

Varmaan eri aloilla tai tilanteissa on erilaisia käytäntöjä, miten tällaista tietoa halutaan käsitellä, onko edes kiinnostusta yksittäisen ennusteen virheen arviointiin vai olisiko mielekkäämpää esimerkiksi taulukoida, monenko ennusteen moodilla saadaan mitenkin todennäköisesti oikea tulos.

mpni [13.01.2024 23:57:36]

#

Metabolix kirjoitti:

Oletan, että mallilla on jotain rivikohtaista syötettä, jolloin olisi mielekästä laskea mallin toimivuus kullakin rivillä. Tiedät oikeat tulokset, joten pystyt laskemaan jokaiselle riville, montako prosenttia rivin ennusteista on oikein. Voit laskea näistä todennäköisyyksistä keskiarvon ja vaikka sitten keskihajonnan tms. ihan tavallisen tilastoluvun. Luvut kuvaavat silloin sitä, mikä osuus (ja millä keskihajonnalla) ennusteista on oikein, kun tehdään 50 toistoa samoilla parametreilla.

Näin se kannattaa ehdottomasti tehdä ilman enempää matemaattista tietämystä. Täytyy vain selittää, että hajonta perustuu toistojen keskiarvoihin.

Metabolix kirjoitti:

Moodista puheen ollen, miten olet tulkinnut tasatilanteen? Jos 50 ennusteen moodin avulla saa 70% oikein, yksittäinen ennuste on merkittävästi huonompi (jopa alle 55 prosenttia, tarkka lukema riippuu tasatilanteen käsittelystä).

Toistoja on oikeasti pariton määrä. Heitin huonosti esimerkkinä parillisen tilanteen.

Kiitos avusta!

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta