Sosiaalipummit

Yritän määritellä:

Sosiaalipummi on henkilö, joka elää toisten työn tuloksilla rahansiirtojen kautta näiden sitä tahtomatta.

“Pummi” tulee nimenomaan tuosta “tahtomatta” osasta, “sosiaali” viittaa yhteiskunnan maksamiin etuihin. Pelkkä pummi ei kuitenkaan taida tarkoittaa muiden kuin yhteiskunnan maksamilla tulonsiirroilla eläviä, vaikka siinäkin tapauksessa työt tekee joku muu.

Rakennetaan seuraavaksi jana jolla kulkiessa ainakin tukien määrä, hyväksyttävyys, tulonsiirrot ja tuottavuus muuttuvat:

– Sosiaalipummi

– Tulonsiirtojen saaja

– Osin tulonsiirroilla elävä

– Omillaan pärjäävä pienituloinen

– Keskituloinen jonkin verran asiantuntemusta vaativissa tehtävissä

– Isopalkkainen huippuasiantuntija, jolla omistuksia

– Johtaja jolla omistuksia

– Omaisuutensa hoidolla tulonsa saava sijoittaja

– Toisten hoitamalla omaisuudellaan elävä

Yksittäisten kohtien välillä voi ajatella olevan välimuotoja. Keskivaiheilla tehdään eniten tuottavaa työtä, kun taas päissä ohjaillaan muiden tekemää työtä. Keskellä voisivat sijaita vaikka sairaanhoitaja ja rakennusinsinööri. Tulojen voi helposti ajatella kasvavan kun siirrytään eteenpäin janalla, vaikka onhan toki ihan mahdollista omistaa juuri sen verran, että omistusten tuloilla juuri ja juuri elää.
Continue reading Sosiaalipummit

South Korean ferry accident

The way the South Korean ferry disaster is being handled in public is wrong. CNN reports that the South Korean President has stated that the “Actions of sunken ferry captain ‘akin to murder’”. Wrong, wrong, wrong.

What does she want to achieve? Revenge the dead on the captain and the crew? I can see how anger can be the reaction of those that have lost their loved ones, but does it have to be the reaction of the president? I would hazard a guess that contrary to the mental image I got from the president’s reported statement, there was no malice involved.

I can only imagine the sorrow felt by those close to the events. I claim to have an understanding of how South Koreans in general might feel, as a similar incident did occur here in Finland (see MS Estonia). What I can’t fathom is why is the press effectively asking the question “who is responsible?”, when they most definitely should be asking “why did this happen and how can the system be fixed?”.

An accident like this is almost certainly the result of several mistakes that should have been caught long before things got past the point where someone was in danger. The investigation needs to look past the mistakes that were made, it must find out why was it possible to make such mistakes.

Image 1. Emblem of KMST. According to its website: The balance scale symbolizes fair judgment. The navigating vessel depicts maritime safety, and blue waves represent clean and peaceful oceans

There seems to be a South Korean maritime accident investigation organisation that is actively investigating, for example here. It’s english name “Korea Maritime Safety Tribunal” does not have a good ring to it, but a quote from one of the investigation reports is right on the money:

“This investigation was conducted in conformity with the law to improve safety of shipping by investigating marine casualties and other incidents (Act on the Investigation and Inquiry into Marine Accidents). According to the said Act, the sole objective of this investigation is to prevent future accidents and malfunctions through the ascertainment of its causes and circumstances. This investigation does not serve to ascertain fault, liability or claims. This report should not be used in court proceedings or proceedings of the Maritime Board.”

This is the spirit in which the investigation must be approached. If blame is being dished out people will shut up and will not co-operate. Yet co-operation and change is what is needed to improve the system.

Rosatom

Ydinvoiman toimittamiseen ei riitä kyky rakentaa toimiva voimala, turvallisuus on pystyttävä osoittamaan. Kuvasta 1 on nähtävissä miksi Rosatom ei tähän voi pystyä. Korruptio on Venäjällä suhteellisen yleistä ja myös Rosatom on sille alttiina. Siksi ei ole mahdollista luottaa sen tai alihankintaketjun tuottamaan dokumentaatioon, osiin tai materiaaliin.

Corruption perseption indexKuva 1. Riittävä syy olla tilaamatta Ydinvoimalaa Rosatomilta. (wikipedia)

Ydinvoimaa, kuten mitä tahansa korkean turvallisuustason järjestelmää rakennettaessa ja suunniteltaessa merkittävä osa työpanoksesta ja kustannuksista muodostuu dokumentaatiosta ja laadunvarmistuksesta. Luistamalla näistä vaatimuksista voidaan samat osat tuottaa halvemmalla.  Korruptio puolestaan mahdollistaa väärennösten peittelyn ja heikkotasoisten osien toimittamisen. Ilmailussa väärennetyt osat ovat aiheuttaneet onnettomuuksia ja vaaratilanteita.

Rosatom (Rosatom State Atomic Energy Corporation) on Venäjän valtion hallitsema voittoa tavoittelematon yhtiö. Siksi Rosatom ei voimalatoimittajana ole kotimaassaan riippumattoman valvonnan kohteena. Tämä on omiaan heikentämään luottamusta sen toimintaan.

Koska suuren voimalan kauppasumma on merkittävä, se riittää yksinään syyksi käyttää painostusta päämäärien, kuten rakennusprojektin etenemisen, varmistamiseen. Venäjän valtio omistaa Rosatomin, joten poliittinen painostus on mahdollista mikäli törmätään samanlaisiin ongelmiin kuin Arevan fiaskossa. Historia näyttää Suomalaisten poliitikkojen olleen alttiita tuollaiselle painostukselle ja Venäjän olleen siihen kykenevä.

Säteilyturvakeskusta on käsittääkseni yleensä pidetty luotettavana viranomaisena ja lehtijutuista päätelty linja Teollisuuden voiman Olkiluoto 3 tapauksessa näyttää olleen tiukasti tehtävänkuvauksen mukainen, mikä entisestään lisää uskoa sen toimintaan. Toisaalta entisen pääjohtajan loikka mahdollisen tulevan toimittajan leipiin vaikuttaa omituiselta.

En laskisi sen varaan — koska tämän voimalakaupan kohdalla ei ole pakko —  että edes suomalainen virkahenkilö pystyy poliittisen painostuksen ja taloudellisen korruption oloissa säilyttämään puolueettomuutensa.

Ks myös Jakke Mäkelän kirjoittama jatkopohdinta: Rosatom 2

 

Tutkintaselostus Talvivaarasta

 

Tässä mennään jo metsään aika reippaasti. ….. Onnettomuustutkinan tehtävänä ei ole puuttua sen enempää kansalaisyhteiskunnan toimintaan kuin laittomiin savupommi-iskuihin.

Onnettomuustutkintakeskus julkaisi 2014-02-03 selostuksen (Y2012-03_Tutkintaselostus_Kommentit_porjo ***)Talvivaaran kaivoksen marraskuun 2012 ympäristöonnettomuuden tutkinnasta. Tapahtumat ovat osa samaa ketjua jota Jakke Mäkelä on tällä blogilla seurannut melko tarkoin.

OTKEsin selostukset ovat tyypillisesti laadukasta luettavaa, työ on nähdäkseni perusteellista, puolueetonta ja pyrkii aidosti tukemaan tapahtuneesta oppimista ja toiminnan kehittämistä. Otin lukiessa kuitenkin tarkoituksella kriittisen asenteen ja pyrin löytämään virheitä, epäjohdonmukaisuuksia, virhepäätelmiä, vääriä painotuksia ja sen sellaista. En ole muita raportteja lukenut samalla ajatuksella, joten raporttien välisistä laatueroista ei tämän perusteella voi paljoa päätellä.

Tehtävä ei ole ihan helppo, sen lisäksi etten omaa mitenkään erityisesti kaivosalan tai onettomuustutkinnan substanssiosaamista niin sitä helposti sortuu joko arvostelemaan tutkinnan kohdetta tai nipottamaan turhista. Jotain sanottavaa kuitenkin löytyi.

Taloudellisten seikkojen laiminlyönti

Suurimpana puutteena pidän taloudellisten seikkojen laiminlyöntiä vahinkojen ja erityisesti taustatietojen osalta. Tämän seurauksena johtopäätöksistä ja mahdollisesti suosituksista jää puuttumaan seikkoja joiden olisi siellä ehkä pitänyt olla.

Materiaalivahinkojen osalta mainitaan yhtiölle aiheutuneet kymmenien miljoonien kulut, mutta ympäristövahinkojen osalta tyydytään lähinnä luettelemaan päästöt. Vaikka ympäristövahinkojen osalta rahasummien arvioiminen ei ole helppoa eikä tarkkaa niin tyhjää parempaan olisi varmasti pystytty.

Onnettomuuden saastuttaman alueen ennallistamisen kulujen arviointi on yksi mahdollinen lähestymistapa. Toisaalta jos tilanne on sellainen jossa ennallistaminen on hyvin kallista, mutta tilanne palaa itsestään kohtuullisessa ajassa ihmisten ja luonnon kannalta normaaliksi, voitaisiin arvioida tilapäisistä käyttörajoituksista aiheutuvia kuluja.

Yksi mahdollisuus on arvioida alueella toimiville aiheutuvia kuluja. Tässäkin on omat hankaluutensa, esimerkiksi matkailulle aiheutuva imagohaitta on vaikeasti arvattavissa. Jonkinlaisia lukuja kuitenkin saisi vaikka selvittämällä alueen matkailuelinkeinon suuruuden ja vähentämällä siitä summamutikassa 5 %.

Arvioita varmasti tulkittaisiin väärin, mutta ilman mitään lukuja on onnettomuuden vakavuuden hahmottaminen on hyvin vaikeaa.

Vastaavasti kerrottaessa yhtiöstä jäävät taloudelliset seikat hyvin vähälle painoarvolle. Yhtiön liikevaihtoa tai kaivoksen arvoa ei mainita, eikä tämän louhoksen ilmeisesti aika marginaalista kannattavuutta tuoda esille. Tämä on selvä puute, jos oletetaan yritysten turvallisuuteen liittyvien panostusten riippuvan niiden kannattavuudesta.

Esimerkkinä vaillinaisesta käsittelystä sivulla 49:

Kaivosyhtiön varsinaiseen turvallisuusorganisaatioon
kuului syksyllä 2012 turvallisuuspäällikkö ja
työturvallisuuteen erikoistunut toimihenkilö.
Turvallisuuspäällikkö toimi lisäksi varahenkilönä
pelastustoimen päällikölle. … Osa arvioinneista tehtiin
kaivoksen sisäisenä työnä, ja osa teetettiin ulkopuolisilla
konsulteilla.

Arvailun varaan jää onko kaivoksella ollut riittävä tai edes asiallinen turvallisuusorganisaatio käytössään. Lisäksi konsultti sanan taakse voi kätkeytyä monenlaista toimintaa. Tieto henkilöstön määrästä (turvallisuusorganisaatiossa) työvuosina antaisi lukijalle mahdollisuuden ymmärtää ja verrata tilannetta muiden alojen käytäntöihin. Mikäli tähän olisi paneuduttu voitaisiin sen perusteella arvioida ainakin muiden kaivosten vastaavan toiminnan resurssointia.

Tähän onnettomuuteen liittyen on pidettävä selvänä että kipsisakka-altaan rakennetta on kustannusoptimoitu, on pyritty rakentamaan halvin mahdollinen allas joka on riittävän turvallinen. Koska todellisten riskien arvioiminen numeroiksi on aikuistenoikeasti vaikeaa liittyy päätöksentekoon inhimillinen komponentti. Kokemukseni perusteella päätöksenteko on tällöin varmasti riippuvainen yrityksen taloudellisesta tilanteesta. Asiaa olisi voitu avata vaikka hankkimalla asiantuntijaksi asiaan perehtynyt psykologi tai vastaava.

accimapKuva 1. Tutkinnasta muodostettu accimap. Talouteen ei viitata.

Myös ympäristölupa-asioissa tarvitut monet täydennykset voivat viitata riittämättömään resurssointiin yhtiön organisaatiossa. Vaikka taustalla saattaa olla virheellinen käsitys ympäristöriskien minimoimisen tärkeydestä niin tässäkin lienee taustalla tarve pitää kulut pieninä. Suhteet lupaviranomaisiin ovat kaivokselle tärkeät, niitä ei kannata pilata turhalla sähläämisellä.

Tutkimuksessa on valittu näkökulma jossa riittävä ja oikea viranomaisvalvonta takaa toiminnan turvallisuuden. Reaalimaailmassa törmätään kuitenkin tilanteeseen jossa riittävän turvallisuuden saavuttamiseksi viranomaisen on toistettava merkittävä osa turvallisuustyöstä joka yleensä mielletään toiminnanharjoittajan velvollisuudeksi. Talousnäkökulma antaisi yhden välineen arvioida yrityksen sisäistä toimintaa kohtuullisen pienin panostuksin.

Formaatti

Pdf-formaatti on helppo tuottaa, mutta se ei ole kovin helppo luettava. käytännössä tiivistelmästä huolimatta joutuu lukemaan koko selostuksen saadakseen hyvän käsityksen tapahtumista. Selostuksen vaikuttavuus voisi olla suurempi jos sen formaatti olisi joku toinen. Vähintään olisi syytä lisätä linkkejä jotka selventävät yksityiskohtia. Toiminnan viranomaisluonne voi tietysti rajoittaa esimerkiksi wikipedian käyttöä, mutta jokin muu kuin nykyinen linkkien täydellinen puuttuminen lienee optimi.

Muita huomioita

Joissakin kohdissa olisin halunnut tietää enemmän yksityiskohtia, esimerkiksi mikä oli kipsisakka-altaaseen varastoidun veden koostumus tai mikä on sopiva väli tarkkailla altaan vuotovesiä. Varsinkin kipsisakan olemus jäi hämäräksi.

Säteilyn osalta on pitkä alaviite vaikka todetaan ettei säteilyllä ollut merkittävää vaikutusta. Sen sijaan varsinaisten päästöjen haitallisuudesta tai niiden yhteisvaikutusten vaaroista ei juuri puhuta. Muutaman rivin olisi voinut uhrata, jotta lukijalle olisi syntynyt käsitys aiheutetusta vahingosta.

Vuotovesien virtaaman arvioiminen lienee vaikeahko tehtävä, siksi mittausmenetelmää olisi voinut arvioida ja antaa jonkinlaiset virherajat joiden sisällä todellinen vuoto suurella todennäköisyydellä oli. Erilaiset yksiköt eivät ole välttämättä kaikille lukijoille tuttuja joten niiden suhteen lyhyt selitys voisi olla paikallaan.

Selostuksessa kerrotaan Kainuun ympäristökeskuksen hyväksyneen altaan käyttöönoton mm. tarkastuskäyntien perusteella. Milloin ja millä resursseilla, mitä selvisi?

Yhtiöllä oli valmiussuunnitelmia, mutta ne eivät ilmeisesti kattaneet syntynyttä onnettomuutta. Viestinnän osalta selostuksessa kirjoitetaan:

Yhtiön tiedotusohjeet olivat suppeat, mutta niiden
mukaan tilanteen alkuvaiheessa tuli kirjata tapahtumat
ja havainnot tilanteesta välittömästi kellonaikojen tarkkuudella.
Lisäksi esimerkiksi automaatiojärjestelmistä neuvottiin
tallettamaan tietoja hälytyslistoista ja prosessikuvista.
Kipsisakka-altaan vuodon aikana yhtiössä ei tehty
ohjeiden mukaista kattavaa kirjaamista.

Käytännössä siis meni improvisoinniksi, miksi? Kysymys on mielenkiintoinen laajemminkin, sillä vastaus voi kertoa paitsi tämän yrityksen turvallisuuskulttuurista niin laajemmin myös inhimillisen toiminnan ja onnettomuustilanteiden varalle suunniteltujen toimintaohjeiden ristiriidasta.

Sivulla 27:

Kainuun ELY-keskusta kuormittivat lisäksi häiriöviestit, jotka
olivat omiaan vaikeuttamaan onnettomuustilanteen hoitamista.

En epäile etteivätkö tuntuneet asianosaisista häiriöviesteiltä. Onnettomuustutkinnan kannalta oikea näkökulma olisi ollut tarkastella viranomaisen viestiyhteyksien haavoittuvuutta.

Luontoaktivistien toiminta jatkui kaivosyhtiötä vastaan myös
vuodon jälkeen. Aktivistit tekivät savupommi-iskun yhtiön
pääkonttoriin 8.3.2013. Kaivosalueella pidettiin kestomielenosoituksia,
ja 24.4.2013 ympäristöjärjestöt antoivat yhteisen julkilausuman,
jossa ne vaativat kaivoksen sulkemista.

Tässä mennään jo metsään aika reippaasti. Sen lisäksi, että luontoaktivistit laidoista laitoihin niputetaan yhteen kasaan niin lainaamissani otteissa otetaan kantaa toiminnan hyväksyttävyyteen. Onnettomuustutkinan tehtävänä ei ole puuttua sen enempää kansalaisyhteiskunnan toimintaan kuin laittomiin savupommi-iskuihin.

Useita onnettomuustutkintaraportteja, muualtakin kuin suomesta, lukeneena minulle on jäänyt kuva että joskus näpäytetään sanomatta sitä suoraan (vahvennukset omiani):

Suomen ympäristökeskus kertoi uusien tutkimustulosten
osoittavan useiden haitallisten metallien pitoisuuksien
Lumijoessa nousseen eliöille myrkylliselle tasolle.
Tämän tiedotustilaisuuden tarpeellisuudesta
kaikki viranomaiset eivät olleet samaa mieltä,
koska asian nostaminen koettiin kansalaisten turhana
pelotteluna. Etenkin, kun uraanin pitoisuudet olivat
tasolla, josta ei aiheudu kansalaisille välitöntä terveyshaittaa.

ja

Ylä-Savon SOTE-kuntayhtymä oli antanut jo ennen
kipsisakka-altaan vuotoa, 28.6.2012 suosituksen, jonka
mukaan Sonkajärven kunnan alueella sijaitsevalla Nilsiän reitillä tulisi
käyttää sauna- ja pesuvetenä muuta kuin järvivettä.
Suositus perustui varovaisuusperiaatteeseen ja siinä
korostettiin, että kaivosyhtiön jätevesistä peräisin olevien
haitta-aineiden pitoisuudet ovat syvänteissä suurempia kuin
pintavedessä. Uimista tai kalojen syöntiä ei rajoitettu.

*** Kommentointi pdf-dokumenttiin on tehty Ubuntussa Okular ohjelman versiolla 0.17.5 riippuen käytetystä pdf-lukijasta kommentit saattavat näkyä väärin, oikein tai ei ollenkaan.

Viitenumeroiden virheistä

Jos tekee vähän kirjoitusvirheitä numeroita kirjoittaessa ei kannata tarkistaa viitenumeroa. Jos tekee paljon niin kannattaa tarkistaa pitkät.

Pedanttina minua on pitkään harmittanut laskujen viitenumeroiden tarkistusnumero järjestelmä. Ei niinkään sen määräytyminen kuin se ettei samassa yhteydessä kerrota asiaan liittyvistä riskeistä. Tarkistusnumeroita on nimittäin vain kymmenen joten satunnaisessa viitteessä on kymmenen prosentin mahdollisuus saada oikea numero. Siis jos arpoo kaikki viitenumeron numerot niin kerran kymmenestä se menee tarkastuksesta läpi. Homma tietysti perustuu siihen, että ihmiset yrittävät kirjoittaa viitenumeron oikein ja yksittäiset virheet jäävät kiinni varmasti.

Itse viitenumeron muodostaminen on yksinkertaista, kuten esim. täältä näkee. Viitenumeron numerot kerrotaan yksitellen numeroilla 7, 3, 1, 7, 3, 1,… Tulot summataan ja vähennetään tulos seuraavasta täydestä kymmenestä (10 => 0). Operaation seurauksena tarkistusnumerot jakautuvat tasaisesti:

Ensimmäinen: 0
Viimeinen: 9
[1 1 1 1 1 1 1 1 1 1]
Ensimmäinen: 10
Viimeinen: 99
[9 9 9 9 9 9 9 9 9 9]
Ensimmäinen: 100
Viimeinen: 999
[90 90 90 90 90 90 90 90 90 90]
Ensimmäinen: 1000
Viimeinen: 9999
[900 900 900 900 900 900 900 900 900 900]
Ensimmäinen: 10000
Viimeinen: 99999
[9000 9000 9000 9000 9000 9000 9000 9000 9000 9000]
Ensimmäinen: 100000
Viimeinen: 999999
[90000 90000 90000 90000 90000 90000 90000 90000 90000 90000]
Ensimmäinen: 1000000
Viimeinen: 9999999
[900000 900000 900000 900000 900000 900000 900000 900000 900000 900000]

Yllä laitoin koneen laskemaan tarkastussumman ensimmäiselle 1e7 luvulle ja pistin ylös mikä tarkistusnumero oli tuloksena.

Viitenumeron maksimi pituus on 19+1. Jos kirjoitusvirheen todennäköisyys on yhtä suuri jokaisen 19 merkin kohdalla, kasvaa todennäköisyys tarkistus systeemin pettämisestä viitenumeron pituuden mukana. Käyttäen itseäni koe-eläimenä arvoin 200 viiden numeron mittaista lukusarjaa ja kirjoitin numerot koneella kuten yleensä laskuja maksaessa.

VirhetestiKuva 0. Näkymä näppäilyvirheiden testaus ohjelmasta. “xx” rivit siirtävät luettavan ja kirjoitettavan niin kauas etten pystynyt niitä samanaikaisesti näkemään.

Jos tuntui että tein virheen korjasin, tarvittaessa katsomalla kirjoitettua numeroa. Muuten kirjoitin luvut katsomatta tulosta. Lopputuloksena olin jotakuinkin varma turhasta testistä sillä en uskonut tehneeni yhtään virhettä. Tein kuitenkin kahdeksan virhettä.

Jos oletetaan etten kuitenkaan kämmännyt kuin kerran numeroa kohti niin virheen todennäköisyys on vähintään Pv=0.008 yhden kirjoitetun numeron kohdalla. Käytin numeronäppistä ja virheet muilla menetelmillä voivat olla toisia, mutta tämä antanee ihan kohtuullisen arvion suuruusluokasta. Hyvin lyhyellä googlaamisella en löytänyt mitään hyvää lähdettä joten käytän myöhemmin tätä itse mittaamaani.

Virheiden todennäköisyys ei välttämättä ole täysin riippumaton aiemmin tehdyistä virheistä, esimerkiksi sellainen tilanne jossa kaksi virhettä syntyy peräkkäin merkkien vaihtaessa paikkaa voi olla kohtuullisen todennäköinen.

Yhden virheen tilanteessa virhe tulee aina havaituksi, mutta useamman virheen tilanteessa läpi menee noin kymmenen prosenttia virheellisistä viitenumeroista, kuva alla. Jostain syystä kahden virheen tilanteissa skriptin laskema läpimenoprosentti on jopa vähän korkeampi. Skriptin virheellisyyden todennäköisyys ei ole olematon. Usean virheen tapauksessa tulos vaikuttaa järkevältä: satunnaiselle luku sarjalle arvottu tarkistusnumero on 0.1 todennäköisyydellä se oikea.

nVirhettäKuva 1. Virhettä sataa arvonta kertaa kohti eri mittaisille viitenumeroille. Nollaan menevät viivat liittyvät viitenumeron pituuteen: neljä merkkiä pitkässä viitteessä ei voi olla viittä virhettä.

Tässä kohtaa kannattaa ripotella vähän suolaa, sillä todennäköisyyslaskenta ei ole vahvimpia puoliani. Yksinkertaistettuna todennäköisyys viitenumero jossa on enemmän kuin yksi virhe on yksi miinus ne tapaukset joissa virheitä ei ole ja ne joissa virheitä on vain yksi,

Pk=1-((1-Pv)n+n*(1-Pv)n-1*Pv)               (1)

missä Pv on todennäköisyys kirjoittaa merkki väärin, 1-Pv on todennäköisyys kirjoittaa se oikein, (1-Pv)n on todennäköisyys kirjoittaa n merkkiä oikein, (1-Pv)n-1*Pv on todennäköisyys kirjoitta n numeroa pitkässä viitenumerossa yksi merkki väärin, n kertaa edellinen ottaa huomioon mahdollisuuden kämmätä kerran jokaisen merkin kohdalla.

Yksinkertaistuksia ovat mm. edellä mainittu virheiden toisistaan riippumattomuus ja tarkastusnumeron virheettömyys sekä oletus että viitteeseen voi kirjoittaa useita virheitä sitä huomaamatta.

Enemmän kuin yksi virhe viitenumeron rungossa Pv=0_008Kuva 2. Todennäköisyys tehdä enemmän kuin yksi virhe viitenumeron pituuden mukaan, tehtäessä 8 virhettä tuhannessa.

Tarkistin tuloksen myös laskemalla skriptillä saman todennäköisyyden kuin kaavalla 1. Miljoonalla toistolla per viitenumeron pituus syntyi hyvä vastaavuus kuten kuvasta näkyy.

Matemaattisen ja tietoteknisen lähestymisen meriittejä pohtineille kerrottakoon kaavalla laskemiseen meneen noin 133 ms kun pitkällä skriptillä meni 864.17 ms, mikä on kuulemma suurin piirtein sama aika kuin se jonka vaimo on menettänyt elämästään tämän blogin kirjoittamiseen liittyvän ilakoinnin aiheuttaman mielipahan vuoksi.

Ihmisten kyky kirjoittaa oikein vaihtelee, joten jos oletetaan minut keskiverto oikein kirjoittajaksi numeroiden osalta (!) niin jotkut tekevät enemmän virheitä jolloin todennäköisyys useampi virheiseen viitenumeroon kasvaa. Kun 19 merkkiselle viitenumerolle Pv=0.008 tasolla noin yksi sadasta sisältää enemmän kuin yhden virheen niin Pv=0.015 tasolla niitä on jo enemmän kuin kolme sadasta.

Enemmän kuin yksi virhe viitenumeron rungossa Pv=0_015Kuva 3. Kuten kuva 2, mutta kirjoitusvirheen todennäköisyys Pv=0.015

Koska monivirheisistä viitenumeroista kuitenkin vain yksi kymmenestä menee tarkastuksessa läpi voidaan sanoa että minulla ja ehkä keskiverto näppäilijällä yksi pitkä viitenumero tuhannesta menee läpi. Siis, jos oletetaan kirjoittajan korjaavan kehotuksen jälkeen virheet täydellisesti.

Jos laskun maksaja ansaitsee 15 € tunnissa (netto) ja käyttää 19 numeroisen viitteen tarkastamiseen 10 sekuntia niin tuhannen viitteen tarkastaminen maksaa noin 40 €. Jos homman selvittäminen läpi menneen virheen jälkeen maksaa 50 €  ajassa ja viivästysmaksussa karhukirjeen johdosta niin näyttäisi olevan melkein sama kumman tekee. Jos epäilee Pv:nsä olevan isompi niin tarkastaminen alkaa nopeasti kannattamaan.

Käytetyt skriptit:

[sourcecode language=”python”]

import ViiteVirhe as VV
import numpy as np
import matplotlib.pyplot as plt
import pylab as P
import random

# testaa pitkien viitenumeroiden tarkastussumman jakaumaa
a=VV.TarkNumJak(19,10000000)
hist, bins=np.histogram(a)
width = 0.7 * (bins[1] – bins[0])
center = (bins[:-1] + bins[1:]) / 2
fig=plt.figure()
ax=fig.add_subplot(1,1,1)
k=np.mean(hist)
ax.bar(center, (hist-k)/1e6, align=’center’, width=width)
ax.set_title(‘Viitenumeron tarkastusnumeron (jakauma-minimi)/1e6, 10 M 19 numeroista’)
plt.show()

# Käy läpi lyhyempiä järjestyksessä
for i in range(7):
k=10**i
if k==1: k=0
print(‘Ensimmäinen: ‘ +str(k))
print(‘Viimeinen: ‘ + str(int(‘9’*(i+1))))
a=VV.TarkNumJak2(k,int(‘9’*(i+1))+1)
hist, bins=np.histogram(a)
print(hist)

r=random.SystemRandom()
S=”
oikein=0
vaarin=0
for i in range(200):
for k in range(5):
S=S+str(r.randint(0,9))
print(S)
for k in range(20):
print(‘xx’)
s=input(‘>>>> ‘)
if s==S:
oikein+=1
else:
vaarin+=1
S=”
print(‘Oikein ‘ + str(oikein))
print(‘Vaarin ‘ + str(vaarin))

# Läpi menevät, tarkistus summa aina oikein
import scipy as sc
TT=sc.zeros((19,19))
for i in range(1,20):
print(i)
for k in range(1,i+1):
for l in range(1000):
TT[i-1,k-1]+=VV.nErrorsCSC(i-1,k)
print(TT/1000)
fig=plt.figure()
ax=fig.add_subplot(1,1,1)
ax.plot([i+1 for i in range(19)],TT.T/1000) #[i+1 for i in range(19)],
ax.set_title(”)
plt.show()

# Virheellisen viitteen läpimenon todennäköisyys
import time
Pv=0.015
start_time=time.time()
M=np.zeros(18)
for i in range(2,20):
M[i-2]=VV.POfWrong(i,Pv)
print(‘Numeroita: ‘ + str(i)+ ‘ Todennäköisyys n virheitä >=2 : ‘ +
str(M[i-2]))
print(M)
print(‘Aikaa meni: ‘ + str(time.time()-start_time))

start_time=time.time()
MM=np.zeros(18)
N=1000000
for i in range(2,20):
MM[i-2]=VV.POfWrong2(i, Pv, N)
print(i)
print(MM)
print(‘Aikaa meni: ‘ + str(time.time()-start_time))
fig=plt.figure()
ax=fig.add_subplot(1,1,1)
ax.plot([i for i in range(2,20)],MM/N, ‘b+-‘,
label=’skripti’, markersize=10) #[i+1 for i in range(19)],
ax.plot([i for i in range(2,20)],M, ‘r-‘, label=’kaava (1)’) #[i+1 for i in range(19)],
legend = ax.legend(loc=’center’, shadow=True)
frame = legend.get_frame()
frame.set_facecolor(‘0.90’)
for label in legend.get_texts():
label.set_fontsize(‘large’)
for label in legend.get_lines():
label.set_linewidth(1.5)
ax.set_title(‘Ennemmän kuin yksi virhe viitenumeron rungossa (Pv=’ +
str(Pv)+ ‘)’)
ax.set_xlabel(‘Viitenumeron pituus’)
ax.set_ylabel(‘Todennäköisyys’)
ax.set_ylim(0.0001,.1)
ax.set_xlim(0,21)
ax.set_yscale(‘log’)
ax.grid(axis=’both’, which=’both’)
plt.show()

[/sourcecode]

Ja kutsutut funktiot:

[sourcecode language=”python”]
""" Arpoo viitenumeroita, laskee tarkistussumman ja tilastoi
virheiden korjattavuutta
"""

def TarkNumJak(pituus,kertoja):
import scipy as sc
import math as mt
import random

r=random.SystemRandom()
kerroin=sc.array([7,3,1,7,3,1,7,3,1,7,3,1,7,3,1,7,3,1,7,3,1,7,3,1])
TarkNum=sc.zeros(kertoja)
for k in range(kertoja):
TarkSum=0
## Viite=sc.zeros((19,1))
for i in range(pituus):
apu=r.randint(0,9)
## Viite[i]=apu
TarkSum+=apu*kerroin[i]
if mt.ceil(TarkSum/10)*10==TarkSum:
TarkSum+=10
TarkNum[k]=mt.ceil(TarkSum/10)*10-TarkSum
if TarkNum[k]==10:
TarkNum[k]=0
return TarkNum

def TarkNumJak2(Smallest,Largest):
""" Largest-1 is the largest number considered
"""
import scipy as sc
import math as mt
TarkSum=0
kerroin=sc.array([7,3,1,7,3,1,7,3,1,7,3,1,7,3,1,7,3,1,7,3,1,7,3,1])
TarkNum=sc.zeros((Largest,1))
for i in range(Smallest,Largest):
TarkSum=0
I=str(i)
for k in range(len(I)):
TarkSum+=int(I[k])*kerroin[k]
if mt.ceil(TarkSum/10)*10==TarkSum:
TarkSum+=10
TarkNum[i]=mt.ceil(TarkSum/10)*10-TarkSum
if TarkNum[i]==10:
TarkNum[i]=0
## print(TarkNum)
return TarkNum[Smallest:]

def nErrorsCSC(pituus, virheita):
""" n errors Check sum Always correct"""
import scipy as sc
import random
import math as mt

r=random.SystemRandom()
S=”
Se=”
V=[None]*(pituus+1)
for i in range(pituus+1):
V[i]=i
random.shuffle(V)
for k in range(pituus+1):
apu=r.randint(0,9)
S=S+str(apu)
Se=list(S)
if virheita>pituus+1:
virheita=pituus
for k in range(virheita):
apu2=r.randint(0,9)
while int(Se[V[k]])==apu2:
apu2=r.randint(0,9)
Se[V[k]]=str(apu2)
Se="".join(Se)
TarkSum=0
TarkSume=0
TarkNum=0
TarkNume=0
kerroin=sc.array([7,3,1,7,3,1,7,3,1,7,3,1,7,3,1,7,3,1,7,3,1,7,3,1])
for k in range(pituus+1):
TarkSum+=int(S[k])*kerroin[k]
TarkSume+=int(Se[k])*kerroin[k]
if mt.ceil(TarkSum/10)*10==TarkSum:
TarkSum+=10
TarkNum=mt.ceil(TarkSum/10)*10-TarkSum
if TarkNum==10:
TarkNum=0
if mt.ceil(TarkSume/10)*10==TarkSume:
TarkSume+=10
TarkNume=mt.ceil(TarkSume/10)*10-TarkSume
if TarkNume==10:
TarkNume=0

if TarkNum==TarkNume:
return 1
else:
return 0

def POfWrong(n, Pv):
a=1-((1-Pv)**n+n*(1-Pv)**(n-1)*Pv)
return(a)

def POfWrong2(n, Pv, N):
import random
r=random.SystemRandom()
v=0
for i in range(N):
V=0
for k in range(n):
if r.random()<=Pv:
V+=1
if V>1:
v+=1
return(v)

[/sourcecode]

Translate »