Czas dostarczenia projektu IT jest niejednokrotnie jednym z kluczowych czynników sukcesu produktu cyfrowego na rynku, a pracochłonność jest często głównym składnikiem jego kosztu. Dlatego tak ważna jest informacja o prawdopodobnym terminie dostarczenia i potencjalnym koszcie projektu. Nie inaczej jest z projektami AI. W gruncie rzeczy są to projekty IT, tyle iż rozszerzone o bardzo istotną część jaką są modele ML/AI. Oczywiście w skład mogą wchodzić także inne prace związane z budową urządzeń, montażem czujników, itd. W niniejszym artykule przyjrzymy się również jak dzięki języka Python wykonać symulacje Monte Carlo w celu oszacowania czasu realizacji zadań metodą PERT by oszacować czas realizacji projektu oraz jego pracochłonność. Niepewność i złożoność zadań Klasyczne projekty IT są często dobrze zdefiniowane oraz oparte na ustalonych standardach i technologiach. Szacując ich czas trwania i pracochłonność można oprzeć się na wcześniejszych projektach i danych historycznych. Zadania do wykonania są bardziej liniowe i deterministyczne. Projekty AI w głównej mierze są procesem badawczym z dużą zmiennością wyników. Kluczem jest eksperymentowanie w kolejnych iteracjach co utrudnia oszacowanie pracochłonności. Wynik także może być trudny do przewidzenia i co więcej – może on wpłynąć na same założenia projektu. Elementy programistyczne i infrastrukturalne zapewniają projektom AI niezbędne narzędzia do procesowania danych, tworzenia architektury modeli, ich trenowania i weryfikacji wyników. Jednak całość jest znacznie bardziej niepewna niż klasyczne projekty IT we wszystkich wymienionych wcześniej aspektach: czas trwania, pracochłonność i jakość efektu końcowego. Metoda PERT w projektach IT PERT (ang. Program Evaluation and Review Technique) to metoda planowania i kontroli nad projektem, w której czas potrzebny na wykonanie każdego zadania szacowany jest na podstawie trzech zmiennych (rozkład trójkątny): Na podstawie tych danych oblicza się czas oczekiwany zakończenia zadania, będący w najprostszym wypadku średnią ważoną: $$ T_{E} ={\frac {O + 4M + P }{6}} $$ Czasy O, M i P w szybkich estymacjach bardzo często są szacowane ekspercko na podstawie doświadczeń specjalistów, ale są też metody bardziej dokładnego szacowania, zwłaszcza gdy posiadamy historię realizacji poprzednich projektów o czym będzie niżej. Graf jako reprezentacja projektu Ponieważ zadania często mogą być realizowane równolegle, to graf staje się doskonałym narzędziem do ich odwzorowania. Zadania i zależności między nimi są umieszczane na grafie skierowanym, co ważne, bez pętli (DAG – graf skierowany acykliczny), gdzie wierzchołkami są zadania, a krawędzie są zależnościami między nimi wskazując kierunek realizacji prac. Czas wykonania zadania jest własnością krawędzi, dzięki czemu wiemy ile zajmie realizacja zadania nim przejdziemy do następnych. W ten sposób można oszacować nie tylko sumaryczną pracochłonność projektu, ale i czas jego wykonania dzięki analizy ścieżki krytycznej (CPM). Poniżej przykładowy projekt z listą zadań i reprezentacją w postaci grafu. Korzytam ze skryptów Python. Pełny kod estymacji projektu znajdziecie na końcu artykułu. Obliczona czasochłonność projektu: Czas realizacji projektu jako ścieżka krytyczna w grafie Dzięki użyciu grafu jako reprezentacji projektu możemy skorzystać z jego narzędzi i pomimo często zawiłych zależności między zadaniami, łatwo oszacować prawdopodobny czas wykonania projektu. Reprezentuje go ścieżka krytyczna, czyli najdłuższa ścieżka od pierwszego do ostatniego zadania w projekcie, gdzie długość ścieżki jest mierzona czasem wykonania wszystkich zadań na ścieżce. Jak wcześniej wspomniałem nasz graf zależności zadań nie posiada pętli (ang. directed acyclic graph, DAG). Tylko taki rodzaj grafu gwarantuje możliwość obliczenia ścieżki krytycznej. Ścieżka na naszym grafie została wyznaczona dzięki metody w bibliotece networkx (Python), a jej czas to 119.85 dnia. Metoda Monte Carlo – symulacja realizacji projektu Symulacja Monte Carlo pozwala uzyskać bardziej wiarygodne wyniki metody PERT z uwzględnieniem niepewności i ryzyka, więc idealnie nadaje się do estymacji projektów AI, w których zadania są eksperymentami obciążonymi dużą niepewnością. Metoda Monte Carlo to bardzo proste, a zarazem potężne narzędzie. Znając rozkład zmiennej losowej wykonujemy wielokrotne jej losowanie, by przybliżyć jej wartość oczekiwaną. Tą metodę można zastosować praktycznie w każdym zagadnieniu mającym interpretację probabilistyczną, gdzie analityczne rozwiązanie jest zbyt skomplikowane lub wręcz nieznane. W przypadku metody PERT zmienną losową będzie albo rozkład trójkątny definiowany parametrami O, M i P albo rozkład beta-PERT, który jest bardziej zaawansowaną wersją rozkładu trójkątnego. Jest asymetryczny i bardziej elastyczny, co pozwala lepiej modelować rzeczywiste dane. Nic nie stoi na przeszkodzie, by wybrać inny dowolny rozkład, jeżeli tylko odpowiada on rzeczywistym danym. jeżeli masz dane historyczne, to warto je wykorzystać do określenia rozkładu, pamiętając jednocześnie o dryfie danych – coś to było prawdziwe w poprzednich projektach kilka lat temu nie musi być przez cały czas aktualne. Dla naszego przykładowego projektu wynik symulacji Monte Carlo (10000 symulacji) możemy zobaczyć w postaci histogramu. Porównałem na nim symulacje z użyciem rozkładów trójkątnego i beta-PERT. Prawdopodobieństwo zakończenia projektu w założonym czasie zależności od rozkładu: Wnioski: Ścieżka krytyczna probabilistyczna W analizie PERT + Monte Carlo z rozkładem trwania zadań (np. beta-PERT) nie istnieje jedna deterministyczna ścieżka krytyczna. Zamiast tego mamy do czynienia z rozkładem prawdopodobieństwa ścieżek krytycznych. Jest ich tyle ile symulacji – w naszym przypadku 10000. Pozwala to strategicznie podejść do problemu realizacji projektu i występującego ryzyka. Najczęściej występującą (modalną) ścieżkę krytyczną przyjmuje się zwykle jako najbardziej reprezentatywną dla projektu. Analiza ryzyka Metoda Monte Carlo pozwala na lepsze podejście do analizy ryzyka i kontroli realizacji poszczególnych zadań, mianowicie przez: W naszym projekcie mamy trzy ścieżki krytyczne: Posortowana lista zadań występujących na ścieżkach krytycznych: Zalety użycia Monte Carlo Wrócę jeszcze raz do tabeli porównującej estymowaną długość projektu różnymi metodami. Widać wyraźnie, iż metoda Monte Carlo wprowadza do estymacji wpływ niepewności w realizacji zadań. Oczywiście niepewności są w granicach, które sami wyznaczymy parametrami O, M, P. Podsumowując metoda Monte Carlo: Jak szacować pracochłonność zadań AI/ML w modelu PERT? W klasycznych projektach IT zadania są często deterministyczne: wiemy, co trzeba zbudować i jak. W projektach AI/ML sytuacja jest inna – wiele zadań ma charakter eksperymentalny, iteracyjny i silnie zależny od danych. W każdym zadaniu „stworzenie modelu AI/ML” należy uwzględnić: 1. Rozbicie zadania na mniejsze mierzalne komponenty, np.: 2. Szacowanie z użyciem dwóch wymiarów: czasu trwania jednego cyklu i liczbę cykli. Dla uproszczenia warto założyć niezależność następnych iteracji od poprzednich. a) Czas jednej iteracji (O, M, P): b) Liczba iteracji (O, M, P): Do szacowania czasu iteracji czasami może być bardziej odpowiedni rozkład logarytmicznie normalny (log-normal), a do szacowania liczby iteracji geometryczny. W grafie można ująć „stworzenie modelu AI” jako jedno zadanie z wyznaczoną końcową estymacją, ale można też rozpisać go na kilka zadań, np. „eksperyment I”, „eksperyment II” itd. Rozwijając temat rozbicia zadania na mniejsze można się pokusić choćby o wstawienie węzłów warunkowych do grafu: „jeśli model A nie działa, to eksperymentuj z modelem B”. Zalety powyższego podejścia to: Podsumowanie Planowanie projektów z komponentami AI/ML to balansowanie między eksperymentem a harmonogramem. Klasyczne podejścia do zarządzania projektami, takie jak metoda PERT, symulacje Monte Carlo oraz analiza ścieżki krytycznej (CPM), przez cały czas pozostają przydatne, choć wymagają adaptacji do specyfiki AI. Modele AI są nieliniowe i iteracyjne. Estymacja czasu ich stworzenia wymaga modelowania zarówno czasu jednej iteracji, jak i liczby potrzebnych iteracji. Zestaw narzędzi PERT + Monte Carlo pozwala oszacować nie tylko wartość oczekiwaną czasu trwania projektu, ale również jego rozkład prawdopodobieństwa i poziomy ryzyka. Graf zadań (DAG) i ścieżka krytyczna (CPM) pomagają w identyfikacji najbardziej wrażliwych punktów projektu i w optymalizacji harmonogramu. Rozkłady probabilistyczne, takie jak trójkątny, beta-PERT, log-normalny czy geometryczny, umożliwiają bardziej realistyczne odwzorowanie niepewności zadań AI/ML. Symulacje Monte Carlo pomagają nie tylko w wyznaczeniu średniego czasu trwania projektu, ale też w ocenie: „Z jakim prawdopodobieństwem uda się go zakończyć przed terminem X?” W projektach AI sztywne planowanie zawodzi tam, gdzie niepewność jest nieunikniona. Kluczem staje się nie dokładne przewidzenie daty wdrożenia projektu, ale zarządzanie niepewnością w sposób transparentny i wspierający decyzje. Modelowanie probabilistyczne z użyciem PERT i Monte Carlo daje taką możliwość. Co dalej? Chcesz lepiej planować projekty AI?Zamiast zgadywać terminy – modeluj niepewność.Zamiast frustracji – zyskaj kontrolę nad ryzykiem.Wypróbuj PERT i Monte Carlo w Pythonie na swoim projekcie AI. Masz pytania?Chętnie podzielę się doświadczeniem lub pomogę zaadaptować to podejście do Twojego zespołu. Praktyczna implementacja w Python Poniżej znajdziecie kompletny skrypt w języku Python, który pozwoli Wam poeksperymentować z symulacjami Monte Carlo przy estymacji projektów. Skrypt jest przeznaczony do uruchamiania w JupyterLab. Plik z przykładowym projektem: Lista niezbędnych paczek w środowisku Python wykorzystywanych przez skrypt (pod tym linkiem znajdziecie informację jak stworzyć takie środowisko):