Power BI로 유저 리텐션 간단히 알아내기

Power BI는 Microsoft에서 만든 데이터 분석/시각화 도구입니다. 데이터 덩어리를 간단한 조작으로 조합하여 데이터 간 연관성을 파악하고 그 결과를 시각적으로 표현할 수 있게 해줍니다.

리텐션이란, 서비스를 이용하는 사용자가 얼마나 오랫동안 우리 서비스를 사용하는지를 의미합니다. 처음 사용한 후 다시는 안오면 리텐션은 0%이며, 처음 사용한 사람 100명 중, 다음 날 20명이 재방문했으면 ‘일간 리텐션 20%’라고 말합니다. 웹서비스 통상적으로는 특정 서비스를 사용해 본 이후 30일 내에 적어도 한번은 더 사용해 본 사람의 비율을 말한다고 하는군요. 한편, 첫날 사용 후 바로 다음날 사용 비율을 가장 중요하게 따지기도 합니다.

이 글에서는 Power BI를 사용하여 어느 서비스의 로그에 사용자ID와 타임스탬프만 있다고 할 때 리텐션을 간단히 시각화하는 법을 알아보겠습니다. 최종적으로 아래와 같은 그래프를 보게 됩니다.

powerbi11

참고로 이 글은 저의 Power BI 포럼 질답을 정리한 글입니다. 원글 링크는 아래 링크에 있습니다.

http://community.powerbi.com/t5/Desktop/I-have-timestamp-and-userid-how-do-I-get-number-of-users-for/td-p/101086

이 글은 다음의 순서로 되어있습니다.

  1. Power BI Desktop 설치
  2. 데이터 준비하기
  3. 데이터 가져오기
  4. 데이터 연결하기
  5. 시각화 하기

1. Power BI Desktop 설치

컴퓨터에서 사용할 수 있는 Power BI는 크게 세가지입니다.

  • 데스크톱: 대량의 데이터를 가져와서 조합하고 시각화한 후 내 계정에 업로드할 수 있습니다.
  • 윈도우앱: 업로드한 정보의 보여주기용으로 사용됩니다. 회사에 큰 터치스크린 키오스크가 있을 때 이 앱을 이용해서 보기 좋은 통계 페이지를 내걸 수 있습니다.
  • 웹: 간단한 수준의 데이터 조작과 시각화를 만들 수 있습니다. 데스크톱보다 강력하진 않습니다.

여기서는 데스크톱을 이용해서 다루겠습니다. 다운로드는 아래 링크를 클릭해주세요.

https://powerbi.microsoft.com/ko-kr/desktop/

2. 데이터 준비하기

이 글에서는 아래와 같이 방문 로그가 쌓여있다고 가정합니다.

유저ID………타임스탬프
1……………..2017-01-01
23……………2017-01-03
23……………2017-01-03
76……………2017-01-03
23……………2017-01-05
27……………2017-01-05

이것은 가장 기본적인 로그 형태로, 유저 23번처럼 동일한 유저에 대한 이벤트가 여러번 기록되어 있습니다. 유저23번은 1월 3일 두 번, 5일 한 번 방문했다는걸 알 수 있네요! 이 결과를 아래와 같이 출력하고 싶습니다.

사용시간…………….이용자 수
2일 이용자…………….12 명
3일 이용자………………5 명
5일 이용자………………3 명
9일 이용자………………1 명

나중에 위의 표를 그래프로 그리면 흔히 보는 리텐션 그래프가 나오겠지요. 즉, “1일차 대비 2일차 이용자는 70% 감소한다” 같은 통계를 볼 수 있을 것입니다.

저는 CSV 파일로 데이터를 준비했고, 이를 엑셀로 열면 아래와 같습니다. 참고로 Power BI는 SQL 데이터베이스를 비롯해서 여러 소스를 지원하므로 틀만 만들어놓으면 거의 실시간으로 데이터를 표시할 수 있습니다.

%ec%ba%a1%ec%b2%98

데이터가 준비되었다면 이제 본격적으로 해볼까요?

3. 데이터 가져오기

우리가 알고 싶은건 ‘하루 단위의 유저 리텐션’이지만 우리에게 있는 데이터는 ‘하루에 여러번 방문’한 기록이므로 ‘하루에 여러번 온 유저는 한 번으로 취급’하기 위해 일별 그룹핑을 할 것입니다. 이를 통해 우리는 ‘일별 중복없는 유저ID‘를 얻게 됩니다.

일단 아무 생각 없이 데이터를 불러와봅시다.

powerbi0

첫 화면에서 위 그림처럼 냅다 데이터 가져오기를 누릅니다. CSV 파일을 선택하면 간략한 데이터를 보여주는데 여기서 아래 그림처럼 ‘편집’ 버튼을 눌러서 일별 그룹핑을 해야 합니다.

powerbi12

그룹핑은 다음과 같이 설정합니다.

powerbi8

위의 말은 무슨 뜻이냐면, ‘해당 날짜에 속한 기록끼리 모아줘. 그 다음 각 날짜에 동일한 이름표 붙은 기록은 하나로 퉁쳐줘’라는 뜻입니다. 확인을 누르면 아래 그림처럼 ‘개수’라는 새로운 열이 만들어집니다. 몇 개 기록을 하나로 퉁쳤는지 그룹핑 결과를 보여주는 값인데 우리는 사용하지 않을겁니다. 이제 좌상단에 ‘닫기 및 적용’을 누르세요.

powerbi9

4. 데이터 연결하기

각 날짜에 어떤 유저ID가 있는지 알게 되었다면, 이제 각 유저ID가 몇 일 몇 일에 출현했는지를 셀 수 있어야 합니다. 결론적으로, 2일 출현한 유저들, 4일 출현한 유저들끼리 묶으면 ‘몇 일 사용한 유저가 얼만큼이다‘라는 값을 얻을 수 있겠지요.

다시 한 번 동일한 데이터를 불러봅시다. 이미 한 번 가져왔던 데이터는 ‘데이터 가져오기’ 버튼 오른쪽에 있는 ‘최근 소스’ 버튼을 누르면 원클릭으로 불러올 수 있습니다.

powerbi2

간략한 데이터를 보여주는 화면이 뜨면, 이전과 같이 ‘편집’을 눌르세요. 이제 UserId 열에 우클릭을 해서 ‘중복 제거’를 하고, Date 열은 우클릭해서 삭제합니다. 이 데이터 이름은 UserIds 라고 합시다. 좌상단에 ‘닫기 및 적용’ 버튼을 눌러서 닫습니다.

powerbi5

세번째 메뉴를 누르면 아래 그림과 같이 두 테이블이 연결되어있다고 보여줄거에요. 뭐 별 의미는 없습니다.

powerbi6

다시 두번째 메뉴로 와서, 아래 그림을 참고하여 새 열을 추가해보세요. 함수로 아래와 같이 입력합니다.

DaysUsed = CALCULATE(COUNTROWS(Logs))

참고로, 위의 함수에서 Logs는 처음 부른 데이터 이름입니다. 데이터 이름은 언제든 수정할 수 있어요.

powerbi7

새로 추가한 열은 각 유저가 몇 일 사용했는지를 나타냅니다. 이 데이터를 해석하면, 우리가 7일치 데이터를 가졌을 때 결과로 7이 나온다면 그 유저는 7일간 매일 사용한 셈입니다. 1은 가입 직후에만 써보고 6일간(어쩌면 영원히) 사용 안한 것이지요. 데이터 한 번이 1이므로 0은 있을 수 없습니다.

이제 데이터 정리는 끝났습니다. 정리하면, 첫 데이터에서 일별 그룹핑을 하고, 두번째 데이터에서 UserID를 고유하게 만든 후에 각각이 일별로 출현한 횟수를 셈한 것입니다.

5. 시각화하기

이제 마지막입니다. 우리는 ‘몇 일 사용한 유저가 몇 명인지‘를 그래프로 그릴 것입니다. 마우스만 움직이면 됩니다.

첫번째 메뉴에서 아래 그림처럼 설정해보세요. 시각화에서 막대그래프를 선택하고 두 개의 값만 드래그앤드롭하면 끝입니다!

powerbi10

각 그래프에 마우스를 올려보면 정확한 숫자도 나옵니다. 첫째날과 둘째날은 각각 6339, 2574네요. 계산해보면 첫 날 대비 둘째 날 유저는 약 40.6% 잔존하는 것을 확인할 수 있습니다.

번외: 통계의 함정

이 글에는 함정이 있습니다. 분명 여기까지 안읽고 뭐라고 하는 사람이 있겠지

정확한 의미의 유저 리텐션은 아닌데요. 원래 유저 리텐션은 ‘얼마나 오랜기간 사용하는가’를 중요시 하지만 이번에는 특정 기간 내 몇 번 사용했는가’를 따진 것이므로 적확한 통계가 아닙니다. 즉, 다음날 한 번 사용하고 그 후로 떠나도”2″, 5일간 안쓰다가 6일째 한 번 사용한 날도 “2”로 찍히죠.

그러므로, ‘User Activity Frequency’ 정도가 맞는 표현일 것입니다. 만일 우리가 데이터를 첫날 가입 기준으로 Date 값을 +1일, +3일 정도로 만든 후(offset 처리죠)에 이 글의 기법을 적용하면 가입 이후 일정 기간동안 몇 일 사용했는지를 알 수 있겠습니다.

결론적으로, 이 글에 소개된 기법으로 알 수 있는 정확한 의미의 유저 리텐션은 2일간의 데이터여야 할 것입니다. 왜냐하면 3일이 되는 순간 몇 일에 안썼는지 알 수 없기 때문이죠. 2일짜리로 데이터로 구하면 값은 둘 중 하나죠 – 1 또는 2입니다. 이를 통해 2일차 잔존율을 구할 수 있을 것입니다. 하지만 2일간의 데이터만으로도 충분히 값집니다! 왜냐하면 서두에 인용했듯, 웹서비스는 2일차 잔존이 가장 중요하고 나머지는 이에 따라 정해진 반감기를 가지는 패턴을 보이기 때문이지요.

이상입니다.

Advertisements

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중