728x90

Generalization이란, 프로세스 모델이 얼마나 일반적인지를 나타내는 척도이다. 즉, data mining으로 치면 overfitting을 피하는 정도와 같다. 이벤트 로그는 해당 시스켐 안에서 나온 데이터만을 포함하기 때문에, generalization을 이용해 프로세스 모델이 이 이벤트 로그가 아닌 다른 데이터에 대해 얼마나 일반적으로 적용될 수 있을지를 판단한다.  자세한 것은 다음 포스팅을 참고한다. 이번 포스팅에서는 PM4Py로 generalization을 계산하는 방법에 대해 알아보겠다.

 

  우선, PM4Py의 generalization은 다음과 같은 식을 따라 계산한다. 

 프로세스 모델의 일부 부분들이 비교적 적게 사용되었다면 이들이 차후에 사용될 여지가 더 많다고 판단하고, 더 많은 behavior를 허락한다고 판단하는 것이다. 따라서 Replay 과정 중 프로세스 모델의 transition들이 얼마나 자주 사용되었는지에 따라 generalization을 계산하는 것이다. 

 

1. 우선, 분석할 XES 파일을 import하여 이를 log에 저장하고, Conformance Checking을 원하는 모델을 net에 저장해준다. 필자는 inductive miner를 선택했다.

import os
from pm4py.objects.log.importer.xes import factory as xes_importer
from pm4py.algo.discovery.inductive import factory as inductive_miner

log = xes_importer.import_log(os.path.join("input_data","running-example.xes")) #join 안에 원하는 파일의 경로

net, initial_marking, final_marking = inductive_miner.apply(log) #원하는 모델을 선택한다.

 

2. 해당 log와 net에 대해서 generalization을 계산한다. 

from pm4py.evaluation.generalization import factory as generalization_factory

generalization_inductive = generalization_factory.apply(log, net, initial_marking, final_marking)

print("generalization_inductive=",generalization_inductive)

 

3. 다음과 같은 결과가 나오면 성공이다.

generalization_inductive= 0.546264204110579

 

 PM4Py를 이용하여 간단한 코드 몇 줄로 generalization을 계산할 수 있다.

300x250
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기