• Post author:

W artykule przedstawiam swoje podejście do detekcji komisji, w których z dużym prawdopodobieństwem podano nieprawdziwe wyniki. Opiera się ono na fakcie, że wyniki drugiej tury wyborów bardzo silnie korelują z wynikami pierwszej, uwzględniając przepływy głosów. Jeśli wyniki w danej komisji silnie odstają od tego wzorca, jest ona kwalifikowana jako anomalia.

Porównanie z wynikami pierwszej tury odbywa się na podstawie modelu regresji liniowej, przy pomocy którego możemy prognozować wyniki drugiej. Jeśli model jest wystarczająco dokładny (a tak jest w przypadku omawianego tutaj), duża różnica między prognozą a oficjalnie podanymi wynikami jest trudna do wyjaśnienia i istnieje duże prawdopodobieństwo, że podany wynik jest błędny.

Poza opisem proponowanego podejścia i wskazaniem podejrzanych komisji, w dalszej części artykułu porównuję uzyskane wyniki z rzeczywistymi błędami, które zostały potwierdzone dzięki ponownemu przeliczeniu głosów w 250 komisjach. Ponadto analizuję, jakie rodzaje nieprawidłowości jesteśmy w stanie wykryć przy pomocy takiego modelu, samemu wprowadzając fałszerstwa w wynikach wyborów z 2020 roku.

Najważniejsze cechy modelu

  1. Rozważam tylko komisje, w których w drugiej turze zagłosowało co najmniej 200 osób (oszustwa w mniejszych są raczej nie do wykrycia). Oprócz tego pominąłem komisje, w których nastąpił duży skok/spadek frekwencji (co najmniej 25 p.p.), liczby uprawnionych (25%) lub liczby głosujących (25%; to nie jest to samo, co różnica we frekwencji, bo liczba uprawnionych może się zmieniać). Jeśli w drugiej turze głosowały inne osoby niż w pierwszej, to różnice w wynikach mogą wynikać właśnie z tego.

  2. Sprawdzałem, jak model się zachowa, jeśli zmienię każdy z tych parametrów (na wypadek przyjęcia przeze mnie błędnych założeń). Na przykład minimalna liczba głosujących została zmieniona na 100, 500, łącznie z przypadkiem, gdy nie ograniczałem się w żaden sposób (również co do pozostałych parametrów). Oczywiście miało to wpływ na liczbę wskazanych komisji, ale nie na symetrię oraz tylko minimalny wpływ na współczynniki modelu. Liczba wskazanych komisji się zwiększyła, bo po poluzowaniu ograniczeń dopuszczam więcej takich, w których różnice między pierwszą a drugą drugą da się łatwo wyjaśnić (np. niewielką liczbą głosujących).

  3. Ograniczenia przyjęte w punkcie 1 praktycznie wyeliminowały komisje zagraniczne, znajdujące się w szpitalach, DPSach itp., natomiast wciąż zostało ich ok. 0,7%. Nie usuwałem ich, zakładając, że być może w nich też uda się wykryć anomalie, przyglądając się im bardziej szczegółowo (jeśli algorytm je wytypuje). Zrobiłem również analizę bez tych komisji, otrzymując bardzo podobne wyniki.

  4. Dopasowuję model regresji liniowej, w której zmienną zależną jest procent głosów oddanych na Trzaskowskiego w drugiej turze, a zamiennymi niezależnymi wyniki procentowe każdego z kandydatów w pierwszej turze (oprócz Nawrockiego, bo jest on liniowo zależny od pozostałych) oraz różnica we frekwencji (p.p.) i liczbie uprawnionych (%). Pominąłem różnicę w liczbie głosujących, bo wynika z pozostałych.

  5. Nie ma znaczenia, czy pominę wynik Nawrockiego, czy innego kandydata (zostało to sprawdzone). Ważne tylko, by nie był to ktoś, kto otrzymał bardzo mało głosów, bo wtedy pominięcie go nie zlikwiduje współliniowości. Dopasowałem też model, w której zmienną zależną był wynik Nawrockiego w drugiej turze, a nie Trzaskowskiego, i otrzymałem te same wyniki (ale to wynika z matematyki). W modelu uwzględniam różnicę we frekwencji i liczbie uprawnionych, gdyż część różnic można wyjaśnić właśnie tymi zmiennymi. Natomiast ich wpływ jest niewielki, w szczególności sprawdziłem, że pominięcie ich nie zmienia wyników.

  6. Współczynnik R^2 dla modelu wynosi 98,5%, średni błąd bezwzględny 1,5 p.p. (prognozując wyniki drugiej na podstawie pierwszej, mylimy się średnio jedynie o 1,5 p.p.). Czyli model jest bardzo dokładny i już ten fakt pokazuje, że – poza pewnymi bardzo wyszukanymi scenariuszami – nie mogło dojść do masowych fałszerstw (wtedy wyniki drugiej tury nie byłyby aż tak zgodne z pierwszą). Dodajmy, że nie ma możliwości, by model nadmiernie dopasował się do danych (to uniemożliwiłoby detekcję anomalii), bo jest bardzo mało elastyczny (regresja liniowa, 14 zmiennych niezależnych).

  7. Model bazuje na wynikach kandydatów, których nie ma w drugiej turze, więc w pewnym sensie szacuje przepływy głosów. Zakłada on jednak, że są one takie same w całej Polsce (np. w każdej gminie), co prawie na pewno nie jest prawdą. To powoduje, że część anomalii wykrytych przez taki model może dać się wyjaśnić przez inny przepływ głosów akurat w tym miejscu. Zbudowałem dodatkowy model, w którym dla każdego województwa przepływy mogły być inne (interakcja wszystkich zmiennych z województwem), ale wpływ na wyniki był minimalny. Schodzenie niżej, na poziom powiatów lub gmin, jest już problematyczne, bo bardzo mocno rośnie liczba parametrów, więc model może nadmiernie dopasować się do danych. Natomiast takie lokalne różnice można uwzględnić w błędzie losowym (autokorelacja przestrzenna) i wydaje się, że taki model byłby w tym problemie lepszy. Z drugiej strony, jeśli mielibyśmy do czynienia z lokalnymi fałszerstwami (dokonano ich w wielu komisjach, które są blisko), wtedy lepsze jest zaprezentowane tutaj podejście.

  8. Anomalie są wskazywane na podstawie reszt z modelu (studentyzowanych). Reszta dodatnia oznacza, że oficjalny wynik Trzaskowskiego jest większy niż prognozowany, a takim razie – jeśli jest to wynik pomyłki lub oszustwa – jest ona na jego korzyść. Jeśli reszta jest ujemna, potencjalna pomyłka lub oszustwo były na korzyść Nawrockiego. Ponieważ wiemy, jak takie reszty powinny się rozkładać (rozkład t-Studenta; przy założeniu poprawnej specyfikacji modelu), możemy dla każdej z nich policzyć p-wartość. W uproszczeniu, przy jej pomocy możemy określić komisje, którym wynik drugiej tury jest ekstremalnie mało prawdopodobny, porównując z wynikami pierwszej. Następnie jest stosowana korekta Benjamini-Hochberga i za anomalię traktuję tę obserwację (komisję), dla której p-wartość jest mniejsza od 0,05.

  9. Model nie wychwytuje wszystkich anomalii, ale tylko takie przypadki, w których wyniki drugiej tury w wystarczający sposób różnią się od pierwszej. W szczególności nie wykrywa sytuacji, w której oszustwa dokonano w obu turach (wystarczająco konsekwentnie). Oprócz tego niektóre anomalie mogą świadczyć o tym, że to w pierwszej turze popełnione błąd, nie w drugiej. W dalszej części artykułu analizuję, jak dużo nieprawidłowości jesteśmy w stanie wykryć przy pomocy takiego podejścia.

  10. Reszty z modelu mają rozkład symetryczny. Po usunięciu anomalii (tych, co do których możemy mieć dużą pewność, czyli 97 obserwacji), ich rozkład nie jest normalny, kurtoza jest większa (0,97). Może to wynikać z tego, że w pozostałych obserwacjach o dużych resztach wciąż kryje się wiele takich, które mogą być rezultatem pomyłki lub oszustwa — natomiast pewność co do tego jest mniejsza. Powody mogą być też inne, łącznie z takim, że liniowe przybliżenie zależności z wynikami pierwszej tury jest niewystarczające.

  11. Na podstawie modelu można wskazać ograniczoną liczbę anomalii, bo ostatecznie wszystkie reszty muszą się zerować, co między innymi wskazywałoby na pełną symetrię (podobna liczba anomalii na rzecz obu kandydatów). Natomiast nie ma żadnego powodu, żeby ta symetria wystąpiła, gdy analizujemy największe reszty. Ten temat zostanie omówiony niżej (“Co jesteśmy w stanie wykryć przy pomocy takiego modelu?”).

Współczynniki modelu

W tabeli współczynniki modelu, błąd standardowy, wynik testu t oraz p-wartość (prawie w każdym przypadku znacznie poniżej 0,001).

ZmiennaWspółczynnikSEtp
(Intercept)-6.010.139-43.260e+00
Bartoszewicz_10.390.03311.530e+00
Biejat_10.880.01182.580e+00
Braun_10.110.00617.610e+00
Hołownia_10.950.009110.720e+00
Jakubiak_10.210.0287.460e+00
Maciak_10.410.0498.270e+00
Mentzen_10.180.00444.990e+00
Senyszyn_10.920.02635.260e+00
Stanowski_10.620.02326.510e+00
Trzaskowski_11.150.002612.330e+00
Woch_10.240.0733.319e-04
Zandberg_10.990.007135.110e+00
Nupr_roznica0.170.00625.610e+00
Frekwencja_roznica-0.020.006-3.554e-04

Współczynniki przy poszczególnych kandydatach korelują z przepływami (ile procent osób, które zagłosowało na daną osobę, w drugiej turze zagłosowało na Trzaskowskiego), natomiast to nie są przepływy, ponieważ model nie ma natury przyczynowej. Tylko część osób głosujących w pierwszej turze zagłosowało też w drugiej, stąd takiego modelu nie da się zbudować przy pomocy regresji (jeśli liczba głosujących jest taka sama, mogły głosować te same osoby, ale równie dobrze 10 osób mogło nie przyjść, a zamiast nich przyszło 10 nowych). Innymi słowy, jest to model jedynie prognostyczny. W szczególności wyraz wolny nie ma żadnej praktycznej interpretacji.

Wyniki

Poniżej 30 komisji z najniższą p-wartością. Reszta_s to reszta studentyzowana, przy pomocy której szukam danych odstających, Różnica_pp to różnica między oficjalnym wynikiem Trzaskowskiego a prognozowanym.

GminaKomisjaReszta_sp-wartośćRóżnica_pp
gm. Magnuszew120.355.92e-8742.23
m. Kraków95-16.961.00e-59-35.26
gm. Strzelce Opolskie9-16.791.72e-58-34.92
gm. Bychawa412.672.84e-3226.42
gm. Staszów412.473.46e-3126.01
m. Tychy35-12.274.30e-30-25.59
m. Mińsk Mazowiecki13-12.171.47e-29-25.38
gm. Olesno3-12.142.16e-29-25.31
m. Łódź15711.103.69e-2423.16
m. Grudziądz25-10.581.13e-21-22.07
m. Gdańsk17-10.521.97e-21-21.96
gm. Sępopol410.444.66e-2121.79
gm. Brześć Kujawski4-8.477.06e-13-17.68
gm. Telatyn28.448.63e-1317.63
m. Ostrów Mazowiecka78.206.62e-1217.12
m. Bielsko-Biała30-7.752.42e-10-16.20
m. Grybów37.521.54e-0915.70
gm. Kłodawa8-7.122.89e-08-14.87
gm. Sadowie1-6.969.44e-08-14.53
m. Bielsko-Biała61-6.832.34e-07-14.27
m. Kobyłka12-6.724.88e-07-14.04
m. Kamienna Góra6-6.695.91e-07-13.98
gm. Rychwał56.601.08e-0613.80
gm. Stanin16.211.45e-0512.97
gm. Biszcza2-6.191.60e-05-12.94
m. Ciechocinek95.966.74e-0512.45
gm. Braniewo1-5.947.56e-05-12.42
gm. Choczewo55.947.83e-0512.40
gm. Barlinek85.861.20e-0412.26
gm. Skarszewy4-5.501.00e-03-11.50

W sumie 50 anomalii jest na korzyść Trzaskowskiego, 47 na korzyść Nawrockiego. Porównując wartości oficjalne z prognozowanymi (czyli zakładając, że w każdym przypadku doszło do nieprawidłowość i model wskazuje poprawny wynik), Trzaskowski stracił 1051 głosów.

Zastosowałem to podejście do innych wyborów prezydenckich: w 2020 roku (zmienna zależna to też wynik Trzaskowskiego) i 2015 (Komorowski). Model dla 2020 jest bardzo podobny: R^2 wynosi 98,8%, średni błąd bezwzględny 1,36 p.p. Zwraca 109 anomalii: 49 na korzyść Trzaskowskiego, 60 na korzyść Dudy (Trzaskowski stracił przez to 291 głosów).

Model dla 2015 roku jest słabszy, R^2 wynosi 96,4%, błąd bezwzględny 2,21 p.p. Zwraca 50 anomalii: 18 na korzyść Komorowskiego, 32 Dudy (Komorowski stracił przez to 868 głosów).

Walidacja

27 czerwca 2025 zostały opublikowane opinie biegłych (dr hab. Jacka Hamana i dr hab. Andrzeja Torója) w sprawie potencjalnych nieprawidłowości w wynikach wyborów. Przedstawiono w nich dwa inne modele detekcji anomalii. Następnie zarządzono ponowne przeliczenie głosów w 250 komisjach wskazanych jako najbardziej podejrzane przez model dr. hab. Jacka Hamana (zwany dalej modelem JH). Model ten jest prawie identyczny z zaproponowanym przeze mnie (główna różnica polega na nieodrzuceniu niewielkich komisji, tzn. brak warunku “co najmniej 200 głosów”). Daje to możliwość oceny poprawności opisanego w tym artykule podejścia.

Taka ocena oczywiście ma swoje ograniczenia, a główny problem to fakt, że przeliczono głosy nie w komisjach wskazanych przeze mnie, ale przez inny model. To uniemożliwia pełne sprawdzenie liczby prawdziwych i fałszywych wskazań.

Zacznijmy od tego, że z 250 ponownie przeliczonych komisji do jakichś nieprawidłowości doszło w 84. W 18 z nich były to pomyłki na poziomie jednego głosu, między innymi dotyczące kwalifikacji jako nieważny lub ważny. Takich przypadków nie traktuję jako “błędy”, w tym sensie, że nie mają one nic wspólnego ze wskazaniami modelu (nie da się ich wykryć), zdarzają się zawsze i nie mają praktycznie żadnego wpływu na ostateczny wynik (odsyłam do raportu z wyników wyborów do sejmików 2014).

W dwóch komisjach (Ostrów Mazowiecka i Łęczna) prawie na pewno prokuratura popełniła błąd, odwracając głosy. Zostały one wskazane jako te, w których najprawdopodobniej głosy oddane na jednego kandydata zostały przypisane drugiemu, a według raportu prokuratury było odwrotnie. Byłby to ekstremalny zbieg okoliczności i traktuję te wyniki jako błąd prokuratury, który poprawiam.

Podsumowując, błędy (poważne) odnotowano w 66 komisjach. Zamiana wszystkich głosów wystąpiła w 17 komisjach, w 48 jakaś część głosów oddanych na jednego kandydata została zaliczona jako głosy na drugiego, a w jednej komisji część głosów na jednego kandydat nie została uwzględniona w wyniku (wynik drugiego kandydata był poprawny z dokładnością do jednego głosu).

Poniżej najważniejsze statystyki dla mojego podejścia na podstawie wyników ponownego przeliczenia.

  • Z 97 komisji wskazanych komisji (korekta Benjamini-Hochberga dla poziomu istotności 0,05) ponownie przeliczonych zostało 75. W 46 z nich rzeczywiście wystąpiły błędy, w pozostałych 29 podane wyniki okazały się prawidłowe (z dokładnością do 1-3 głosów).

  • Przeoczyłem 17 komisji, w których wystąpiły błędy. W ośmiu z nich p-wartość z korektą B-H wyniosła 0,05-0,1, w kolejnych ośmiu 0,1-0,2 — czyli te komisje zostałyby wskazane przy bardziej liberalnym podejściu. P-wartość dla jednej z komisji (Otwock) wynosi 0,654, na dodatek bez żadnej korekty, a mimo to 25 głosów na jednego kandydata zostało zaliczonych drugiemu (pierwotnie Trzaskowski otrzymał 612 głosów, Nawrocki 637, a powinno być odwrotnie). Model JH również nie wykrył tego przypadku (czyli ponowne liczenie w tej komisji odbyło się na podstawie innych przesłanek). Analiza, jak dużo może być takich niewykrytych komisji z błędami, znajduje się w dalszej części artykułu.

  • Dzięki ograniczeniu się do komisji o liczbie głosów co najmniej 200 aż 117 komisji (z 250 przeliczonych) nie zostałoby niepotrzebnie wskazanych (wyniki fałszywie dodatnie). Natomiast przez to ograniczenie trzy komisje z błędami nie zostałyby wykryte (byłyby, gdyby zmniejszyć próg do 185).

Liczba błędów we wszystkich komisjach

Można się spodziewać, że w niektórych komisjach, w których nie dokonano ponownego przeliczenia, również wystąpiły błędy, ale były one zbyt małe, by je wykryć. Mogła też zdarzyć się sytuacja, że w danej komisji, gdyby podano poprawne wyniki, reszta z modelu byłaby np. ujemna (nawet na tyle, że zostałaby wykryta jako anomalia), ale przez błąd w liczeniu znak reszty się odwrócił — ale nie na tyle, by została wykryta.

Pytanie, czy jesteśmy w stanie oszacować liczbę komisji z błędami? Poniżej proponuję, jak można do tego podejść, bazując na modelu JH. Odtworzyłem go na podstawie opisu z opinii biegłego. Następnie dla każdej komisji obliczyłem standaryzowany błąd przewidywania, który posłużył do wskazania komisji w wysokim prawdopodobieństwem wystąpienia nieprawidłowości. Na podstawie wyników ponownego przeliczenia wyznaczyłem różnicę między podanym pierwotnie procentem głosów oddanych na Trzaskowskiego a rzeczywistym wynikiem. Na poniższym wykresie zależność między taką różnicą a błędem przewidywania (oś X odwrócona).

Typowane były komisje o błędzie powyżej 3, dlatego wykres urywa się w tym miejscu. Im mniejszy błąd, tym mniejsza różnica między podanym a prawdziwym wynikiem. Co więcej, zależność jest mniej więcej liniowa: niebieska linia to prosta regresji wyznaczona tylko dla przypadków, w których w danej komisji popełniono błąd. Jak widać, wielkość tych błędów w nieprzeliczonych komisjach powinna być niewielka (procentowo). Oprócz tego coraz więcej jest komisji, w których nie popełniono żadnego błędu (punkty na poziomie ).

Z drugiej strony, komisji z coraz mniejszym błędem przewidywania jest coraz więcej. Stąd, mimo że zmniejsza się prawdopodobieństwo wystąpienia błędu w liczeniu, liczba komisji z takimi błędami może się zwiększać. Na poniższym wykresie zaznaczono skumulowaną liczbę komisji z błędami (np. wartość 50 dla standaryzowanego błędu przewidywania 3,5 oznacza, że było 50 komisji o błędzie 3,5 lub większym). Na podstawie tempa wzrostu liczby komisji możemy oszacować, ile może ich w całej Polsce, czyli gdy błąd przewidywania wynosi 0.

Dopasowałem wielomian piątego stopnia i z wykresu można odczytać, że liczba komisji z błędami wynosi 270 (czyli ok. 200 więcej, niż policzono). Spodziewam się jednak, że w rzeczywistości od pewnej wartości błędu przewidywania tempo wzrostu liczby komisji powinno być wolniejsze, dlatego tę wartość 200 traktuję jak ekstremalne oszacowanie. Oprócz tego pamiętajmy, że mówimy już o niewielkich różnicach między podanym wynikiem a prawdziwym, co wynika z pierwszego wykresu (na tę liczbę 200 składają się głównie komisje w okolicach błędu prognozy równego 0, a dla nich taka różnica powinna być minimalna).

Trzeba też dodać, że analiza tyczy się tylko obwodów stałych (ok. 93% wszystkich) i jedynie tych, dla których szacowana przez model JH różnica między prognozą a podaną wartością wynosiła co najmniej 10 głosów (tzn. takie ograniczenie wprowadził autor modelu). Ten drugi warunek mniej więcej sprowadza się do pominięcia bardzo małych komisji.

Oprócz tego typu ekstrapolacji możemy dopasować model regresji logistycznej, w której prawdopodobieństwo popełnienia błędu przez komisję powiążemy ze standaryzowanym błędem przewidywania. Współczynnik AUC dla takiego modelu wynosi 0,72. Następnie wykorzystujemy go do prognozy popełnienia błędu w każdej komisji i sumujemy szacowane prawdopodobieństwa. Otrzymujemy oczekiwaną liczbę komisji z błędami, która wynosi 204.

Podsumowując, w części komisji, w których nie policzono ponownie głosów, najpewniej też popełniono błędy, ale po pierwsze niewielkie, po drugiej jest ich na tyle mało, że ich wpływ na ostateczny wyników wyborów powinien być minimalny.

Co jesteśmy w stanie wykryć przy pomocy takiego modelu?

Ważne pytanie, jakie warto zadać, to jakie są możliwości zaproponowanego podejścia. W szczególności, czy jeśli dokonano fałszerstw głównie na rzecz jednego kandydata (wtedy już raczej można mówić o fałszerstwach, bo pomyłki są zwykle symetryczne), to czy jesteśmy w stanie to wykryć?

Można to sprawdzić, samemu wprowadzając fałszerstwa (np. odwrócenie wyników), a następnie badając, czy da się je odnaleźć. Bazuję na wynikach wyborów z 2020 roku i w pierwszym kroku usuwam z danych 109 podejrzanych przypadków. Otrzymuję model, dla którego współczynnik R^2 wynosi 99,0%, błąd bezwzględny (MAE) 1,32. Zakładam, że w takich danych nie ma już nieprawidłowości, a następnie wprowadzam je sam.

Scenariusz 1

W pierwszym scenariuszu wylosowałem 100 komisji, w których Trzaskowski zdobył od 55 do 60% głosów, i zamieniam jego wynik z Dudą. Wprowadzam zatem asymetryczne fałszerstwo, tylko na korzyść jednego kandydata. Następnie stosuję zaproponowane przeze mnie podejście: dopasowuję model regresji i znajduję anomalie przy pomocy reszt i p-wartości, stosując korektę B-H dla dwóch progów: 0,05 i 0,1. W obu przypadkach znajduję wszystkie fałszerstwa i nie dostaję żadnego wyniku fałszywie dodatniego (co jednak jest naturalne, bo wcześniej usunąłem podejrzane przypadki właśnie przy pomocy tej korekty).

Wszystkich komisji, w których Trzaskowski otrzymał od 55 do 60% jest 2579, więc powyższą symulację można powtórzyć dla innych 100 wylosowanych komisji. Wykonuję 50 takich powtórzeń (oczywiście częściowo wylosowane komisje będą się pokrywać), dzięki czemu otrzymane wyniki będą pewniejsze. Dla progu 0,05 znajduję średnio 99,2% fałszerstw i 0 wyników fałszywie dodatnich, a dla progu 0,1 99,4% fałszerstw i 0,04% wyników fałszywie dodatnich (spośród wszystkich odkryć).

Rozważmy teraz bardziej ekstremalną sytuację, w której w 1000 takich komisji dokonano fałszerstw na korzyść Dudy. Przy pomocy progu 0,05 wykrywamy ich 79,8%, bez wyników fałszywie dodatnich (FP), a dla 0,1 wykrywamy 87,0%, również bez FP. Ten brak FP świadczy to o tym, że korekta B-H jest w tym przypadku konserwatywna.

Scenariusz 2

Rozpatrzmy teraz znacznie trudniejszą sytuację, w której do zamiany wyników doszło w przypadku, gdy Trzaskowski otrzymał od 53 do 55% (jest 1069 takich komisji). Mimo że fałszerstwa są niewielkie, dla progu 0,05 wykrywamy średnio 69,8% z nich (2,98% wyników FP), a dla progu 0,1 79,9% (38,5% FP). Warto dodać, że tego typu fałszerstwa mają mniejszy wpływ na ogólny wyników wyborów, więc niewykrycie ich ma mniejsze konsekwencje.

Rozszerzmy ten scenariusz na ekstremalną sytuację, w której tego typu fałszerstw dokonano w 5000 komisjach, w których Trzaskowski otrzymał co najmniej 50% głosów. W takim wypadku nie ma szans, żeby odnaleźć anomalie, bo nie mamy do czynienia z anomaliami, ale systematycznym oszustwem. Natomiast jesteśmy w stanie wykryć taką sytuację, analizując ogólne statystyki modelu: R^2 wynosi jedynie 61,8%, MAE 6,55. Oprócz tego problem jest bardzo dobrze widoczny w rozkładzie reszt. Poniżej wykres gęstości dla reszt ujemnych i dodatnich: silnie asymetryczny, z długim ogonem dla reszt ujemnych (fałszerstwa na korzyść Dudy).

Scenariusz 3

Tym razem wprowadzam inny rodzaj fałszerstwa: jednemu z kandydatów (Trzaskowskiemu) w 100 komisjach zabieram tylko część głosów (np. 5 p.p.) i przekazuję drugiemu (Dudzie). Oczywiście im większy będzie odsetek fałszywie przypisanych głosów, tym łatwiej powinniśmy go wykryć. Zmieniam ten parametr od 1 do 15 p.p. i na poniższych wykresach prezentuję procent odnalezionych fałszerstw oraz jaką część wszystkich odkryć stanowią wyniki fałszywie dodatnie. Są to średnie wartości z 50 symulacji dla każdego przypadku (wraz z błędami standardowymi).

Jak należało się spodziewać, zamiana paru procent głosów jest nie do wykrycia. Dopiero przy różnicy 6 p.p. i progu 0,1 odnajdujemy ok. 40% fałszerstw, choć połowa wszystkich wskazań to fałszywe odkrycia.

Na koniec przeanalizujemy jeszcze przypadek, gdy zamiana części głosów tyczy się jedynie 3 punktów procentowych. Nie jesteśmy w stanie wykryć takich komisji, z drugiej strony, patrząc w liczbach bezwzględnych, stanowi to co najwyżej kilkadziesiąt głosów na komisję. Można założyć, że aby takie fałszerstwo mogło mieć wpływ na końcowy wyniki, powinno zostać przeprowadzone w tysiącach komisji (oczywiście poza przypadkiem, gdy różnica między kandydatami jest bardzo mała).

Wprowadźmy takie fałszerstwa w 5000 komisji. Współczynnik R^2 dla modelu regresji wciąż jest bardzo wysoki (98,5%) i nie wskazuje na to, że coś jest nie tak. Wystarczy jednak zbadać rozkład reszt, na którym wyraźnie widać problem z symetrią.

Możemy też spojrzeć na procent potencjalnych nieprawidlowości na korzyść jednego z kandydatów, zmieniając próg detekcji. Symuluję 20 takich sytuacji (3 p.p., 5000 komisji), ale tym razem nie uśredniam wyników, ale pokazuję wszystkie — bo poza tym, że dana metoda powinna działać “średnio dobrze”, musimy mieć pewność, że zadziała w jednej konkretnej sytuacji.

Jak widać, wykresy są bardzo podobne i pokazują silną asymetrię: większość wykrytych anomalii na korzyść jednego kandydata.

Zbiór treningowy i testowy

Na koniec przedstawię jeszcze jedno podejście, które wydaje mi się interesujące. W podanym wyżej można mieć wątpliwości, czy jeśli do oszacowania parametrów modelu używamy danych, w których występują anomalie, to czy te parametry są wiarygodne. Od razu odpowiedzmy, że tak, co wynika głównie z tego, że takich odstających przypadków jest bardzo mało (a model, po zastosowaniu ograniczeń, był budowany na ponad 26 tysiącach obserwacji). Dodatkowo bazujemy na resztach studentyzowanych, które są liczone z pominięciem “podejrzanej” obserwacji.

Czasem stosuje się takie podejście, że obserwacje odstające usuwa się iteracyjnie, tzn. po usunięciu jednej (lub więcej) buduje się model od nowa. Problem z tym podejściem jest taki, że w pewnym sensie zaczynamy sztucznie zawyżać stopień dopasowania modelu (zaniżać błąd standardowy), bo usuwamy akurat te przypadki, które najbardziej mu przeszkadzają. To może skutkować nadmiarową liczbą odstających obserwacji w kolejnych iteracjach. Oprócz tego trzeba uważać, by model nie miał zbyt dużej liczby parametrów (nie był zbyt elastyczny), bo wtedy może nadmiernie dopasować się do danych – na tyle, że anomalie staną się dla niego “wyjaśnialne” (pozornie).

Dlatego możemy zastosować podejście, które jest typowe w uczeniu maszynowym. Losujemy połowę (lub inną proporcję) obserwacji, która staje się zbiorem treningowym, na którym budujemy model. Następnie używamy go na zbiorze testowym (pozostałe obserwacje) i tylko tam szukamy anomalii. W ten sposób nie wytypujemy wszystkich, ale wystarczająco dokładnie określimy ich liczbę oraz oszacujemy liczbę straconych głosów dla każdego z kandydatów: wystarczy obliczone wartości pomnożyć przez 2 (lub inną liczbę, gdy wybierzemy inny podział na zbiory).

Co nam to daje? Ponieważ model nie zna danych ze zbioru testowego, nie jest w stanie się do nich dopasować. Dzięki temu mamy znacznie więcej możliwości, jeśli chodzi o jego budowę. Możemy np. pogrupować komisje geograficznie i dorzucić taką informację do modelu jako interakcję. Zamiast regresji możemy skorzystać ze znacznie bardziej elastycznych, nieliniowych modeli. Innymi słowy, możemy przeprowadzić więcej eksperymentów, czego skutkiem będzie budowa modelu, który lepiej przybliża rzeczywiste zależności.

Następnie stosujemy taki model na drugiej połowie danych i szukamy anomalii przy pomocy reszt. Możemy podejść do tego bardziej liberalnie i zostawić nietypowe komisje (np. małe lub zagraniczne), które następnie odrzucimy po pogłębionej analizie. Na przykład, po zastosowaniu przeze mnie takiego podejścia dla wyborów z 2025 roku, została wytypowana komisja nr 3 w Ustroniu Morskim, w której Trzaskowski otrzymał znacznie mniej głosów, niż prognozował to model. Natomiast w tej komisji radykalnie zwiększyła się liczba uprawnionych: z 730 do 1441, co dobrze tłumaczy taki wynik. Oczywiście warto się w takich wypadkach zastanowić, czy sam wzrost liczby uprawnionych nie jest podejrzany, natomiast w tym przypadku najpewniej są to osoby będące na urlopie, które zostały dopisane do listy.

Podsumowanie

Przy pomocy zaproponowanego podejścia jesteśmy w stanie typować komisje, w których z dużym prawdopodobieństwem oficjalne wyniki są nieprawidłowe. Bazujemy przy tym na pewnym progu, który jest dostosowany do jakości modelu. Jeśli jest on dokładny, jesteśmy w stanie wykryć więcej anomalii (mamy większą pewność, że konkretna różnica między prognozą a oficjalnym wynikiem to nie jest kwestia przypadku, ale błędu lub oszustwa). To dostosowanie następuje automatycznie, wynika z teorii statystyki, dzięki czemu nasza ingerencja w ustalenie progu jest mocno ograniczona.

Wytypowano 97 anomalii: 50 anomalii na korzyść Trzaskowskiego, 47 na korzyść Nawrockiego. Porównując wartości oficjalne z prognozowanymi (czyli zakładając, że w każdym przypadku doszło do nieprawidłowość i model wskazuje poprawny wynik), Trzaskowski stracił 1051 głosów.

Referencje

Kod modelu wraz z najważniejszymi analizami jest dostępny w języku R, pod adresem https://github.com/pmszulc/anomalie_wyborcze.