1. Project-01
Kaggle Competition - Outbrain Click Prediction
*개인 Project/ 2016. 11 ~2016. 12
Abstract
Goal (프로젝트의목표)
- 대용량 데이터(샘플 8천만개 이상)를 분석하여광고가 클릭될 것인지 아닌지를예측
- 광고와 광고를 접하는 유저의 특징들을데이터화하여변수(X)로 삼고
해당 광고가 클릭될 것인지에대한 확률(클릭예상률)을 예측값(Y)으로 함
프로젝트 개요
Why ? (프로젝트를하게 된 계기)
- 이전 회사에서광고를 집행하는데있어 GA상으로 CPC, ROI 등의 단순 수치만 보면서 광고 집행 여부를
결정하던방식을 데이터분석차원에서개선해보고자함
How? (데이터 수집 및 분석 방법론)
- 데이터 수집 및 전처리
- Kaggle Competition에서 제공하는대용량 데이터 (총 30GB 이상)
- 광고와 광고를 접하는 유저의 특징을 데이터화
- 광고 : 얼마나 자주 클릭되는광고인지(광고의 피클릭수), 광고게재자의성적(게재자 기준 피 클릭수)
- 유저 : 광고 클릭 빈도, 광고 게재 페이지 방문 시간대, 소득수준, 플랫폼(데스크탑, 모바일, 태블릿)
- 방법론
- Decision Tree Model
- 광고의 클릭 여부를 예측
- 광고별로클릭될 확률에 따라 정렬 (Kaggle 답안 양식)
Data science school
<그림1. 원본데이터 샘플 및 전처리 후 샘플>
<그림2. Decision Tree>
2. 데이터 전처리 과정
Kaggle에서 제공하는데이터 형태
(단순화한 이미지이며, 실제로는 여러 csv 파일에 분산되어 있음)
Data science school
모델 적용을 위해 구성한 데이터셋
전체 코드는 GitHub 참조
https://github.com/sseuraeki/outbrain
3. 데이터 전처리 과정
ad_id별 피클릭수
Data science school
clicks_train.csv (트레인셋)에 있는 클릭 여부 데이터를 ad_id별로 합산
uuid별 클릭수
events.csv 에 있는 display_id별 uuid를 조인 후, uuid별 클릭수를산출
4. 데이터 전처리 과정
지역 정보
Data science school
events.csv에 있는 geo_location을 수치로 변환 후 데이터셋에조인
국가정보는카테고리변수(순서, 크기 등이 없는 데이터)로서 분석을 위해 인코딩할필요가 있음
Label Encoding -> One Hot Encoding을 시도하였으나
200개가 넘는 국가값들을인코딩하려니메모리 에러 발생
=> 국가정보는결국 유저의 소득수준을보기 위한 것 (소득수준이클릭에 영향끼칠것으로 가정)
=> 국가정보를국가별 gdp로 대체 (인코딩 필요가 없음)
(gdp.csv는 IMF 사이트에서 구한 데이터를 엑셀에서 조인 가능 형태로 변환한 것)
5. 데이터 전처리 과정
시간 정보
Data science school
events.csv에 있는 timestamp를 육안으로확인 가능한 형태로 변환
변환된 timestamp에서 방문 요일과 시간대를추출
6. 데이터 전처리 과정
시간 정보
Data science school
요일 카테고리값을수치화하기위해 One Hot Encoding
시간대 카테고리값을수치화하기위해 One Hot Encoding
24시간을 모두 변환하기엔메모리 에러가 발생할 수 있어
6시간씩 4분할 (새벽, 오전, 오후, 저녁)하여 인코딩
7. 데이터 전처리 과정
최종 데이터셋
Data science school
플랫폼 정보도 One Hot Encoding을 하여 추가 (desktop, mobile, tablet)
위의 방식으로만든 트레인셋을사용하여
같은 방식으로테스트셋도구비
테스트셋에는클릭 정보가 없으나 (클릭 여부가 답안이기때문)
트레인셋의클릭 정보를 광고피클릭수, 유저클릭수로조인함
트레인셋을사용하여 Decision Tree Model을 적용
8. 의사결정나무 (Decision Tree)
Data science school
모델이 너무 큰 관계로 잘라서 표시함 (각 이미지를좌 -> 우로 연결)
전체 사이즈는링크 참조 : https://github.com/sseuraeki/outbrain/blob/master/tree_image.png
11. 성능 체크 및 Kaggle 답안 형태로 변환
Data science school
트레인셋을통한 성능 체크
위는 display_id + ad_id 조합이 클릭될 것인지(1) 안될 것인지(0)를 예측한 것으로
평균 72% 정도의 적중률을보임
하지만 Kaggle에서 요구하는답안은
display_id별 ad_id의 클릭률을구한 후
이를 클릭률에따라 정렬하는것
13. Kaggle 결과 및 개선점
Data science school
Kaggle 결과는 약 55%로
12월 6일 기준 1등(69%)과 다소 차이가 남
단순히 클릭 여부 (0, 1)를 예측하는것이 아니라 클릭률에따라 정렬 후
정렬된 상태를 채점하는것이라 점수가 높게 나오기 힘들어보임
개선점으로는
ad_id에 대한 정보가 부족했다고 생각함
- 광고별 게재 위치 (페이지의상하단, 좌우 여부) 추가
=> 이에 대한 데이터가있으나 일일이 URL을 찾아가 육안으로확인해야하기에시간이 부족
- 광고별 광고주 정보 추가
=> 광고주 또한 카테고리값이기에변환을 해야하나너무 다양하여메모리 한계가 있음
트레인셋을10%만 활용하였음
=> 컴퓨터 성능상의한계로 10%만 활용
=> 부족한 성능으로도100%를 다 활용할 방안 모색
전체적으로
광고를 접하게 되는 “유저의 성향”을 나타내는정보는 구할 수 있는건 다 적용하였으나,
각 “광고의 성향”을 나타내는정보는 시간적 한계, 컴퓨터 성능의 한계로 충분히 적용하지못함