Dev.log

Process Mining - 프로세스 마이닝 본문

머신러닝과 딥러닝

Process Mining - 프로세스 마이닝

포켓몬빵 2022. 8. 8. 19:14

이번 포스팅에서는 프로세스마이닝에 대해 진행해 보도록 하겠습니다. 프로세스마이닝은 데이터마이닝의 한 분야로 프로세스 자체에 집중하는 방법이라고 할 수 있을것 같습니다. 예를 들어 환자가 감기에 걸려서 병원에서 진단을 받아보고자 합니다. 환자가 병원에가서 진료를 받기까지 진료예약, 외래각과접수, 외래진료실 검사예약, 원무수납, 처방전발급과 같은 다양한과정을 거치게 됩니다. 데이터 마이닝이 이러한 과정에서 결과적으로 무엇이 일어났는가와 무엇이 일어날까에 집중을 한다면, 프로세스 마이닝은 공정 과정 전체를 분석하고 분석결과를 시각화해서 해당 프로세스를 더 효율적으로 개선하고 발전시키는 방법론이라고 할 수 있습니다.

즉, 어떠한 프로세스에서 가장 일이 많이 몰리는 곳이나 가장 시간이 많이 소요되는 병목지점등과 같은 질문에 답을 주기 위해 프로세스 마이닝을 진행 할 수 있습니다. 프로세스 마이닝의 기본적인 개념은 정보시스템에 기록 되어 있는 이벤트 로그에서 지식을 추출함으로써, 사람들이 머리 속에서 추정하고 있는 프로세스가 아닌 실제 업무 프로세스를 도출하고, 모니터링하며, 개선하는 것입니다.

이벤트 로그(Event Log)

프로세스 마이닝에서는 이번트 로그라는 데이터를 사용하여 분석을 합니다. 이벤트로그는 케이스 아이디(case id), 액티비티(activity), 그리고 타임스탬프(timestamp)의 3가지 요소가 포함되어야 합니다. 먼저 아래의 이벤트 로그를 살펴보도록 합시다. 아래의 그림은 병원에서 환자들에 대한 프로세스 입니다. Patient 컬럼은 환자의 번호를 의미하며 이는 환자의 고유 번호로 환자 가각을 구별해 줄 수 있기 때문에 케이스 아이디가 됩니다. 그리고 activity는 어떠한 활동을 하였는지, timestamp는 activity가 발생된 시간, doctor는 주치의, cost는 activity의 비용을 의미합니다. 

프로세스 디스커버리(Process Discovery)

프로세스 디스커버리는 아무런 사전정보 없이 이벤트 로그로부터 모델을 도출하는 것을 의미 합니다. 이러한 프로세스 디스커버리는 pm4py 패키지를 통해 진행할 수 있으며 주요 알고리즘으로는 alpha miner, heuristc miner, inductive miner 등이 존재 합니다.

 

알파마이너 (Alpha Miner)

알파마이너는 이벤트 로그의 요소중 액티비티의 순서에 집중한 알고리즘입니다. 즉 하나의 케이스에 대해 액티비티가 어떤 순서대로 일어났는지를 확인 할 수 있습니다. 간단한 집수리 데이터를 통해 알파마이너를 통해 프로세스 디스커버리를 진행해 보도록하겠습니다. 아래는 집수리 이력데이터의 일부이며 dataframe 형태로 구성되었습니다.

아래의 데이터프레임을 먼저 이번트로그 형태로 변경시켜주어야하는데, 이는 pm4py패키지를 통해 아래와 같이 변경시켜 줄수 있습니다.

from pm4py.objects.conversion.log import converter as log_converter

eventlog = df.copy()
eventlog.rename(columns={'Start Timestamp': 'time:timestamp', 
                         'CaseID': 'case:concept:name', 
                         'TaskID': 'concept:name', 
                         'Originator': 'org:resource'}, inplace=True)

log = log_converter.apply(eventlog)

그후, Event log를 기반으로 프로세스 모델을 도출하는 process discovery와 해당 모델에 대해 시각화를 진행해보았습니다. 먼저 각 task들에 대한 빈도를 고려하지 않고 모든 activity를 프로세스에 도출할 수 있는 Alpha Miner 알고리즘을 통해 모델을 구축하여 보았습니다

from pm4py.algo.discovery.alpha import algorithm as alpha_miner
from pm4py.visualization.petrinet import visualizer as pn_visualizer

net, initial_marking, final_marking = alpha_miner.apply(log)
gviz = pn_visualizer.apply(net, initial_marking, final_marking) 
pn_visualizer.view(gviz)

Dircetly follwed graph

Dircetly follwed graph는 각 activity간의 directly follwed 관계를 나타낸 그래프입니다.

from pm4py.algo.discovery.dfg import algorithm as dfg_discovery
from pm4py.visualization.dfg import visualizer as dfg_visualization

dfg = dfg_discovery.apply(log)
gviz = dfg_visualization.apply(dfg, log=log, variant=dfg_visualization.Variants.FREQUENCY)
dfg_visualization.view(gviz)

또한, Dircetly follwd graph를 통해 프로세스를 진행하면서 걸리는 시간을 알아 볼 수도 있습니다.

dfg = dfg_discovery.apply(log, variant=dfg_discovery.Variants.PERFORMANCE)
gviz = dfg_visualization.apply(dfg, log=log, variant=dfg_visualization.Variants.PERFORMANCE)
dfg_visualization.view(gviz)

Dircetly follwed graph를 통한 집수리의 과정에 대해 프로디스커버리 과정을 거치면 알수있는 현상은 다음과 같습니다.

  1. FirstContact → MakeTicket → ArrangeSurvey → InformClient → Survey → ImmediateRepair or InternRepair or ExternRepair → RepairReady → SendTicektToFinAdmin → ReadyInformClient → TicketReady로 이루어 짐을 확인할 수 있습니다.
  2. ReadyInfromClient 와 SendTicketToFinAdmin 사이의 문제가 있어보임. 해당 문제에 대한 원인파악이 필요해 보입니다.
  3. InformClientSurvey가 진행된이후 Survey가 진행되기까지 Bottleneck현상이 발생되는것으로 파악되어집니다.
  4. InternRepair에서의 수리과정을 확인해 봐야할 필요성이 존재합니다.
  5. Survey → InternReapir로 넘어가는 처리시간에 대해 원인 파악이 필요해 보입니다.

이런식으로 프로세스마이닝을 진행하게 되면 프로세스에서 가장 일이 많이 몰리는 곳이나 가장 시간이 많이 소요되는 병목지점등과 같은 질문에 답을 얻을 수 있습니다.

Comments