Symulacje Monte Carlo, część 4

Symulacje Monte Carlo, część 4
Zdjęcie: Robert Stump

Jak sprawdzić, czy symulacja przeprowadzona została prawidłowo? Jak tworzyć prognozy, jeśli proces nie jest iteracyjny? Czy można użyć velocity zamiast przepustowości?

W ostatnim moim artykule przedstawiłem schemat, wedle którego konstruowane są symulacje Monte Carlo, czyli w jaki sposób historyczne dane mogą być użyte do losowego generowania wyników, których rozkład normalny możemy potem wykorzystać do sporządzania prognoz. Niektórzy wciąż zapewne pozostają ostrożnymi sceptykami, ale na szczęście istnieje bardzo prosty sposób pokazania, że takie symulacje dają wiarygodne rezultaty.

„Prognozowanie przeszłości”

Wróćmy do Zespołu, którego przykładowymi danymi posługiwałem się co chwilę w ramach cyklu artykułów o symulacjach. Dysponuję informacją o przepustowości, jakie uzyskał on w 26 następujących po sobie iteracjach:

Symulacje Monte Carlo – wykres 3

Pozwala to w szczególności ustalić, ile rzeczy Zespół zdołał zrealizować w trakcie całego roku. Było ich dokładnie 184.

Jeśli symulacje Monte Carlo faktycznie pozwalają tworzyć wiarygodne prognozy, to jeśli poszukam odpowiedzi na pytanie, jak wiele rzeczy Zespół będzie w stanie ukończyć w trakcie kolejnych 26 iteracji, najczęściej uzyskiwaną odpowiedzią (najbardziej prawdopodobną) powinna być liczba 184. Inaczej mówiąc, symulacja obejmująca taki okres, z jakiego pozyskane zostały dane do jej sporządzenia, powinna dawać rezultaty takie, jakie historycznie udało się zaobserwować.

Przeprowadziłem zatem milion powtórzeń tak zdefiniowanej symulacji i uzyskałem następujący rozkład liczby zrealizowanych rzeczy:

Symulacje Monte Carlo – wykres 10

Dla czytelności warto zerknąć na środkowy wycinek wykresu:

Symulacje Monte Carlo – wykres 11

Widać wyraźnie, że najczęściej pojawiła się liczba 185 ukończonych rzeczy (dokładnie 39483 razy). Liczba 184 uzyskana została w niewiele mniejszej liczbie symulacji (było ich 39445, czyli ledwie o 38 mniej).

A zatem prognoza sporządzona na podstawie symulacji pokrywa się niemal idealnie z tym, jaką przepustowość faktycznie uzyskał Zespół w ciągu roku. I to mimo tego, że żaden ze scenariuszy wygenerowanych w ramach symulacji nie polegał na dokładnym odwzorowaniu szeregu zakończonych iteracji. Za każdym razem informacja o przepustowości była losowana z całego zbioru danych historycznych.

Mechanizm weryfikacyjny

W dokładnie ten sam sposób można łatwo sprawdzić poprawność każdej innej symulacji Monte Carlo. Jeśli zasymulujemy okres, z którego zebraliśmy empiryczne dane i sporządzimy na tej podstawie prognozę, której wyniki są zbieżne z tymi danymi, to najprawdopodobniej symulacja została wykonana prawidłowo. Piszę, że najprawdopodobniej, bo w złożonej rzeczywistości, w jakiej funkcjonujemy, nie mamy nigdy pewności, że nie popełniliśmy błędu.

Natomiast jeśli pojawi się jakaś znacząca rozbieżność, to symulacja zapewne przeprowadzona została błędnie. Należy sprawdzić, czy używamy danych we właściwy sposób, czy nie pomyliliśmy się w obliczeniach itd. Jeśli wykluczymy tego typu przyczynę, przeanalizujmy same dane, którymi się posługujemy, bo być może nie pozwalają na skuteczne wykonanie symulacji: jest ich za mało, zebrane zostały z kilku okresów oddzielonych od siebie, albo opisują proces, który ciągle się zmieniał.

Nie pracujemy iteracyjnie – co wtedy?

W sytuacji, gdy proces ma charakter ciągły i nie ma w nim iteracji, albo gdy mają one różną długość, wciąż można posłużyć się informacją o przepustowości osiąganej w wybranej stałej jednostce czasu. Jeśli posłużymy się tygodniami, to możliwe stanie się prognozowanie tego, ile pracy zostanie wykonane w czasie wskazanej liczby tygodni albo ile tygodni potrzeba na wykonanie określonej liczby rzeczy.

Dobrym pomysłem jest wykorzystanie jako jednostki czasu nie tygodni, iteracji, miesięcy itd., ale dni. Wymaga to oczywiście wyliczenia dziennej przepustowości, ale daje największą precyzję prognoz i elastyczność przy ich formułowaniu.

Przykładowo, jeśli użyjemy miesięcy jako okresów, w których mierzymy przepustowość, to wszelkie prognozy będą sporządzane w odniesieniu do miesięcy lub ich wielokrotności. Jeśli natomiast użyjemy dni, to łatwo wyrazić uzyskaną w ten sposób prognozę posługując się liczbą tygodni, kilkutygodniowych iteracji albo miesięcy.

A jeśli nie mierzymy przepustowości?

Uzyskanie informacji o przepustowości jest naprawdę trywialne, bo wymaga jedynie policzenia, ile rzeczy udało się skończyć w określonym czasie. Jeśli posługujemy się jakimś narzędziem elektronicznym, to wystarczy wyciągnąć z niego informację o datach zakończenia prac nad rzeczami, które faktycznie zostały zrealizowane.

Żaden Zespół nie powinien mieć z tym trudności, a jeśli nie da się tego zrobić, wszystkim powinny zapalić się czerwone lampki alarmowe. Bo wydaje się niemożliwe, żeby Zespół jednocześnie deklarował, że coś zostało zrobione i nie był w stanie ustalić daty, kiedy prace nad tym czymś się zakończyły.

Czasami jednak takie trudności faktycznie się pojawiają i przyczyną jest brak jednoznacznego ustalenia, jaki stan prac jest tym końcowym. Nieco złośliwie napiszę, że w takiej sytuacji dużo większym problemem Zespołu jest to, że ma niejasny proces, którego zapewne nie jest w stanie w pełni kontrolować, niż to, że nie da się policzyć przepustowości na potrzeby sporządzania prognoz. Ba, gdyby nawet dało się tę przepustowość policzyć, ich wiarygodność w procesie do tego stopnia płynnym i niezdefiniowanym będzie zerowa.

Oczywiście może być i tak, że Zespół nie ma dostępu do danych, na podstawie których mógłby wyliczyć przepustowość. Ot, rzeczy już zakończone zostały usunięte z narzędzia użytego do zarządzania pracą nad nim albo dane przeniesiono do archiwum, do którego Zespół zaglądać nie może. Cóż, bez danych wejściowych nie da się symulacji przygotować, więc należy zadbać, by od teraz nie były one tracone.

Czy można użyć velocity zamiast przepustowości?

Technicznie tak, można mierzyć prędkość Zespołu i na tej podstawie tworzyć prognozy analogicznie do tego, jak sporządza się je z użyciem przepustowości. Niekoniecznie ma to jednak duży sens i to z kilku powodów.

Po pierwsze, velocity nie da się realnie liczyć z użyciem krótkich okresów takich jak dzień. Rozsądne minimum to zapewne tydzień.

Po drugie, aby wyliczyć prędkość, Zespół musi wycenić wszystko, co zrobił i to w sposób pozwalający na sumowanie oszacowań, czyli w formie numerycznej. To dodaje pracy i wymusza posłużenie się określonymi metodami szacowania.

Po trzecie, nie da się sporządzić w ten sposób prognozy liczby rzeczy, które uda się w jakimś czasie zrealizować. Prognozowana będzie w tym przypadku prędkość, jaką Zespół uzyska w rozważanym okresie. Żeby uzyskać prognozę ilościową, trzeba mozolnie przejść przez listę rzeczy do zrobienia i sumować ich wyceny. A ponieważ symulacja Monte Carlo daje całe spektrum prognoz, trzeba to będzie zrobić osobno dla każdej z nich…

I tu pojawia się czwarty problem: nie da się użyć takiej prognozy przyszłego velocity w rozważanym okresie, jeśli elementy na liście rzeczy do zrobienia nie są wycenione i to w takiej samej formie, w jakiej wyceniane zostały rzeczy już zrobione.

Podobnie rzecz ma się z prognozowaniem czasu, jaki potrzeba na zrealizowanie określonego zbioru rzeczy (to piąty problem). Ponieważ prognozować z użyciem velocity można jedynie przyszłą prędkość, najpierw trzeba ten zbiór rzeczy wycenić, potem zsumować te wyceny (będzie to swoiste oczekiwane velocity), a dopiero potem można sporządzić prognozę tego, jak wiele tygodni czy iteracji pozwoli taką sumaryczną prędkość osiągnąć. Znów robi się to dość skomplikowane i mało intuicyjne.

Szósty, moim zdaniem najpoważniejszy problem, jest taki: rozkład normalny wyników symulacji Monte Carlo, pozwala wyliczyć prawdopodobieństwo uzyskania określonej wartości velocity w przyszłości, ale prędkość zawsze wyliczana jest jako suma wycen, które nieuchronnie obarczone są błędami szacowania o nieznanej i niemożliwej do ustalenia skali. To oznacza, że zarówno dane historyczne (informacja o prędkości uzyskiwanej), jak i prognozy oparte o wyceny rzeczy, które oczekują na realizacje, są z definicji skażone dodatkowym błędem. Co skutecznie obniża wiarygodność takich prognoz.

Z tych wszystkich powodów zdecydowanie odradzam posługiwanie się velocity jako podstawą do tworzenia symulacji Monte Carlo. Historyczną przepustowość da się ustalić precyzyjnie (nie jest to oszacowanie), a sporządzane z jej pomocą prognozy są o wiele łatwiejsze do zastosowania i bardziej intuicyjne niż te oparte o velocity.

Ograniczenia

Prognozy tworzone z użyciem symulacji opierają się o założenie, że proces w przyszłości będzie zbliżony do tego, jaki miał miejsce w okresie, z którego danych historycznych korzystamy. Płyną stąd dwa istotne wnioski.

Pierwszy jest dość oczywisty: nie ma sensu sporządzać prognoz zbyt dalekosiężnych. Im większe jest ryzyko, że w rozważanym okresie proces ulegnie zmianie, tym mniej wiarygodne będą prognozy długoterminowe. Wciąż mogą stanowić przydatne narzędzie, ale trzeba traktować je ze zdrowym sceptycyzmem.

Uwaga: wbrew powyższemu zaleceniu stworzyłem prognozę obejmującą 26 iteracji Zespołu, którego danymi posługuję się w przykładach. Tyle tylko, że moim celem nie było użycie tej prognozy do podejmowania decyzji, ale sprawdzenie, czy da ona wyniki takie, jak faktycznie zarejestrowane w przeszłości.

Drugi wniosek jest mniej oczywisty: symulacje Monte Carlo i prognozowanie na ich podstawie ma zastosowanie tylko dla procesów stosunkowo stabilnych. I nie chodzi mi tym razem o to, czy da się wyszukać jakiś reprezentatywny okres w przeszłości, z którego wyciągniemy dane do sporządzenia symulacji. One mają sens tylko wtedy, jeśli mamy prawo oczekiwać, że przyszły przebieg procesu będzie równie stabilny. Jeśli z góry wiadomo, że „zaraz wszystko się zmieni”, to można sobie darować prognozy inne niż krótkoterminowe.

Kolejną istotną rzeczą jest okres przydatności do użycia prognoz po tym, jak one zostały sporządzone. Jest on zwykle bardzo krótki, bo każda istotna zmiana czy to w procesie, czy na liście rzeczy do zrobienia, może wymagać sporządzenia prognoz na nowo. Dlatego zachęcam do posługiwania się danymi o przepustowości i tworzenia symulacji w najprostszy możliwy sposób. Dzięki temu można szybko sporządzać odświeżone prognozy.

Ostrzeżenie i zaproszenie

Żadna prognoza, nawet taka wskazująca, że coś zdarzy się niemal na sto procent, niczego nie gwarantuje. Prognozy stanowią jeden z czynników, jaki brać należy przy podejmowaniu decyzji, bo pozwalają bardziej świadomie zarządzać ryzykiem. Nie pozwalają w pełni wyeliminować ryzyka, a aroganckie przekonanie, że coś jest niemal pewne, zwykle wiedzie do katastrofalnych błędów decyzyjnych.

Dotyczy to zresztą nie tylko symulacji Monte Carlo, ale wszystkich innych narzędzi i praktyk, którymi posługują się Zespoły i organizacje. Należy używać ich świadomie, bo wszystkie mają wady, zalety i ograniczenia. Przy tej okazji ponownie zapraszam do udziału w warsztacie Szacowanie i Prognozowanie w Agile, w którego trakcie uczestnicy poznają najczęściej wykorzystywane praktyki.

Udostępnij ten artykuł

Ten portal używa cookies aby zapewnić jego sprawne działanie. Akceptacja cookies jest do tego wymagana. Można też odmówić zgody na użycie cookies i opuścić portal. Aby dowiedzieć się jak używamy cookies zapoznaj się z naszą Polityką Prywatności.
Akceptuję cookies Nie zgadzam się
Cookies utworzone podczas przeglądania portalu zostały usunięte i można go teraz bezpiecznie opuścić. Dalsze przeglądanie naszych stron spowoduje ponowne wyświetlenie monitu o akceptację cookies.