프로세스 마이닝
- 정보 시스템에 기록이 되는 이벤트 로그를 분석 하여 프로세스와 관련된 다양한 정보를 분석하는 기술
- 계산 지능(Computational Intelligence) 및 데이터 마이닝과 프로세스 모델링 및 분석의 중간에 위치
- 이벤트 로그에서 지식을 추출함으로써, 실제 업무 프로세스를 도출하고, 모니터링하며, 개선하는 것
- 자동화된 프로세스 도출, 적합도 검사, 소셜 네트워크/ 조직 마이닝, 시뮬레이션 모델의 자동 생성, 모델 확장, 모델 수정, 케이스 예측 그리고 과거 데이터 기반 추천 등을 포함
- 데이터 마이닝과 비즈니스 프로세스 모델링 및 분석의 중요한 연결 고리 역할
이벤트 로그
- 프로세스 마이닝 기법을 적용하기 위해서는 “Event log”를 추출하는 것이 필수
- 먼저 추적 대상(케이스)을 결정하고 “케이스 아이디(해당 event의 고유값)”, “언제(타임스탬프)”, “무엇(액티비티명)”을 했는지를 추출해야 함
- 추가로 리소스(작업자, 부서, 기계 등), 트랜잭션 정보(상태) (in/out, start/end 등의 액티비티의 상태를 알려주는 칼럼) 등을 이벤트로그에 포함할 수 있음
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
반응형
'Data Analysis & ML > Machine Learning' 카테고리의 다른 글
[LTV] BTYD (Buy-till-you-Die) - Pareto / NBD (0) | 2023.02.11 |
---|---|
[Machine Learning][머신러닝] Bagging, Boosting 정리 (1) | 2021.03.12 |
[Machine Learning][머신러닝] 대출위험도 예측모델링(모델링) (0) | 2020.09.08 |
[Machine Learning][머신러닝] 대출위험도 예측모델링(데이터전처리) (2) | 2020.09.08 |
[Machine Learning][머신러닝] 군집(Clustering) / K-Means Clustering (0) | 2020.09.07 |