Þarftu að draga vinningshafa í lukkupotti, velja hvaða nemandi á að svara eða ákveða hver á að vaska upp? Þetta slembival fyrir Ísland velur af handahófi og af fyllstu sanngirni úr hvaða lista sem þú límir inn. Settu færslurnar þínar í reitinn „Atriði“ — eina í hverja línu, eða aðgreindar með kommum — stilltu hversu margar þú vilt með „Fjöldi“ og ýttu á „Búa til“. Listi þarf að minnsta kosti tvær færslur og tekur allt að 1000, og hver færsla getur verið allt að 200 stafir að lengd.
Hvert val fer fram beint í vafranum þínum með því að nota Web Crypto API (crypto.getRandomValues), sem gefur slembigildi með dulritunarfræðilegu öryggi frá undirliggjandi slembiferlum stýrikerfisins þíns. Listinn þinn er aldrei sendur á netþjón, aldrei skráður og við sjáum hann aldrei — og það skiptir meira máli hér en á mörgum öðrum kerfum, því það sem fólk límir inn er oft viðskiptavinalisti, bekkjarlisti eða nöfn samstarfsfélaga. Hnappurinn „Load from file“ tryggir það sama: vafrinn þinn les skrána og fyllir reitinn staðbundið, og engu er hlaðið upp á netið.
Stillingarnar eru hannaðar fyrir þá lista sem fólk notar raunverulega. „Skiljari“ er stilltur á „Sjálfvirkt“, sem gerir sjálft greinarmun á línubilum og kommum, þannig að listi sem er afritaður úr töflureikni, spjallskilaboðum eða skjali virkar án þess að breyta þurfi uppsetningunni. Læstu honum við „Ný lína“, „Komma“ eða „Bil“ þegar gögnin þín blanda saman sniðum — og athugaðu að „Bil“ er alltaf handvirk ákvörðun og aldrei sjálfvirk, vegna þess að færslur eins og full nöfn innihalda bil og ef þeim væri skipt sjálfkrafa myndi það skemma fleiri lista en það myndi laga. „Fjöldi“ ákveður hversu margar færslur á að draga, frá 1 til 100. Ertu að draga þrjá vinningshafa úr 200 þátttakendum? Límdu þátttakendurna inn, stilltu „Fjöldi“ á 3 og ýttu á „Búa til“. Tvær stillingar gilda aðeins þegar fjöldinn er 2 eða meira og eru óvirkar fram að því: „Engar endurtekningar“, sem ákveður hvort sama færsla geti verið dregin tvisvar, og „Úttakssnið“, sem ákveður hvernig valin atriði eru aðgreind — „Eitt í hverja línu“, „Aðgreint með bili“ eða „Aðgreint með kommu“.
Röð af hnöppum inni í reitnum „Atriði“ sér um breytingar sem þú myndir annars gera annars staðar. „Load from file“ dregur lista beint úr textaskrá eða CSV skrá. „Stokka“ endurraðar færslunum í reitnum, „Raða“ flokkar þær í stafrófsröð með tölum í eðlilegri röð (smellt aftur snýr röðinni við), og „Hreinsa“ tæmir reitinn. Hnappurinn „Fylla með sýnisgögnum“ setur inn stuttan dæmalista svo þú getir prófað slembivalið með einum smelli, á meðan „Stækka til að passa við efni“ teygir á reitnum til að sýna langan lista í heild sinni og „Minnka í sjálfgefna stærð“ fellir hann aftur saman. Fyrir neðan niðurstöðuna setur „Afrita allt“ öll valin atriði á klippiborðið þitt, „Vista í skrá“ vistar þau í tölvuna þína, og „Saga“ geymir síðustu 10 útdrætti í vafranum þínum, þannig að fyrri niðurstaða er aðeins einum smelli í burtu.
Hvernig er valið raunverulega gert? Þegar þú ýtir á „Búa til“, biður síðan vafrann um slembigildi í gegnum crypto.getRandomValues og notar þau til að velja staðsetningar í listanum þínum, í stað þess að fara í gegnum slembihermifall í JavaScript eins og Math.random(). Að breyta hráu 32 bita gildi í staðsetningu er þar sem mörg slembival fara hljóðlega úrskeiðis: að taka lokagildi deilingar með lengd listans er augljósa leiðin, en hún skekkir niðurstöðuna, því nema lengd listans gangi nákvæmlega upp í 2^32, þá koma færslur nálægt byrjun listans aðeins oftar upp en hinar. Sá galli kallast deilingarskekkja (modulo bias) og hann er mælanlegur fremur en fræðilegur. Þetta slembival hafnar í staðinn öllum gildum sem eru stærri en stærsta nákvæma margfeldi af lengd listans og dregur aftur — tækni sem kallast hafnarúrtak (rejection sampling). Það kostar nokkra auka útdrætti og tryggir nákvæmni í stað nálgunar. Staðsetning á listanum breytir engu: fyrsta færslan og sú síðasta hafa nákvæmlega sömu líkur í hverjum útdrætti.
„Engar endurtekningar“ skilur að tvær gerólíkar tegundir af útdrætti og tölfræðin hefur nafn yfir hvora um sig. Þegar kveikt er á því, stokkar slembivalið afrit af listanum þínum með Fisher-Yates reikniritinu og tekur færslurnar ofan af — rétt eins og að draga miða upp úr hatti án þess að setja þá aftur ofan í, svo enginn er valinn tvisvar og sérhver hópur af þeirri stærð er jafnlíklegur. Það kallast úrtak án skila (sampling without replacement), og það er það sem þú vilt fyrir vinningshafa, liðaskiptingu og röðun. Þegar slökkt er á því er hvert val gert óháð öllum listanum, svo sama færslan getur komið upp oftar en einu sinni — úrtak með skilum (sampling with replacement), sem er það sem þú vilt þegar allir geta enn verið dregnir í hverri umferð, eins og í endurteknum útdráttum eða við snöggt tölfræðilegt úrtak. Hvorug aðferðin er sanngjarnari en hin; þær svara ólíkum spurningum.
Sanngjarn útdráttur á ekki að líta út fyrir að vera sanngjarn. Dragðu fimm nöfn af tíu og þú munt reglulega sjá tvö nöfn sem stóðu hlið við hlið á upprunalega listanum, eða sama nafnið tvisvar í röð þegar endurtekningar eru leyfðar, og hvert og eitt af því er eðlilegt. Hver útdráttur er óháður öðrum: fyrri útdrættir hafa nákvæmlega engin áhrif á þá sem á eftir koma, og enginn á „inni“ vinning. Sú eðlisávísun sem segir okkur annað er rökvilla fjárhættuspilarans (gambler's fallacy), og það er sama eðlisávísun sem gerir okkur léleg í að velja af handahófi sjálf — ef okkur er gert að velja af handahófi, forðumst við fyrstu og síðustu færsluna, forðumst að endurtaka nafn og dreifum valinu mun jafnar en tilviljun myndi gera. Niðurstaða sem lítur grunsamlega snyrtilega út er fingrafar manneskju; raunveruleg tilviljun skapar þyrpingar.
Hvers vegna að velja þetta slembival?
- Keyrt eingöngu í vafra: listinn þinn er lesinn á tækinu þínu og aldrei sendur neitt
- Web Crypto API slembni: dulritunarfræðilega öruggt, ekki Math.random()
- Engin deilingarskekkja: hafnarúrtak tryggir að öll atriði eru jafnlíkleg
- Hvaða listasnið sem er: eitt í hverja línu, kommur eða bil, án þess að breyta uppsetningu
- „Engar endurtekningar“ hamur: dragðu vinningshafa eða lið án þess að nokkur sé valinn tvisvar
- Allt að 1000 færslur, og allt að 100 val í einum útdrætti
- Innbyggð verkfæri: lesa úr skrá, stokka, raða, hreinsa, sýnisgögn
- Saga og Vista í skrá: geymdu skráningu yfir útdrátt sem þú gætir þurft að sýna fram á
- Ótakmarkað og ókeypis: engin nýskráning, engar notkunartakmarkanir, ekkert á okkar netþjónum
Slembival er notað hvar sem ákvörðun þarf að þola gagnrýni. Á Íslandi velja kennarar nemendur án þess að gera upp á milli þeirra og skipta bekknum upp í hópa. Straumspilarar og markaðsfólk draga vinningshafa í gjafaleikjum og happdrættum fyrir framan áhorfendur sem verða að trúa niðurstöðunni. Stjórnendur úthluta verkefnum sem enginn býður sig fram í, og teymi ákveða kynningarröð eða hver er á bakvakt. Rannsakendur draga slembiúrtak færslna til endurskoðunar. Fjölskyldur binda enda á rifrildi um hvað eigi að horfa á, og soltinn hópur velur veitingastað. Sameiginlegi þráðurinn er val sem hver sem er getur útskýrt á eftir: útdrátturinn notar dulritunarfræðilega slembni, hann á sér stað að öllu leyti í tækinu þínu, og „Saga“ geymir niðurstöðuna ef einhver spyr út í hana síðar.
Þetta slembival hefur nokkrar eðlilegar takmarkanir sem vert er að vita af. Það getur ekki dregið fleiri ólíkar færslur en listinn þinn inniheldur — þrír vinningshafar þurfa að minnsta kosti þrjú nöfn — og það stoppar við 1000 færslur sem mega vera 200 stafir hver, með allt að 100 val í einum útdrætti. „Stokka“ og „Raða“ vinna línu fyrir línu, þannig að listi aðgreindur með kommu sem er límdur á eina línu er aðeins endurraðaður þegar honum hefur verið breytt í eina færslu á línu; og báðir hnapparnir endurraða í reitnum en ekki í sjálfum útdrættinum, sem er jafn sanngjarn sama í hvaða röð færslurnar þínar eru. Hver færsla hefur einnig nákvæmlega sama vægi að upplagi, þannig að ef eitt nafn á að gilda tvöfalt þarf það nafn að koma tvisvar fram á listanum. Innan þessara marka er tryggingin sterk — hver einasta færsla á listanum þínum hefur nákvæmlega sömu líkur, í hverjum einasta útdrætti.