-
Amplitude.com 분석도구 조사소프트웨어개발 이야기 2020. 2. 10. 09:38
B2C 서비스(모바일, 웹)의 다양한 분석을 위해, 이벤트 기반의 분석도구인 Amplitude에 대해 정리합니다.
- Amplitude 소개
- 기능 상세
- 아키텍처
- 지원 SDK
- 이벤트 수집 방법
- 라이센스 정책
- 적용사례 — 안드로이드
- Amplitude 사용을 통해 얻을 수 있는 것들
Amplitude 소개
Amplitude.com 홈페이지 소개글에서 모바일/웹을 위한 분석 서비스라고 자신을 설명하고 있습니다.
사용자의 이벤트 정보를 수집하여 이를 다양한 방법으로 보여주는 OLAP 기능뿐만 아니라, 다양한 행동 분석 및 예측기능도 제공하고 있습니다.
제공하고 있는 기능은 5가지로, 메뉴 구성은 다음과 같습니다.
- Dashboards
생성된 차트를 위젯 형식으로 모아서 표시
- Browse Charts
다양한 분석을 위한 차트 생성 및 검색
- User Activity
사용자 정보(이벤트 기록, 사용자 정보, 사용 플랫폼 정보 등) 제공
- Behavioral Cohorts (유료)
특정 기간 동안 같은 특성을 가진 사용자 집단(Group)을 정의
- SQL (유료)
저장된 데이터를 Query를 통해 검색
기능상세
각 기능에 대해 조금 더 자세히 살펴보도록 하겠습니다.
- Dashboard
생성된 다양한 차트를 위젯 형식으로 Dashboard에 추가할 수 있으며, 이를 통해 동시에 다양한 정보를 비교할 수 있습니다. 뿐만 아니라, Dashboard에 추가된 차트를 클릭하여 보다 다양한 상세정보를 확인할 수 있습니다.
- Browse Charts
다양한 분석을 위한 차트 생성 및 검색이 가능합니다. 생성한 차트를 저장하고, 대시 보드에 추가하고, 다양한 파일 형식으로 내보낼 수 있으며, 공유할 수 있는 링크를 만들 수도 있습니다.
이벤트 및 이벤트를 수행한 사용자에 대해 세분화된 차트를 제공합니다. 선택한 기간 동안 사용자 속성 또는 이벤트 속성별로 이벤트를 비교하거나 구분할 수 있습니다.
다음 차트에서는, 음악 제공 서비스에서 지난 30일 동안 미국 사용자가 음악을 어떻게 플레이했는지 기능별(자동 실행, 반복 듣기, 넘어가기 등)로 보여주고 있습니다.
사용자의 속성을 기반으로 활성 사용자의 정보를 보여줍니다.
다음 차트에서는, 지난 30일 동안 iOS 사용자의 국가정보를 보여주고 있습니다.
사용자의 세션 정보를 통해 사용자를 분석할 수 있습니다. 이때, 세션은 다음 세 가지 방법으로 기록됩니다.
1. 서버 : 세션 값을 session_id 속성에 담아 HTTP API를 사용
2. 클라이언트 측 (모바일) : 모바일 SDK를 사용하여 서로 5 분 이내에 트리거 된 이벤트는 현재 세션 (동일한 session_id)으로 계산
3. 클라이언트 측 (웹) : 자바 스크립트 SDK를 사용하여 서로 30 분 이내에 트리거 된 이벤트는 현재 세션 (동일한 session_id)으로 계산
차트에서 측정할 수 있는 항목은 다음과 같습니다.
- Session Legnth Distribution : 세션 길이(시간)의 분포
- Average Session Length : 세션의 평균 길이(길이)
- Avergage Sessions Per User : 사용자별 평균 세션 수
다음 차트에서는, 지난 7 일 동안 플랫폼 별 사용자의 세션 길이 분포를 보여줍니다.
Personas 차트에서는 비슷한 빈도로 다양한 이벤트를 얼마나 자주 수행하는지에 따라 자동으로 사용자를 서로 다른 클러스터로 그룹화합니다.
다음 차트에서는, 활성화 사용자를 9개의 클러스터로 구분하고 각 클러스터별가 지닌 사용자 특성을 파악할 수 있습니다. (Cluster 3의 경우, 음악을 검색하고 실행시키는 작업을 주로 사용하지만, 음악 리스트를 생성하거나 추가하는 등의 부가 기능들은 거의 사용하지 않는 사용자 그룹)
사용자의 이벤트를 순차적으로 분석하여 참여 및 이탈 정보를 제공해 줍니다.
다음 차트에서는, 사용자 “가입 완료”한 사용자가 171,196 명이며 이중 83,866 명이 가입 후 10 분 이내에 “게임 실행”을 했습니다. 그리고 게임을 실행한 83,866 명의 사용자 중 22,979 명이 가입 10 분 이내에 “성과 달성”을 완료했습니다.
Pathfinder는 지정된 시간 동안 수집된 모든 이벤트의 진행 경로를 표시하며, 사용자의 이벤트를 순차적으로 분석하여 참여 및 이탈 정보를 제공해 줍니다.(이벤트 수집 시 session_id 정보 필요)
다음 차트에서는, 지난 7일 동안 음악 제공 서비스에 참여한 사용자들이 수행한 행동(이벤트)들의 경로를 보여주고 있습니다.
Pathfinder User는 지정된 시간 동안 수집된 모든 이벤트의 진행 경로를 사용자 또는 세션 수 정보와 함께 제공해 줍니다. 이는 제품에서 사용하는 최상위 경로를 확인하는 데 유용하며, 사용자가 어떠한 방식으로 서비스를 사용하는지 전반적으로 파악할 수 있습니다.
다음 차트에서는, 지난 7일 동안 음악 제공 서비스에 참여한 사용자들이 수행한 행동(이벤트)들의 경로를 보여주고 있습니다. (35.8%의 사용자가 음악을 연속해서 실행)
Retention Analysis에서는 초기 이벤트 후 사용자가 서비스를 다시 방문하는 빈도를 측정합니다.
다음 차트에서는, 지난 45일간 서비스를 다시 사용한 사용자의 빈도를 보여주고 있습니다. Change Over Time 형식에서는 1일, 7일, 14일, 30일 동안 사용이 유지되는 사용자 정보를 보여주고 있습니다.
Stickiness에서는 앱 사용빈도를 일자별 차트로 표시해 줍니다. 사용자가 주간 또는 월간 간격으로 이벤트를 수행하는 일 수를 측정하므로, 어떤 이벤트가 사용자를 서비스로 이끄는지 파악할 수 있습니다.
다음 차트에서는, 지난 4주 동안 주별로 음악 검색을 며칠 사용했는지 보여주고 있습니다.
Compass는 신규 사용자가 수행 한 이벤트와 지속적으로 서비스를 이용하는 사용자와의 상관관계를 분석한 정보를 보여줍니다. 예를 들어, 페이스 북의 경우 처음 10 일 동안 7 명이 넘는 친구를 추가 한 신규 사용자가 장기간에 걸쳐 유지될 것이라는 사실을 발견할 수 있었습니다.
다음 차트에서는, 처음 7 일 이내에 ‘친구 추가’를 수행한 신규 사용자와 2주 동안 서비스를 지속적으로 사용 중인 집단과의 상관관계 정보를 보여주고 있습니다. (2번 이상 친구 추가를 한 사용자가 제일 높은 상관관계를 보임)
Lifecycle은 신규 사용자, 현재 사용자 및 부활된 사용자 수에 따라 활성 사용자의 분류를 표시하고 변경된 사용자 수를 표시합니다. 따라서 활성 사용자를 세분화하여 볼 수 있으므로 성장을 보다 잘 이해하고 분석할 수 있습니다
다음 차트에서는, 지난 7일간 활성 사용자 분포 (신규, 현재 및 부활) 및 특정 일, 주 또는 월의 변동 사용자 수를 표시합니다.
- User Activity
사용자 정보를 보다 자세히 검색할 수 있고, 사용자별 이벤트 흐름을 모니터링할 수 있습니다.
- Behavioral Cohorts (유료)
이벤트 및 이벤트 속성을 기반으로 그룹을 만들 수 있는 기능을 제공하며, 이를 Event Segmentation, Funnel Analaysis, Retention Analysis 차트 등에서 Dimension으로 다양하게 활용할 수 있습니다.
- SQL (유료)
저장된 데이터를 SQL로 직접 검색하는 기능을 제공합니다. AWS Redshift를 통해서도 조회가 가능합니다.(제플린의 Spark SQL이 떠오릅니다;;;;)
아키텍처
Amplitude는 확장이 가능하며 데이터 결함을 감내(fault-tolerant)할 수 있는 시스템을 위해, 트위터에서 사용한 람다 아키텍처(Lambda Architecture)를 적용하고 있습니다.
수집된 데이터 중 빠른 조회와 처리를 위한 정보는 내부적으로 구축된 Redis와 비슷한 메모리 DB(자체 구축)에 저장되며, 원시 데이터 및 집계성 데이터는 별도로 AWS S3에 저장이 됩니다.
Amplitude SDK
Amplitude에서는 보다 수월한 이벤트 수집을 위해 다양한 SDK를 제공하고 있습니다. 지원 가능한 SDK는 6가지로 다음과 같습니다.
JavaScript
https://github.com/amplitude/Amplitude-Javascript
iOS
https://github.com/amplitude/Amplitude-iOS
Android
https://github.com/amplitude/Amplitude-Android
Unity
https://github.com/amplitude/unity-plugin
Segment
https://segment.com/docs/integrations/amplitude/
HTTP
https://amplitude.zendesk.com/hc/en-us/articles/204771828
이벤트 수집 방법
Amplitude SDK를 통해 이벤트를 수집할 수 있습니다. 분석을 원하는 서비스에서는 다음 단계를 통해 이벤트 로그 정보를 Amplitude로 전송합니다.
(Android/iOS/Unity SDK에서는 이벤트 30개마다 업로드를 진행하며, 30초 간격의 업로드 배치작업도 이뤄집니다. JavaScript/HTTP는 API 호출 시 업로드가 진행되며, 설정을 통해 배치 작업으로 변경 가능합니다.)1. 초기화
Amplitude에서 받은 개발자 API Key를 통해 초기화합니다.// Amplitude SDK For Android Amplitude.getInstance().initialize(this, "YOUR_API_KEY_HERE") .enableForegroundTracking(getApplication());
2. 사용자 정보 설정(Optional)
사용자 정보를 통한 분석을 위해서 사용자 정보 설정이 가능합니다.// Amplitude SDK for Android // Setting User ID Amplitude.getInstance().setUserId("USER_ID_HERE"); // Setting User Properties JSONObject userProperties = new JSONObject(); try { userProperties.put("KEY_GOES_HERE", "VALUE_GOES_HERE"); userProperties.put("OTHER_KEY_GOES_HERE", "OTHER_VALUE_GOES_HERE"); } catch (JSONException exception) { } Amplitude.getInstance().setUserProperties(userProperties); // Logging out Amplitude.getInstance().clearUserProperties(); Amplitude.getInstance().setUserId(null); Amplitude.getInstance().regenerateDeviceId();
3. 그룹 정보 설정(Optional)
그룹 단위의 분석을 위해서 그룹 정보 설정이 가능합니다.// Amplitude SDK for Android // Setting Group Information Amplitude.getInstance().setGroup("orgId", "15"); // Setting Group Information using list Amplitude.getInstance().setGroup("sport", new JSONArray().put("tennis").put("soccer"));
4. 이벤트 로그 전송
이벤트 전송을 통해 사용자의 정보가 Amplitude에 저장되며, 전송되는 이벤트에 대한 다양한 정보를 설정할 수 있습니다.// Amplitude SDK for Android // send log event Amplitude.getInstance().logEvent("EVENT_IDENTIFIER_HERE"); // send log event with event properties JSONObject eventProperties = new JSONObject(); try { eventProperties.put("KEY_GOES_HERE", "VALUE_GOES_HERE"); } catch (JSONException exception) { } Amplitude.getInstance().logEvent("Sent Message", eventProperties); // send log event with event properties and group JSONObject eventProperties = new JSONObject().put("key", "value"); JSONObject groups = new JSONObject().put("orgId", 10); Amplitude.getInstance().logEvent("initialize_game", eventProperties, groups);
라이센스 정책
Amplitude는 무료로 기본적인 기능을 사용할 수 있는 라이센스 정책을 가지고 있습니다. 월별 천만 건 이상의 이벤트 수집과 고급 분석 기능을 사용하지 않는다면 무료 기능으로도 충분히 활용 가능합니다.
스타터
> Free
> 기본 차트, 기본 분석
> 10,000,000 Events / Month
엘리트
> $2,000 / Month
> 스타터 기능 + Direct SQL
엔터프라이즈
> 데이터 양에 따른 비용 정책
> 엘리트 기능 + 고급 분석(행동 분석)
안드로이드 적용 사례
Amplitude를 TouchMBC의 Android App 테스트 환경에 적용한 내용을 정리합니다.
1. App 분석을 위해 수집하고자 하는 이벤트와 속성을 사전에 정리합니다.
2. 사용자에 따른 분석을 위해 수집하고자 하는 사용자 속성을 사전에 정리합니다.
3. Amplitude.com에서 계정을 생성하고, 프로젝트를 생성합니다.
4. 프로젝트 관리 페이지의 안내에 따라 SDK를 선택하고, 테스트 코드를 작성하여 첫 번째 수집이 정상적으로 동작하는지 확인합니다.
5. 이벤트 수집을 확인한 뒤, 1번에서 작성한 이벤트, 사용자 정보를 통해 이벤트 수집과 관련된 코드를 작성합니다.
public class MBCApplication extends Application { ... @Override public void onCreate() { super.onCreate(); ... // Amplitude Initialization Amplitude.getInstance().initialize(getApplicationContext(), "API KEY") .enableForegroundTracking(this); } ... }
6. 이벤트 수집 코드가 적용된 단말(android 4, 5, 6)들을 통해 서로 다른 사용자로 로그인하여 이벤트를 전송합니다.
7. 수집된 정보를 통해 차트를 생성합니다.(유의미한 데이터가 아니므로 정상적으로 수집되었고, 정상적으로 표시되는지 확인합니다.)
8. User Activity 메뉴를 통해 사용자 상세 정보 및 사용자 활동 기록도 확인할 수 있습니다.
Amplitude 사용을 통해 얻을 수 있는 것들
프로덕션 배포를 통해 실 사용자들의 정보가 축적될 경우, 다음과 같은 정보를 통해 다양한 분석이 가능합니다.
* 사용자 유지를 위한 다양한 분석
> Retention analysis 차트 활용
— 대부분의 사용자는 다운로드 후 처음 3–7 일 이내에 앱을 계속 사용할지 여부를 결정
— 다운로드 한 날로부터 7일간 Retention Chart를 측정하면 도움
> 남아있는 사용자들을 파악하여 설문 가능
> 사용자가 앱을 다시 사용하도록 소외 사용자 부활
— 상금, 친구 추천, UX 개선
> 사용자의 사용 주기를 파악하여, 이에 맞는 차별화 요소 제공
* 파워 사용자를 이용하자
> Stickiness 차트 활용
> 앱을 자주 사용하는 사용자(팬)를 이용한 마케팅 및 설문 활용
* 어떤 기능을 가장 많이 사용하는가?
> Event Segmentation 차트 활용
> 빈번히 사용하는 기능과 잘 사용하지 않는 기능에 대한 UX 개선
* 사용자를 더 많이 활동하게 할 수 있는 방법은?
> Funnel analysis 차트 활용
> 알람 수신 후, 시청하는 사용자 %
> Push 수신 후, 앱의 기능을 수행하는 사용자 %
> 앱 설치 후, 한 번도 사용하지 않은 이탈자 분석
* 사용자 활동 추적
> User Activity 기록을 통해 Push를 받았는지 확인 가능
* 기타
> 메시징 파트너 (Kahuna, Appboy, Urban Airship) 서비스와 연계하여 특정 사용자 push 및 인앱 메시지 발송 가능
* REST API를 통한 데이터 활용
> Amplitude에서 제공하는 REST API를 활용하여 Customizing이나 내부 활용 가능
'소프트웨어개발 이야기' 카테고리의 다른 글
npm install 에러 in MacOS (0) 2020.02.10 SonarQube 그리고 코드 품질 (0) 2020.02.10 SonarQube + Jenkins + GitLab (0) 2020.02.10 소스 정적 분석도구 SonarQube 리서칭 (5) 2020.02.10 “안드로이드 프로그래밍” 도서 리뷰 (0) 2020.02.10