Symulacje Monte Carlo, część 3
Kiedy skończone zostaną prace nad bardzo pilnymi rzeczami? Symulacje Monte Carlo pozwolą ustalić prawdopodobny termin.
W poprzednim artykule na temat symulacji Monte Carlo opisałem sposób prognozowania liczby rzeczy, które mogą zostać zrealizowane w określonym czasie. Równie łatwo sporządzić można nieco inną prognozę – taką, która podpowiada, jak długo potrwają prace nad skończonym zbiorem rzeczy do zrobienia.
Ponownie posłużymy się symulacją Monte Carlo i takimi samymi danymi wejściowymi, czyli informacją o przepustowości Zespołu w przeszłości.
Jak długo potrwa wykonanie określonej pracy?
Przyjmijmy, że dysponujemy tymi samymi danymi opisującymi proces Zespołu, jakimi posłużyłem się w poprzednim artykule. Zespół ten pracował w szeregu dwutygodniowych iteracji przez cały rok, a przepustowość w każdej nich prezentuje poniższy wykres:
W ramach symulacji Monte Carlo będziemy poszukiwać odpowiedzi na pytanie, ile iteracji potrzebować może Zespół, by zrealizować 200 rzeczy. Musimy więc symulować przebieg kolejnych iteracji (a dokładniej ich przepustowość) tak długo, aż sumaryczna liczba zrobionych rzeczy zrówna się lub ewentualnie przekroczy minimalnie liczbę 200. Oto w jaki sposób to zrobimy:
- Wybieramy losowo jedną z zakończonych iteracji i zapisujemy, jak wiele rzeczy udało się w niej ukończyć (jaka jest jej przepustowość).
- Powtarzamy krok pierwszy tak długo, aż suma liczby rzeczy ukończonych w ramach wszystkich losowo wybranych iteracji osiągnie wartość 200 lub ją przekroczy.
- Liczymy, ile razy trzeba było powtórzyć krok pierwszy, czyli jak wiele iteracji zostało w sumie wylosowanych, zanim sumaryczna przepustowość w nich osiągnęła lub przekroczyła 200.
Oto wynik pojedynczej symulacji:
Iteracja Przepustowość |
7 8 |
3 8 |
6 7 |
18 6 |
26 7 |
5 10 |
Iteracja Przepustowość |
12 4 |
2 6 |
6 7 |
19 4 |
10 11 |
2 6 |
Iteracja przepustowość |
7 6 |
22 8 |
22 8 |
19 4 |
9 5 |
3 8 |
Iteracja przepustowość |
1 7 |
21 10 |
19 4 |
22 8 |
22 8 |
22 8 |
Iteracja Przepustowość |
14 5 |
5 10 |
20 6 |
2 6 |
19 4 |
13 3 |
Jak widać, wiele iteracji wylosowanych zostało kilkakrotnie i nie ma w tym niczego niepoprawnego – powtórzenia będą się zdarzać tym częściej, im mniejsza jest pula historycznych iteracji, spośród których losujemy.
Suma przepustowości wszystkich wylosowanych iteracji wynosi 202, czyli w tym konkretnym scenariuszu liczbę 200 ukończonych rzeczy udało się osiągnąć po 30 iteracjach. I to ta liczba iteracji (w tym przypadku 30) jest wynikiem symulacji. Oczywiście jest to pojedynczy wynik – jeden przebieg symulacji. Musimy ją powtórzyć wielokrotnie: przynajmniej 1000 razy, lepiej 10 tysięcy razy, a jeśli to możliwe przeprowadźmy ich 100 tysięcy lub nawet milion.
Ja zrobiłem tych symulacji milion. Ich efektem jest uzyskanie miliona odpowiedzi na pytanie, jak wiele iteracji potrzeba, by zrobić 200 rzeczy. Każdy z możliwych wyników powtórzył się więcej niż raz, a częstotliwość powtórzeń pozwala wyliczyć prawdopodobieństwo z nim związane.
Wyniki symulacji da się zaprezentować w postaci histogramu:
Najwięcej symulacji wskazuje, że 200 rzeczy uda się zrealizować w trakcie kolejnych 29 iteracji. Nieco mniej, że będzie to możliwe w 28 iteracji. W sporo mniejszej liczbie symulacji trzeba było na to aż 30 iteracji.
Wyliczenie prawdopodobieństwa ukończenia 200 rzeczy w trakcie określonej liczby iteracji jest proste: jest ono równe procentowemu udziałowi liczby symulacji, które dały taki wynik, w ogólnym ich zbiorze.
I tak 254421 symulacji wskazuje, że prace zakończą się w 29 symulacji, a zatem prawdopodobieństwo tego wynosi 25.4421% (254421 podzielone przez milion, czyli liczbę wszystkich przeprowadzonych symulacji). Wynik 28 iteracji pojawił się 242946 razy, zatem prawdopodobieństwo z nim związane to 24.2946% – i tak dalej.
Prawdopodobieństwo to da się oczywiście przedstawić na wykresie analogicznym do powyższego histogramu:
Można też łatwo wyliczyć prawdopodobieństwo zrobienia 200 rzeczy nie tyle w trakcie dokładnej liczby iteracji, ile ich liczby maksymalnej. Wystarczy policzyć, jak wiele symulacji dało wynik niższy lub równy niż wskazana liczba iteracji, po czym policzyć ich procentowy udział w ogólnej puli.
W ten sposób np. aby policzyć prawdopodobieństwo, że uda się zrobić 200 rzeczy w trakcie nie więcej niż 29 iteracji, trzeba zsumować liczbę próbek dających wynik 29 lub niższy i odnieść ją do całkowitej ich liczby. Symulacji takich było 704810 z miliona, a zatem szansa, że uda się ukończyć 200 rzeczy w ciągu maksimum 29 iteracji, wynosi 70.4810%.
Rozkład tego prawdopodobieństwa również da się przedstawić graficznie w sposób zaprezentowany poniżej:
Intuicyjnie czujemy, że im więcej czasu na zrobienie czegoś mamy, tym bardziej prawdopodobne jest, że się to uda. I faktycznie wykres prawdopodobieństwa pokrywa się z podpowiedziami intuicji, a do tego pokazuje, w jakim tempie szansa na ukończenie prac rośnie w miarę wydłużenia się liczby iteracji, które na to przeznaczymy.
Oba wykresy prawdopodobieństwa pozwalają na bardziej świadome deklarowanie różnych terminów i zapewnienie dostępności Zespołu na wystarczająco długi okres.
Przypomnę też to, co pisałem w poprzednim artykule: dobrze zrobiona symulacja Monte Carlo nie daje jednej prognozy, ale ich szerokie spektrum, prezentujące wiele możliwych scenariuszy wraz z określeniem prawdopodobieństwa dla każdego z nich. Nie da się takiego zestawu prognoz sporządzić z użyciem tradycyjnych metod opartych o wyceny pracochłonności lub czasochłonności.
Statystyka zamiast magii
Czy symulacje takie, jak zaprezentowałem w tym i poprzednim artykule, mogą w ogóle być traktowane serio? Przecież na podstawie bardzo zgrubnej informacji, jaką jest przepustowość zarejestrowana w szeregu zakończonych iteracji, tworzę prognozy opisujące przyszłość ze wskazaniem prawdopodobieństwa każdej z nich. Dla wielu osób, z którymi o tym rozmawiam, wydaje się to co najmniej naciągane.
Gdyby dało się zidentyfikować wszystkie czynniki, jakie wpływają na przebieg jakiegoś procesu i gdyby znane były funkcje opisujące zmienność tych czynników w czasie, w ogóle nie musielibyśmy niczego prognozować – możliwe byłoby wyliczenie tego, co się stanie. Niestety nawet w bardzo izolowanym środowisku jest to mało realne, a co dopiero w sytuacji, gdy zaczynamy rozważać działania grupy ludzi (Zespołu) w ramach jakiejś złożonej inicjatywy biznesowej.
To może da się przynajmniej wyliczyć prawdopodobieństwo tego, że przyszłość potoczy się wedle konkretnego scenariusza? Też nie, bo musielibyśmy dysponować formułą matematyczną opisującą rozkład prawdopodobieństwa wystąpienia różnych zdarzeń w procesie, jaki rozważamy. A łatwo się domyślić, że nikt takiej funkcji zdefiniować nie będzie w stanie.
Możemy natomiast obserwować działanie procesu przez jakiś czas i rejestrować te jego parametry, które uznajemy za istotne. I choć wciąż nie będziemy znać funkcji pozwalającej wyliczyć prawdopodobieństwo uzyskania konkretnych wartości tych parametrów, to możemy użyć zgromadzonej informacji do zasymulowania dalszego działania tych funkcji.
Przy czym symulacja ta nie polega na prostym odtworzeniu tego, co wydarzyło się w przeszłości. Dzieje się tak z trzech powodów:
- Prawdopodobieństwo powtórzenia się dokładnie tego samego scenariusza jest stosunkowo nikłe, choć sporadycznie może wciąż on być najbardziej prawdopodobny.
- Chcemy wygenerować całe spektrum scenariuszy, by zobaczyć, które z nich powtarzają się najczęściej, natomiast dokładne odtworzenie wydarzeń z przeszłości dawałoby zawsze ten sam rezultat symulacji.
- Prognozy mogą dotyczyć okresów o różnej długości albo różnej liczby rzeczy do zrobienia, co zwykle wymaga zasymulowania innego scenariusza niż ten zarejestrowany w przeszłości.
Scenariusze tworzone w ramach symulacji są generowane z użyciem historycznych danych. Nie polega to oczywiście na wykonaniu rzeczywistych działań i zebraniu w ich trakcie miar i danych w standardowy sposób. Żaden proces (żadna praca) się nie odbywa, symulowane są wyłącznie kolejne odczyty miar i pobrania danych opisujących przebieg procesu. Wartości każdego z takich odczytów i pobrań losowane są ze zbioru danych historycznych.
Rozkład wyników tego losowania to oczywiście rozkład normalny, co bez trudu da się potwierdzić, jeśli wykonanych zostanie dostatecznie dużo powtórzeń. To oznacza, że generowane wyniki symulacji również podlegają rozkładowi normalnemu – w praktyce można to było zobaczyć w przykładach, jakie opisałem.
Losowanie pozwala wygenerować całe spektrum wyników symulacji, które wszystkie są mocno zakotwiczone w rzeczywistych danych – żaden z parametrów opisujących symulowany proces nigdy nie przyjmie wartości innej niż taka, jaka faktycznie kiedyś się zdarzyła. Scenariusze są więc niby sztuczne, ale każdy z nich mógłby się realnie wydarzyć. Jeśli symulacji jest bardzo wiele (im więcej, tym lepiej), da się dla każdego przypadku określić częstość wystąpienia i w ten sposób wyliczyć prawdopodobieństwo.
Sceptyków zachęcam do poczytania o metodzie Monte Carlo, która w nauce wykorzystywana jest od dziesięcioleci. W opisywanych przeze mnie przypadkach jest ona tym bardziej adekwatna, że symulacja tego typu jest naprawdę prosta, bo opiera się wyłącznie o jeden parametr, jakim jest przepustowość.
Jak sprawdzić, czy symulacja jest poprawna?
W kolejnym, ostatnim już artykule z tej serii, odpowiadam na to pytanie, a także wskazuję, jakie ograniczenia mają symulacje Monte Carlo i jak tworzyć prognozy w przypadku procesu ciągłego, w którym praca nie odbywa się iteracyjnie.