BLOG

Zarządzanie ryzykiem i ciągłością działania

‹ Wszystkie artykuły

O kontroli ryzyka w projektach nieco inaczej

Po napisaniu komentarza do jak zawsze ciekawych spostrzeżeń by Piotr Filipiuk na temat podejścia do ryzyk w projektach, uświadomiłem sobie, że zawodowcy zarządzania nimi mogą uznać przytoczone przeze mnie sugestie za wartościowe - ale wyłącznie dla przedszkolaka w młodszych średniakach. I słusznie.

Ponieważ faktycznie w projektach typu mission critical (a praktycznie wyłącznie takim zajmujemy się z dużą pasją) potrzebne jest zasadniczo inne podejście.

W kontroli ryzyk używamy połączonych metod symulacji Monte Carlo oraz Event Chain Metodology w celu uwzględnienia faktu, że w realnym życiu zarówno czynniki ryzyka, jak i same ryzyka są powiązane ze sobą wielowymiarowymi zależnościami.

Elegancja matematyki symulacyjnej pozwala na planowanie stochastyczne zamiast pseudodererministycznego. Jest to daleko bardziej bliskie życia niż tradycyjne metody typu PERT. Pominę tutaj opis metod Monte Carlo ograniczając się jedynie do kilku dobrych praktyk, które być może będą dla Was użyteczne, gdy frustracja z powodu niskiej wydajności obliczeniowej oprogramowania które dla siebie napisaliście nie pozwala Wam spokojnie zasnąć. Ale są na to sposoby.

Dla przypomnienia. Błąd w metodzie Monte Carlo jest proporcjonalny do odchylenia standardowego Sigma podzielonego przez pierwiastek liczby próbek N. Zatem zwiększenie N czterokrotnie zmniejsza błąd tylko dwukrotnie. Naszym celem jest więc zmniejszenie stałej Sigma co znacznie przyspiesza zbieżność Waszych obliczeń. Jak to zrobić?

Najlepiej sprawdzają się te cztery metody - zaufajcie Waszej intuicji po analizie danych z Waszego projektu - jedna z nich będzie optymalna. Oto one:

1. Zmienne Antytetyczne (Antithetic Variates)

To jedna z najprostszych i najskuteczniejszych metod. Zamiast generować w pełni niezależne liczby losowe, tworzymy je parami.

Jeśli do symulacji używasz liczby losowej u (z rozkładu jednostajnego od 0 do 1), to w następnym kroku użyj jej "lustrzanego odbicia", 1-u. Jesteś ciekawy dlaczego? Jeśli jedna próbka daje wynik powyżej średniej, jej antytetyczna para często daje wynik poniżej średniej. Te dwa wyniki, uśrednione, mają znacznie mniejszą wariancję niż dwie niezależne próbki. Powoduje to "wygładzenie" losowości i szybsze zbliżanie się do prawdziwej wartości.

2. Próbkowanie z wagami (Importance Sampling) 🎯

Ta technika polega na "skupieniu" losowania w tych obszarach, które mają największy wpływ na ostateczny wynik, zamiast próbkować równomiernie. Zamiast losować z oryginalnego rozkładu prawdopodobieństwa, losujemy z innego, "lepszego" rozkładu, a następnie korygujemy (ważymy) wyniki, aby zrekompensować tę zmianę.

Wyobraź sobie, że liczysz całkę z funkcji przewidywanych nakładów inwestycyjnych w danym etapie projektu, która ma wysoki, wąski szczyt w jednym miejscu, a wszędzie indziej jest bliska zeru. Przykład z realnego życia: skupiamy się w budowie Gazoportu w Świnoujściu na robotach, które w obrębie falochronu i nabrzeża trafiają w okno jesienno-wiosenne z lekka parszywych sztormów bałtyckich. Zwykłe Monte Carlo zmarnowałoby większość próbek na płaskich obszarach całego projektu (50 tys. zadań elementarnych). Importance sampling pozwala "celować" próbkami w okolice tego szczytu, co daje dokładny wynik przy znacznie mniejszej liczbie losowań. A to pozwala na znacząco lepszą alokacje zasobów na placu budowy, aby dotrzymać termin wpłynięcia i rozładunku pierwszego tankowca LNG.

3. Zmienne Kontrolne (Control Variates)

Ta metoda wykorzystuje wiedzę o podobnym, ale prostszym problemie, którego rozwiązanie znamy analitycznie. Przykład. Chcemy oszacować wartość X. Znamy inną zmienną Y, która jest silnie skorelowana z X, i znamy jej dokładną wartość oczekiwaną E[Y]. W każdej iteracji symulacji obliczamy zarówno X, jak i Y. Różnicę między wynikiem symulacji dla Y a jego znaną wartością E[Y] używamy do skorygowania wyniku dla X. Jeśli w danej iteracji losowanie dało zawyżoną wartość dla Y, zakładamy, że dla X również jest zawyżona, i korygujemy ją w dół. To redukuje "szum" losowy.

Z realnego projektu, w który jesteśmy teraz zaangażowani. Aby precyzyjnie ocenić ryzyko nowego algorytmu pompy insulinowej (X), w tej samej symulacji testujemy go równocześnie ze starym algorytmem (Y), którego historyczne ryzyko jest dokładnie znane na podstawie ultra-drogich i długich badań klinicznych. Jeśli dana symulacja zawyża ryzyko projektowe dla znanego algorytmu Y, oznacza to, że próbka "wirtualnych pacjentów" którą wybraliśmy była pechowa (w sensie harmonogramu testów), więc proporcjonalnie korygujemy w dół wynik uzyskany dla nowego algorytmu X. Technika ta oddziela rzeczywistą wydajność nowego algorytmu od losowego "szumu" w symulacji, co pozwala naszym inżynierom podejmować szybsze i bardziej wiarygodne decyzje dotyczące bezpieczeństwa pacjentów.

4. Próbkowanie Warstwowe (Stratified Sampling)

Zamiast losować próbki z całej dziedziny, dzielimy ją na mniejsze, niepokrywające się warstwy (strata) i losujemy określoną liczbę próbek z każdej z nich. Jeśli losujesz liczby z przedziału [0, 1], możesz podzielić go na 10 warstw: [0, 0.1), [0.1, 0.2), ..., [0.9, 1.0]. Następnie losujesz ustaloną liczbę próbek z każdej warstwy. Gwarantuje to, że próbki są równomiernie rozłożone w całej dziedzinie i zapobiega przypadkowemu skupieniu się wszystkich losowań w jednym jej fragmencie, co mogłoby wypaczyć wynik. Bardzo użyteczne w ocenie ryzyk wdrożeniowych nowego systemu lottomatów dla Totalizatora Sportowego, gdzie konieczne było zarządzanie równoległą budową 8 tys. kolektur i ich systematycznego wpinania w centralny system, który był jeszcze w fazie testów.

A użyteczność Metodologii Łańcucha Zdarzeń (Event Chain Methodology)?

Opiera się ona przede wszystkim na rachunku prawdopodobieństwa, statystyce i elementach teorii grafów. Jej celem jest modelowanie niepewności w projektach w sposób bardziej zaawansowany niż tradycyjne metody. Oto prosta, łatwa do zrozumienia matematyka.

  1. Zdarzenia jako zmienne losowe. Każde zidentyfikowane ryzyko (zdarzenie) jest traktowane jako zmienna losowa. Podstawowymi parametrami matematycznymi przypisanymi do każdego zdarzenia są: prawdopodobieństwo warunkowe: w którym w pierwszym przybliżeniu zakładam, że zdarzenia nie są niezależne. Wystąpienie jednego zdarzenia może zmieniać prawdopodobieństwo wystąpienia innego. Matematycznie jest to opisywane za pomocą prawdopodobieństwa warunkowego (przypomnijcie sobie 8 klasę)

  2. Procesy stochastyczne. Projekt analizowany tą metodą można postrzegać jako proces stochastyczny, czyli ciąg zdarzeń losowych uporządkowanych w czasie. "Łańcuch zdarzeń" jest uproszczonym modelem takiego procesu, gdzie stany projektu (np. "w terminie", "opóźniony") zmieniają się pod wpływem losowych zdarzeń.

  3. Teoria grafów. Użyjcie jej ze względu na przyjazny sposób, w który łasi się do człowieka. Naszkicujcie sobie w projekcie na odwrocie koperty wizualizację zależności między zdarzeniami w postaci diagramów łańcucha zdarzeń. Zdarzenia są wierzchołkami, a relacje między nimi (np. "powoduje", "zwiększa prawdopodobieństwo") są krawędziami skierowanymi. Analiza tych grafów pozwala zidentyfikować krytyczne łańcuchy zdarzeń, czyli sekwencje ryzyka o największym potencjalnym wpływie na projekt. Prawda, że piękne w swojej prostocie?

Jak to możecie wykorzystać? W oprogramowaniu które dla siebie napiszecie (VBA, Python) zaimplementujcie to w połączeniu z wcześniej opisaną symulacją Monte Carlo. Algorytm jest na tyle prosty, że nawet małpa jak zeskoczy z drzewa to w kilka wieczorów przy filiżance kawy zapewni Wam działające narzędzie po testach. Uzyjcie technologi AI - np. od Google.

Sugestia: nie poprawiajcie zbieżności, jeżeli pierwsze obliczenia pokażą, że algorytm jest wydajny. Tak zapewne będzie w mikroprojektach gdy na wejściu macie nie więcej niż kilka tysięcy zadań elementarnych.

W każdej iteracji Waszej symulacji:

  1. Losowane jest wystąpienie zdarzeń na podstawie ich prawdopodobieństw (z uwzględnieniem zależności i prawdopodobieństwa warunkowego).

  2. Jeśli dane zdarzenie "wystąpi" w danej iteracji, jego wpływ jest dodawany do harmonogramu lub budżetu.

  3. Cały plan projektu jest ponownie przeliczany.

Po dostatecznej liczbie takich przebiegów (zazwyczaj wystarczy kilkaset tysięcy, czasami kilkadziesiąt) uzyskuje się statystyczny obraz możliwych wyników projektu, który uwzględnia nie tylko niepewność w poszczególnych zadaniach, ale także złożone zależności między ryzykami. I ostatnie zdanie z praktyki. Poniżej przykładowy wynik do rozmowy ze Sponsorem Głównym Projektu. Macie poważne argumenty, na to, że dosypanie zasobów może istotnie zmienić kształt tych krzywych.

Zachwyca Was w tej ilustracji naturalna jak oddychanie wiarygodna wycena ryzyka budżetowego i harmonogramowego?

Czujcie się zainspirowanie. Piotr Filipiuk dzięki za trzymanie w dłoni kaganka. Mam głębokie przekonanie, że charakter wiedzy jest bardzo zbliżony istotowo do dobra i miłości - szybko się mnoży przez dzielenie...

Pierwodruk na LinkedInie