W pierwszym artykule z krótkiej serii na temat symulacji Monte Carlo zapowiedziałem, że wyjaśnię, w jaki sposób można je sporządzać. Pora wywiązać się z tej obietnicy, co wymaga pochylenia się na moment nad przepustowością i sposobem jej mierzenia.

Przepustowość

Jest to jedna z miar przepływu (ang. flow metrics), czyli jeden z parametrów opisujących zjawisko przepływu rzeczy, których obsłużenie przynosi wartość, przez proces, w jakim obsługa ta się odbywa. Jeśli taką rzeczą (czyli nośnikiem wartości) jest np. problem, z jakim borykają się użytkownicy produktu, to proces obsługi polega na dokonaniu w produkcie zmiany, która usunie tę niedogodność.

Przepustowość (ang. throughput) oblicza się jako liczbę rzeczy, które przepłynęły przez proces obsługi w jednostce czasu. Po ludzku: to liczba tego, co udało się zrobić w wybranym okresie, np. na dzień, tydzień albo miesiąc.

Ze względu na sposób liczenia, przepustowość jest zawsze wyrażona liczbą całkowitą dodatnią lub ewentualnie ma wartość zerową, jeśli w rozważanym okresie nie udało się niczego ukończyć. Nie może przyjąć wartości ułamkowej, bo nie da się niczego „zakończyć częściowo”.

Podając wartość przepustowości, zawsze należy wskazać okres, jakiego ona dotyczy. Bez tego sama liczba ukończonych rzeczy jest informacją bezwartościową.

Przepustowość średnia

Dla każdej miary, a więc i dla przepustowości, można wyliczyć wartość średnią miary. Wtedy jak najbardziej może ona być ułamkowa.

Uwaga: przepustowość średnia w jakimś okresie to nie to samo, co przepustowość w tym okresie. Przykładowo, jeśli w trakcie tygodnia roboczego jedynie we wtorek i środę udało się ukończyć pracę nad czymś, to przepustowość w tym tygodniu wynosi 2, ale średnia dzienna przepustowość w tym tygodniu wynosi 0.4.

Mylenie przepustowości średniej wyliczonej dla jakiegoś okresu z przepustowością w tym okresie jest dość częstym błędem. Do symulacji Monte Carlo nie używa się wartości średniej przepustowości, bo wtedy w każdym przebiegu dawałyby one tylko jeden wynik. Tymczasem my chcemy uzyskać wiele różnych wyników i na podstawie analizy częstości ich występowania wyliczyć prawdopodobieństwo związane z każdym z nich.

Ze średnią przepustowością wiąże się też kolejna pułapka: jest bezwartościową informacją bez określenia, z jakich przepustowości ta średnia jest wyliczana. Cóż bowiem nam z informacji, że średnia przepustowość w tygodniu wynosiła 0.4? Jeśli ta wartość została wyliczona z przepustowości dziennych, to znaczy, że w tygodniu roboczym zrobiono tylko 2 rzeczy. Natomiast jeśli średnia wynika z przepustowości godzinowych, wtedy zrobiono tych rzeczy aż 48. Różnica jest znacząca, nieprawdaż?

Dane wejściowe do symulacji

Przede wszystkim potrzebujemy wiedzy o historycznej przepustowości w okresie, który uznajemy za reprezentatywny i na którym będziemy się wzorować. Zwykle jest to ostatnich kilka do kilkunastu tygodni, czasami wiele miesięcy.

Nie jest dobrym pomysłem posługiwanie się danymi z okresu bardzo odległego, bo sposób i charakter pracy ludzi mógł w międzyczasie zmienić się zasadniczo. Sięgnąć trzeba po dane, które opisują proces maksymalnie podobny do tego, jakiego spodziewamy się w najbliższej przyszłości.

Nie można też posłużyć się zbyt małą ilością danych. Jeśli np. chcemy oprzeć symulację na przepustowości uzyskiwanej w kolejnych iteracjach, to powinniśmy dysponować jej pomiarami z przynajmniej pięciu, a najlepiej dziesięciu takich interwałów.

Ostatnia uwaga: używać musimy danych z jednego ciągłego okresu. Jeśli więc posługujemy się pomiarami przepustowości za całe iteracje, nie możemy sięgnąć wybiórczo po pierwszą, siódmą, dziewiątą i trzynastą. O ile da się zrobić technicznie taką symulację, oparta byłaby ona o sztucznie wykreowane dane, a nie zapis przebiegu procesu, jaki rzeczywiście funkcjonował przez dłuższy czas.

Poza informacją o przepustowości nie potrzebujemy nic więcej – można zacząć tworzyć symulacje.

Dwa rodzaje symulacji

Symulacje Monte Carlo stosowane przy tworzeniu prognoz przebiegu prac nad listą rzeczy do zrobienia mają dwie formy, zależnie od pytania, na które chcemy uzyskać odpowiedź:

  1. Jak wiele rzeczy może zostać zrealizowanych we wskazanym okresie?
  2. Jak długo może potrwać realizacja określonej liczby rzeczy?

Mechanika obu rodzajów symulacji jest podobna – różnią się w zasadzie tylko niewiadomą, której wartość ustalamy. Nieco różni się też analiza statystyczna uzyskanych wyników.

Co zostanie zrobione we wskazanym czasie?

Przyjmijmy, że dysponujemy danymi opisującymi proces Zespołu, który pracował w szeregu dwutygodniowych iteracji przez cały rok. Możemy policzyć przepustowość w każdej nich i uzyskać wyniki, które prezentuje poniższy wykres:

Symulacje Monte Carlo – wykres 3

Jak widać, Zespół czasami był w stanie ukończyć nieco więcej rzeczy, w innych iteracjach zdecydowanie mniej. Ta zmienność przepustowości nie jest niczym niezwykłym, bo nie zawsze wszyscy członkowie Zespołu byli obecni, a poszczególne rzeczy różniły się wymaganym nakładem pracy.

W ramach symulacji Monte Carlo będziemy poszukiwać odpowiedzi na pytanie, jak wiele pracy zostanie ukończone w trakcie kolejnych pięciu iteracji. Musimy więc zasymulować przebieg tych kolejnych iteracji, a dokładniej przepustowość, jaką potencjalnie można w nich uzyskać. Oto w jaki sposób to zrobimy:

  1. Wybieramy losowo jedną z zakończonych iteracji i zapisujemy, jak wiele rzeczy udało się w niej ukończyć (jaka jest jej przepustowość).
  2. Powtarzamy krok pierwszy jeszcze cztery razy, bo symulujemy w sumie pięć iteracji.
  3. Sumujemy liczbę rzeczy ukończonych w ramach wszystkich pięciu losowo wybranych iteracjach.

Oto jak mógłby wyglądać wynik pojedynczej symulacji:

Wylosowana iteracjaPrzepustowość
178
17
49
133
49

Zwracam uwagę, że iteracja czwarta pojawia się dwukrotnie, bo losujemy je zawsze z kompletnego zbioru i takie powtórzenia mogą się zdarzyć.

Suma przepustowości wylosowanych iteracji wynosi 36, co oznacza, że w trakcie pięciu przyszłych iteracji ukończone może zostać 36 rzeczy. Przy czym jest to pojedynczy wynik – jeden przebieg symulacji. Musimy ją powtórzyć: przynajmniej 1000 razy, lepiej 10 tysięcy razy, a jeśli mamy taką możliwość, to zróbmy ich 100 tysięcy lub nawet milion.

Niech więc będzie to milion. Efektem jest uzyskanie miliona odpowiedzi na pytanie, jak wiele rzeczy uda się ukończyć w trakcie przyszłych pięciu iteracji. Oczywiście nie jest to milion zupełnie różnych wartości – wiele z nich się powtarza. I o to właśnie chodzi, bo częstotliwość tych powtórzeń pozwoli nam wyliczyć prawdopodobieństwa.

Wyniki symulacji można zaprezentować w postaci histogramu:

Symulacje Monte Carlo – wykres 4

Jak widać, największa liczba przeprowadzonych symulacji wskazuje, że w ciągu pięciu kolejnych iteracji uda się zrobić 35 rzeczy. Nieco mniej wskazuje, że rzeczy tych będzie 36. Jeszcze mniej, że 34. Interpretacja histogramu nie powinna nastręczyć problemów.

Wyliczenie prawdopodobieństwa zrobienia określonej liczby rzeczy jest równie trywialne: jest ono równe procentowemu udziałowi liczby symulacji, które dały taki wynik, w ogólnym ich zbiorze.

Skoro więc 88758 symulacji wskazuje na możliwość ukończenia 35 rzeczy, to prawdopodobieństwo wynosi 8.8758% (88758 podzielone przez milion, bo tyle wykonałem wszystkich symulacji). Wynik 36 pojawił się 87531 razy, zatem prawdopodobieństwo z nim związane to 8.7531% – jak widać, jest to naprawdę proste.

Można też prawdopodobieństwo przedstawić na wykresie analogicznym do powyższego histogramu:

Symulacje Monte Carlo – wykres 5

Bardzo łatwo można wyliczyć również prawdopodobieństwo ukończenia nie tyle dokładnej liczby rzeczy, jaką uda się zrobić w kolejnych pięciu iteracjach, ile ich liczby minimalnej. Tak, jak już wyjaśniałem w poprzednim artykule, wystarczy policzyć, jak wiele symulacji dało wynik równy lub wyższy niż wskazana liczba ukończonych rzeczy, po czym policzyć ich procentowy udział w ogólnej puli.

W ten sposób np. aby policzyć prawdopodobieństwo, że uda się zrobić przynajmniej 35 rzeczy, trzeba zsumować liczbę symulacji dających wynik 35 lub wyższy i odnieść ją do całkowitej ich liczby. Symulacji takich było 579833 z miliona, a zatem szansa, że uda się ukończyć przynajmniej 36 rzeczy, wynosi 57.9833%.

Rozkład tego prawdopodobieństwa również da się przedstawić graficznie w sposób zaprezentowany poniżej:

Symulacje Monte Carlo – wykres 6

Zgodnie z tym, co podpowiada intuicja, prawdopodobieństwo spada wraz ze wzrostem liczby rzeczy, które mogą zostać zrealizowane w czasie pięciu kolejnych iteracji. Nieco mniej intuicyjny jest natomiast charakter tego spadku – dzięki symulacji można wskazać, od jakiej wartości liczby rzeczy ukończonych prawdopodobieństwo zaczyna gwałtownie maleć.

Na tej podstawie i w połączeniu z analizą wykresu poprzedniego, da się bardziej świadomie planować przyszłe działania Zespołu.

Warto podkreślić, że dobrze przeprowadzona symulacja Monte Carlo nie daje jednej prognozy, ale całe ich spektrum, bo mamy tu przedstawionych wiele możliwych scenariuszy wraz z określeniem prawdopodobieństwa dla każdego z nich. Jest to rzecz niemożliwa do zrobienia z wykorzystaniem tradycyjnych metod opartych o wyceny pracochłonności lub czasochłonności.

A jak zrealizować drugi wariant symulacji?

O tym, jak prognozować termin realizacji określonego zbioru rzeczy do zrobienia, piszę w kolejnym artykule. Odpowiadam też na pojawiające się często pytanie o to, czy aby na pewno tak przeprowadzanym symulacjom można ufać, czyli dlaczego i w jaki sposób one w istocie działają.