DŮLEŽITÉ UPOZORNĚNÍ!
Policie České republiky se zajímá o IP-adresy osob, které komentují tento blog. Ve vlastním zájmu zde proto nic nepopírejte, nezpochybňujte, neschvalujte, neospravedlňujte, nikoho a nic nehanobte, nepodporujte a nepropagujte, a pokud se přesto rozhodnete komentář přidat, pak se, prosím, ničemu nedivte.
Aktuálně: Výnos sbírky pro Vlastimila Pechance dosáhl ke dni 6. 10. 2016 částky 59 416 Kč.
Výtěžek prvního benefičního koncertu, který se uskutečnil dne 12. 3. 2016, činil 13 500 Kč.

sobota 15. prosince 2012

Python pro dnešní večer

Ve svém článku na Jiném právu si Jan Petrov klade otázku, jakým způsobem mohlo přetřídění petičních archů pro presidentskou volbu, vesměs po stovkách, ovlivnit výsledky. Odpovědět na ni neumí, a zcela exaktně to nedokážeme ani my, avšak protože máme k disposici poměrně velký objem authentických dat, dokážeme si takovou situaci s relativně vysokým stupněm věrohodnosti namodelovat.

Na rozcvičení si zkusíme prohlédnout výsledky kontroly v případě, že by přetřídění bylo náhodné.

K tomu potřebujeme namodelovat sadu petičních archů, které co nejlépe odpovídají té reálné, o níž jsou naše vědomosti neúplné. Na vychytávky jako Poissonovo rozdělení raději hned zapomeňme, chyby na arších jsou všechno, jen ne nekorelované.

Z ministerských rozhodnutí a ze sekvencí, které jsme obdrželi, známe polohy všech neúplných podpisů, vyřazených v prvním kole (v programu jim budeme říkat tvrdé chyby), a u obou vzorků rovněž polohy podpisů, vyřazených ve druhém kole (měkké chyby). Od měkkých chyb budeme lišit ještě duplicity, s nimiž budeme při modelování zacházet odlišně.

Nejprve si opravíme několik drobných chyb v databasi a vygenerujeme z ní soubor error1.csv, obsahující záznamy z rozhodnutí, v pořadí vzorek, čárový kod, číslo řádku, a 0/1 podle toho, jde-li o duplicitu. Je-li vzorek nulový, jde o tvrdou chybu, jinak je zachycena chyba měkká.

S tím se můžeme pustit do modelování. Celý program je zde, komentovat budu pouze jeho zajímavé části.

Petiční archy budeme representovat objekty třídy Sheet. Rekonstruujeme si jen ty archy, které byly v některém vzorku. O nich víme vše, s výjimkou toho, kolik podpisů obsahují. Známe nejvyšší číslo řádku, na němž byla chyba (tvrdá nebo měkká), ale ne, kolik dalších bezchybných podpisů se na archu nachází.

Nejrozumnější, co můžeme udělat, je vzít celkový počet přebytečných podpisů a archům je náhodně přidělit tak, aby vzorky měly každý 8 500 podpisů. To provedeme takto:
Na řádku 54 inicialisujeme generátor pseudonáhodných čísel, aby výsledky byly reprodukovatelné. Zajímavý je rovněž řádek 64, kde odstraňujeme poslední archy z obou vzorků. Důvodem je, že u nich nám rozhodnutí nedávají kompletní informaci o chybách, a i když by to představovalo jen drobnou nepřesnost, můžeme se jí snadno vyvarovat tím, že s posledními, neúplně ověřenými archy ve vzorku pracovat nebudeme.

Základem našeho modelu je představa, že se celý soubor petičních archů skládá z archů se stejnou strukturou chyb, jako mají tyto rekonstruované. Z nich budeme archy náhodně vybírat a vytvářet si tak vzorky, které by mohly být ze souboru náhodně vybrány. Vždy vypočítáme, jak by výběr pro kandidáta dopadl. A abychom i zde redukovali problém posledního archu, nepoužijeme pro dělení 8 500, nýbrž skutečný počet podpisů na vybraných arších.

Abychom měli co nejbohatší základní soubor archů, použijeme i duplicity, avšak pro dosažení co nejvyšší přesnosti budeme započítaný počet duplicit korigovat (v prvém vzorku koeficientem 0,5, ve druhém 1,5).
Výsledek výpočtu je zde. Provedli jsme 25 pokusů a vidíme, že rozdíly jsou ve stovkách podpisů, nikoli v tisících, které by Vladimír Dlouhý i Tomio Okamura potřebovali (a nedostaneme se u nich na 50 000, jak jsem ověřil, ani v případě deseti tisíc iterací).

Tudy zjevně cesta nevede…

Naše třídění ovšem nemusí být náhodné; postačí, bude-li se tak tvářit.

Namodelujme si takovou situaci (program).

Začneme podobně jako v předchozím případě, ale vytvořenými petičními archy vyplníme skutečný seznam, který budeme zdánlivě nahodile, po stovkách, přetřiďovat, sledujíce při tom, zda se nám podaří se s výsledkem pohnout víc než při nahodilém třídění.

Nejprve si namícháme počáteční, skutečně pseudonáhodné uspořádání:
Poté budeme pseudonáhodně přehazovat jednotlivé stovkové fragmenty, avšak permutaci přijmeme pouze tehdy, pokud vedla k pohybu žádoucím směrem:
A hle, co nám program ukázal v případě Tomio Okamury. Stačílo dvacet iterací, a jsme tam, kde jsme potřebovali být, aniž by byla naše manipulace komukoli patrná! U Vladimíra Dlouhého je potřeba o pět iterací víc, ale i tam je sestavení vhodné sekvence otázkou několika sekund. Pokud budeme trpěliví a vydržíme čekat několik minut (rychlost výpočtu se s klesající pravděpodobností positivní změny snižuje), dostaneme u T. Okamury téměř 53 000 podpisů a u V. Dlouhého 52 000.

Jistěže by šlo algorithmus obrátit a Vp naopak podle, jak říká Okamura, politické objednávky, snižovat.

Ačkoli jsme se pohybovali spíš na úrovni proof of concept, výsledek je zcela přesvědčivý, a je jím plně odůvodněn závěr, že zdánlivě nahodilé přetřídění petičních archů po stovkách umožňuje manipulaci s výsledky takovou měrou, že výsledný počet platných a ověřených podpisů může variovat ve velmi širokém rozpětí; tímto způsobem lze, bez risika prozrazení, ovlivnit, který z kandidátů bude registrován a který odmítnut.

Zda jde o podvod, stále bezpečně nevíme, nicméně jsme nuceni konstatovat, že to, co Henychovi lidé provedli, jako podvod čím dál víc vypadá. Jak že to napsali soudci Nejvyššího správního soudu? Transparentní a podrobně zdokumentovaný postup odpůrce! Jako vtip skutečně zdařilé…

14 komentářů:

  1. Výborná práce!

    JM.

    OdpovědětVymazat
  2. Není tohle už na TO?

    Yossi

    OdpovědětVymazat
    Odpovědi
    1. Pokud si myslíte, že jste schopen vysvětlit OČTŘ, jak funguje komprehense, tak do toho :-)

      Vymazat
    2. Včera se Okamura vyjádřil, jako by nějaké oznámení podal.

      Vymazat
  3. Také bych řekl, že by to stálo za podnět orgánům činným v trestním řízení. I když po pravdě, kdo z nás těm vzorcům a výpočtům skutečně rozumí, a ještě bychom to chtěli po vyšetřovateli a státním zástupci?

    OdpovědětVymazat
  4. Dobrý den,
    pokud by náhodou ve druhém kontrolním vzorku byla potom chybovost menší než 3%, potom by se uplatnila věta z odstavce č.6 -
    "Zjistí-li Ministerstvo vnitra, že druhý kontrolní vzorek vykazuje chybovost u méně než 3 % občanů podepsaných na petici, nezapočítá Ministerstvo vnitra občany z obou kontrolních vzorků ...."
    Tzn. že by se poté odečetlo všech 17000 hlasů? Toho si nikdo nevšiml?

    OdpovědětVymazat
    Odpovědi
    1. Ale všiml: https://twitter.com/v6ak/status/272366676060815360 :)

      Navíc je otázka, jestli se druhý vzorek nemá počítat jako (počet chyb) / (podpisů na petici celkem). Ale to by mohlo uškodit dalším kandidátům.

      Vymazat
  5. Nedalo by se statisticky namodelovat, jak by (bez jakýchkoliv manipulací) mohlo dopadnout ověřování jednotlivých podpisů, namísto archů? Jak je to koneckonců napsáno v zákonu?

    OdpovědětVymazat
    Odpovědi
    1. To je zajímavá otázka. Protože clustery, po kterých se vybírá, jsou relativně velmi malé v porovnání s velikostí vzorku, usuzuji, že by se výběrem podpisů místo celých archů poněkud snížil rozptyl, střední hodnota by zůstala beze změny.

      Vymazat
    2. Jde o to, že ověřování jednotlivých podpisů by mohlo aspoň částečně eliminovat to, že někdo do výběru manipulativně nad rámec náhodného výběru, zařadil celé archy se 100% vadných podpisů. Mluvil o tom (že tam jsou) Šimíček v televizi. Dokonce je asi uvádí přímo i v tom usnesení. Jak jinak, než takovouto manipulací, lze vysvětlit tak velký rozdíl v chybovosti dvou vzorků u Okamury? Duplicit měl minimálně.

      Vymazat
    3. Pokud by se použil výběr po podpisech a ne po arších, výsledek by jistě lépe odpovídal skutečnému stavu souboru, o tom není pochyb. Na druhou stranu by ani takový výběr možnost manipulace zcela nevyloučil: Henych by kupř. mohl "náhodně po stovkách" přerovnat i podpisy.

      Vymazat
  6. Dobrý den. Velmi si vážím Vaší práce (no možná spíše koníčku), jen bych rád upozornil na několik vad které to celé shazují na úroveň boje s větrnými mlýny.

    Sám jste správně zmínil, že OČTŘ je fakticky nemožné o tom přesvědčit. Kdo z nich na střední pochopil alespoň základy statistiky? Nemluvě o tom, že leta ji nepoužívali a už si nepamatují asi vůbec nic...

    Právník který bude chtít obhájit stát si vyžádá expertýzu slabých míst a hned je má. Sám si to evidentně uvědomujete. Cituji:
    * Na "vychytávky" jako Poissonovo rozdělení raději hned zapomeňme, chyby na arších jsou všechno, jen ne nekorelované.
    * Základem našeho modelu je představa, že se celý soubor petičních archů skládá z archů se stejnou strukturou chyb, jako mají tyto rekonstruované.
    Jinými slovy, archy mohou vypadat doslova jakkoli a tvrzení proti může klidně i znít: stát to přerovnal tak, aby jim co nejvíce pomohl. Dokud se skutečně nepřekontroluje vše, lze v tomto stavu tvrdit cokoli.

    Tentokrát je to první volba, dalo by se nad tím snad říci dětské nemoci a do příště to vychytají. Ale nevěřím. Poslaneckou sněmovnu a senát o tom nepřesvědčí již vůbec nic...


    Martin Prokš

    OdpovědětVymazat
    Odpovědi
    1. Důvodem, proč jsem sestavit a propočítal tento model, bylo odpovědět na otázku, zda mohlo přetřídění archů po stovkách významně ovlivnit výsledky. Odpověď byla jasné ano. Kdyby byla odpověď ne, mělo by to podstatně silnější konsekvence, ale to se nestalo.

      Zajisté máte pravdu, že model byl ovlivněn některými nutnými předpoklady, které nemusejí být v souladu s realitou, avšak tvrdím, že je to maximum, které lze v tuto chvíli učinit. Což na druhou stranu neznamená, že by nebylo možné získat další cenné údaje z jiných analys, např. ze statistického otestování vztahů mezi prvním a druhým vzorkem (objevila se tvrzení, že druhé vzorky obsahovaly staticky významně větší počet chyb než první, což by se dalo exaktně prověřit).

      Vymazat
  7. Vaše úvaha má zásadní nedostatek. Nejdříve se vybral vzorek a ten se následně zkoumal. Tudíž nemohlo dojít ke změně vzorku, když nám výsledek nevyhovuje.

    OdpovědětVymazat

Kursiva: <i>text</i>
Tučně (když už to musí být…): <b>text</b>
Odkaz: <a href = "http://adresa">název odkazu</a>, tedy <a href = ""></a>