[기업 인터뷰] 빅데이터 시대의 필수 기술, 프로세스 마이닝 전문기업 퍼즐데이터

영화 <머니볼>은 저조한 성적의 메이저리그 구단 단장이 경기 데이터를 철저하게 분석해 적재적소에 선수들을 배치하여 승리를 얻는 이야기입니다. 데이터화 된 정보의 중요성을 이야기할 때 자주 거론되는 영화인데요. 수많은 정보들이 방대한 양으로 수집되는 빅데이터 시대. 현대의 기업들은 시시각각 늘어나는 거대한 데이터를 분석하여 제대로 활용해야 합니다. 빅데이터 시대의 필수 기술인 프로세스 마이닝은 기록되어 있는 이벤트 로그를 분석하여 의미 있는 정보를 찾아냅니다. 퍼즐데이터는 데이터를 활용한 더 나은 세상을 만들기 위해 프로세스 마이닝 기술을 개발하고 기업의 모든 프로세스를 혁신적으로 개선시키고 있습니다.

다양한 분야에 적용되는 프로세스 마이닝 솔루션

퍼즐데이터는 프로세스 관점에서 데이터 분석을 하는 B2B 솔루션을 만들고 있습니다. 기업에서 사용하는 여러 시스템에 많은 데이터가 쌓이고 있으나 아직 충분히 활용을 못하는 경우가 많습니다. 퍼즐데이터는 시스템에 쌓이는 로그 데이터를 활용하여 업무 프로세스를 정확히 파악하고 이를 통해 프로세스 개선 및 업무 혁신 활동을 지원하고 있습니다. 빅데이터 시대에 데이터 기반 의사결정은 선택이 아닌 필수입니다. 데이터 분석을 통한 업무 혁신을 지원하는 퍼즐데이터는 기업 경쟁력 강화를 위한 핵심 솔루션을 제공하기 위해 노력하고 있습니다.
퍼즐데이터는 프로세스 마이닝 기반 솔루션 프로디스커버리( ProDiscovery)를 개발하고 있습니다. 아직 프로세스 마이닝이 국내에는 생소하지만 유럽을 중심으로 많은 기업에 적용되고 있고, 국내에서도 의료, 제조, 공공 분야에서 시범 적용되어 적용분야가 점점 넓어지고 있습니다. 퍼즐데이터는 프로세스 효율 향상을 통해 더욱 살기 좋은 세상을 만드는데 도움이 되고자 합니다.

프로세스 마이닝 기반 분석 플랫폼, ProDiscovery

ProDiscovery는 업무 시스템의 이벤트 로그 데이터를 분석하여 실제 프로세스를 도출하고, 프로세스 개선을 지원하는 프로세스 마이닝 기반 분석 플랫폼입니다. 프로세스를 한눈에 바라보기 위해 업무 프로세스 맵을 그래프 형태로 시각화해 재생하는 기능을 통해 병목, 반복 작업 등의 문제를 파악하고 해결할 수 있습니다. 현재 프로세스에서 반복적으로 발생하는 패턴을 분석함으로써 주요 프로세스를 도출하고, 이를 시각화함으로써 각 프로세스 패턴을 쉽게 파악할 수 있습니다. 프로세스 업무분석이 가능합니다. DB, TXT, XLS 등 다양한 데이터 채널로부터 수집된 로그의 수행 작업, 작업자, 시작일, 종료일 등 통계적 정보를 한 눈에 볼 수 있게 제공합니다. 데이터 필터링을 통해 사용자의 요구에 맞게 원하는 데이터를 선택하거나 원하지 않는 데이터를 제거한 상태로 데이터 분석과 프로세스 분석이 가능합니다.

수평적 문화로 업무능력을 효율화한 기업

퍼즐데이터는 구성원 각자의 역량이 중시하고, 각각의 구성원의 의견이 모두 존중받으며 그들의 시너지가 회사를 성장시킨다고 믿습니다. 사내 호칭을 ‘님’으로 통일하여 수직적인 딱딱한 조직체계가 아닌 누구나 의견을 자유롭게 제안할 수 있는 수평적 기업문화를 가지고 있습니다. 출퇴근 유연근무제를 도입, 오전 8-10시 사이 본인이 원하는 시간에 출근하여 근무시간인 8시간(휴게시간 1시간 미포함)만 충족하면 됩니다. 퍼즐데이터에서는 점심을 제공하며, 사무실에 간식이 항시 구비되어 있습니다. 한 달에 1번 운영하는 Culture Day에는 날짜를 정하여 오후에 전 직원이 문화 활동을 같이 진행하며 친목 도모 및 업무에 지친 일상에 재충전의 시간을 가지고 있습니다. 1년에 1번 기념일로 지정한 날에는 조기 퇴근의 혜택과 소정의 선물을 드리며, 경조휴가 및 경조사비를 지원합니다. 전 직원 통신비의 일부 금액을 지원해드리며, 업무능력 향상을 위해 필요한 교육이 있다면 적극 지원하고 있습니다.

Analyze Data, Innovate Processes

퍼즐데이터는 데이터 분석을 통해 세상을 더욱 좋은 곳으로 만들어 가는 기업입니다. 2015년 설립되었으며 ProDiscovery라는 프로세스 마이닝 기반 데이터 분석 솔루션 개발 및 컨설팅을 진행하고 있습니다. 퍼즐데이터는 협업을 기본 정신으로 배려와 공감을 바탕으로 소통하는 사람, 내 일은 내가 알아서 하는 책임감 강한 사람, 어제보다 오늘 더 발전하는 지속성장형 인재를 찾고 있습니다. 퍼즐데이터와 함께 하실 분들을 언제나 환영합니다.

채용중인 포지션

1. 데이터 분석
주요업무
– 프로세스 마이닝 기반 데이터 분석
– 이벤트 로그를 활용한 데이터 분석
– 데이터 분석기반 프로세스 개선 컨설팅

채용상세
– 데이터 분석에 대한 관심
– 데이터 마이닝 및 통계분석에 대한 전반적인 이해
– 관련분야(산업공학, 통계 등) 전공
– R or Python 사용 능력

적합 인재상
– 프로세스 마이닝 지식 보유자
– 관련분야 대학원 전공
– ML 경험자
– 데이터 기반의 다양한 문제 해결에 관심이 있고 도전 의식이 충만하신 분은 더욱 환영

2. 웹 개발자
주요업무
– AngularJS 기반(1.x) 프론트엔드(FrontEnd) 기능 설계 및 개발
– D3 기반 차트 개발
– 웹 프레임워크 개선
– 신기술 리서치
– 데이터 처리 쿼리 및 API 개발(우대)

채용상세
– 주로 프론트엔드 개발을 하지만 데이터를 분석하는 제품을 만드는 회사이기 때문에 데이터에 대한 관심이 필요합니다.

담당업무
– AngularJS 기반(1.x) 으로 만들어져 있는 프레임워크를 개선/개발 합니다.
– ‘퍼즐’ 이라고 명칭 하는 데이터 분석 화면 개발/개선이 주요 업무입니다. D3.js 기반으로 차트를 그리게 됩니다.
– 하루가 다르게 발전하고 생겨나는 신기술들을 찾아보고 적용할 수 있도록 항상 연구하고 개발합니다.

자격요건
– Java(Spring, Spring Boot)
– Javascript
– D3 기반 차트
– Html, CSS

우대사항
– AngularJS
– jQuery
– 서버 프로그래밍 가능자
– 대용량 데이터/유저 처리 경험자

지원방법
– 로켓펀치를 통한 채용공고 확인 및 지원
– 신한 Future’s Lab 채용박람회 2019 현장 지원

퍼즐데이터를 직접 만나보고 싶다면, 신한 FUTURE’S LAB 채용박람회 2019에 참여 신청하세요!

J커브 성장을 위한 나침반, ‘서비스 통계 대시보드’ 개발기

‘수억 명의 사용자’ 같은 거대한 목표는 ‘감’으로는 결코 달성할 수 없다

각자가 만들고 있는 제품의 특성에 맞는 올바른 지표(Metric)를 선택하고, 그 지표를 꾸준히 개선해 나가는 것은 J 커브 성장을 달성하기 위한 가장 핵심적인 활동이다. 문제를 모르면 개선할 수도 없기 때문이다. 그런데 이런 고유한 지표를 확인하는 것 자체가 어렵다면 실제 업무에 있어서 활용도가 크게 떨어지기 때문에, 클릭 한번에 확인할 수 있는 ‘대시보드’를 만드는 것이 좋다.

이 활동의 중요성을 알고 있는 로켓펀치는 많은 노력을 들여 로켓펀치만의 지표를 구성하고 쉽게 확인할 수 있는 대시보드를 구성했다. 이 글에서는 그 과정에서 얻었던 지식들을 나누고자 한다.

대시보드 구상 단계

대시보드의 실제 개발에 앞서 실무적으로 고려해야 크게 두 가지다. ‘어떤 데이터를 보여줄 것인지’와 ‘어떤 시간 단위를 사용할 것인지’에 대한 결정이다.

보여줄 데이터에 대한 결정

로켓펀치는 사용자가 생성한 데이터를 재가공하여 또 다른 사용자들과 연결해 주는 ‘사용자 참여형 콘텐츠 플랫폼’이다. 이런 특성을 가지는 서비스의 성장에 가장 중요한 것은 사용자들을 점점 더 서비스에 많이 참여하도록 하는 것이다.

예를 들어 우리가 게시판 기반의 커뮤니티 서비스를 만들고 있다면, 회원 가입 없이 글만 읽던 사용자를 회원 가입을 하게 하고, 글을 쓰게 만드는 것이 참여 수준을 높이는 것이다. 작성되는 글(=콘텐츠)이 많아질 수록 더 많은 사람들이 그 글을 보기 위해 우리 서비스에 방문할 것이기 때문이다.

로켓펀치에는 회원가입 없이 다른 사용자들의 프로필이나 기업 정보, 채용 정보를 보는 ‘방문자’들이 있고, 본인의 프로필을 상세히 업데이트하고 기업 정보와 채용 정보도 기재하는 ‘회원’들이 있다. 로켓펀치가 올바른 방향으로 나아가고 있는지는 방문자들이 회원으로 전환되는 비율을 통해서 알 수 있으므로, 대시보드는 한눈에 사용자들의 ‘참여 수준’을 볼 수 있는 항목들로 구성이 되어야 한다.

예를 들면 아래와 같은 항목들을 한눈에 확인할 수 있는 funnel 분석 그래프를 대시보드에 표시하는 것이다.

– 전체 방문자 수

– 전체 방문자 수 대비 재방문자의 비율

– 전체 방문자 수 대비 회원 가입을 한 비율

– 회원 가입자 중에서 프로필을 상세히 업데이트 한 비율

데이터 처리 시간 단위에 대한 결정

데이터를 대시보드에 표시함에 있어서 ‘시간 단위’는 아주 중요한 요소다.

예를 들어 우리가 ‘메시징 플랫폼’을 만들고 있다고 가정해 보자. 메시징 플랫폼이 사람들에게 제대로 가치를 주고 있다면, 당연하게도 사람들이 하루에도 여러 번 사용해야 한다. 그런데 어떤 외적인 문제가 발생하여 사람들이 하루에 수회 이상 사용하던 경향이 1주에 수회 사용하는 것으로 바뀌어 가고 있다고 생각해보자. 이는 분명 커다란 문제이며 반드시 대응을 해야 한다. 그런데 통계 데이터를 주 단위로 설정해서 보고 있다면, 이런 변화를 인지하기는 어렵다. ‘주’를 단위를 잡았을 때는 그 주에 그 제품을 한 번이라도 사용했다면 ‘활성 사용자’로 표시가 되므로 일 수회 쓰 던 경향이, 주 수회 쓰는 경향으로 바뀌더라도 데이터 상으로는 변화가 없는 것이다. 매일 쓰는 것이 중요한 서비스라면 시간 단위는 ‘주’가 아니라 ‘일’이어야 한다.

다른 예로 ‘여행 상품 제공 플랫폼’을 생각해보자. 우리가 만들고 있는 서비스가 제대로 동작하고 있다면, 사용자가는 얼마 간 여행 상품 구매 활동을 한 후 우리 서비스를 잠시 떠나야 한다. 여행 과정이 완료되었기 때문이다. 일반적인 경제 활동 인구들은 휴가에 맞춰서 일년에 여행을 2~3번 정도 떠나기 때문에, 우리가 만드는 서비스를 통해 여행 상품 구매 활동에 일주일 정도를 쓰고 여행을 다녀온 후, 몇개월이 지나 다시 접속해서 여행 상품을 구매 하는 패턴은 지극히 자연스러운 경향이다. 그런데 이런 서비스를 ‘주’ 단위로 분석한다면 어떻게 될까? 아주 단순화시킨다면, 1주차의 활성 사용자가 2주차부터 24주차(=6개월)까지는 모두 0으로 표시될 것이다. 서비스는 제대로 동작하고 있음에도 불구하고 말이다. 따라서 사용자가 1년에 한두 번 사용해도 충분한 가치를 느낄 수 있는 서비스라면 데이터 분석의 시간 단위는 최소한 월 단위 이상, ‘월, 분기, 반기’ 등이 되어야 할 것이다.

로켓펀치는 스타트업 채용 정보 제공 플랫폼에서 개인과 기업이 비즈니스의 성장에 필요한 다양한 정보를 얻을 수 있는 네트워킹 플랫폼으로 진화하고 있다. 우리는 로켓펀치가 사용자들이 적어도 일주일에 한번씩은 접속하는 서비스가 되어야 한다고 생각하기 때문에, 데이터를 처리하는 기본 시간 단위를 ‘주’로 잡았다.

대시보드 구현 단계

구현 목표와 로켓펀치의 현황, 그리고 방향

필자(=정희동)가 로켓펀치에 합류하는 과정에서 접했던 로켓펀치의 큰 목표 중 하나는 ‘이용자 분석을 제대로 해 보고 싶다’는 것이었다. 매우 흥미로운 과제라고 생각했다. 이용자 분석을 바닥부터 할 수 있는 기회는 그리 흔치 않고, 많은 것을 할 수 있을 것이라 생각했기 때문이다. 구체적으로 이용자들이 얼마나 들어와서 어떤 행동을 하는지 funnel 형태로 보고 싶고, 각각의 행동에 어떤 이유가 있는지 알고 싶었다.

합류 후 곧바로 시스템에 대한 파악을 시작했다. 로켓펀치 웹 서비스의 로그는 Elasticsearch의 제품군들을 비롯한 몇 개의 도구들을 이용해서 저장되고 있었다 (상세 내용은 아래에 설명).

이용자 식별과 이용자들의 행동에 대한 정의를 마친 후 간단한 결과를 빠르게 내는 방향으로 작업을 시작했고, 앞으로의 분석에 걸림돌이 될 부분들을 빠뜨리고 넘어가지 않도록 주의를 기울였다.

기간의 정의

앞서 언급된 이유에 따라 데이터의 기본 지표는 일주일 단위로 생성하기로 했다. 또 로켓펀치 팀에서는 보통 일주일 단위로 새로 추가되거나 개선된 기능을 릴리즈 하기 때문에 일주일이라는 단위는 기본 단위로 적절하다고 생각되었다. 그리고 매주 지표를 생성해서 최근 12주를 비교하기로 했다.

이용자의 행동

정의한 행동은 크게 보았을 때 아래와 같다.

1. 회원 가입

2. 개인정보 입력

3. 사진 등록

4. 학력 및 경력 추가

5. 자기 소개 수정

6. 친구 추가 및 친구 수락

로켓펀치 웹 서비스를 이용할 때 이루어지는 위 행동들은 서로 다른 API 요청 경로(path of request for API)를 가진다. 그리고 해당 로그는 인코딩된 유저 식별자와 함께 저장되므로 로그인 후 어떤 행동을 했는지는 저장된 로그를 이용자별로 모아서 request path를 보는 것만으로 알 수 있었다.

로그가 저장되는 방식

현재 로켓펀치의 로그는 몇 가지 툴을 사용해 아래와 같은 방식으로 저장되고 있다.

1. 웹 서버 디스크에 로그가 저장됨

2. filebeat가 디스크의 로그를 읽어 별도 서버의 redis로 보냄(이 때 redis는 queue처럼 동작함)

3. redis와 같은 서버의 logstash가 redis에 저장된 로그를 읽어 별도 파일로 저장하고, elasticsearch의 인덱스에도 저장함

4. kibana에서 elasticsearch에 저장된 로그를 살펴볼 수 있음

아래는 elasticsearch에 저장된 로그의 모습이다(일부 항목만 표시).

{
“_index” : “rocketpunch”,
“_type” : “logs”,
“_id” : “AVlfyGjraKOw-4GiFG_H”,
“_source” : {
“offset” : 42279229,
“content_length” : “105455”,
“latency” : “0.303436994553”,
“user_id” : “—-“,
“timestamp” : “2017-01-02T15:24:43.584033Z”,
“ip” : “—–“,
“response_code” : “200”,
“referer” : “https://www.rocketpunch.com/,
“user_agent” : “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36”,
“request_id” : “—–“,
“path” : “/api/users/network_request”,
“method” : “GET”,
}
}

이용자별 로그 모아보기

elasticsearch에 저장된 로그는 kibana에서 찾아보기 아주 편하지만, 검색 결과를 원하는 모양으로 만들고 싶다면 결국 query를 사용해야만 했다. elasticsearch에서 공식적으로 지원하는 언어별 client가 몇 가지 있는데, 익숙한 python을 쓰기로 했다. 사실 이 결정을 내리기 전에 bulk api를 써봤는데, 속도가 꽤 느린데다 대용량 처리 중 오류가 나기도 했다.

1주일 동안의 로그를 읽어 아래와 같은 모양으로 만든다.

이용자 식별자, 시간, 행동, … (나머지 정보들)

이용자 식별자와 시간으로 정렬하면 하나씩 읽어 유저가 어떤 행동을 했는지 알 수 있다. 아래는 그 예시이다.

user_1 2017-01-02T18:58:57.356091Z REG
user_1 2017-01-02T18:59:11.388345Z DET
user_1 2017-01-02T19:04:08.287961Z CAR
user_1 2017-01-02T19:05:10.746819Z CAR
user_1 2017-01-02T19:06:28.057567Z CAR
user_1 2017-01-02T19:08:47.662613Z CAR
user_1 2017-01-02T19:12:04.052667Z EDU
user_1 2017-01-02T19:12:26.961197Z EDU

user_1은 회원 가입(REG) 직후 개인 정보를 입력했고(DET), 몇 가지 경력사항(CAR)과 학력사항(EDU)를 입력했다. 이처럼 간단하게 유저의 행동을 살펴볼 수 있고 원한다면 행동 패턴을 더 정의하고 다른 정보를 결합해 더 상세한 행동을 관찰할 수도 있을 것이다.

로그인하지 않은 유저들 다루기

지금까지 위에서 다룬 내용은 로그인한 유저의 행동을 로그로부터 알아내는 방법이었다. 하지만 로그인하지 않은 많은 유저들의 방문은 어떻게 살펴볼 수 있을까? 웹 서버에서 세션 key를 발급하고는 있지만 발급된 key의 정보를 오랜 기간 유지해야 하며 사람이 아닌 봇에 대한 처리 또한 간단하지만은 않은 일이다. Google Analytics와 비슷한 기능을 하는 piwik을 사용해보려 했지만 필요한 기능에 비해서 유지 및 관리 비용이 부담스러운 수준이었다. 그래서 예전부터 이용하던 Google Analytics에서 전체 이용자 수와 신규 이용자 수를 가져오기로 했다.

실제 대시보드 만들기

지표를 살펴보기 쉽도록 대시보드의 형태로 funnel 정보를 나타내야 했다. 간단한 표와 그래프를 보여주기 위한 도구로는 jupyter notebook을 골랐고, pandasmatplotlib를 활용했다.

지금까지 위에서 만든 데이터를 읽어 DataFrame으로 만들고 각각의 이용자 수와 비율을 동시에 표로 나타냈다. 이는 공휴일이나 연말연시같은 이벤트에 이용자 수가 영향을 받기에 반드시 비율을 같이 볼 필요가 있다고 생각했기 때문이다. 그리고 그래프를 그릴 때 전체 이용자 수와 신규 이용자(대부분 비로그인 이용자들)를 같이 나타내면 로그인 이용자들의 수가 비로그인 이용자 수에 비해 매우 적어 로그인한 이용자들의 행동은 그래프에서 아주 작게 나타난다. 그렇기 때문에 로그인 이용자들의 행동만 따로 그래프로 그려야 눈으로 비율의 변화 정도를 확인할 수 있었다. 아래는 그렇게 그린 funnel 분석 그래프이다.

 

 

남은 과제들

대시보드의 표와 그래프로 funnel 지표는 살펴보았다. 하지만 다음 과정인 ‘각 단계의 행동을 행하거나 행하지 않은 이유’를 알아내는 것은 아직 수행하지 못했다. 이를 위해서는 로그를 더 자세히 여러 가지 방식으로 살펴봄으로써 funnel의 단계별 행동 이외에도 이용자가 어떤 방식으로 서비스를 이용하는지 알아내는 작업이 필요하다.

그리고 로그인하지 않은 이용자의 행동과 가입 후 한 행동을 연결해야 한다. 로그인 후의 행동을 분석해서 이용자 경험을 개선하는 것도 중요하지만 가입 이전에 무슨 행동을 하다 가입에 이르게 되었는지를 제대로 수집할 수 있다면 신규 이용자들을 가입시키는 과정 또한 개선이 가능할 것이기 때문이다.

덧1) 로켓펀치의 데이터 분석, 성장 전략 노하우가 담긴 책 ‘그로스 해킹 – 성장의 시대를 위한 안내서’가 출간 되었습니다.

덧2) 로켓펀치의 다음 데이터 분석 프로젝트는 ‘스타트업 연봉 분석’입니다.

글쓴이 : 정희동 (Software Engineer @로켓펀치) & 조민희 (CEO @로켓펀치)