<비즈니스 활용 사례로 배우는 데이터 분석 : R> UPDATE.20200409
저자 : 사카마키 류지, 사토 요헤이
저서 : <데이터 사이언팃트 양성독본>, <R 패키지 가이드북> 등
옮김 : 손정도
펴낸 곳: 한빛미디어
초판 : 2015년 11월 1일
** 챕터 3부터 필요한 데이터 파일이 아무리 찾아봐도 안보였는데...
구글링을 하다가 보니 책 뒷커버에 작게 표시되어있다.
예제 소스 압축파일 내 R폴더 (www.hanbit.co.kr/exam/2211)
지은이의 글
- 일반적으로 무언가를 성공시키기 위해서는 '인식하기, 이해하기, 체득하기, 숙련하기'라는 각각 커다란 장벽을 이루는 계층을 뚫고 나가야 합니다.
CHAPTER 01. 데이터 과학자라는 직업
1.1 데이터 과학자란?
- 데이터의 이해
: 규칙의 발견과 검증의 핵심이 되는 귀중한 재료
- 데이터를 비즈니스에 응용하기
: 관측한 데이터로부터 인과관계를 추측하고 미래를 예측하거나, 혹은 원하는 결과를 얻을 수 있도록 원인을 컨트롤
- 데이터 과학자가 필요하게 된 배경
: 마케팅에서 다루던 데이터와 함께, 적시성이 높은 대량의 로그 데이터를 재빨리 분석하는 것을 요구함
: 분석을 하기 위해서는 로그 데이터를 직접 분석할 수 있는 사람, 즉 '코드를 작성할 수 있는 마케터'가 필요
1.2 데이터 과학자의 세 가지 타입
- 비즈니스 영역에서 출발한 데이터 과학자
: 데이터를 해석하는 데 실무 경험에서 오는 깊이가 있다
: 실제 유저들의 요구사항을 알기 위해 필요한 데이터를 발견하여 범위를 좁혀가는 능력이 탁월
- 통계학 쪽에서 출발한 데이터 과학자
: 데이터의 상태로부터 어떤 목적으로 어떤 결과를 내기 위해 어떤 데이터 분석 기법을 사용해야 하는지 쉽게 판단
: 데이터 상태나 처리 목적에 따라 적절한 통계 기법을 선택
: 어떻게 데이터를 가공하면 데이터 분석이 수월해지는지, 혹은 데이터의 상태로부터 어떤 통계 기법을 선택해야 할지 등을 판단하는 데 탁월한 재능이 있다.
- 엔지니어링 쪽에서 출발한 데이터 과학자
: 어떤 프로그래밍 언어나 구조(시스템)로 데이터를 처리하면 좋을지 쉽게 판단
: 데이터 양이나 처리내용의 복잡성에 따라서 적절한 언어나 처리구조를 선택
: 복잡한 데이터를 분석하기 쉽도록 정돈하거나, 적절한 언어와 처리구조를 선택할 때 정확한 판단
1.3 데이터 과학자의 현실
- 현실에서는 어떤 특정 분야에서 시작한 사람이 특별히 유리해보이지는 않는다.
- 부족한 부분을 채워나가면서 성장
- 조직 내에서 서로 도와가면서 업무 수행
# 감사로그 분석, 대량 건 암/복호화 분석에서 활용할 수 있지 않을까?
CHAPTER 02. 비즈니스에서의 데이터 분석 흐름
2.1 데이터 분석의 다섯 가지 흐름
- 비즈니스에서 데이터 분석의 목적은 문제를 해결하는 것이다.
1) 현실의 모습과 이상적인 모습 파악
2) 문제 발견 : 둘의 차이를 이루는 요소
3) 데이터 수집과 가공
4) 데이터 분석
5) 액션 : 비용 등을 고려하여 제안 및 추진
2.2 현실의 모습과 이상적인 모습
- '문제'는 어떤 시점에 어떤 비즈니스가 처한 환경의 '이상적인 모습'에 의해 바뀔 수 있다.
- 즉, 두 모습 사이에 차이가 있어야 비로소 문제라고 할 수 있다.
2.3 문제 발견
- '현상'과 '문제' 구별하기
: '매상이 떨어지고 있다' 혹은 '고객이 떠나고 있다' 등은 데이터 분석에서는 '현상'에 불과하다
: '현상'을 바탕으로 의논하여 해결해야 할 '문제'를 찾아내는 것이 중요
: '이상적인 모습'을 당사자 간에 공유하는 것이야말로 효과적인 데이터 분석을 수행하는 데 필수적
: '현상'이 공유되고 '이상적인 모습'이 공유되었을 때 처음으로 데이터 분석을 수행할 토대가 마련되었다고 할 수 있으며, 데이터 분석으로 그 차이의 원인이 무엇인지 검증해나갈 수 있다.
- '이상적인 모습'을 상상하며 '현실의 모습'과의 차이 인식하기
: 문제를 찾아내는 효과적인 방법 중 하나로 '문제가 생기지 않은 상황 = 이상적인 상황'으로 생각해본다
: 무엇이 근원적인 원인인지 생각해본다
- 문제 발견을 위한 세 가지 관점
# 이 내용을 어디서 봤던거 같은데.
1) 크기 보기
: '이상적인 모습'과 '현실의 모습'의 차이를 이루는 요소로 간주되는 요인들에 대해 각각의 '크기'를 파악한다
: 크기가 작은, 영향도가 작은 요인은 본질적인 문제가 아니라고 판단한다
# 제품을 팔기 위한 영업과 개발의 차이는 뭘까? 영업은 고객이 원하는 기능이 되기를 바라고, 개발은 무턱대고 기능이 필요하다는 요청이 무리고 둘의 절충안은 있는가?
2) 분해해서 보기
: 일어난 현상의 구성요소를 몇 가지 다양한 주제로 분해하여, 그 현상을 일으키는 원인이 되는 요소를 찾아낸다
: MECE(Mutually Exclusive 상호배제, Colectively Exhaustive 전체 포괄)
: 인수분해 사용하기 (ex: 매상을 분해, 매상=1명당 매상금액 x 구매자수)
: '조절할 수 있는 요소'인지 '조절할 수 없거나 조절하기 힘든 요소'인지 구별하는 것이 중요
3) 비교해서 보기
: 문제가 있는 데이터와 없는 데이터를 비교해서 그 차이가 무엇에 의해 발생하는지 찾아낸다
: 시계열 비교 - 전일/당일, 전주/금주, 동일 이벤트에 대한 과거와 현재
: 유사 상품/서비스 - 경쟁사와 매상, 자사의 서비스간 이익 비교
: 유저 속성 - 20대와 50대의 구매의욕, 남성/여성의 구매율, 한국/미국의 선호 색상이나 형태
2.4 데이터 수집과 가공
- 데이터 수집
: 데이터 분석가는 효율적인 작업을 위해 먼저 가급적이면 이미 가지고 있는 데이터나 아니면 신청해서 바로 사용할 수 있는 데이터로 분석이 가능한지 확인
: 데이터 새로 취득 시 설치 비용 문제, 과거의 현상과 비교 문제, 충분한 양의 데이터를 쌓을 때 까지의 기간 등이 요구된다.
: 기존 데이터 취득은 파일(CSV 등), DB, 하둡을 통해 할 수 있다.
- 데이터 가공
: 데이터 가공은 데이터 분석의 목적, 데이터 보존 상태, 데이터 형태 등에 따라 달라지기 때문에 기본적으로는 개별적으로 다루어야 한다.
1) 데이터 결합 : 분석하고자 하는 여러 데이터(파일,테이블)를 하나의 데이터로 모으는 처리가 필요
2) 판정용 변수 작성 : 데이터가 없을 때 누락을 방지하기 위해 플래그 변수를 새롭게 작성
3) 이산화 변수 작성 : 비즈니스에서는 분석 후의 행동을, 목적으로 연속된 수치를 이산화한다(많이, 보통, 조금, 무과금)
2.5 데이터 분석
- 의사결정지원 : 문제 해결을 위한 행동을 사람이 결정하고 실행할 수 있도록 지원하는 것이 주목적
- 자동화/최적화 : 문제 해결을 위한 행동을 컴퓨터에 실행시키기 위한 알고리즘을 구축하는 것이 주목적
# 퀀트를 활용하는 두가지 방법과 동일한거 같다
- 의사결정지원에 도움이 되는 통계해석
: 단순 집계, 크로스집계, 중회귀분석, 공분산구조분석 등
: 예측 모델은 어떤 요인이 결과에 어떻게 영향을 끼치는지 인과관계를 명확히 할 수 있게 해준다.
- 자동화/최적화에 도움이 되는 기계학습
: 상세한 분석, 최적화 로직 검증, 구매행동 추정
2.6 액션
- 액션의 종류 두가지
1) 사람이 의사결정을 해서 새로이 뭔가를 시작하는 것(혹은 관두는 것) - 의사결정지원
2) 액션을 실행하기 위한 알고리즘을 구축해서 컴퓨터에 실행시키는 것 - 자동화/최적화
- 설득비용, 비용 대비 효과, 리스크 최소화
- 액션을 취했을 때의 예상되는 오차도 함께 제시한다.
2.7 정리
- 이상적인 모습을 의뢰자와 분석자가 반드시 공유하고 실제 액션을 향해 데이터 분석을 실행하는 것이 비즈니스 데이터 분석에서 무엇보다 중요하고, 이 부분을 잘하는 것이 수월하게 효과를 높이는 방법론이라고 할 수 있다.
CHAPTER 03. (사례1. 히스토그램) 왜 매상이 감소하고 있는가?
소셜게임의 매상 분석
: 매상이 지난달에 비해 감소, 매상 하락 원인 조사
3.1 현실의 모습과 이상적인 모습
- 현실의 모습 : 지난달과 비교하여 이달의 매상이 감소한 것
- 이상적인 모습 : 지난달과 동등한 매상 확보하기
3.2 문제 발견
- 현실의 모습과 이상적인 모습 간에 차이를 이루는 구조를 명확히 하기 위해 지난달과 이달에 무엇이 다른지 생각한다.
- 큰 시점으로 생각
1) 감소 원인 예상(가설)
- 광고에 문제가 생겼다.
- 매월 테마를 바꿔서 개최하던 게임의 이벤트에 문제가 생겼다.
2) 검증
- 이달에는 예산 관계로 지난달만큼 광고를 하지 못했다.
- 이벤트 내용은 지난달과 거의 비슷했다.
- 신규 유저수가 줄어든 것과 매상 감소 사이의 관계를 데이터로 확인 -> 매상 회복 고민
3.3 데이터 수집과 가공
- 분석에 필요한 데이터 검토
: 가설을 살피고 가설에 근거하여 문제 해결을 위한 데이터 분석 스토리를 정리한다.
: 스토리 완성을 위한 매상 내역을 조사(DAU, DPU, Install)
: 위 데이터로부터 수집하고자 하는 정보를 선택
- 분석에 필요한 데이터 수집
- 분석에 필요한 데이터 가공(전처리)
: 매상 감소가 신규 유저의 영향인지 그렇지 않은지' 판단하기 위해 다음 순서로 데이터를 가공
1) 유저(DAU) 데이터에 이용시작(install) 데이터 결합 : 어떤 날에 이용을 시작한 유저가 얼마나 있는지 조사
2) 위 데이터에 과금(DPU) 데이터 다시 결합하기 : DAU 중에서 어떤 날에 과금된 유저가 얼마나 있는지 조사하기 위해 DPU 데이터를 유저 ID와 과금일을 키로 결합(결합되지 않은 레코드도 포함)
3) 비과금 유저의 과금액에 0 넣기 : 결손치(NA)로 되어 있는 데이터에는 0을 대입해서 평균/합계 문제 해결
4) 월차로 집계하기 : 지난달과 이달의 차이를 확인하기 위해 매월 유저별로 집계한 데이터로 변환
5) 월차 데이터에 신규 유저인지 기존 유저인지 구분하는 항목 추가하기 : 신규 유저가 줄어들고 있는지 확인
3.4 데이터 분석
- 그래프로 데이터 시각화 : 가설을 입증할 만한 결과 확인
- 심화 : 어떤 과금액 층이 줄어들었는지 확인 : 히스토그램 사용
3.5 액션
- 데이터 분석 결과로부터 사실 도출
- 광고를 다시 시작해 신규유저를 증가시킬 경우 소액과금자가 늘어나 매상 회복 시킨다
3.7 R 언어 코드 상세설명
- CSV 파일 읽어 들이기
read.csv(AA, header=T, stringsASFactors=F)
AA라는 이름의 파일을 R언어로 익어 들임
읽어 들일 파일에 헤더가 붙어 있음, F는 없음(항목이름)
데이터에 문자가 들어 있을 때도 일반적으로 처리
- DAU 데이터에 Install 데이터 결합하기
merge(A, B, by=c("XXX"))
데이터 A와 데이터 B를 XXX항목의 내용이 같은 것기리 모아서 결합)
- 지금까지의 데이터에 DPU 데이터 결합하기
- 비과금 유저의 과금액에 0 넣기
AA$BB[is.na(AA$BB)] <- 0
AA의 BB열(항목)의 값이 만약 'NA'인 경우 그 데이터를 0으로 변경
- 월차 집계하기
ddply(AAA, .(B,C), summarize, XXX = sum(XXX))
AAA 데이터의 B열(항목)과 C열(항목)로 그룹화하여 합계를 집계
- 신규/기존 유저를 구분하는 항목 추가하기
ifelse (AA == BB, "XX", "YY")
'AA가 BB와 같다면 XX를 기입, 그렇지 않다면 YY를 기입
- 그래프를 이용해서 데이터 가시화하기
install.packages("ggplot2")
install.packages("scales")
패키지부터 설치해야 한다
(그래프가 안보일 경우 콘솔창을 풀화면으로 했다면 작은화면으로 바꾸면 뒤에 숨어있는 것을 확인 가능)
CHAPTER 04. (사례2. 크로스 집계) 어떤 속성의 고객들이 떠나고 있는가?
소셜게임의 이용자 탈퇴 이유 분석
: 광고나 이벤트에 차이는 없는데 이용 유저수가 감소한 원인 조사
- 현실의 모습 : 지난달과 비교해서 유저수 감소
- 이상적인 모습 : 지난달과 같은 수준으로 유저수 회복
- 문제 발견 : [가설 3. 성별 혹은 연령 등 특정 유저층에서 탈퇴한 유저가 많았다] 를 조사
- 탐색형 데이터 분석 실시 : 원인은 분명하지 않지만 뭔가 좋지 않은 현상이 발생했을 경우에 어디에서 문제가 발생했는지 찾아낸다.
- 분석에 필요한 데이터 : DAU(Daily Acitve User) 데이터, user_info 데이터
- 데이터 가공 : 어떤 상태의 데이터(결과 데이터)와 유저의 속성정보(원인 데이터)를 연관시켜서 특정한 속성(원인)이 어떠한 상태(결과)를 야기하는 것이 아닌지 검토하기 위한 데이터 가공
- 데이터 분석
: 어떤 속성을 가진 유저층이 지난달에 비해 감소하였는지 그 세그먼트(계층)를 찾아내기 위해 크로스집계를 실시 후 시각화
: 세그멘트별로 크로스 집계(성별, 연령대, 성별x연령대, 단말기별)
- R 언어 예제
CSV 파일 읽어 들이기
DAU 데이터에 user.info 데이터 결합하기
세그먼트 분석(성별로 집계)
: table(AAA[,c("XX","YY")])
: AAA라는 데이터의 XX와 YY항목에 대해 크로스 집계 후 출력
세그먼트 분석(연령대별로 집계)
세그먼트 분석(성별과 연령대를 조합해서 집계)
: dcast(AAA, XX~YY+ZZ, value.var="CCC",length)
: AAA라는 데이터에서 세로축에는 XX를 놓고 가로축에는 YY와 ZZ의 모든 가능한 조합을 놓아 크로스집계를 실시
: 크로스집계 안의 값은 CCC의 숫자를 세어서 넣으라
세그먼트 분석(단말기별로 집계)
세그먼트 분석 결과 시각화하기
CHAPTER 05. (사례3. A/B테스트) 어느 쪽의 배너광고가 반응이 좋은가?
배너광고의 A/B 테스트
: 두가지 배너 광고중 구매율을 높이는데 더 좋은 광고 선정
- 현실의 모습 : 다른 앱에 비해 구매율이 낮음
- 이상적인 모습: 다른 앱과 같은 수준으로 구매율을 올릴 것
- 문제 발견 : [가설 2. 배너광고의 표시내용에 문제가 있음] -> 클릭률을 높이자
- 데이터 수집과 가공
1) 검증 방법의 검토
: 과거 데이터 없음 -> 2개의 신규 배너광고 작성하여 데이터 수집
: 전후비교로는 외부요인을 배제할 수 없음
: A/B테스트로 외부요인 제거
: A와 B의 구분은 임의적이어야 함
: 동시 다발적 A/B테스트들은 영향을 미칠 수 있음으로 주의
: 통계적 가설검정은 커트라인 #해당 설명은 다시볼 것 p.115
2) 검증에 필요한 데이터 수집과 가공
: 로그를 발생시킴
: 두 로그를 결합시킴
- 데이터 분석
1) A와 B의 클릭률에 통계적으로 차이가 있는지 파악
: 가설검정을 위해 χ² 검정을 사용
: p값이 0에 가까우면 가까울수록 차이가 있음.
: 0.05 보다 작은 값이면 '통계적으로 차이가 있다'고 여김
2) A와 B의 클릭률의 시계열 추이 시각화
- 액션 : 배너광고 B를 채용(지속적인 A/B테스트를 통해 배너광고 최적화)
- R 언어 예제
ab.test.imp 데이터에 ab.test.goal 데이터 결합
클릭했는지 하지 않았는지 나타내는 플래그 작성하기
클릭률 집계
χ² 검정 실행하기
테이스 케이스별로 클릭률 산출
테스트 케이스별 클릭률의 시계열 추이 그래프
CHAPTER 06. (사례4. 중회귀분석) 집객효과가 가장 큰 광고의 조합은 무엇인가?
매스미디어 광고 실시의 최적화 문제
: 과거 다른 게임에서 실시했던 데이터를 이용해서 가장 효과적으로 광고
- 현실의 모습 : 매스미디어의 광고 효과가 일정치 않음
- 이상적인 모습 : 광고를 적절히 배분해서 광고 효과가 최고가 되도록 함
- 문제 발견
: 매스미디어 광고의 광고비 배분에 문제가 있음 -> 매월 TV와 잡지의 광고비 배분에 변동이 있음
- 분석
1) 과거의 데이터를 가지고 TV와 잡지 각각의 광고비와 획득 유저수 관계 파악
2) 그 관계성을 이용해서 TV와 잡지에 투입할 광고 배분 결정
- 중회귀모델 분석 기법
1) 비즈니스에서는 항상 비용을 고려하고 결과를 예측해서 액션을취하는 것이 일반적
: 리턴을 상정하고 행동비용을 투입하게 된다
2) 광고매체에 따라 유저수를 얼마나 획득할 수 있을지 상정할 수 있는 모델을 구축하여 광고 방침을 결정하는 사례
3) 직선의 가로축(설명변수)의 값을 가지고 세로축(목적변수)의 값을 예측하는 것이 (선형)회귀분석이다.
: 신규 유저수 = b x 광고비 + a
- 데이터 수집과 가공
1) 분석에 필요한 데이터 검토와 수집
: 인터넷 광고는 데이터를 쉽게 수집하고 측정할 수 있다
: TV나 잡지 광고는 전체 유저수가 늘었는지 정도의 개략적인 정보밖에 얻을 수 없다
-> 인터넷 광고를 통해 획득한 유저수를 뺀 신규 유저수와 TV, 잡지 광고비 데이터를 이용
- 데이터 분석
1) TV, 잡지 광고비와 신규 유저수의 산점도
> 상관 : 데이터 간의 관계 크기
> 산점도 : 상관을 확인
2) 중회귀분석 실행
> 신규 유저수 = 0.136 x TV광고비 + 0.725 x 잡지광고비 + 188.174
: TV광고에 1을 투자하면 약 0.1명, 잡지광고에 1을 투자하면 약 0.7명의 신규 유저 획득
3) 중회귀모델의 상세검토
: 잔차(예측값과 측정값의 차이)분포 확인
: 중회귀모델의 계수 확인
: 결정계수와 자유도 조정 결정계수 확인
>> 결정계수가 1에 가까워질수록, 모델이 주어진 자료에 적합함을 의미
- 액션
: 위에서 얻어낸 식에 예상 광고비를 적용해서 예측 신규 유저수를 확인
- R 언어 예제
TV광고의 광고비용과 신규 유저수의 산점도 그리기
잡지 광고의 광고비용과 신규 유저수의 산점도 그리기
회귀분석 실행
lm(A~. , data=ZZ[, c("A", "B", "C")])
: ZZ 데이터의 A, B, C 항목을 사용해서 회귀분석을 실시한다
== lm(A~B+C, data = ZZ[, c("A", "B", "C")]와 동일
회귀분석의 결과 해석
1) Residuals : 잔차분포를 사분위수로 표현한 것
2) Coefficients : 계수의 추정값에 대한 개요
3) Multiple R-squared, Adjusted R-squared : 결정계수와 자유도 조정 결정계수
CHAPTER 07. (사례5. 로지스틱 회귀분석) 과거의 행동으로부터 현재의 행동을 예측할 수 있는가?
게임 단말기 전환(피쳐폰에서 스마트폰으로) 사례분석
: 유저 ID 정보를 이전하지 못해 게임을 떠난 유저가 얼마나 있는지 확인
- 현실의 모습 : 피쳐폰 유저 감소량 > 스마트폰 유저 증가량
- 이상적인 모습 : 피쳐폰 유저 감소량 = 스마트폰 유저 증가량
- 피처폰 유저의 탈퇴를 구조적으로 분석하기
: 피처폰에서 그냥 탈퇴
: 피처폰에서 스마트폰으로 갈아타기 위해 탈퇴
> ID를 이전해서 계정 그래도 이용
> 신규 ID로 이용
> 자연 탈퇴
- ID 이전에 실패해서 게임을 떠났다는 가설
: ID 이전 실패로 인한 탈퇴가 유저수 감소에 끼친 영향 파악
> 영향 크면 ID 이전 시스템 개선
> 영향 작으면 스마트폰 유저 획득을 위한 광고 개선
- 자연 탈퇴한 경우와 ID 이전에 실패해서 탈퇴한 경우의 차이점 확인
: 게임 이용일 확인
- '자연 탈퇴한 유저'와 'ID 이전에 실패해서 탈퇴한 유저'를 데이터상에서 구별할 방법이 없다.
- 정답을 포함한 데이터 없이 모델 세우기
탈퇴자 전체에 대한 'ID 이전 실패로 인한 탈퇴'의 비율이 높을 때는 탈퇴 유저와 이전 유저 간에 1월의 이용횟수가 크게 다르지 않을 것.
-> 1월의 이용횟수가 크게 다르지 않다는 건 이용횟수를 가지고는 모델을 만들 수 없다는 뜻
-> 반대로 말하면, 'ID이전 실패로 인한 탈퇴'가 적다면 이용횟수의 차이가 분명히 드러날 것이기 때문에 모델을 만들 수 있다
- 분석 스토리 정리
- 어떤 모델을 사용할 것인가?
: 로지스틱 회귀분석 : 신속하게 데이터의 경향을 파악하기에 적합한 방법
- 'ID 이전 유저'의 비율에 곡선 끼워 맞추기
1) ID 이전 유저 1, 탈퇴유저 0 그래프
2) 선형회귀분석 적용
3) 횟수 그래프 작성
4) 비율 그래프 작성
5) 로지틱스 곡선 : 비율의 절반(0.5)의 이용횟수를 역치로 삼고, 이전/탈퇴 유저 구분
- 데이터 가공
: 로지스틱 회귀분석을 하기 위해서는 다음과 같은데이터가 필요
> 각 유저별로 ID 이전을 한 유저인지 아닌지 나타내는 데이터
> 날짜별로 게임을 이용했는지 나타내는 데이터
- 모델 검증
1) 예측 모델을 작성할 때는 분석을 크게 '모델 구축'과 '모델 검증'의 2단계로 나누어 진행
: 데이터로부터 로지스틱 회귀분석을 통해 예측모델을 구축
: 예측모델이 어느 정도 신뢰할 수 있는지 검증하기 위해 그 모델의 예측값과 실제 데이터를 비교
2) 로지스틱 회귀분석으로 모델 작성
: 보다 적절한 모델을 만들기 위해서는 뭔가를 기준으로 변수를 선택하지 않으면 안 됩니다.
: 변수를 선택할 때는 일반적으로 사용하는 것은 AIC(아케이케 정보 척도) 지표이다.
3) 분석 결과로 본 모델의 검토
: 다중공선성이 발생 -> 계수에 대해 논의할 수 없게 됨 -> 장기예측이 불가능
4) 구축한 모델에 의한 예측
: 예측값과 측정값의 차이를 크로스집계표를 사용하여 확인
: 탈퇴율 예측
: 실제로 운용할 경우에는, 교차검증 등을 도입해서 조금 더 검증
5) 예측결과로부터 유저군 추측
: 처음의 가설이었던 'ID 이전에 실패해서 탈퇴'한 유저의 영향은 작은 것으로 확인
- 액션
: 위 분석 결과를 바탕으로 액션은 스마트폰 신규 유저를 향한 광고 재검토로 결정
- R 언어 예제
유저별로 ID 이전을 한 유저인지 아닌지 나타내는 데이터 정리
unique(AA[, c("XX","YY","ZZ")])
: AA라는 데이터에서 항목 XX와 YY, ZZ가 중복되지 않도록 정리. 하나만 다를 경우 남음, 다 같으면 하나만 남음
unique(AA[AA$XX=="xxx", c("X","Y","Z")])
AA라는 데이터에서 AA의 XX항목이 xxx인 것만 추출하고 아울러 X, Y, Z의 항목이 중복되지 않도록 데이터 가공
날짜별 게임 이용 상황 데이터 정리하기
names(fp.dau1.cast)[-1] <- paste0("X", 1:31, "day")
항목명을 알기 쉽도록 첫 번째 열을 제외한 나머지 열에 이름을 붙이기 위함
paset0함수는 파라미터로 넘겨준 값들을 공백 없이 연결
로지스틱 회귀분석을 통한 모델 작성
작성된 모델을 이용해서 예측
'1'(ID 이전할 것)이라고 예측된 유저는 'pred'가 1인 열
실제로 ID를 이전한 유저는 is_sp가 1인 행
[0,0] 180명 탈퇴 예측했고 실제 결과
[1,1] 42명 ID 이전 예측했고 실제 결과
정답률 (180 + 42) / (180 + 10 + 20 +42) 는 약 88%로 신뢰할 만한 모델을 구축했다고 생각해도 무방
예측결과로부터 유저군 추측
1) 예측과 실제 모두 '1인 유저 확인
2) 예측은 '1'인데 실제로는 '0'인 유저 확인
3) 예측과 실제 모두 '0'인 유저 확인(책 예제와 결과가 상이)
CHAPTER 08. (사례6. 클러스터링) 어떤 고객층을 타깃으로 정할 것인가?
소셜게임의 유저 세그먼테이션
: 기존 유저들은 어떤 유저들인지 그 성향을 파악
8.1 어떤 유저들이 있는지 파악하고 싶다
1) 타깃을 신규 유저에서 기존 유저로 변경
- 현실의 모습 : 타깃 유저층이 명확하지 않은 상태
- 이상적인 모습 : 타깃 유저층이 명확한 상태
8.2 행동패턴으로 유저층 분류하기
1) 기존 세그먼테이션으로는 타깃 고객층을 명확히 할 수 없음
- 세그멘티이션 : 시장이 어떤 사라믇ㄹ로 구성되어 있는지 이해하는 방법
- 기존 세그먼테이션 방법 : 유저의 속성정보를 사용
- 단점: 큰 단위 분류로 유저의 기호를 파악하기 어려움 -> 대책 세우기 어려움
: 당연한 결과밖에 얻지 못할 가능성 있음
2) 행동패턴으로 유저를 분류할 수 있을까?
- 평소에 주로 취하는 행동으로 그 유저의 기호나 성향을 이해할 수 있지 않을까?
- 각 세그먼트의 KPI를 조사해서 검토
3) 분석 결과로부터 대책을 세울 수 있는가?
- 랭킹 상위 유저와 이벤트 랭킹 유저의 이해 필요
- 랭킹 상위 유저를 대상으로 행동패턴을 통해 세그먼테이션 실시
8.3 주성분을 설명변수로 사용하기
1) 분석에 필요한 데이터 검토
- '행동패턴'을 찾아내기 위한 행동 데이터 필요
- 각 세그먼트에 대해 KPI를 조사할 때 필요한 데이터
(5월~10월의 ARPU(유저별 평균 과금액)와 평균 이용일수)
2) 데이터 가공
- log_date와 user_id를 키로 결합
- 비과금 레코드에 0 넣기
- 월별, 유저별로 총 과금액, 이용일 수 집계하기
3) 분석 기법 검토
- '행동패턴'을 이용해서 비슷한 유저끼리 그룹으로 묶는 방법 : 클러스터링 방법
- 클러스터링의 일종인 'k-means 알고리즘' 사용
a) k개 클러스터 중심의 초깃값을 정한다
b) 각 데이터와 a)에서 정한 k개 클러스터 중심과의 거리를 구해서 가장 가까운 클러스터로 분류
c) 클러스터 중심을 다시 구함
d) 클러스터 중심이 변하지 않을 때까지 b)와 c)를 반복
4) '랭킹 상위 유저' 정의하기
- 데이터로 도출하기
- 랭킹 포인트의 분포를 기준으로 '헤비 유저'와 '미들 유저'를 '랭킹 상위 유저'로 정의
5) 대부분의 값이 0인 변수와 상관이 높은 변수 제외하기
- 말끔하지 않은 데이터를 말끔하게 만들기
6) 주성분 분석으로 직교변환
- 설명변수는 직교인 것이 바람직하다
#왜?
- 주성분 분석이라는 분석 기법을 통해, 상관이 없는 주성분이라 할 수 있는 값으로 변환
- 주성분 분석이란? 상관이 있는 데이터를 서로 상관이 없는 데이터로 변환(축 회전)
8.4 클러스터링 실행
1) 클러스터를 몇 개로 나눌 것인가?
- k-means 알고리즘에서 클러스터 숫자는 분석자의 몫
- 클러스터수의 범위를 정한 후, 범위 내의 모든 숫자에 대해 클러스터링을 실행하고, 그중에서 가장 좋아보이는 결과를 사용
2) 레이더 차트를 이용해서 클러스터의 특징 시각화하기
- 클러스터간의 차이를 시각적으로 확인
- 특징을 관찰해서 '어떤 유저'인지 해석
3) 클러스터별로 KPI 조사하기
- 클러스터별로 ARPU와 평균이용일수를 산출
- KPI 확인 결과 '협력 요소'가 굉장히 중요한 것을 확인
8.5 액션
1) 협력 요소를 강화하는 대책 검토
2) 세그먼테이션 결과를 일상적으로 보고하기
- 실시한 분석을 매일 자동 실행 -> 결과 메일 보고
-> 피드백으로부터 '대책 검토 - 실행 - 개선'의 업무 절차 확립
8.7 R 언어 예제
1) 데이터를 읽어 들이기 위한 함수 작성
2) 데이터 읽어 들이기
3) DAU에 DPU 결합시키기
4) 월별로 집계하기
5) 랭킹 범위 결정
6) 랭킹 포인트의 분포
7) 랭킹 상위 유저만 고르기
8) 주성분 분석 실행
9) 클러스터링 실행하기
10) 클러스터별 평균 산출하기
11) 레이더 차트용 데이터 작성하기(예제와 다르게 A47, A54 가 추가되었다)
12) 레이더 차트 그리기(결과가 다르다. 왜 육각형이 아니라 팔각형이 나왔지?)
13) 클러스터별로 KPI 산출하기 (예제와 결과 상이)
CHAPTER 09. (사례7. 결정트리분석) 어떤 행동을 취한 고객들이 계속해서 이용하는가?
소셜게임을 지속적으로 이용하게 하는 요소 파악하기
: 오랫동안 게임을 즐기고 있는 유저들이 게임이용시작 직후 어떤 행동을 취했는지 분석
9.1 이용시작 직후의 탈퇴자를 줄이고 싶다
1) 이용시작 직후의 탈퇴율이 다른 앱에 비해 조금 높다
9.2 '재미'의 구조 이해하기
1) '탈퇴하는 이유'보다 '계속하는 이유'를 생각하라
2) '재미'의 구성요소 분해하기
3) 소셜액션 정량화하기
4) 분석 결과를 기획에 적용할 수 있는가?
9.3 클러스터를 설명변수로 사용하기
1) '정착'을 수치화하는 방법 생각하기
2) 결정트리분석으로 가장 영향이 큰 분석축 발견하기
3) 횟수, 비율, 주성분의 세 가지 분석축 생각하기
4) 클러스터를 설명변수로 사용하기
5) 데이터 수집
6) 데이터 가공
9.4 결정트리분석 실행
1) 접속밀도에 가장 큰 영향을 끼친 소셜액션은 무엇인가?
2) 협력 주성분 클러스터의 클러스터별 경향 조사하기
9.5 액션
1) 게임 시작 3일째부터 자연스럽게 협력할 수 있도록 게임 밸런스 조절하기
9.6 정리
9.7 R 언어 예제
1) 데이터를 읽어 들이는 함수 작성
2) 행동로그(싸움, 메시지, 협력)
3) 접속밀도 산출
4) 분석대상 유저 데이터에 접속밀도 결합
5) '싸움' 액션에 관한 데이터 작성
6) '메시지' 액션에 관한 데이터 작성
7) '협력' 액션에 관한 데이터 작성
8) 행동로그에 대한 클러스터링
9) 클러스터 결합
10) 접속밀도가 오름차순이 되도록 정렬
11) 결정트리분석 실행과 시각화(책 예제와는 결과 상이)
12) 협력 주성분 클러스터 상세내용
13) 클러스터별 평균접속밀도 산출
14) 클러스터별 평균접속밀도 가시화
15) 클러스터별 날짜 협력 행동 가시화
CHAPTER 10. (사례8. 기계학습) 보다 즐거운 팀을 구성하기 위해서는?
정확도가 높은 예측모델을 구축하는 학습기 선택
: 같은 시간대에 모인 사람들끼리 팀을 만들고 함께 즐길 수 있는 상황을 연출하고자 한다
10.1 팀플레이 즐거움의 최대화
- 퍼즐컬랙션은 안정적으로 운영 중이며 양호한 비즈니스 검증 루프 실현 중
- 팀플레이라는 새로운 시도
10.2 데이터 분석을 통해 서비스에 부가가치 더하기
- 팀플레이의 즐거움 정의하기
- 분석 스토리 정리하기
10.3 요일에 영향을 받지 않는 데이터 만들기
- 집계 단위 검토
- 시간대별 데이터가 열에 오도록 정렬하기
- 7일 동안의 모든 시간대별 데이터를 열에 위치시키기
- 설명변수와 목적변수를 포함하는 데이터 작성하기
10.4 예측모델 구축
- 예측모델 작성 순서
- 데이터의 '규칙성'과 '유사성' 검증
- 노이즈 제거
- 이용할 학습기 고르기
10.5 액션
- 팀 추천기능 추가
10.6 정리
10.7 R 언어 예제
- 데이터 가공 부분과 학습기 선정(랜덤 포레스트)까지 한정된 예제
- 아래와 같이 이상이 발생해서 예제와 같은 결과는 확인하지 못했다