Wyobraźcie sobie, że musicie odpowiedzieć na pytanie, jaką cenę wziąć za projekt, albo kiedy skończycie go. Albo inne pytanie, jaką maszynę wybrać na naszą linię produkcyjną, drogą i bezawaryjną, czy tanią, ale łatwą w naprawie? Albo inny dylemat, jaką mamy szansę zapewnić SLA aktualnym składem osobowym podczas, gdy ciągle zmienia się ilość zgłoszeń? Albo jesteście prezesem firmy i chcielibyście świadomie kontrolować apetyt przedsiębiorstwa na ryzyko. To są przykłady sytuacji, w których występuje dużo zjawisk losowych. A zatem i najlepsza odpowiedź: TO ZALEŻY. Najlepsza, bo zawsze prawdziwa. Jednak taka odpowiedź niewiele wnosi.

W takiej sytuacji przydatne mogą się okazać metody wzięte ze świata statystyki. Czyli świata zdarzeń losowych, ale nie chaotycznych. Ich losowość przypomina z góry opisany schemat występowania. Zdarzenia typowe pojawiają się częściej, zdarzenia skrajne rzadziej. Przykładowo na ulicy można przypadkiem spotkać osobę bardzo bogatą, ale szanse na to są nikłe. Większość mijanych osób zarabia przeciętnie.

W opisywanym przypadku wykorzystywana jest nasza symulacja Trucks, która jest dostępna za darmo online pod adresem: sim.octigo.pl. Trzeba podać swój pseudonim oraz numer pokoju: 1.

Biznes jest pełen zdarzeń losowych. Czy maszyna się zepsuje, czy uda się skończyć zadanie dzisiaj, czy klient zamówi u nas usługę, czy konwersja na stronie przekroczy ustalony próg, czy klient nie zgłosi więcej zastrzeżeń do zlecenia? Dziesiątki sytuacji wokół zachowuje się przypadkowo, ale nie chaotycznie. Oznacza to, że zwykle maszyna działa, a psuje się tylko kilka razy w miesiącu, zwykle spóźniamy się z zadaniem nie więcej niż o 10 dni, średnio 20 klientów zamawia usługi miesięcznie, typowa konwersja to 5%, a klient z reguły zgłasza zmiany o wartości od 5 do 30% budżetu projektu.

Problem polega na tym, że:

  1. Zdarzenia są ze sobą powiązane. Jeżeli klient zamówi projekt, to pewnie zamówi coś jeszcze, ale z drugiej strony pewnie przekroczymy początkowy budżet. Jeżeli realizujemy duże zlecenie, to ryzyko zepsucia maszyny rośnie.
  2. Nie gromadzimy danych o rzeczywistym występowaniu i wpływie tych zdarzeń. Powodem tu może być nadmierna pewność siebie przy prognozowaniu zachowania się zdarzeń losowych, brak wiary, że posiadanie danych coś zmieni, albo zwykła bieżączka.

Jedną z popularniejszych metod opisu powiązanych zdarzeń losowych jest metoda Monte Carlo. Pominę tu jej genezę i związaną z nią teorię, bo nikt nie chce słuchać o obliczaniu całek ani polskich wątku w jej historii. Przejdźmy do zastosowań.

Problem trzech ciężarówek

Wyobraźmy sobie, że prowadzimy niewielką firmę logistyczną. Mam dzisiaj trzy ciężarówki i chcemy kupić czwartą. Możemy dla uproszczenia wybrać tylko spośród trzech posiadanych typów. Obok pokazałem obrazek z danymi tych ciężarówek po kilkudziesięciu dniach jeżdżenia. Każda z ciężarówek ma różne charakterystyki. Część z nich jest stała: ładowność, koszt dzienny leasingu. Część zachowuje się losowo: koszt paliwa, prędkość, dni w naprawie, koszt napraw, przychód z zleceń transportowych. Jaką ciężarówkę dokupić, aby zmaksymalizować nasze zyski?

Do odpowiedzi na pytanie użyjemy metody Monte Carlo. Załóżmy, że zbieramy dane o zleceniach transportowych oraz o zachowaniu się auta niebieskiego, purpurowego i żółtego. Po odczekaniu roku (300 dni roboczych) uzyskaliśmy takie dane (pełną tabelę możecie sobie otworzyć w tym linku). Ich fragment widać na obrazku poniżej.

Co możemy wyczytać z tej tabeli? Po pierwsze zlecenia także są zdarzeniem losowy, jeżeli chodzi o ich wielkość, cenę, datę pojawienia się oraz deadline. Mamy zatem dość skomplikowany model obejmujący wiele zdarzeń losowych, które są ze sobą powiązane. Spróbujemy teraz zbudować model Monte Carlo do tej sytuacji.

Krok pierwszy – rozkłady zdarzeń

Po pierwsze potrzebujemy dowiedzieć się, jaki rozkład statystyczny ma każde zdarzenie losowe. Jeżeli mamy aplikację do statystyki, to ona zrobi większość roboty za nas. Wystarczy wprowadzić dane wybranego zdarzenia, np. wielkości zamówienia i wywołać funkcję sprawdzającą, jaki to rozkład oraz jakie ma parametry. Pierwszy najbardziej oczywisty wybór to hipoteza, że zmienna losowa jest w rozkładzie normalnym. Statystyce opisowej i hipotezom warto poświęcić więcej czasu, np. kilka lat, ale w tym artykule nie chcę zagmatwać, więc pójdziemy na skróty.

Jeżeli użyjemy arkusza kalkulacyjnego Google, to łatwo możemy narysować histogram (wykres słupkowy, który pokazuje częstości występowania poszczególnych wartości). Na oko wygląda, jak rozkład normalny, choć ma z lewej strony wydłużony ogon. Od razu uprzedzę ataki purystów statystyki, tak wiem, że na oko to żadne podejście do analizy statystycznej, ale tak jak wspomniałem wcześniej, jeden artykuł o Monte Carlo to za mało, aby przekazać wiedzę o wnioskowaniu statystycznym. A zależy mi na zaprezentowaniu ogólnej logiki całej metody Monte Carlo.

Tak więc “na oko” wygląda, że ma lewy ogon dłuższy, ale przyjmujemy, że jest normalny. To znaczy, że jest kilka dużych zleceń, które zaburzają nam normalność. W internecie znalazłem fajne narzędzie stosujące test Kołmogorowa-Smirnowa lub test Andersona-Darlinga i według niego rozkład jest normalny. A skoro tak, to możemy po pierwsze odczytać średnią i odchylenie standardowe. A po drugie użyć funkcji z arkusza Google do wygenerowania kolejnych wartości tej zmiennej, ale (uwaga!) zgodnych z zadanym rozkładem.

Odczytujemy zatem, że średnia wynosi 15,8 wielkości zlecenia, a odchylenie standardowe to 8,5. W arkuszu Google najpierw losujemy wartość za pomocą funkcji =RAND(), a potem zamieniamy ją na wartość z zadanego rozkładu za pomocą funkcji =NORMINV(x, średnia, odchylenie standardowe). Dla uproszczenia obok dałem zrzut ekranu, a konkretne wzory macie w załączonym arkuszu.

W ten sposób generujemy 300 razy zmienną losową wielkości zamówienia, ale zgodną z obserwacjami z naszego przykładu. Dlaczego 300 razy? Bo tworzymy losowy rok pracy firmy.

Idąc tym samym schematem, losujemy rozkłady wszystkich istotnych dla nas zmiennych. Przykładowo czas trwania awarii będzie wyglądał tak. Gdy podstawimy tą zmienną do testu to okaże się, że nie ma rozkładu normalnego. Jednak warto zajrzeć tu głębiej. Wszak awarie dotyczą konkretnych ciężarówek: A,B,C. I mają one różny rozkład. Jak sobie z tym poradzić? Zakładamy trzy karty Monte Carlo dla każdego typu ciężarówki. Przyda nam się to przy późniejszym wyborze, jaką ciężarówkę kupić. W przypadku ciężarówki A próba jest mała niestety, jednak ocznie widać, że rozkład przypomina normalny (zobacz obrazek poniżej). Średnia czasu awarii wynosi 1,6 dnia, a odchylenie standardowe – 0,8 dnia. Oznacza to, że ciężarówka A średnio w razie awarii stoi 1,6 dnia, a 68% awarii będzie w przedziale 1,6 – 0,8 do 1,6 + 0,8, czyli od 0,8 dnia do 2,4 dnia. Taką samą analizę możemy zrobić dla pozostałych ciężarówek B i C. Szybko okaże się, że najbardziej awaryjna jest C, bo choć rzadko się psuje, to w razie awarii stoi bardzo długo.

Możemy też dokonać kolejnego uproszczenia i wyliczyć, ile dni w roku ciężarówka A stoi, a następnie przyjąć, że tyle samo dni będzie stała w kolejnych latach. Innymi słowy możemy uprościć obliczenia zamieniając zmienną losową na stałą.

Mamy teraz wygenerowane dwie zmienne dla trzech arkuszy: A, B, C. Potrzebujemy jeszcze wiedzieć, czy danego dnia wystąpiła w ogóle awaria. Bo okazuje się, że ciężarówka A ma regularnie problemy, a C rzadko. Ciężarówka A zanotowała 21 awarii na 300 dni. W ciągu tych 300 dni stała przez 34 dni, a zatem na 266 dni roboczych zanotowała 21 awarii, co uśredniając daje 0.08 szans na to, że danego roboczego dnia ciężarówka A się zepsuje. Przyjęliśmy tutaj upraszczające założenie, że częstotliwość awarii ma rozkład równomierny, jak w kostce do gry lub rzucie monetą. Znowu 300 razy losujemy wartość, a następnie podstawiamy ją do wzoru =IF(x<0.08,1,0). Jeżeli wylosowana wartość jest mniejsza od 0.08 to ciężarówka stoi (0), a jak większa to jeździ (1). Rozróżnienie zmiennej czasu trwania awarii i szansy awarii ma znaczenie, bo gdyby się udało nam skrócić czas naprawiania, to mogłoby się okazać, że mamy więcej awarii. Dlaczego? Bo ciężarówka nie psuje się, gdy stoi, a kiedy jeździ. Jak awarie będą usuwane szybciej, to ciężarówka będzie więcej dni jeździć.

Krok drugi – funkcja transferu

Uprośćmy tymczasowo model Monte Carlo tylko do tych dwóch zmiennych. Jego celem będzie policzenie, ile zleceń, liczonych w sztukach towarów, nam ucieknie, dlatego, że ciężarówka miała awarię. Aby policzyć wynik, potrzebujemy teraz stworzyć funkcję, która łączy zmienne losowe, tzw. funkcję transferu. W naszym przypadku wzór może wyglądać tak: X1 * X3.

gdzie:

X1 – wielkość zlecenia

X2 – czas trwania awarii

X3 – czy jest awaria 0/1 wyliczone na podstawie prawdopodobieństwa i X2 czyli średniego czasu awarii.

Krok trzeci – symulacja losowych lat

Mamy rozkłady trzech zmiennych, mamy funkcję, która agregujemy je i wylicza ile towarów w zleceniach nam ucieknie. Wszystko to narazie dla ciężarówki A. Teraz wystarczy wielokrotnie generować wynik funkcji transferu, aby stworzyć rozkład utraty zleceń dla ciężarówki A. To tak, jakbyśmy symulowali wiele lat pracy naraz. Ja zrobiłem to ćwiczenie dla 50 losowych lat, ale w praktyce należy więcej razy je powtarzać, aby wyłapać wartości krańcowe oraz aby wykres się wygładził. Na koniec sortujemy wartości rosnąco. A oto końcowy wykres.

Jak go czytać? Mamy 50% szans na to, że stracimy maksymalnie 380 sztuk towarów w niezrealizowanych zleceniach z powodu awarii ciężarówki. Mamy 80% szans na to, że stracimy maksymalnie 400 sztuk towarów w zleceniach.

Teraz wystarczy zrobić taką samą analizę dla ciężarówki B i C i możemy je porównać między sobą.

Podsumowanie

W tym ćwiczeniu zobaczyliśmy, jak użyć metody Monte Carlo do analizy wielu zmiennych losowych. Przykład z ciężarówkami został bardzo uproszczony. Jeżeli macie ochotę, to możecie sami spróbować go przeanalizować dla kilkunastu równoległych zmiennych. Cała symulacja jest dostępna pod tym adresem: sim.octigo.pl (pokój numer: 1).

W trakcie analiz dokonywaliśmy szeregu uproszczeń, aby nie ugrzęznąć w rozważaniach na temat analizy statystycznej, za co przepraszam. Zależało mi na pokazaniu metody Monte Carlo na konkretnym przykładzie, który można też samemu przećwiczyć.

Te wszystkie uproszczenia, których dokonywaliśmy pomagają wejść w tą metodę, ale warto podkreślić, że powiększają błąd analiz. Bo na przykład założyliśmy, że ilość dni awaryjnych w roku jest stała. To może nie być prawdą. Jak wejdziemy w głębiej w analizę, to okaże się, że  czasy awarii mają rozkład normalny, ilość dni między awariami ma rozkład Weibulla, a zatem w kolejnych latach liczba dni awaryjnych będzie się zmieniać.

Warto do takich analiz pochodzić metodą iteracyjną. Najpierw tworzymy maksymalnie prosty model, potem dodajemy do niego kolejną zmienną, potem usuwamy upraszczające założenie itd.

Wszystkie dane znajdziecie w załączonym arkuszu. Zapraszam do samodzielnej zabawy.

A jakby wam było mało, to prowadzimy szkolenia z metod Monte Carlo, na które serdecznie zapraszamy. Więcej o szkoleniu z metody Monte Carlo przeczytacie tutaj.

Wartość metody Monte Carlo

Po pierwsze możemy ocenić, jak zachowują się zasoby naszej organizacji: ludzie, ciężarówki, dźwigi, serwery w konfrontacji ze zmiennymi zdarzeniami losowymi. Możemy ocenić, które jest bardziej efektywne, a które mniej.

Po drugie możemy podjąć świadomą i policzalną decyzję, jaki apetyt na ryzyko akceptujemy. Czy chcemy dopłacać, ale bezpiecznie pokryć 80% wpływu ryzyk, czy też działamy taniej, ale agresywnie na poziomie 50%. Przy Monte Carlo ta decyzja staje się świadoma.

Po trzecie w razie negocjacji możemy szybko zidentyfikować cechę ciężarówki, człowieka, która w największym stopniu odpowiada za losowość jego zachowania. To może się okazać brak kompetencji, awaryjność, brak części zamiennych, czy nieproporcjonalnie trudne lub duże zlecenia.

Po czwarte widzimy obie strony ryzyk. Zarówno zagrożenia i nieprzewidywalne koszty, jak i okazje i uciekające zyski. Wszystko zależy od tego, jakie zmienne analizujemy i jak zdefiniujemy funkcję transferu.

 

Zapisz się na nasz newsletter

Zapisz się na nasz newsletter

Twój e-mail został zapisany

Share This