Anúncio
Anúncio

Mais conteúdo relacionado

Apresentações para você(20)

Similar a 데이터분석의 길 5: “고수는 큰자료를 두려워하지 않는다” (클릭확률예측 상편)(20)

Anúncio

Último(20)

데이터분석의 길 5: “고수는 큰자료를 두려워하지 않는다” (클릭확률예측 상편)

  1. May 2015 권재명 데이터분석의 길 5: 클릭예측 (상편) “고수는 큰 자료를 두려워하지 않는다”
  2. 캐글(Kaggle): 예측모형과 분석 경연 플랫폼. 회사나 연구원들이 데이터를 올리면 전세계의 통계학자와 데이터 분석가들이 "최고"의 모델을 내놓기 위해 경쟁한다. 보상은 상금 ($3M 경연도 있었다), 채용(!), 지식(knowledge) 등등이다. 1. 참가자는 training set을 이용해 각자 "최고"의 모델을 찾아낸다.Training set*은 예측 변수 (X)와 반응변수(Y) 모두를 포함한다. 이 과정에서 과적합(overfitting)을 방지하 기 위해 보통 cross-validation을 사용하게 된다. 2. 참가자는 X변수만 있는 "test set"을 이용해 예측치인 Y-hat 을 계산한 후 캐글에 제출 한다. 3. 캐글은 숨겨놓은 참 Y값을 사용해서 여러 경연자중 누가 가장 정확한지를 결정한다. * 오해의 소지가 많은 이름이다. 왜냐하면 이 "training data"는 cross-validation에서 "진짜 training set" 과 "validation set"으로 쪼개지기 때문이다. 캐글 머신러닝 경연. 예측분석의 기본개념
  3. 온라인 광고 클릭 예측 모형 인터넷 온라인 광고업체는 실시간 경매(Real-time bidding, or RTB)를 통해 광고 의 기회가 있을 때마다 클릭 확률을 예측하여 입찰가를 결정해야 한다. 이를 위해 서는 정확한 클릭 확률 예측이 필요하다. (자세한 내용은 이런 슬라이드를 참조.) 캐글 머신러닝 경연에 공개된 자료를 사용하도록 하자: https://www.kaggle.com/c/avazu-click-prediction/data 분석목적: 예측모형개발. R 사용모드: 모델 개발, 피쳐 엔지니어링(feature engineering)은 대화형 분석으 로 (다음 편에서). 실제 프로덕션 시스템에 디플로이(deploy)시에는 배치(batch) 모드로 (다다음 편에서).
  4. 1. 문제 정의: 어떤 문제를 해결할 것인가? 2. 데이터 정의: 어떤 자료를 이용할 것인가? 3. 데이터 준비: 텍스트 화일(csv 포맷)이나 데이터베이스 테이블 a. 다른 프로그램들 (Python, MySQL client, Unix tools, ...)이 수고한다. 4. R로 데이터 읽어들이기: read.csv() 함수, RMySQL 패키지, ... 5. R 데이터 청소와 가공 6. R 데이터 분석과 시각화: EDA (Exploratory Data Analysis) 7. R 통계 모델링 8. 5-7을 문제를 해결할 때까지 반복 9. 결론내기: 스토리 텔링 (슬라이드) 혹은 예측모형 (알고리즘) 복습: 데이터분석 워크플로우 R을 사용하는 단계
  5. 1. 문제 정의 주어진 변수를 이용하여 클릭확률 예측하기 캐글페이지 https://www.kaggle.com/c/avazu-click- prediction 에 로그인후 (페북 로그인을 쓰면 됨), 경연 약관에 동의한 후, 세 자료화일들을 다운받자. (~1GB이므로 시간이 좀 걸린다)
  6. ● Training set: 10일치의 클릭 데이터. a. 시간 순서대로 정렬되어 있다. b. 비클릭 (Non-clicks)과 클릭(clicks)은 다른 비율로 서브샘플 (subsampled)되어있음. ● Test set: 1일치의 클릭 데이터 2. 데이터 정의
  7. ● app_id ● app_domain ● app_category ● device_id ● device_ip ● device_model ● device_type ● device_conn_type ● C14-C21 -- anonymized categorical variables 데이터: 변수들 변수설명 ● id: ad identifier ● click: 0/1 for non-click/click ● hour: format is YYMMDDHH, so 14091123 means 23:00 on Sept. 11, 2014 UTC. ● C1 -- anonymized categorical variable ● banner_pos ● site_id ● site_domain ● site_category
  8. 프로젝트 이름은 click-prediction* 로 하자. ~/projects/click-prediction 디렉토리를 만들고, 지난 편에서와 같이 click-prediction.Rproj를 만들고, 분석 R 스크립트 화일은 click-prediction.R이라고 이름짓도록 하자. 자료는 ~/projects/click-prediction/data/에 저장하도록 하자.** * 의미있는 이름 하나를 계속 재사용하는 컨벤션 (convention) 혹은 관행. ** 또다른 컨벤션. 프로젝트 디렉토리를 너무 어지럽히지 않을 수 있다. 3. 데이터 준비
  9. 데이터 준비: Unix 와 다른 툴 자료가 압축된 상태에서 1GB정도의 크기이므로, R로 읽어들이는 것이 무리이다. 하지만 고수는 이러한 자료를 편안하게 다룰 수 있는 사람이다. 클릭확률예측 데이터는 일단 유닉스 명령어들을 사용하여 자료를 샘플하는 접근 법을 취하도록 하겠다. 일반적인 접근방법에 대해서는 부록 “고수는 큰 자료를 두려워하지 않는다”를 참 조하자.
  10. 데이터 들여다보기: Unix bash terminal을 열고 cd ~/projects/click-prediction/data 데이터 디렉토리로 이 동후 다음 문제를 풀어보자: 1. train.gz 화일의 사이즈는? 2. train.gz 는 어떤 포맷일까? 3. train.gz 화일 내용을 화면(stdout)으로 출력하는 방법은? 4. train.gz 화일 첫 20줄을 볼 수 있는 방법은? 5. train.gz 화일이 몇개의 관측치로 되어있을까? 6. train.gz 화일의 첫 백만개의 관측치를 train_1m 화일로 저장하자. 7. train_1m 화일을 압축하기.
  11. 데이터 들여다보기: 힌트 1. train.gz 화일의 사이즈는? (힌트: "ls -lh") 2. train.gz 는 어떤 포맷일까? (힌트: 구글 "gz") 3. train.gz 화일 내용을 화면(stdout)으로 출력하는 방법은? (힌트: 터미널에서 "gunzip -h" 혹은 "man gunzip" 실행) 4. train.gz 화일 첫 20줄을 볼 수 있는 방법은? (힌트: 터미널에서 "man head") 5. train.gz 화일이 몇개의 관측치로 되어있을까? (힌트: 구글 "unix pipe". 터미 널에서 "man wc" 6. train.gz 화일의 첫 백만 관측치를 train_1m 화일로 저장하자. (힌트: 구글 "unix redirect") 7. train_1m 화일을 압축하기 (힌트: "man gzip")
  12. 1. 1.0GB 2. gzip 압축포맷 3. gunzip -c train.gz | more 4. gunzip -c train.gz | head -20 5. gunzip -c train.gz | wc -l # 40428968 혹은 ~40M 관측치 6. gunzip -c train.gz | head -1000000 > train_1m 7. gzip train_1m # train_1m.gz 생성 고급문제: 1. #6과 7을 한줄에 하는 방법은? 2. 위에서 얻어진 train_1m.gz은 랜덤 샘플이 아니다. 왜인가? 데이터 들여다보기: 정답
  13. 데이터 들여다보기: 유용한 Unix 커맨드라인 기본 명령어: ls, pwd, cd, cp, mv, rm, mkdir, rmdir, more, cat, touch, df, du, ln, chmod, man, ps Unix 커맨드 라인에서 가능한 자료처리 기능들: ● 관측치 상단/하단 선택: head, tail ● 관측치 패턴 검색: grep ● 컬럼 선택: cut ● 정렬: sort ● 관측치 계수: wc ● 파이프(pipe)와 리디렉트 (redirect): `|` 그리고 `>` 이보다 더 복잡한 작업은 python 등의 스크립트 언어를 사용할 필요가 있다.
  14. 4. R로 (샘플된) 데이터 읽어들이기 R에서 data.table 패키지의 fread를 사용하여 자료를 읽어들이도록 하자. R 퀴즈 1. read.csv() 를 사용하지 않고 fread()를 사용한 이유는?
  15. 이미 많이 정리된 자료이므로 청소와 가공의 필요는 거의 없다. R 퀴즈 1. “id” 변수를 삭제하자. 2. “click” 변수를 반응변수로 해서 다음 모델을 적합해보자: a. 선형모형 (lm) i. lm(click ~ ., data=data) 3. #2 가 메모리 에러를 내면서 실패 하는 이유는? 5. R에서 데이터 청소와 가공
  16. feature selection feature engineering lm, glm, glmnet 모델 적합하기 ROCR 패키지를 이용해 모델 비교 다음 편에서는...
  17. 부록: “고수는 큰자료를 두려워하지 않는다” 빅데이터와 스몰데이터. Unix. SQL. Hadoop/Hive. dplyr. data.table. ...
  18. R은 세션 데이터를 램(RAM)에 저장하므로, 램보다 큰 자료를 분석할 수 없다. 램보다 큰 자료("빅데이터")는 "샘플링"으로 작게 만든후 분석하면 된다. 스몰데이터의 장점: 1. 분석의 속도: 데이터분석의 속도가 빨라진다. (fast iteration) 2. 탐색적 자료분석(exploratory data analysis, or EDA): 자료의 문제점과 의 미있는 분포/관계 등은 스몰데이터를 이용한 분석으로 대부분 발견된다. 3. 통계적 정확도: 모델의 통계적 정확도는 sqrt(n)에 비례한다. (자료 크기가 어느 정도가 넘어가면 데이터 크기의 한계효용(marginal utility)은 감소하 게 된다) 빅데이터와 스몰데이터
  19. 결론: 빅데이터를 다루는 컴퓨터 시스템보다는 (“솔루션”적 접근방법) 빅데이터 를 스몰데이터로 변환하고 유용한 결과를 이끌어 낸 후 빅데이터에 적용할 수 있 는 전문가가 더 중요하다. (“데이터분석고수” 접근방법) 따름정리 (Corollary): 데이터 분석 전문가는 필요에 따라 빅데이터와 스몰데이 터를 자유롭게 왕래할 수 있어야 한다. 이를 위해서는 다음의 스킬셋이 필요하다: 1. 통계 (필수) 2. R and/or Python (필수) 3. Unix, SQL (RDBMS나 Hadoop Hive), 등등 (필요하면 배워서 사용할 수 있 어야) 솔루션적 접근 < 데이터분석 고수
  20. 자료의 원천과 툴의 예: ● 데이터베이스의 테이블 (RDBMS, 혹은 Hadoop 의 Hive Table) → SQL로 처 리 ● 텍스트 화일 → Unix command나 Python으로 처리 ● R의 data.frame / data.table 오브젝트 → plyr, reshape2, dplyr 등으로 처리. ● Python의 pandas.DataFrame → pandas document 이렇게 자료의 원천과 툴들은 다양하지만 자료 처리의 공통된 패턴도 존재한다. Hadley Wickham의 dplyr 패키지 도큐먼트의 분류를 따른 다음 슬라이드를 참조 하자. (빅)데이터는 여러 형태로 존재한다
  21. R data frame → dplyr RDBMS / Hive table → SQL Text file → Unix shell 자료 생성, 입력 read.table(), fread() load data infile ... Filter rows filter() slice() ... where ... head, tail, grep (regex) Arrange (sort) rows arrange() ... ordery by ... sort Select columns select() rename() select ... from ... cut Distinct (unique) rows distinct() ... distinct ... sort | uniq Add new columns mutate() select newx=f(oldx) from ... Summarize summarize() select count(), sum(), avg(), ... wc -l [for counting] Sample sample_n(), sample_frac() select ... from TABLESAMPLE [Hive에서만] head -n [biased sample] Grouped operation group_by() ... group by ...
Anúncio