안녕하세요 :)
앞으로 저의 지식도 차근차근 정리해 볼 겸 머신러닝 입문자 가이드라는 거창한 제목을 달아 봤습니다! 거창한 제목에 비해 별 체계없이 기본지식들을 정리해서 올릴 예정인데요. 많은 도움 얻어가셨으면 좋겠습니다.
오늘은 케글이 낯선 분들을 위해 준비한 글입니다. 케글은 홈페이지 대부분이 영어로 되어 있기 때문에 처음 들어가면 익숙하지 않은 환경에 당황하실 수 있는데요, 각 게시판의 특징(?)과 함께 구조에 대해 알아 봅시다.
먼저 케글 경진대회 홈페이지에 들어오게 되면 경진대회 첫 페이지인 [Overview]를 만날 수 있는데요, 말 그대로 경진대회에 출제되는 문제에 대해서 설명하는 페이지 입니다.
그 아래를 보면 [Evaluation]이라는 탭이 있는데요, 이 탭에서는 경진대회에서 사용되는 평가 척도를 소개합니다. 평가척도에 대해서는 보통 설명이 자세히 나와 있으므로 참고하시면 됩니다.
[Timeline] 탭에서는 경진대회 스케줄을 볼 수 있습니다. 또한, 한국에서 케글 대회를 준비하시는 분들은 시차에 주의해 주시기를 바랍니다.
그 외에 상금을 소개 페이지, 우승 베네핏에 대한 페이지등도 존재합니다.
케글에서는 상금을 제공하는 경진대회 뿐만아니라, 연구목적으로 진행되는 경진대회, 케글이 직접 주최하여 상금이 없는 놀이터, 채용 목적으로 진행되는 경진대회 등도 있습니다.
[Data] 탭에서는 경진대회에 사용되는 훈련 데이터, 테스트 데이터 그리고 최종 제출물 샘플을 다운로드할 수 있습니다. 데이터에 대한 상세한 설명 또한 이 페이지에서 확인하실 수 있습니다.
또한, [Kernerls]라는 탭도 있는데요, 그냥 코드라고 이해하시면됩니다. 경진대회와 관련된 소스코드들이 공유되는 장소입니다. 이 탭에서는 참가자들의 분석코드와 베이스라인 코드들이 올라오게 됩니다. 초반에는 이곳에 올라온 코드들만 분석하고 따라해도 아주 많은 것을 배울 수 있습니다.
[Discussion]탭은 말그대로 게시판입니다. 경진대회와 관련된 다양한 질의응답들이 올라오게 됩니다. 경진대회가 끝나면 입상자들이 자신의 코드를 공유하기도 합니다.
[Lederboard]는 경진대회 참가자의 순위를 보여주는 곳입니다. 실시간으로 업데이트 되기 때문에 한창 경쟁중일 시기에는 하루에도 여러번 확인하는 탭이기도 합니다.
[Public Leaderboard]는 테스트 데이터의 일부로 매겨지는 랭킹으로, 경진대회 진행 중에 사용됩니다. 최종 랭킹은 [Public Leaderboard] 와는 다른 데이터를 기반으로 [Private Leaderboard]탭에 매겨지게 됩니다.
■ 케글로 기초 실력 업하기
케글은 머신러닝을 익히기에 가장 좋은 환경 중에 하나입니다. 이 글을 보고 계시는 초보자 분들은 '이미 종료된' 과거 경진대회에 참여하여 머신러닝의 경험을 쌓는 것을 추천드립니다. 이미 종료되었다고 하여도 데이터를 제공 받을 수 있을 뿐만 아니라, 리더보드를 통해 점수도 알 수 있습니다.
이렇게 과거의 경진대회를 통해 충분히 실력을 쌓은 후 진행중인 경진대회에 참여하는 것을 추천드립니다.
■ 케글 경진대회 풀이 순서
케글 경진대회에 참여하면 다음과 같은 순서로 문제를 풀어가게 됩니다. (이 과정을 '머신러닝 파이프라인'이라고 합니다.)
1. 탐색적 데이터 분석 : 데이터를 직접 탐색해보시는 단계입니다. 직접 눈으로도 훑어보고 기초 통계를 뽑아보고 그려보는 등 변수간의 관계나 가설들을 설정할 수 있는 단계입니다.
2. 평가 척도 이해 : 경진대회마다 평가 척도가 상이하므로 먼저 어떤 기준으로 점수가 매겨지는 지를 파악해야 높은 점수를 맞을 수 있겠죠? 또한, 어떤 예측값이 패널티를 크게 혹은 적게 받는지도 파악해두셔야 합니다.
3. 교차 검증 기법 선정 : 경진대회에서 안정적인 성적을 거두기 위해서는 신뢰할 수 있는 교차 검증 기법을 구축하는 것이 가장 중요합니다. 주어진 데이터와 문제에 맞는 교차 검증 기법이 무엇인지 고민해보셔야 합니다.
- 일반적인 교차 검증 방법
1. 제공된 데이터를 5 : 5 ~ 9 : 1 비율로 훈련/검증 데이터로 분리합니다.
2. 훈련 데이터에 머신러닝 모델을 학습하고, 검증 데이터에서 평가 척도 점수를 구합니다.
3. 상기 1,2번을 여러번 반복하며 겅즘 데이터에 대한 평균 점수를 구합니다.
TIP
- 훈련/검증 데이터를 분리하는 비율은 데이터의 크기에 따라 다릅니다. 데이터가 매우 클 경우에는 주로 5:5정도 가 적당하며, 적을 경우에는 9:1이 좋다고 할 수 있습니다. 데이터를 분리할 때는 재현성을 위해서 random_seed 값을 고정합니다.
- 데이터를 분리할 때는 Random_split 혹은 정답 레이블의 비율을 유지하며 임의로 분리하는 계층별 분리 (stratified_split)을 수행합니다. 시계열 데이터의 경우에는 항상 훈련 데이터를 검증 데이터보다 과거로 설정해 야 합니다.
- 1~2번을 반복하는 횟수 또한 데이터의 크기와 한 번의 모델 학습에 소요되는 시간에 따라 결정합니다. 데이터 가 크고 시간 소요가 많다면 1~2번을 한 번만 수행해도 됩니다.
4. 피처 엔지니어링 : 변수값 스케일링, 이상값 제거, 결측값 대체, 범주형 데이터 변환, 변수 선정, 파생 변수 생성 등 주어진 데이터를 머신러닝 모델이 학습하기 쉽게 만들어 줍니다.
피처 엔지니어링은 Tabular 데이터 기반 경진대회의 랭킹을 가르는 가장 중요한 요인입니다. 딥러닝 기반 경진대회에서는 모델 엔지니어링이 핵심이구요.
5. 모델 튜닝 : 머신러닝 모델의 최적 파라미터를 찾습니다. 신뢰할 수 있는 교차 검증 기법이 구축되었다면, 교차 검증 점수가 가장 좋은 파라미터가 최적의 파라미터입니다. 중간 결과를 항상 저장해야하는 것 또한 잊지마시길 바랍니다.
6. 앙상블 : 하나의 모델보다 다수의 모델을 앙상블 한 것이 대게 좋은 성능을 보입니다. 서로 다른 유형의 모델을 앙상블 하는 것이 가장 좋은 앙상블 효과를 보입니다.
다수 계층의 모델을 학습하는 스태킹 기법도 케글 경진대회에서 자주 사용되는 앙상블 기법입니다.
■ 그 외의 팁
- 케글 대회를 통해 얻어가셔야 할 것은 '내 아이디어가 왜 모델 성능에 기여하였는지, 왜 못하였는지' 입니다. 상기 파이프라인의 모든 과정이 튜닝의 요소가 되기 때문에 하나의 아이디어를 구현하고 실험하는 과정에서 왜 나의 아이디어가 성능에 기여를 하고 하지 못했고를 이해하면 더 좋은 아이디어를 제시할 수 있고, 나아가 머신러닝 알고리즘과 모델링에 대한 직감과 경험이 생기게 됩니다.
- 케글 대회에서 가장 많이 사용되는 모델은 트리 기반의 모델인데, Tabular 형태의 데이터 제공되는 경진대회의 상위 입상자들은 대부분 Gradient Boosting Decision Trees 라이브러리인 XGBoot, LightBGM, CatBoost를 사용합니다. 모델에 다양성을 추가하기 위해서 Bagging 기반의 RandomForest, ExtraTrees모델을 제공하는 사이킷-런도 많이 사용됩니다.
- 신경망 네트워크 모델을 개발하기 위해서는 파이토치, 텐서플로, 케라스, 라자냐, 카페2등 다양한 오픈소스 딥러닝 라이브러리가 있습니다. 이 중 빠른 프로토타이핑이 가능한 파이토치와 케라스가 자주 사용됩니다.
- 경진대회 데이터의 변수 특징에 따라, 때로는 선형 모델이 트리 모델과 비슷한 수준의 성능을 보일때도 있습니다. SVM, Logistic Regression 등 유용한 선형 모델은 사이킷-런에서 제공되며 램에 담을 수 없으 만큼 많은 양의 데이터는 Vowpal Wabbit을 사용하기도 합니다.
하이퍼 파라미터 최적화 작업에는 hyperopt, scikit_optimize, spearmint 들의 AutoML 라이브러리를 사용합니다.
- Baseline 모델 : Baseline모델은 최소한의 성능을 보이는 기본 머신러닝 파이프라인을 의미합니다. 이 모델을 구축하는 데에는 크게 두 가지 중요한 이유가 있습니다.
1. 머신러닝 파이프라인이 올바르게 동작하는지 확인할 수 있습니다. 머신러닝은 raw 데이터에서 시작해서, 데이터 를 정제하고, 피처 엔지니어링을 통해 유의미한 변수를 추출하고, 학습 과정을 통해 데이터 안에 숨겨진 패텅을 찾 아내어 테스트 데이터에 대한 결과물을 생성합니다. 몇 단계에 걸쳐 진행되는 머신러닝 파이프라인은 단 한 군 데에서 작은 오류가 발생해도 최종 결과물에 심각한 영향을 끼칩니다. 그런 의미에서 Baseline 모델을 구축하는 것 은 올바른 머신러닝 파이프라인을 구축하는 것을 의미하고, 이는 더 좋은 성능의 모델을 만들기 위한 중요한 초석 이 됩니다.
2. 다른 아이디어로 새로운 모델을 구축한 모델의 성능을 비교할 수 있는 기준점이 됩니다. 다양한 아이디어를 실험 할 때 Baseline 모델은 성능 개선 여부를 검증할 수 있는 중요한 기준점이 됩니다.
처음부터 너무 많은 얘기들을 늘어 놓았네요 ..;;; 그래도 두고두고 찾아와서 볼 수 있는 유익한 내용이었으면 합니다. :)
다음 글에서 뵈요 :)
'머신러닝' 카테고리의 다른 글
머신러닝 입문자 가이드 : 피처 엔지니어링 이란? (0) | 2020.10.16 |
---|---|
머신러닝에 가장 적합한 언어는? (0) | 2020.09.24 |