[패스트캠퍼스] outbrain click prediction

13
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>

Upload: ren-yoon

Post on 11-Apr-2017

160 views

Category:

Data & Analytics


5 download

TRANSCRIPT

Project-01Kaggle Competition - Outbrain Click Prediction*개인 Project/ 2016. 11 ~2016. 12

AbstractGoal (프로젝트의 목표) - 대용량 데이터(샘플 8천만개 이상)를 분석하여 광고가 클릭될 것인지 아닌지를 예측 - 광고와 광고를 접하는 유저의 특징들을 데이터화하여 변수(X)로 삼고 해당 광고가 클릭될 것인지에 대한 확률(클릭예상률)을 예측값(Y)으로 함

프로젝트 개요Why ? (프로젝트를 하게 된 계기) - 이전 회사에서 광고를 집행하는데 있어 GA상으로 CPC, ROI 등의 단순 수치만 보면서 광고 집행 여부를 결정하던 방식을 데이터분석 차원에서 개선해보고자 함How? (데이터 수집 및 분석 방법론) - 데이터 수집 및 전처리 - Kaggle Competition에서 제공하는 대용량 데이터 (총 30GB 이상) - 광고와 광고를 접하는 유저의 특징을 데이터화 - 광고 : 얼마나 자주 클릭되는 광고인지(광고의 피클릭수), 광고게재자의 성적(게재자 기준 피 클릭수) - 유저 : 광고 클릭 빈도, 광고 게재 페이지 방문 시간대, 소득수준, 플랫폼(데스크탑, 모바일, 태블릿) - 방법론 - Decision Tree Model - 광고의 클릭 여부를 예측 - 광고별로 클릭될 확률에 따라 정렬 (Kaggle 답안 양식)

Data science school

<그림1. 원본데이터 샘플 및 전처리 후 샘플>

<그림2. Decision Tree>

데이터 전처리 과정

Kaggle에서 제공하는 데이터 형태(단순화한 이미지이며, 실제로는 여러 csv 파일에 분산되어 있음)

Data science school

모델 적용을 위해 구성한 데이터셋

전체 코드는 GitHub 참조https://github.com/sseuraeki/outbrain

데이터 전처리 과정

ad_id별 피클릭수

Data science school

clicks_train.csv (트레인셋)에 있는 클릭 여부 데이터를 ad_id별로 합산

uuid별 클릭수

events.csv 에 있는 display_id별 uuid를 조인 후, uuid별 클릭수를 산출

데이터 전처리 과정

지역 정보

Data science school

events.csv에 있는 geo_location을 수치로 변환 후 데이터셋에 조인

국가정보는 카테고리 변수(순서, 크기 등이 없는 데이터)로서 분석을 위해 인코딩할 필요가 있음Label Encoding -> One Hot Encoding을 시도하였으나200개가 넘는 국가값들을 인코딩하려니 메모리 에러 발생

=> 국가정보는 결국 유저의 소득수준을 보기 위한 것 (소득수준이 클릭에 영향끼칠 것으로 가정)=> 국가정보를 국가별 gdp로 대체 (인코딩 필요가 없음)

(gdp.csv는 IMF 사이트에서 구한 데이터를 엑셀에서 조인 가능 형태로 변환한 것)

데이터 전처리 과정

시간 정보

Data science school

events.csv에 있는 timestamp를 육안으로 확인 가능한 형태로 변환

변환된 timestamp에서 방문 요일과 시간대를 추출

데이터 전처리 과정

시간 정보

Data science school

요일 카테고리값을 수치화하기 위해 One Hot Encoding

시간대 카테고리값을 수치화하기 위해 One Hot Encoding24시간을 모두 변환하기엔 메모리 에러가 발생할 수 있어6시간씩 4분할 (새벽, 오전, 오후, 저녁)하여 인코딩

데이터 전처리 과정

최종 데이터셋

Data science school

플랫폼 정보도 One Hot Encoding을 하여 추가 (desktop, mobile, tablet)

위의 방식으로 만든 트레인셋을 사용하여같은 방식으로 테스트셋도 구비테스트셋에는 클릭 정보가 없으나 (클릭 여부가 답안이기 때문)트레인셋의 클릭 정보를 광고피클릭수, 유저클릭수로 조인함

트레인셋을 사용하여 Decision Tree Model을 적용

의사결정나무 (Decision Tree)

Data science school

모델이 너무 큰 관계로 잘라서 표시함 (각 이미지를 좌 -> 우로 연결)전체 사이즈는 링크 참조 : https://github.com/sseuraeki/outbrain/blob/master/tree_image.png

의사결정나무 (Decision Tree)

Data science school

의사결정나무 (Decision Tree)

Data science school

성능 체크 및 Kaggle 답안 형태로 변환

Data science school

트레인셋을 통한 성능 체크

위는 display_id + ad_id 조합이 클릭될 것인지(1) 안될 것인지(0)를 예측한 것으로평균 72% 정도의 적중률을 보임

하지만 Kaggle에서 요구하는 답안은display_id별 ad_id의 클릭률을 구한 후이를 클릭률에 따라 정렬하는 것

성능 체크 및 Kaggle 답안 형태로 변환

Data science school

Kaggle 결과 및 개선점

Data science school

Kaggle 결과는 약 55%로12월 6일 기준 1등(69%)과 다소 차이가 남

단순히 클릭 여부 (0, 1)를 예측하는 것이 아니라 클릭률에 따라 정렬 후정렬된 상태를 채점하는 것이라 점수가 높게 나오기 힘들어보임

개선점으로는

ad_id에 대한 정보가 부족했다고 생각함

- 광고별 게재 위치 (페이지의 상하단, 좌우 여부) 추가 => 이에 대한 데이터가 있으나 일일이 URL을 찾아가 육안으로 확인해야하기에 시간이 부족 - 광고별 광고주 정보 추가 => 광고주 또한 카테고리값이기에 변환을 해야하나 너무 다양하여 메모리 한계가 있음

트레인셋을 10%만 활용하였음

=> 컴퓨터 성능상의 한계로 10%만 활용=> 부족한 성능으로도 100%를 다 활용할 방안 모색

전체적으로

광고를 접하게 되는 “유저의 성향”을 나타내는 정보는 구할 수 있는건 다 적용하였으나,각 “광고의 성향”을 나타내는 정보는 시간적 한계, 컴퓨터 성능의 한계로 충분히 적용하지 못함