You had one job

23 września 2024


Wśród memicznych obrazków krążących po internecie poczesne miejsce zajmują fotki z serii „you had one job” czyli „miałeś tę jedną rzecz do zrobienia”. Na fotkach widzimy spektakularne przykłady ludzkiej niekompetencji, np. schody, którymi wykonawca nie trafił w drzwi wejściowe, namalowany na jezdni przed skrzyżowaniem napis SOTP albo betonowy balkon przebity przez latarnię uliczną.

Te właśnie obrazki nasunęły mi się na myśl, gdy dostrzegłem jeden z ciekawszych błędów Systemu Losowego Przydziału Spraw. Panowie i panie, mieliście jedną rzecz do zrobienia. Wyznaczyć pulę nazwisk do losowania i dokonać losowania. Tylko tyle i aż tyle. A jak wyszło, zobaczymy poniżej.


Zdradliwa matematyka

Czasem w losowaniu sprawy bierze udział tylko dwójka sędziów. Dzieje się tak w małych wydziałach, ale może zdarzyć się gdziekolwiek, jeśli spiętrzeniu ulegną nieobecności lub wyłączenia ze sprawy.

Gdy w puli są tylko dwa nazwiska, uruchamiany jest specjalny mechanizm mający na celu balansowanie wyników losowań. Sędzia o mniejszym wskaźniku obciążenia pojawia się w puli dwukrotnie. Losowość zostaje zachowana, ale rozkład prawdopodobieństwa faworyzuje sędziego któremu należy przydzielić więcej spraw.

Jak wiemy z artykułu pt. „Koszt sprawy”, sędziowie pełniący niektóre funkcje mogą otrzymywać nawet 10x mniej spraw, niż „zwykły” sędzia. Odpowiada za to tzw. wskaźnik udziału w losowaniach. I tu pojawia się problem, bo w serii losowań dwuosobowych (z podwojonym nazwiskiem) największym możliwym do wyprodukowania niezbalansowaniem jest 33,3% do 66,6%. A potrzeba 9,1% do 90,9%.

Algorytm losowania zawiera więc dodatkowy przypadek szczególny - jeśli iloraz wskaźników udziału (nie wskaźnika obciążenia!) przekracza 2, zwielokrotnianiu ulega sędzia z większym wskaźnikiem udziału. Zależnie od wartości ilorazu, zwielokrotnienie może być nawet ośmiokrotne - z kontekstu wynika, że wraz z pierwotnym wpisem będzie to dziewięć wystąpień tego samego nazwiska na raporcie z losowania. Oto przykłady takich raportów:

tabele z losowaniami

Póki co wszystko wygląda dobrze. Losowań o takiej charakterystyce naliczyłem ponad 100 tysięcy, czyli ani dużo, ani mało. Gdy jednak przeglądałem zwielokrotnione raporty z roku 2022, coś rzuciło mi się w oczy.

tabele z losowaniami

Losowania miały być dokonywane spośród wszystkich dziesięciu pozycji, jednak operacja modulo na liczbie losowej obejmowała jedynie… pierwsze cztery pozycje. Zacząłem grzebać głębiej. Co się okazało?

WSZYSTKIE ZWIELOKROTNIONE LOSOWANIA Z ROKU 2022 UWZGLĘDNIAŁY TYLKO PIERWSZE 4 LOSOWANE POZYCJE!

Co mówi dokumentacja?

Zajrzyjmy po raz setny do dokumentu „Algorytm na podstawie dokumentacji analitycznej v.1.16.1”. Oszczędzę czytelnikom zrzutów ekranu, przejdziemy po krokach 15-18 na przykładzie naszego losowania z ilustracji powyżej. W dokumencie są to strony 18 i 19.

  • krok 15 - tworzymy listę sędziów biorących udział w losowaniu, mamy w niej dwóch sędziów
  • krok 16 - ustalamy rozmiar puli na 2
  • krok R17a - rozmiar puli na pewno rośnie do 10, z opisu nie wynika, czy lista sędziów ma być wzbogacona o ośmiu zwielokrotnionych, wirtualnych kandydatów
  • krok R17c - algorytm kroku R17c odwołuje się rekursywnie do algorytmu R17c, wszystkim czytelnikom przepełnia się stos
  • krok R18 - z listy dwóch lub dziesięciu sędziów bierzemy pierwszych dziesięciu sędziów, po czym dodajemy zwielokrotnionych wirtualnych kandydatów

Co można powiedzieć o takiej dokumentacji? Na pewno nie jest czytelna. Sprzeczność opisu z diagramem przepływu funkcji R17a wskazywałem w artykule „Jak SLPS wylicza wskaźniki obciążenia”. Wydaje się jednak, że - mimo doboru niejasnego słownictwa - sam sposób wyznaczania rozmiaru puli jest w porządku. Zepsuto implementację.

You had one job…

Gdy ktoś przyjrzy się losowaniom z ośmiokrotnym zwielokrotnieniem, to odkryje, że tabela z dziesięcioma wierszami ma jeden z zaledwie dwóch wariantów numeracji:

1, 2, 3, 4, 5, 6, 7, 8, 9, 10

albo

2, 3, 4, 5, 6, 7, 8, 9, 10, 1

Czemu tak? We artykule „O tym, dlaczego System Losowego Przydziału Spraw jest nieprzejrzysty i nierozliczalny” pokazałem, że wylosowana pozycja nie wskazuje wiersza w tabelce, lecz wartość z kolumny „Pozycja” - która zawczasu została już zrandomizowana w sposób pozostający zagadką. Okazuje się jednak - przy czym jest to obserwacja, niepodparta żadną teorią - że zwielokrotnione nazwisko zawsze tworzy spójny blok numeracji, więc nazwisko pojedyncze może dostać numer 1 albo 10.

Spójrzmy na ilustrację poniżej. Wygrać mogą tylko numery 1-4. Nazwiska zduplikowane zawsze są na początku tabeli, nazwisko pojedyncze - na końcu. Wszystkie możliwe warianty numeracji wraz z zaznaczonymi ramką miejscami potencjalnie wygrywającymi widzimy w tabeli.

tabele z losowaniami

Widzimy, że nazwisko pojedyncze to jedna z ośmiu możliwości wylosowania zwycięzcy, czyli zostanie trafione w 12,5% przypadków. Częściej, niż powinno - oczekiwalibyśmy rozkładu równomiernego dającego 10% szansy.

Mówiąc prościej - jeśli numeracja w tabeli idzie od 1 do 10, to zawsze wygrywa zwielokrotniony kandydat. Jeśli numery w tabelce startują od 2 i kończą się na 1, to zwielokrotniony kandydat wygrywa w 3/4 przypadków.

Jako ćwiczenie dla zainteresowanego czytelnika zostawiamy dowód, że prawidłowe prawdopodobieństwa otrzymamy dla „zwielokrotnionych” losowań dwuosobowych mających 4 i 8 wierszy w tabeli, zaś przy wariantach mających 5, 6, 7, 9 lub 10 wierszy wynik będzie nieprawidłowy.

Podsumowanie

W punktach:

  • w przypadku losowań dwuosobowych ze specjalnym zwielokrotnieniem wynikającym z dużej różnicy wskaźnika udziału w losowaniu, do puli losującej powinny trafić wszystkie zdublowane pozycje (np. w powyższych przykładach - wszystkie 10)
  • w rzeczywistości losowano pierwsze cztery pozycje
  • z powodu błędu programistycznego zamiast rozkładu prawdopodobieństwa dopasowanego do „krotności” zwielokrotnienia, sędzia występujący w tabeli w jednym wierszu ma zawsze 12,5% szans na wygraną
  • użycie sprzętowego generatora liczb losowych i obliczanie wartości modulo stanowi jedynie teatrzyk, który nie ma tu żadnego znaczenia

Błąd usunięto w wersji SLPS wdrożonej w marcu 2023. Dodajmy więc tylko w charakterze wisienki na torcie, że kombinacja dwóch sędziów mających wskaźniki udziału wynoszące 10% i 100% powinna skutkować przydziałem spraw w stosunku 9,1% do 90,9%. Naprawiony SLPS nadal tego nie umie.

Niezmiennie zaś - po dziś dzień, we wszystkich losowaniach - użycie w SLPS sprzętowego generatora liczb losowych i obliczanie wartości modulo stanowi jedynie teatrzyk, który nie ma żadnego znaczenia.


Masz pytania lub uwagi do niniejszego tekstu? Napisz!

Tomasz Zieliński



Nowszy artykuł: Ministerstwo odmawia udostępnienia nowych raportów, rezygnuję z pracy nad Monitorem SLPS »
Starszy artykuł: « Jak SLPS wylicza wskaźniki obciążenia?