728x90

 PM4Py는 다양한 로그 필터링 방법들을 제공한다. 이번 포스팅에서는 PM4Py를 이용하여 이벤트 로그 trace의 시작/끝 액티비티를 기준으로 이벤트 로그를 필터링하는 방법에 대해 알아보겠다. 

 

1. 우선, xes 파일을 import하여 이를 log에 저장해 준다.

import os
from pm4py.objects.log.importer.xes import factory as xes_importer

log = xes_importer.import_log(os.path.join("input_data","receipt.xes")) #괄호 안에 원하는 파일의 경로를 쓴다.
 

2. 이벤트 로그의 시작/끝 액티비티 목록을 파악하기 위해 다음 코드를 입력한다.

 시작 액티비티로 필터링을 하기 위해서는 어떤 시작 액티비티가 있는지를 알아보아야 할 것이다. 그러므로 시작 액티비티의 목록부터 print해본다.

from pm4py.algo.filtering.log.start_activities import start_activities_filter

log_start = start_activities_filter.get_start_activities(log)

print(log_start)

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

1434개의 케이스가 Confirmation of receipt 액티비티로 시작되었다.

끝 액티비티로 필터링을 원하는 경우 다음 코드를 입력한다.

from pm4py.algo.filtering.log.end_activities import end_activities_filter

log_end = end_activities_filter.get_end_activities(log)
print(log_end)

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

{'T02 Check confirmation of receipt': 8, 'T03 Adjust confirmation of receipt': 2, 'T10 Determine necessity to stop indication': 828, 'T20 Print report Y to stop indication': 15, 'T05 Print and send confirmation of receipt': 400, 'Confirmation of receipt': 116, 'T15 Print document X request unlicensed': 39, 'T11 Create document X request unlicensed': 4, 'T06 Determine necessity of stop advice': 16, 'T04 Determine confirmation of receipt': 2, 'T07-1 Draft intern advice aspect 1': 1, 'T13 Adjust document X request unlicensed': 1, 'T07-5 Draft intern advice aspect 5': 1, 'T07-2 Draft intern advice aspect 2': 1}

 

3. 원하는 시작 액티비티를 선택하여 이들만 필터링한다.

이 예시에서는 시작 액티비티가 하나밖에 없기 때문에 무의미하지만, 다음과 같은 코드를 통해 필터링이 가능하다.

filtered_log = start_activities_filter.apply(log, ["Confirmation of receipt"]) #[]부분에 원하는 시작 액티비티 list

 

이와 같이 끝 액티비티도 필터링이 가능하다. 아래 코드는 T05 Print and send confirmation of receipt,  T10 Determine necessity to stop indication 액티비티로 끝나는 log만을 포함한다.

filtered_log = end_activities_filter.apply(log, ["T05 Print and send confirmation of receipt", "T10 Determine necessity to stop indication"])

 

위와 같은 순서로 원하는 특정 시작/끝 액티비티를 기준으로 필터링하는 것도 가능하지만, 자동으로 빈도수에 따라 시작 /끝 액티비티를 필터링하는 것도 가능하다. 이 때, 빈도수의 기준이 되는 parameter는 가장 빈도수가 높은 시작/끝 액티비티의 빈도수 * parameter 값을 해당 액티비티의 빈도수가 넘으면 필터링되지 않고, 그 이하는 필터링되는 방식으로 진행된다. 예를 들어, 어떤 이벤트 로그가 1000번 A로 시작하고, 700번 B로, 300번 C로 시작한다고 가정하자. 이 때 parameter가 0.6이면 1000*..6=600을 넘는 A, B는 남아 있고 C는 필터링되는 식이다. 이 parameter의 default 값은 0.6이다.

4. 자동 필터링을 원한다면, 다음 코드를 통해 필터링한다.

from pm4py.algo.filtering.log.start_activities import start_activities_filter

log_af_sa = start_activities_filter.apply_auto_filter(log, parameters={"decreasingFactor": 0.6}) #원하는 parameter 삽입
print(start_activities_filter.get_start_activities(log_af_sa))

끝 액티비티도 같은 방법으로 필터링이 가능하다.

from pm4py.algo.filtering.log.end_activities import end_activities_filter

log_af_ea = end_activities_filter.apply_auto_filter(log, parameters={"decreasingFactor": 0.6})
print(end_activities_filter.get_end_activities(log_af_ea))

 

 이번 포스팅에서는 시작 액티비티/끝 액티비티로 로그를 필터링하는 방법에 대해 알아보았다. 이러한 필터링을 통해서 특정 경로로 유입되는 고객을 필터링하거나 이탈하는 고객을 필터링하는 등 다양한 활용이 가능할 것이다.

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