Przejdź do treści

Analiza procesów

W którym miejscu można skrócić proces, na której fazie trwa on najdłużej?

Dzisiaj zajmiemy się analizą dowolnego procesu, w którym można wskazać jakieś fazy. Zadanie wzięło się z pracy, którą wykonuję na co dzień: który element procesu wytwórczego oprogramowania trwa najdłużej? Czy to, że przygotowanie systemu IT trwa tak długo to wina IT (analiza wymagań, przygotowanie dokumentacji dla programistów, samo programowanie, testy) czy biznesu (przygotowanie wymagań biznesowych, oceny opłacalności rozwiązania, przygotowanie dokumentacji do decyzji wszelakich komitetów sterujących)? Czy jak zamówię przesyłkę dzisiaj to dotrze ona do mnie w krótszym czasie niż przy zamówieniu za miesiąc? Ile czasu będę czekał na pizzę? Dlaczego klient w sklepie (urzędzie, banku, placówce służby zdrowia) obsługiwany jest tak długo? Dlaczego w przychodni zapisuje się na wizyty co 15 minut, jak i tak są opóźnienia?

Weźmy przykład teoretyczny, chociaż dość realny – zakupy przez internet. Możemy wyróżnić kilka podstawowych faz:

  • zamówienie towaru – tutaj to klient jest odpowiedzialny za proces wyboru towaru, dodanie do koszyka i opłacenie zamówienia. Nasz proces zaczyna się w momencie kliknięcia “Kupuję”
  • po weryfikacji zamówienia sklep oczekuje na płatność
  • po otrzymaniu płatności – przystępuje do realizacji zamówienia, czyli procesie polegającym kolejno na:
    • zebraniu towaru z magazynu
    • zapakowaniu towaru – przygotowanie paczki do przesłania
    • nadaniu paczki do transportu
  • tutaj sklep właściwie kończy swoją działalność, a pałeczkę (paczkę) przejmuje dostawca:
    • kurier odbiera paczkę ze sklepu (albo sklep nadaje ją na poczcie)
    • firma kurierska (lub poczta) przewozi paczkę do odbiorcy
    • kurier przekazuje paczkę klientowi sklepu
    • kurier zaznacza w jakimś systemie, że paczka została dostarczona
  • sklep otrzymuje informację, że zamówienie zostało zrealizowane

Do analizy takiego procesu wystarczą nam informacje o momentach (datach) na przykład zakończenia każdej z faz. A później wystarczą zainstalowane w R pakiety:

Skąd wziąć dane o procesie? Można poszukać w sieci, można wziąć z jakiegoś sklepu, można na przykład próbować scrapować strony typu śledzenie przesyłek poszczególnych kurierów (zgadywać numer przesyłki i sprawdzać jej historię).

Można też je wygenerować – ja dane przykładowe przygotowałem w Excelu. W czterech kolejnych kolumnach wpisałem:

  • numer zamówienia
  • datę zamówienia, która oznacza moment zakończenia procesu składania zamówienia na towar
  • datę zakończenia procesu pakowania przesyłki
  • datę zakończenia procesu wysyłki
  • datę doręczenia przesyłki do adresata

Numer zamówienia to po prostu kolejny numer (nie ma on żadnego znaczenia, ważne żeby był unikalny).

Datę zamówienia wygenerowałem losowo – od aktualnej daty odjąłem losową liczbę. Przedział z którego losujemy wybrałem tak, aby najwcześniejsza data była jeszcze w 2017 roku. Odpowiednia formuła to =DZIŚ()+LOS.ZAKR(-330;-20).

Datę pakowania przygotowałem dodając do daty zamówienia losową liczbę zależną od miesiąca daty złożenia zamówienia. Tylko po to, aby uzyskać różne wyniki dla różnych miesięcy (zasymulować sezonowość).

Data wysyłki to z kolei data pakowania plus kilka (losowa wartość, także zależna od miesiąca) dni.

Datę doręczenia przygotowałem analogicznie. Ważne: liczby dodawane do kolejnych dat (zamówienia, pakowania i wysyłki) losowane są z różnych zakresów, tak aby uzyskać różne średnie długości faz.

Ten sam proces można oczywiście przygotować w R.

Potrzebujemy (głównie dla wygody) jeszcze słownika statusów i ich kolejność w drodze przez proces:

Przygotowane dane wczytujemy i nieco przekształcamy:

Lista w postaci długiej odpowiada temu co może przyjść z jakiegoś systemu:

Nr zamówienia Status Data
ZAM_0001 zamowienie 2017-03-23
ZAM_0001 pakowanie 2017-03-30
ZAM_0001 wysylka 2017-04-04
ZAM_0001 dostawa 2017-04-24
ZAM_0002 zamowienie 2017-03-14
ZAM_0002 pakowanie 2017-03-21
ZAM_0002 wysylka 2017-03-25
ZAM_0002 dostawa 2017-04-20
ZAM_0003 zamowienie 2017-07-06
ZAM_0003 pakowanie 2017-07-19

Widać, że każde zamówienie przechodzi przez kolejne fazy kończące się w określonym momencie (tutaj wystarczy dokładność co do dnia – przy zamówieniu pizzy liczą się minuty).

Zobaczmy teraz przykładowe zamówienia na osi czasu:

Jak widać różne są długości całego procesu, nie do końca widać jakąś zależność między długością poszczególnych faz (no, najdłuższa jest ostatnia). Tym bardziej chyba nie widać zależności czasu trwania określonej fazy od miesiąca. A przecież w grudniu przed świętami zamówień może być więcej, przesyłek również – wszystko to ma wpływ na długość procesu. Naszym zadaniem jest znaleźć miejsca opóźnień. Miejsca, bo powody to nieco inna analiza.

Na początek sprawdźmy czy w naszych laboratoryjnych danych widać różnice w liczbie trwających faz w ujęciu miesięcznym.

Cały proces jest swego rodzaju kolejką: nie będzie jednej fazy, o ile nie zakończy się poprzednia. Stąd widoczne powyżej w styczniu mniejsze ilości elementów będących w fazach wysyłka, pakowanie czy (to najbardziej) dostawa naszego procesu. Daty i długości faz są dobrane tak, żeby było to wyraźnie widać. Dodatkowo nie mamy historii sprzed 2017 roku. I tak w dostawie w styczniu jest mało towarów, bo nie zdążyły przejść przez zamówienie, wysyłkę i pakowanie.

Takie spojrzenie niewiele nam daje szczerze mówiąc. Policzymy długości każdej z faz dla każdego z zamówień:

Otrzymamy tabelkę podobną do danych źródłowych, ale już z czasami trwania poszczególnych faz procesu dla każdego z zamówień:

Nr zamówienia Faza Data początkowa Data końcowa Czas trwania fazy
ZAM_0001 pakowanie 2017-03-23 2017-03-30 7
ZAM_0001 wysylka 2017-03-30 2017-04-04 5
ZAM_0001 dostawa 2017-04-04 2017-04-24 20
ZAM_0002 pakowanie 2017-03-14 2017-03-21 7
ZAM_0002 wysylka 2017-03-21 2017-03-25 4
ZAM_0002 dostawa 2017-03-25 2017-04-20 26
ZAM_0003 pakowanie 2017-07-06 2017-07-19 13
ZAM_0003 wysylka 2017-07-19 2017-07-26 7
ZAM_0003 dostawa 2017-07-26 2017-08-22 27
ZAM_0004 pakowanie 2017-10-10 2017-10-16 6

Zwróćcie uwagę, że brakuje fazy zamówienie. W tym przypadku to oczywiste – zamówienie do data rozpoczęcia procesu, ta faza nie trwa, to wręcz nie jest faza.

Teraz możemy już sprawdzić najważniejsze liczby opisujące rozkład czasów trwania naszych faz: wartości minimalną i maksymalną, średnią i medianę oraz kwartyle i odchylenie standardowe:

Faza Min Kwartyl 25% Średnia Mediana Kwartyl 75% Max Odchylenie
standardowe
pakowanie 2 5 7.3870 7 9 28 3.710137
wysylka 1 2 4.2185 4 6 15 2.453318
dostawa 2 8 15.1625 13 20 57 9.452501

Swoją drogą podobny efekt można uzyskać w zdecydowanie krótszym kodzie (interesuje nas część CzasTrwania) – sami sprawdźcie co da:

Wprawne oko wyłowi z liczb wszystkie interesujące informacje, ale dla zarządu potrzebny jest slajd, zatem wykres:

Co my tutaj mamy?

  • Pakowanie zajmuje średnio 7 dni (7 to mediana, średnia to 7.4)
  • wysyłka jest najkrótsza, ale zajmuje (mediana) 4 dni
  • najdłuższa jest dostawa – mediana to 13 dni

Jeśli więc mielibyśmy szukać oszczędności na czasie to pierwszym punktem powinna być weryfikacja firmy dostarczającej przesyłki.

Warto też zastanowić się w szczegółach nad pakowaniem – czy tyle trwa zebranie towaru z magazynu? Za może samo przygotowanie paczki? Dokładna analiza powinna obejmować też sprawdzenie jak to wygląda dla poszczególnych zamówień (jakich kategorii towarów, wielkości towaru, może położenia magazynu, kto wtedy był na zmianie). W każdym razie podstawowa statystyka to dobry punkt zaczepienia.

Kolejnym krokiem jaki można wykonać to sprawdzenie czy długość faz zależy w jakiś sposób od czasu realizacji zamówienia (pamiętacie wspomniane święta? Co roku poczta i kurierzy mają więcej paczek, zatem dostarczają dłużej, bo sortownie nie wyrabiają).

Oczywiście dane spreparowałem w taki sposób aby było widać ten efekt. Powyżej widać średnią (może być równie dobrze mediana) dla poszczególnych faz rozpoczynających się w danym dniu, co ma sens przy dużej liczbie zamówień. Możemy podzielić dane innym kluczem: kolejnym tygodniem roku, dniem tygodnia i tak dalej. Wszystko zależy od charakteru naszego procesu i wpływu kalendarza na jego przebieg.

Przedstawmy jeszcze te same dane na wykresach dla zarządu – ile łącznie trwa proces w zależności od miesiąca?

Wykres skumulowany może być mylący, rozdzielmy zatem fazy na oddzielne słupki:

Z obu wykresów (najlepszym rozwiązaniem byłoby dodanie czarnej linii z pierwszego wykresu do wykresu drugiego, być może z osią dodatkową) widać, że w naszym sztucznym sklepie najlepiej zamawiać w maju lub czerwcu. Jako właściciel sklepu szukałbym przyczyn tak długich czasów pakowania (szczególnie w listopadzie) i zastanowił się czy w wakacje nie korzystać z innej firmy kurierskiej.

Tyle tylko, że są to sumy długości poszczególnych faz trwających w danym miesiącu. Pułapka polega na tym, że nie są to czasy oczekiwania na pełną realizację zamówienia. Coś mogło być pakowane w maju, a transportowane w czerwcu – wówczas to samo zamówienie zasili słupek czerwony w maju, a słupek niebieski już w czerwcu. Trzeba policzyć długość procesu dla każdego z zamówień z osobna:

Dane delikatnie się różnią dla całego roku, grudzień jest całkowicie inny. Dodam jeszcze, że mediana czasu realizacji zamówienia dla całego roku to 24 dni, czyli dłużej poczekamy na swój zamówiony towar w wakacje i przed Gwiazdką.

Oby to nie była reguła – zamawiajcie prezenty już teraz!

2 komentarze do “Analiza procesów”

  1. Pingback: Parsowanie XMLa w R | Łukasz Prokulski

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *