HomeAbout
Visualization
사용자의 패턴을 세부적으로 도출해보자
윤석준
April 02, 2023
6 min

Table Of Contents

01
Process Mining이란 무엇일까?
02
Process Mining에서 중요한 개념
03
Process Mining을 잘 사용해보기 위해 필요한 TIP
04
Process Mining Visualizing 방법 (With R)
05
End

“사용자들이 우리의 제품을 어떻게 사용하고 있을까? 문제는 없을까?” 이러한 질문과 고민에 가장 기본적으로 깔대기 모양의 퍼널을 구성하여 시각화시키고 문제점을 찾곤 합니다.

이는 사용자가 어떤 부분에서 이탈을 하는지 혹은 전환율이 어떻게 되는지 전체적인 흐름을 파악할 수 있는 지표입니다.

그러나 큰 흐름을 보다보면 문제의 지점이 보이게 되고 이를 개선하기 위해서 세부적으로 분석을 해야하는 경우가 있는데 이런 경우 사용할 수 있는 하나의 방법이 프로세스 마이닝입니다.


  • 시각화 - 누구나 쉽게 이해할 수 있도록 시각화가 가능합니다.

  • 적합성 - 제품의 모델과 실제 사용자의 패턴의 차이점을 확인할 수 있고, 분석을 통해 제품의 모델의 편차를 식별하고 심각도/비용을 결정할 수 있습니다.

  • 문제점(병목현상) 발견 - 분석을 통해 병목현상을 발견하거나 혹은 잠재적인 병목현상을 발견할 수 있으며 이를 통해 제품의 전략 및 KPI를 개선할 수 있습니다.


아래에서 프로세스 마이닝에 대해서 간략한 개념을 소개하고 주요한 개념들을 소개할 수 있도록 하겠습니다.

Process Mining이란 무엇일까?

마이닝이란 단어로 인해서 데이터 마이닝과 비슷하다고 생각할 수 있지만, 프로세스 마이닝은 BPM(Business Process Management)의 연구에서 시작한 분야로 ERP, CRM, MES 등 기업 전사 엔터프라이즈에 기록된 이벤트 로그를 기반으로 기업의 업무 프로세스의 문제점을 찾고 개선하는 경영학적인 분석 방법론입니다.

아래 그림을 보시면 프로세스 마이닝을 통해서 여러가지 꼬인 프로세스를 굉장히 쉽게 분석할 수 있고 그에 따른 문제점을 빠르게 찾을 수 있습니다.

process mining(1)

즉, 프로세스 마이닝은 데이터에서 주된 프로세스를 도출하고 그에 대한 문제점을 찾아 개선하는 분석 방법론입니다.

이러한 정의만 보면 ”뭐야, 이건 기업 전사를 파악하는 방법인데.. 그럼 온라인 비지니스에서 이걸 어떻게 사용해?”라고 생각하실 수 있습니다.

하지만 프로세스란 기업 전사의 업무에만 있다고 생각할 수 있지만 저희의 제품에도 존재합니다. 사용자가 제품을 이용하는 프로세스를 저희가 만들었으니까요.

즉, 사용자가 제품에 들어와서 액션을 하는 플로우를 하나의 프로세스로 도출할 수 있고 프로세스 마이닝으로 쉽게 분석을 해볼 수 있다고 생각해볼 수 있습니다.

무작정 설명을 해서 이해하기 쉽지 않기 때문에 아래에서 간단한 사례를 들어 하나씩 설명할 수 있도록 하겠습니다.

Process Mining에서 중요한 개념

그러기에 앞서, 프로세스 마이닝을 통해 분석을 하고 결과를 해석하기 위해서 주요하게 알아야할 데이터에 대한 개념과 프로세스에 대한 개념을 간략하게 소개하겠습니다.

우선, 데이터에 대한 개념은 기본적으로 아래 3가지만 알고 있으면 됩니다. 즉, 프로세스 마이닝을 하기 위해서는 3개의 이벤트 로그만 있다면 분석해볼 수 있습니다.


  • Case ID : 사용자 단위를 의미합니다. 온라인 비지니스에서는 한명의 사용자가 Case ID가 될 수 있습니다. (ex - 사용자 A)

  • Activity : 사용자가 한 액션을 의미합니다. 분석하고자 하는 프로세스에 대한 액션을 정의할 수 있습니다. (ex - 사용자 A가 구매 버튼을 클릭한 액션)

  • Timestamp : 사용자가 한 액션에 대한 시간을 의미합니다. (ex - 사용자 A가 구매 버튼을 클릭한 시점)


다음으로 프로세스에 대한 개념은 아래 4가지만 알고 있으면 되지만 그 중 가장 중요하고 헷갈리는 Variant 개념을 아래에서 상세히 설명하겠습니다.


  • Case : 이벤트 로그에서 동일한 Case ID를 가지는 시간 순서에 따른 흐름 (= 즉, 동일한 Case ID의 시간에 따른 프로세스)

  • Variant : 프로세스 흐름에 따른 변동성(variation) (= 즉, 동일한 프로세스를 가지는 Case의 집합)

  • Absolute Frequency : Variant에서 Activity의 반복을 고려하여 계산하는 방법

  • Case Frequency : Variant에서 Activitydd 반복을 고려하지 않고 계산하는 방법

  • Performance : Activity간의 시간적인 간격을 측정하는 방법 » Frequency 및 Performance를 측정하는 방법은 아래에 세부적으로 다루겠습니다.


자! 이제 기본적인 준비는 끝났습니다.

이해를 돕기 위해 현재 퍼널을 보다 회원가입의 전환율이 줄어들고 있는 상황이고 그에 따른 세부 분석을 진행해야한다고 가정해보겠습니다.

저희는 회원 가입 프로세스를 아래와 같이 설계하였다고 하겠습니다.

회원가입 클릭(1)→ 아이디 입력(2)→ 비밀번호 입력(3) → 동의 선택(4)→ 본인 인증 클릭(5) → 통신사 선택(6)→ 휴대폰 번호 입력(7)→ 인증 번호 입력(8) → 회원가입 완료(9) / 회원가입 실패(10)

그리고 사용자 A, B, C가 다음과 같은 액션을 했다고 한다면 데이터는 아래와 같고 프로세스는 다음과 같이 도출 될 것입니다.

회원 가입 프로세스 도출 과정 데이터에 대해서 설명하면 아래와 같습니다. 아주 간단하죠?!


  • Case ID : 사용자 A, B, C

  • Activity : 회원가입 프로세스에서 정의된 액션

    • 회원가입 클릭(1), 아이디 입력(2), 비밀번호 입력(3), 동의 선택(4), 본인 인증 클릭(5), 통신사 선택(6), 휴대폰 번호 입력(7), 인증 번호 입력(8), 회원가입 완료(9), 회원가입 실패(10)
  • Timestamp : 액션들이 발생된 시점


그럼 앞서 말씀드렸듯 프로세스의 Variants에 대해서 조금 상세하게 설명하겠습니다.

회원 가입 프로세스 도출 과정을 보면 3명의 사용자에 대해서 다음과 같은 사실을 알 수 있습니다.

  • 각 사용자의 패턴은 서로 본인 인증 클릭까지는 동일하나 이후 변화한다.

  • 사용자 A의 경우 가장 정상적인 프로세스를 나타내었고, 사용자 B의 경우에는 “본인 인증 클릭”을 3번이나 반복하고 결국 실패하였고, 사용자 C의 경우에는 “본인 인증 클릭” 후 “휴대폰 번호 입력” 이후 회원가입이 실패했다.

3명의 사용자의 프로세스의 Variation을 고려하는 전체적인 흐름을 구상하면 회원 가입 프로세스 도출 과정의 마지막 Map처럼 프로세스를 도출하여 시각화 시킬 수 있습니다.

지금은 3개의 케이스에 대하여 3가지의 다른 활동들의 흐름을 가지고 있는 것을 살펴보았지만 더 많은 케이스들을 살펴본다면 아래의 Map처럼 활동들의 흐름이 반복되는 것을 볼 수 있게 될 것입니다.

다시 말해서, 프로세스 Variants는 특정한 활동들의 흐름입니다. 이러한 흐름이 단 한번만 일어날 수도 있고, 혹은 많은 Case들이 이 흐름을 따를 수 있습니다.

만약 많은 Case들이 동일한 흐름을 가진다면 해당 Variants는 사용자들이 가장 빈번하게 핵션하는 흐름이라고 판단할 수 있고 저희는 그것에 따라 액션을 취할 수 있기 때문에 중요한 개념인 것입니다.

만약 위의 Case가 3개가 아닌 9개라고 가정하고 Map을 그려보면 아래와 같이 도출될 것이고 Variants는 다음과 같을 것 입니다.

process mining(3)

위의 Plot은 프로세스 Map을 나타내며 아래는 Variants를 나타냅니다. 이를 통해서 저희는 다음과 같은 사실을 알 수 있습니다.

  • 33.3%의 사용자는 설계된 정상적인 프로세스를 따라간다.

  • 22.2%는 “본인인증(5)”을 3번 반복하다 “회원가입 실패(10)”한다.

  • 22.2%는 “본인인증(5)” 후 바로 “회원가입 실패(10)”한다.

  • 결과적으로 “본인인증(5)”이 현재 제품 내 회원가입 프로세스의 문제점이며 해당 부분을 개선할 필요성이 있다.

Process Mining을 잘 사용해보기 위해 필요한 TIP

위의 간단한 내용으로 프로세스 마이닝에 대해서 이해가 어느 정도 되셨을텐데요. “그럼 위처럼 사용해보면 끝이겠네?”라고 또 생각하실 수 있지만.. 온라인 비지니스 업무에 사용한다면 더 고민을 해야하는 부분들이 있습니다.

앞선 회원가입 프로세스는 사실 시작과 끝이 명확한 End-to-End 프로세스입니다. 프로세스 마이닝은 이러한 End-to-End 프로세스를 분석하는데 아주 좋은 방법이기도 하구요.

하지만 실제 제품에서 사용자의 프로세스는 굉장히 복잡하고 시작은 있어도 끝이 없는 경우가 있고 혹은 시작과 끝이 둘 다 명확하지 않을 수 있습니다. 결과적으로 이럴 경우 사용자의 프로세스는 발산(?)하게 됩니다.

그럼 저희는 문제점이 되는 프로세스를 도출하지 못할 수 있거나 혹은 시각화 시키지 못할 수 있습니다. 그래서 이럴 경우 어떻게 해결할 수 있을지에 고민했었고 그에 대해서 몇가지 방법을 소개하고자 합니다.

1) Product Manager와 데이터 탐색을 통해 분석하고자 하는 목적에 맞게 프로세스를 정의해야합니다.

무작정 전체 사용자의 흐름을 다 그려보는 것이 아닌 지표를 모니터링 후 문제가 되는 지점을 1차적으로 찾고 해당 문제점을 확인할 수 있는 시작과 끝을 Product Manager와 같이 정의해야합니다.

기본적인 프로세스를 정의하여야 분석 전 어떤 Acitivity를 정의해야하는지 분석 후에는 설계된 프로세스에서 문제가 어느 지점인지 파악할 수 있기 때문입니다.

2) 프로세스를 간소화 시켜야 합니다. 앞서 사례에서 보았듯 사용자들의 복잡한 프로세스에서 Variants로 묶어 분석하는 것이 핵심이라는 것을 알 수 있습니다.

그런데 대부분 온라인 비지니스 제품의 경우에는 사용자마다 행동(액션)이 자유도가 굉장히 높기 때문에 프로세스는 발산하기 쉽습니다.

게임을 예로 든다면, 아래의 사용자들은 모두 2레벨로 도달했지만 각기 다른 Variants입니다.

스크린샷 2023-04-01 오후 9.21.30

즉, 1레벨을 1번 플레이한 사용자도 있고, 극단적으로 N번 플레이한 사용자도 있을 수 있기 때문에 이런 경우 프로세스의 Variants는 명확히 나올 수 없습니다. 이럴 경우 목적에 맞게 전처리를 하면 됩니다.

2레벨을 도달하기까지의 프로세스를 알고 싶다면 1레벨을 N번 플레이하더라도 1번으로 체크할 수 있고, 혹은 1레벨를 3번 이상 플레이한 사용자와 아닌 사용자를 달리 보고 싶다면 “1레벨 3미만”, “1레벨 3이상”으로 Activity를 간소화 시킬 수 있습니다. 그럼 프로세는 더욱 간소화 되게 되고 프로세스의 Vairants를 도출해볼 수 있습니다.

Process Mining Visualizing 방법 (With R)

프로세스 마이닝은 보통 전문 회사에서 제공하는 Tool을 사용하지만 R 혹은 Python으로 간단하게 진행해볼 수 있습니다.

library(bupaR)
library(edeaR)
library(processmapR)
library(eventdataR)
library(readr)
library(tidyverse)
library(DiagrammeR)
library(stringr)
library(lubridate)
data = readr::read_csv('./temp0.csv')
# change data to eventlog
sample_events = data %>% dplyr::rename(start = timestamp) %>%
# convert timestamps to
convert_timestamps(columns = c("start"), format = ymd_hms) %>%
activitylog(case_id = "case_id",
activity_id = "activity",
resource_id = 'case_id',
timestamps = c("start"))

1) Frequency

기본적으로 프로세스의 빈도를 나타내는 방법은 약 6가지가 있고 그 중 위의 회원가입 사례를 통해 퍼널 형식으로 볼 수 있는 방법을 소개하겠습니다. » 나머지는 [BupaR Docs][3]에서 확인해주시면 감사하겠습니다.

relative-consequent frequency 방법은 각 Activity가 전체에서 차지하는 비율과 각 Activity 전의 경로에 대한 비율을 확인할 수 있습니다.

  • Nodes(Activity): 이 유형의 모든 활동 인스턴스의 비율을 의미

  • Flows(Activity간의 화살표)**: 소스 실행 직전에 타겟 실행 비율을 의미

sample_events %>%
filter_activity_frequency(percentage = 1.0) %>% # 가장 빈번한 Activity를 보여줌 (ex - 0.9 : 전체의 90% Activity를 표시)
filter_trace_frequency(percentage = .9) %>% # 가장 빈번한 Variants를 보여줌 (ex - 0.9 : 전체의 90%의 Variants를 표시)
process_map(frequency("relative-consequent")) # 방법

process mining(4) 위의 Map에서 “본인 인증 클릭”을 보면 다음과 같은 사실을 알 수 있습니다.

  • 1) 전체의 20% Activity를 차지하고 있고

  • 2) “동의 선택”에서 64.29%가 선행되었고

  • 3) 35.71%가 “본인 인증 클릭”을 반복(선행)했음

혹은 “회원가입 실패”의 경우에는 다음과 같은 사실을 알 수 있습니다.

  • 1) 전체의 8.57% Activity를 차지하고 있고

  • 2) “휴대폰 번호 입력”에서 16.67%가 선행되었고

  • 3) “본인 인증 클릭”에서 83.33%가 선행되었음

2) Performance

프로세스의 빈도를 분석할 수도 있지만 각 Activity간의 시간적인 성능을 확인해야하는 경우도 있습니다. 이럴 경우에는 위의 코드에서 약간의 변형만 해주면 됩니다.

퍼포먼스의 경우에는 빈도와 달리 측정하고자 하는 시간을 다양한 함수로 집계할 수 있습니다.

기본적으로는 평균으로 측정하지만 아래의 코드와 같이 0.5 백분위수로 확인을 할 수 있습니다.

p50 = function(x, ...) {
quantile(x, probs = 0.50, ...)
}
sample_events %>%
filter_activity_frequency(percentage = 1.0) %>% # 가장 빈번한 Activity를 보여줌 (ex - 0.9 : 전체의 90% Activity를 표시)
filter_trace_frequency(percentage = .9) %>% # 가장 빈번한 Variants를 보여줌 (ex - 0.9 : 전체의 90%의 Variants를 표시)
process_map(performance(p50, "mins")) # 방법

process mining(5) 또한, “휴대폰 번호 입력”에서 “인증 번호 입력”까지 중앙값으로 15분이 걸리는 것을 보니 보통 3분정도 안에 인증번호를 입력해야하는 상황에서 해당 부분에서 사용자들이 인증 번호를 받는 것에 문제가 있음을 추측해볼 수 있습니다.

3) Combination

sample_events %>%
process_map(type_nodes = frequency("relative-consequent"),
type_edges = performance(units = "mins"),
sec_nodes = frequency("absolute"),
sec_edges = performance(FUN = max, units = "mins"))

process mining(6) Frequency와 Performance를 각각 분석하고 문제가 되는 지점을 하나의 Map으로 시각화하여 공유하기에 굉장히 좋은 방법입니다.

4) Variants 분석

마지막으로 Variant를 확인하는 방법입니다. Variants는 갯수를 지정해서 확인할 수 있고, 혹은 전체에서 차지하는 비중 coverage 을 통해서 확인해볼 수 있습니다.

sample_events_trace %>%
trace_explorer(n_traces = 3, abbreviate = FALSE) # 전체 Variants중 상위 3개만 확인

process mining(7)

이를 통해서 사용자들의 빈번한 패턴이 어떠한지 알 수 있고 이를 통해 제품의 모델과 비교하여 적합성을 검증할 수 있습니다.

End

프로세스 마이닝은 위의 사례들과 설명에서 볼 수 있듯 사용자들의 흐름을 시각화하고 그것을 통해 문제점을 찾는데 효과적인 방법일 수 있습니다.

시간에 따른 이벤트 로그만 있다면 손쉽게 분석해볼 수 있고 누구나 이해하기 쉬운 개념이기 때문에 굉장히 편리한 분석 도구라고 생각이 됩니다.

다만, 사용자별, 시간순으로 분석을 하기 때문에 데이터가 많거나 혹은 프로세스가 너무 복잡하게 되면 느려질 수 있고 프로세스를 간소화함에 따른 정보의 손실도 존재할 수 있습니다.

이러한 불편함을 해결해줄 수 있고 사용자의 패턴을 쉽게 시각화하고 분석할 수 있는 또 다른 방법으로는 Retentionieering 이 있습니다.

Retentionieering을 자세히 소개하고 싶지만 글이 너무 길어져 기회가 된다면 Retentionieering에 대해서 소개할 수 있도록 하겠습니다.

참고문헌 https://bupaverse.github.io/docs/ https://scienceon.kisti.re.kr/srch/selectPORSrchArticle.do?cn=DIKO0014855259&dbt=DIKO


Share


Related Posts

Python으로 그려보는 Cohort Chart
2022-05-09
4 min
© 2023, All Rights Reserved.
Powered By

Quick Links

About UsOfficial Page

Social Media