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.

Rzeczywistość przerasta wyobrażenia

Przeczytałem ostatni wpis na blogu Blox i trochę mi wszystko opadło. Po kolei, rozwijając komentarz zamieszczony pod ww. wpisem:

Edge Rank

Ze swoim rzekomym 100k parametrów Edge Rank jest IMO niezłą klapą totalną porażką. Z tego co widzę u mnie na FB, cały algorytm sprowadza się do trzymaj usera przy kompie czyli jak zareagował, to dorzuć mu więcej tego samego. Bąbelkowanie ( dontbubble.us/ ) w najlepszym wydaniu. Mnie osobiście wkurza takie podejście, podobnie jak opisywane u Boniego (nie mogę znaleźć wpisu, znajdę to poprawię) bardzo podobne podejście przy reklamach. W skrócie: klient wpisał w wyszukiwarkę kasa fiskalna, to od tej pory pojawia mu się to cały czas w reklamach. Mimo, że kasę fiskalną kupił dwa tygodnie temu.

Bardzo kojarzy mi się to z wpadnięciem w jakieś ekstremum lokalne przy poszukiwaniu optimum z wykorzystaniem algorytmów genetycznych. Niby dobrze (zwł. lepiej, niż losowo), ale tak naprawdę bardzo niedobrze. Oczekiwałbym jednak jakiejś finezji typu skoro ktoś interesuje się X, to za chwilę zacznie Y. No i oczywiście algorytm wie, kiedy to za chwilę nastąpi. Albo skoro użytkownik czytał już N wpisów/czasu o X, to się nasycił. Tymczasem rozwiązań tego typu brak, zamiast tego bombardowanie do znudzenia tym samym.

Publikowanie wpisów o określonych porach

Gdy pisałem wpis o pięciu sposobach na poprawienie zarobków, to raczej się nabijałem, że ktoś będzie sobie zawracał tym głowę w kontekście bloga, ale właśnie w tym miejscu rzeczywistość przerasta wyobrażenia. Nie tylko temat kiedy publikować na Facebooku jest opisywany w wielu artykułach czy nawet FAQ, ale nawet istnieją serwisy (Sotrender), które za drobną opłatą typu 13 euro czy 49 zł miesięcznie zbadają tę aktywność u naszych fanów. Znaczy naszego profilu na FB.

Pomysł z dorzuceniem uwzględnienia prognozy pogody w opisany w linkowanym wyżej wpisie sposób nie wygląda już wcale na niedorzeczny. Przecież mamy dość dokładne dane dotyczące położenia geograficznego czytelników. Do tego historia pogody dla miast, prognoza pogody (dowolny serwis, masa tego…) i załatwione. Z moich obserwacji z pracy u ISP wynika, że korelacja między pogodą a wykorzystaniem internetu przez użytkowników końcowych jak najbardziej istnieje. Zresztą, daje się to zauważyć nawet na blogu. Niezbyt skomplikowane do napisania, zresztą.

W sumie mam Piwika, więc mógłbym się pobawić w wyciąganie danych dotyczących miejscowości użytkowników stamtąd… Plus prosta baza z pogodą (historia) i gotowe. Tylko niestety widzę, że darmowa wersja bazy GeoIP dla Polski ma skuteczność rozpoznawania dla miast na poziomie 26% dla przybliżenia 50 km i 32% dla 100 km. Trochę niska ta skuteczność… Komercyjna wersja ma odpowiednio 58% i 70% i wtedy może to mieć sens…

Facebook to nowe Google

Pamiętam, jak zupełnie niedawno jedyną wyrocznią w sprawach tego, co jest dobre a co jest złe w sieci było Google. Wszyscy patrzyli, co Google lubi, co promuje w wyszukiwaniach (ostatnio: wersje mobilne). Oczywiście na Google nadal ludzie patrzą, ale to co zobaczyłem odnośnie FB przypomniało mi o wpisie, gdzie pisałem, że Facebook to nowy internet. I faktycznie, ilość treści i narzędzi pomocniczych pozwala sądzić, że FB w dziedzinie social media jest już tym, czym Google w „reszcie sieci”.

Nawet nie to, że się tego wszystkiego nie spodziewałem, ale… już?