Kaggle Tip 및 대회 후기


Coursera 강의인 How to Win a Data Science Competition: Learn from Top Kaggler Week4~5 내용을 정리한 내용입니다

Tips and tricks


  • 5명의 강사분들이 경험한 내용을 전달!
  • 누군가에겐 필요없는 내용일 수 있지만 도움이 되는 내용이 더 많을 듯
  • 섹션별로 다른 강사가 이야기한 내용

대회에 참여하기 전

  • 목표 설정하기
    • 참여해서 얻고싶은 것은 무엇인가?
    • 1) 흥미로운 문제에 대해 배우고 싶다
      • 포럼에 토론이 많은 대회 추천!
      • 주 관심사에 맞는 대회가 나오면 추천!
    • 2) 새로운 software 툴을 사용하고 싶다
      • Tutorial이 있는 대회 추천!
    • 3) 메달을 취득하고 싶다
      • 참가자들의 제출 횟수를 파악
      • 100회가 넘으면 아마 inconsistency of validation
      • 횟수가 적으면 시도해볼 가치가 있음!
    • 이 목표에 따라 참여할 대회를 결정할 수 있음

아이디어를 토대로 작업

  • 1) 아이디어를 구조화
    • 포럼을 읽고 흥미로운 것을 모아두기
  • 2) 가장 중요하고 유망한 아이디어 선택
  • 3) 왜 그것이 되거나(되지 않거나)를 이해해보기

하이퍼 파라미터

  • 모든 것이 하이퍼 파라미터
    • Feature의 개수, 그라디언트 부스팅의 depth, cnn의 layer 수 등…
  • 모든 파라미터를 아래 항목으로 정렬
  • 1) 중요도
  • 2) 실행 가능도
  • 3) 이해도

Data loading

  • csv/txt 파일을 hdf5/npy로 변경(빠르게 로딩하기 위해)
  • default data는 64-bit array로 저장되어있음!
    • 32-bits로 downcast해서 메모리를 2배 절약!
  • 거대한 데이터셋은 chunks로 작업을 할 수 있음
    • chunks 사용시 메모리를 많이 사용하지 않음

Performacne 평가

  • 추가적인 validation이 항상 필요한 것은 아님
    • 처음엔 full cross validation loop 대신 simple split
    • Full cv는 정말 필요할 때 진행
  • 가장 빠른 모델로 시작(LightGBM)
  • 모델 튜닝, 샘플링, 스태킹 등은 FEature engineering이 만족한 후에 진행

빠르고 더럽지만 항상 좋은 방법

  • 코드 퀄리티에 신경쓰지 말기
  • Simple을 유지하기 : 중요한 것을 아끼기
  • 컴퓨팅 리소스가 불편하면 큰 서버를 빌리기

초기 파이프라인

  • 간단한(심지어 원시적인) solution부터 시작
  • 전체 파이프라인을 디버깅
    • read data ~ writing submission
  • 커널 또는 대회 주최자가 제공한 baseline을 읽고 완벽하게 숙지
  • From simple to complex
    • 처음 시작할 땐 GBDT보다 파라미터를 튜닝할 필요가 없는 랜덤 포레스트를 선호

Best Practices from Software Development

  • 좋은 변수 이름을 사용
    • 코드가 읽기 어려우면 조만간 문제가 생길 수 있음
  • 연구를 재생산 가능하도록 유지
    • 랜덤 Seed 고정
    • Feature를 어떻게 생성했는지 작성하기
    • 버전관리하기
  • 코드 재사용
    • Train과 Test에서 feature 생성시 같은 코드를 사용하기

Read papers

  • ML과 관련된 아이디어
    • ex) How to optimize AUC
  • 도메인과 친해질 방법
    • 특히 feature 생성시 유용함

My pipeline

  • 포럼을 읽고 커널을 검사
    • 항상 토론이 발생!
    • 데이터의 버그가 있어 데이터가 모두 바뀔 수 있음. 그래서 대회 초창기에 참여하지 않는다고 함
  • EDA과 베이스라인 시작
    • 데이터를 정확하게 load
    • validation score가 안정한지 check
  • Feature 추가
    • 처음엔 만든 모든 변수를 추가
    • 모든 변수를 한번에 평가함
  • 하이퍼파라미터 최적화
    • 처음엔 트레인 데이터를 오버피팅할 수 있는 파라미터를 찾음
    • 그리고 모델을 다듬음

코드 관리

  • 가장 중요한 것은 재생산!
    • 코드를 깔끔하게 유지
  • 긴 실행 history 피하기
    • global variables가 있을 수 있음
    • 주기적으로 노트북 재부팅
  • 변수 이름을 잘 정하기
  • One notebook per submission
    • 그리고 git 사용하기
  • submission을 만들기 전에 커널을 restart
  • test/val
    • 처음에 train, test를 read한 후, train, val로 나누고 그 파일을 로컬에 저장해두기
  • 매크로 사용
    • import numpy 같은 것을 귀찮으니 매크로로 편하게 사용
    • 참고 노트북
  • Custom library
    • 직접 구현해야 하는 경우
    • Out-of-fold predictions
    • Averaging

The Pipeline

  • Understand the problem (1 day)
  • Exploratory analysis (1-2 days)
  • Define cs strategy
  • Feature engineering (unitl last 3-4 days)
  • Modeling (until last 3-4 days)
  • Ensembling(lasy 3-4 days)
  • 처음엔 커널이나 외부 정보를 전혀 받지 않고 스스로 문제해결 시도
    • 그 후 다른 사람들의 커널을 보면 더 새로운 결과를 얻을 수 있음

문제를 넓게 이해하기

  • 문제의 유형
    • 이미지 인식, 음성 인식, 최적화 문제, tabular, 타임시리즈 등
  • 데이터가 얼마나 큰가?
    • 데이터가 얼마나 필요한가?
  • 필요한 하드웨어
    • CPU, GPU, RAM, Disk space
    • 딥러닝의 경우 GPU 필요
  • 필요한 소프트웨어
    • TF, sklearn, Lightgbm, xgboost
    • 아나콘다, virtual 환경 생성
  • 테스트할 metric이 무엇인가?
    • regression, classification, rmse, mae, …
    • 유사한 대회를 찾아 정보를 찾아봄

EDA

  • 변수들을 plot
    • Train과 test에서 유사한 feature를 check
  • 시간대별 feature, target별 feature plot
    • 시간이 지나며 target이 변하는지 check
  • Feature와 Target의 연관성 탐색
  • Feature간의 상호 관계 파악

Cross validation 전략

  • 매우 중요
  • Time 관련 데이터가 중요하면 시간으로 데이터 나누기! Time-based validation
    • 항상 과거 데이터로 미래를 예측해야 함
  • train보다 다른 entity가 있는 경우 Stratified validation
  • 완벽하게 데이터가 random일 경우 Random validation(random K-fold)
  • 위 사례의 Combination

Feature engineering

  • Data cleaning and preparation
  • Handle missing value
  • Generate new feature
  • 다른 문제들은 다른 feature engineering이 필요!
  • 계속 하다보면 반복되는 패턴도 있어, 자동화를 어느정도 할 수 있음

Modeling

  • reference로 참고할 뿐 이게 진리는 아님!!

Ensembling

  • 단순 평균 ~ 멀티레이어 스태킹 등 다양한 방법으로 결합

협업 팁

대회 후기

Crowdflower Competition


  • 최종 등수 : 2위
  • 대회 목표 : 검색 결과의 적절성을 측정
  • Metric
    • Quadratic weighted kappa
    • Typical valu range 0 ~ 1
  • 3 important points about data
    • query들은 매우 짧음
    • unique query는 261개
    • 쿼리는 train과 test에 동일

Solution

  • Text features
    • Similarities(유사도)
      • query, title, description
      • (query, title), (query, description) pair로 계산
      • matching 단어의 개수
      • TF-IDF의 코사인 거리
      • 평균 word2vc의 거리
      • Levenshtein 거리
    • Symbolic n-grams
  • Extending of queries
  • Per-query models
  • Sample weighting
  • Bumper features
  • Ensemble
  • Kappa optimization

Conclusion

  • Key points
    • Symbolic n-grams
    • Expansion of queries
    • Optimization of thresholds for Kappa

Springleaf Marketing Response


  • 최종 등수 : 3등

Feature packs

  • Processed dataset
    • data cleaning과 feature engineering
  • Basic dataset
    • Basic data cleaning and feature engineering
  • Mean-encoded dataset
    • Projecting features into homogeneous space
  • KNN dataset
  • distance features on mean-encoded

Out-of-fold predictions

  • xgboost
    • oof predictions(meatafeatures) should be diverse
    • each meatafeature should bring ‘new’ information about Y
  • neural net
    • StandardScaler, Ranks, Power

Reference


카일스쿨 유튜브 채널을 만들었습니다. 데이터 사이언스, 성장, 리더십, BigQuery 등을 이야기할 예정이니, 관심 있으시면 구독 부탁드립니다 :)

PM을 위한 데이터 리터러시 강의를 만들었습니다. 문제 정의, 지표, 실험 설계, 문화 만들기, 로그 설계, 회고 등을 담은 강의입니다

이 글이 도움이 되셨거나 다양한 의견이 있다면 댓글 부탁드립니다 :)

Buy me a coffeeBuy me a coffee





© 2017. by Seongyun Byeon

Powered by zzsza