Data Analysis & ML/Machine Learning

[프로세스 마이닝] 프로세스 마이닝(PM4PY)

YSY^ 2021. 7. 31. 22:10

프로세스 마이닝

  • 정보 시스템에 기록이 되는 이벤트 로그를 분석 하여 프로세스와 관련된 다양한 정보를 분석하는 기술
  • 계산 지능(Computational Intelligence) 및 데이터 마이닝과 프로세스 모델링 및 분석의 중간에 위치
  • 이벤트 로그에서 지식을 추출함으로써, 실제 업무 프로세스를 도출하고, 모니터링하며, 개선하는 것
  • 자동화된 프로세스 도출, 적합도 검사, 소셜 네트워크/ 조직 마이닝, 시뮬레이션 모델의 자동 생성, 모델 확장, 모델 수정, 케이스 예측 그리고 과거 데이터 기반 추천 등을 포함
  • 데이터 마이닝과 비즈니스 프로세스 모델링 및 분석의 중요한 연결 고리 역할

 

이벤트 로그

  • 프로세스 마이닝 기법을 적용하기 위해서는 “Event log”를 추출하는 것이 필수
  • 먼저 추적 대상(케이스)을 결정하고 “케이스 아이디(해당 event의 고유값)”, “언제(타임스탬프)”, “무엇(액티비티명)”을 했는지를 추출해야 함
  • 추가로 리소스(작업자, 부서, 기계 등), 트랜잭션 정보(상태) (in/out, start/end 등의 액티비티의 상태를 알려주는 칼럼) 등을 이벤트로그에 포함할 수 있음

출처 : https://fluxicon.com/book/read/dataext/
출처 : https://blog.rwth-aachen.de/pads/2020/03/27/on-the-importance-of-privacy-metadata-for-process-mining/

 

 

PM4PY

여러 프로세스 마이닝 알고리즘을 파이썬으로 구현한 라이브러리이며, 아래와 같은 코드로 설치한다.

pip install pm4py

 

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


process = pd.read_csv()
process.rename(columns={'customer_id': 'case:concept:name', 'product_title': 'concept:name', 'day': 'time:timestamp'}, inplace=True)
parameters = {log_converter.Variants.TO_EVENT_LOG.value.Parameters.CASE_ID_KEY: 'case:concept:name'}
event_log = log_converter.apply(process, parameters=parameters, variant=log_converter.Variants.TO_EVENT_LOG)
  • 먼저 “케이스 아이디(해당 event의 고유값)”, “언제(타임스탬프)”, “무엇(액티비티)를 설정해야 한다. 
  • 칼럼 이름을 변경해 주어야 하는데 case_id는 case:concept:name, 무엇은 concept:name, 언제는 time:timestamp로 설정해준다.
  • 그리고 파라미터 KEY_ID를 case:concept:name로 설정한다.
  • log_converter에 프로세스데이터, 파라미터를 적용하여 event_log 데이터를 만든다.

 

from pm4py.objects.conversion.log.converter import to_data_frame

df = to_data_frame.apply(event_log)
df.head()

  • 이후 event log데이터를 데이터프레임으로 바꾸어준다.

 

# activity 목록 도출
from pm4py.algo.filtering.pandas.attributes import attributes_filter

activities = attributes_filter.get_attribute_values(df, attribute_key="concept:name")
activities

  • 참고로 activities가 각각 몇번씩 나타나는 지를 볼 수 있다. 이 수치들을 참고하여 프로세스 마이닝시 하이퍼파라미터를 정할 수 있다.

 

휴리스틱 프로세스 마이닝

from pm4py.algo.discovery.heuristics import algorithm as heuristics_miner
from pm4py.visualization.heuristics_net import visualizer as hn_visualizer

heu_net = heuristics_miner.apply_heu(event_log, parameters={heuristics_miner.Variants.CLASSIC.value.Parameters.DEPENDENCY_THRESH : 0.90, 
                                                            heuristics_miner.Variants.CLASSIC.value.Parameters.MIN_ACT_COUNT : 500,
                                                            heuristics_miner.Variants.CLASSIC.value.Parameters.MIN_DFG_OCCURRENCES : 30,
                                                            heuristics_miner.Variants.CLASSIC.value.Parameters.DFG_PRE_CLEANING_NOISE_THRESH : 0.8,
                                                            heuristics_miner.Variants.CLASSIC.value.Parameters.LOOP_LENGTH_TWO_THRESH : 3
                                                            })
  • Dependency Threshold : Dependency가 설정한 threshold보다 높은 것만을 표시 (default: 0.5)
  • MIN_ACT_COUNT : 최소 activity 숫자 (default: 1)
  • MIN_DFG_OCCURRENCES : edge에 최소 몇번이상언급된 요소들만 남길지 (default: 1)
  • DFG_PRE_CLEANING_NOISE_THRESH : in order to remove weaker edges, default 0.05
  • LOOP_LENGTH_TWO_THRESH : length가 2인 루프 (a -> b -> a)에 대한 필터링을 위한 threshold
  • LOOP_LENGTH_ONE_THRESH : length가 1인 루프 (a -> a)에 대한 필터링을 위한 threshold

 

비주얼라이징 하기

gviz = hn_visualizer.apply(heu_net)
hn_visualizer.view(gviz)

 

728x90
반응형