Na kogo głosować czyli Latarnik Wyborczy DIY

W poprzednim wpisie pokazałem, czemu nie należy zbytnio sugerować się wynikami zwracanymi przez Latarnika Wyborczego. Postanowiłem zrobić własną wersję algorytmu, która będzie wolna od opisanych wad. Z różnych względów (zajęcia poza kompem, cisza wyborcza, która jest bez sensu i pewnie nie ma zastosowania, ale dmucham na zimne) zeszło mi więcej czasu z publikacją, niż planowałem, więc wypuszczam as is. Całość zajęła nie 45 minut, tylko bardziej 1,5h (bardziej myślenie, niż klepanie), po poprawkach błędów różnych.

Założenia

  • KISS
  • Brak odpowiedzi na pytanie jest traktowany tak samo jak neutralność w danej kwestii lub nie mam zdania.
  • Wynik jest wartością -100% do 100% (lub, w wersji drugie, bardziej zgodnej z LW 0-100%).
  • Waga pytania nie powoduje drastycznej zmiany wyniku

Rozwiązanie

Stwierdziłem, że tak naprawdę da się to sprowadzić do liczenia korelacji. Czyli nie programowanie, tylko arkusz kalkulacyjny. Zresztą łatwiej debugować błędy. Kwestię prostoty i neutralności łatwo osiągnąć przez przypisanie wartości -1 (nie), 0 (brak zdania), 1 (tak). Zarówno dla odpowiedzi kandydatów, jak i odpowiadających. Ciocia matematyka zapewni, że zwykły iloczyn użytkownika i kandydata da 1 dla zgodności, -1 dla wartości przeciwnych i 0, jeśli którakolwiek ze stron nie ma zdania.

Powstał wiec arkusz z czterema zakładkami

Odpowiedzi kandydatów

Przepisane żywcem z wyników zebranych i publikowanych przez Latarnika Wyborczego (prośba o sprawdzenie, przepisywanie do arkusza to nudna część i łatwo o pomyłkę, więc nie wykluczam błędów, choć starałem się wypełnić rzetelnie). Część stała, nie wymaga żadnej ingerencji.

Odpowiedzi i istotność

To jest część, którą tak naprawdę wypełnia użytkownik odpowiadając na pytania w Latarniku Wyborczym. Brzydka forma, bo nie o UI mi chodziło. Dla każdego pytania podawana jest odpowiedź [-1, 0, 1] oraz istotność (po prostu mnożnik, zakres tak naprawdę dowolny[1], intencją był zakres 0-2, przyjąłem zmianę o 20%, nie musi być równa dla wszystkich pytań). Pola wypełnione na żółto wypełnia użytkownik (w arkuszu wypełnione są przykładowymi, losowymi danymi).

Obliczenia wyników

Tu zaszyty jest algorytm. Prosty, bo po prostu jest to iloczyn uzyskanego wyniku (suma ilorazów wagi, odpowiedzi kandydata i użytkownika) i maksymalnej teoretycznej zgodności[1]. Część stała, nie wymaga ingerencji.

Wynik

Tu jest to, co użytkownik dostaje na koniec. Podaję w dwóch równoważnych wersjach, różnią się tak naprawdę tylko zakresem. Pierwszy to -100% (zdanie przeciwne do kandydata dla każdego pytania) do 100% (wszystkie odpowiedzi jak kandydat), 0% oznacza wynik neutralny. Drugi wariant to po prostu rzutowanie na 0-100%. 50% oznacza brak jakiejkolwiek zbieżności poglądów z kandydatem, 0% – poglądy dokładnie przeciwne, 100% – poglądy zupełnie zgodne. Mniej więcej odpowiednik tego, co jest teraz w Latarniku Wyborczym (dla neutralnej wagi pytań). Część stała, nie wymaga ingerencji.

Sposób użytkowania

Pobrać arkusz ze strony (format ods, działa w darmowym Libre Office), uruchomić. Przejść do arkusza Odpowiedzi i istotność, wypełnić żółte pola. Po wypełnieniu wynik odczytujemy w zakładce Wynik. Oczywiście całość jest open source, czyli każdy może wprowadzić swoje poprawki i modyfikacje. Oraz poszukać błędów, których nie wykluczam.

Uwagi proszę zgłaszać w komentarzach pod wpisem. Spam, także wyborczy AKA agitacja będzie tępiony.

[1] I tu, kończąc wpis, widzę pierwszy błąd mojego rozwiązania. Powinienem jeszcze przemnożyć odpowiedzi kandydatów przez mnożnik podany przez użytkownika, gdy liczę maksymalny wynik dla kandydata. Teraz możliwe jest uzyskanie wyniku ponad 100%, zwł. dla wyższych mnożników. Błąd znany, poprawka trywialna, ale nie chce mi się teraz tego robić, jak będzie zainteresowanie to poprawię.

Latarnik Wyborczy – nie ufaj wynikom

Już w najbliższy weekend wybory prezydenckie. Kampania z przyległościami w toku, tradycyjnie niewiele się dzieje merytorycznego, bardziej plebiscyt popularności kandydatów. Media się cieszą, bo „to ważne”. Ponieważ ludzie mało naprawdę (AKA dogłębnie) interesują się polityką, powstały narzędzie mające pomóc w wyborze kandydata. Chyba najpopularniejszy jest Latarnik Wyborczy.

Już 22 kwietnia VaGla na Twitterze pokazał coś, co mną wstrząsnęło. Dla nie mam zdania dla wszystkich kwestii system pokazuje kandydata. W twittnięciu jest napisane, że wynik mylący, bo B. Komorowski nie wziął udziału[1], ale zupełnie nie o to chodzi. Wyniki są mylące, bo traktują nie mam zdania kandydata i nie mam zdania ankietowanego jako zbieżność poglądów. To błąd, bo nie mam zdania nie wskazuje tylko brak stosunku do danej rzeczy, ale obejmuje także zupełną niewiedzę o jej istnieniu oraz totalnie inne rozwiązania.

Weźmy na przykład stwierdzenie (nie ma takiego w pytaniach LW i celowo takie biorę) podatek VAT powinien być obniżony. W tym momencie odpowiedź nie mam zdania obejmuje zarówno niewiedzę co to podatek VAT, zmianę zasad opodatkowania w ogóle (np. likwidacja VAT) jak i faktyczną obojętność.

Żeby sobie unaocznić jak fatalny jest algorytm Latarnika Wyborczego, proponuję spojrzeć na wyniki (dziś rano), gdzie dla wszystkich pytań jest nie mam zdania oraz kwestia mało ważna:

Latarnik Wyborczy nie mam zdania, mało ważne

To samo, tylko ze zmianą wagi kwestii na ważna:

Latarnik Wyborczy nie mam zdania, ważne

I wisienka na torcie. Wszędzie nie mam zdania, a kwestia bardzo ważna:

Latarnik Wyborczy nie mam zdania, bardzo ważne

Nie chodzi zatem o samą kwestię doboru pytań, choć tu oczywiście jest największe pole do wypaczenia wyników. Zakładam, że pytania są sensowne. Oczywiście ciężko jest zredukować całe spektrum poglądów kandydata do raptem 20 kwestii, ale taki urok tego typu ankiet.

Natomiast to, co się dzieje w algorytmie LW jest IMO co najmniej dziwne. Po pierwsze to, o czym pisałem wyżej. Nie mam zdania powoduje przewagę określonych kandydatów. Ja bym po prostu odrzucił te odpowiedzi i normalizował wagę pozostałych (najprostsze, nieidealne).

Po drugie, ustawienie bardzo ważne powoduje jak widać wypłaszczenie wykresu. To też słabość algorytmu, bo jeśli działa tak jak przypuszczam, to sprowadza się do przesunięcia wyniku. No i niska istotność danego pytania to spadek wprowadzenie mnożnika 0,5 dla zgodności, a wysoka istotność – wprowadzenie mnożnika 2. Czyli tak naprawdę zmiana istotności w górę jest bardziej znacząca, niż zmiana w dół. Może zamierzone, ale IMO bezpieczniej byłoby przesuwać o stałą wartość. Typu mało istotne pytanie to 75%, bardzo istotne – 125%. Czy tam 50% i 150%, odpowiednio, ale nie nagły boost do 200%…

Last but not least… Teoretycznie między mało ważne a ważne jest po prostu mnożnik, przynajmniej tak wygląda dla większości kandydatów. Ale już JKM w pierwszym ma 26%, w drugim 50% (podobnie jak ci kandydaci, którzy mieli w pierwszym 25%), natomiast w trzecim spada na 95%. Jako jedyny. Bug w algorytmie? A może cichy nerf JKM?

Pozytyw jest taki, że LW dostarcza gotowe odpowiedzi poszczególnych sztabów. Jeśli ktoś ma ochotę, to łatwo można przerzucić do tabeli i zrobić własną, niezależną, poprawioną wersję LW. Choćby w arkuszu kalkulacyjnym. Tymczasem nie sugerowałbym się zbytnio wynikami LW…

[1] Obecne wyniki są inne, bo 24. kwietnia Latarnik Wyborczy dodał odpowiedzi B. Komorowskiego.

UPDATE: Latarnik Wyborczy przyjął do wiadomości uwagi nt. algorytmu i wyjaśnia (może niezupełnie mnie to przekonuje, ale zapewne przyczyna jest trafnie wskazana, a moje niezrozumienie pewnie rozbija się o detale algorytum) z czego wynika różnica w przypadku JKM. Szczegóły w dyskusji na Twitterze.

UPDATE2: Siadłem i popełniłem własną wersję. Oparta o arkusz kalkulacyjny, brzydka (bez frontendu, bez odporności na błędy), ale algorytm wydaje się działać poprawnie. Czas realizacji (wliczając przeklepanie odpowiedzi kandydatów z LW, na co zeszła większość czasu – 45 min). Publikacja prawdopodobnie jutro.

Wybory – sytuacja, pomysły

Początkowo z wyborami było trochę śmiesznie (no dobrze, śmiech przez łzy), zrobiło się trochę strasznie (okupacja PKW, nie ma zgody na kwestionowanie wyników przez miłościwie nam panującego, wygrana PSL). Pojawiły się też głosy o konieczności stworzenia otwartego, wolnoźródłowego systemu i inicjatywy w tym temacie. Cieszy, bo oznacza, że to nie moje paranoje i pomysł ma sens.

Trochę na FB pisałem, ale to znika, więc dla pamięci (i szerszego grona). Do głowy przyszedł mi wariant minimum. Zaznaczam, że bazuje na starych procedurach ręcznych (ale cóż więcej trzeba?) i starych, sprawdzonych technologiach, choć korzystając z nowych warunków.

Wystarczyłoby, żeby komisje wysyłały proste tekstowe dokumenty o ustalonym formacie (formatkę, czyli odpowiednik protokołu powinny dostać wcześniej) przy pomocy emaila (stara sprawdzona technologia, dobrze się skalująca). W ramach ustalenia autentyczności i tajności[1] podpisanego/zaszyfrowanego GPG. Oczywiście członkowie komisji (a przynajmniej 2-3 z każdej komisji) musieli by mieć potwierdzone klucze, ale z tym nie ma problemu – i tak są na szkoleniu dla członków komisji. Maila każdy w dzisiejszych czasach ma (wystarczą 2-3 osoby z komisji, powtórzę) i wysłać umie. Czyli tak, wysyłali by wyniki podpisane GPG z dowolnych, nawet prywatnych, darmowych kont. Potwierdzenie dostarczenia jest opcjonalne (delivery notification), ale dostępne w programach pocztowych, czyli komisja wie, czy/kiedy protokół dotarł do serwera poczty PKW. Z nowoczesnych dodatków i zwiększania wiarygodności – można załączyć „skany” papierowego protokołu. Wystarczy smartfon z aparatem (znaczy: smartfon)…

Po stronie serwera email PKW nic specjalnego się nie dzieje. Jeśli chodzi o dalszą część serwerową, to program do liczenia łączy się do serwera poczty, odbiera maila, na podstawie tematu przypisuje do komisji (albo z treści formularza…). Następnie weryfikuje autentyczność podpisu GPG i w przypadku zgodności parsuje plik tekstowy.

Gdyby pliki były wysyłane w dokładnie określonym formacie, to całość jest do naklepania w Perlu w parę godzin. No ale pewnie nie będą, bo maile umożliwiają dość dużą dowolność formatu wysyłki pliku i co program, to wynalazki… (szczególne ukłony w stronę Microsoft). Można się bawić oczywiście w napisanie prostego klienta poczty dla komisji. Zaleta rozwiązania jest taka, że po wyborach PKW może udostępnić publicznie wyniki. Albo wręcz przeforwardować wyniki z danej komisji wszystkim zainteresowanym, którzy np. wcześniej zgłoszą takie zapotrzebowanie.

W kontekście wysokiego wyniku PSL i ponownie sporej ilości głosów nieważnych dla przypomnienia kawałek historii:

wybory 2010 głosy nieważne

Źródło: http://uczciwe-wybory.pl/analiza-glosow-niewaznych-wyborach-parlamentarnych-2005-2007-2011-samorzadowych-2010/

W odpowiedzi na to kolejny pomysł – kamery w komisjach i albo streaming online, albo przynajmniej rejestracja i udostępnienie obywatelom bezpośrednio po wyborach[2]. Jeśli jest podejrzenie fałszowania głosów przez członków komisji (a właśnie o dostawianiu krzyżyków mowa), to powinno to rozwiązać problem. Plus obowiązek przebywania głosów „na oczach kamer” od momentu wyjęcia ich z urny do czasu sporządzenia protokołu przez komisję.

W ten sposób obywatele mieliby możliwość prostego zweryfikowania wyborów ze swojej komisji i nadzorowania pracy (przypomnę, po zamknięciu lokali poza członkami komisji i mężami zaufania obywatele nie mają dostępu do lokali).

[1] Tajność wygląda na zbędną. Wysyłki są dokonywane już po zamknięciu lokali, więc nie ma potrzeby utajniać wyniku.

[2] Zdaję sobie sprawę, że danych jest sporo i nakłady na infrastrukturę (kamery plus streaming) nie są małe. Być może wystarczyłaby możliwość montowania kamer (z publicznym streamingiem) przez obywateli.