최근 "How to Win a Data Science Competition: Learn from Top Kagglers" 강의에 흥미를 느껴 수강한 내용들을 정리한 내용입니다.
Kaggle 플랫폼을 이용하여 Data Science Competition에 참여하기까지의 여정을 담은 것으로 Competition에서의 Data 분석, 모델 설계 방법 등에 대한 내용들을 다룹니다.
실제 강의에서는 다양한 읽기 자료와 실습, 프로그래밍 과제들이 함께 제공되니 관심있으시면 수강하시는 것을 추천드립니다.
자세한 내용들을 다루면 글이 너무 길어지게 되어 참고할만한 글들을 링크하였습니다.
강의 들어가기에 앞서
왜 Data Competition에 참여하는 것이 좋은가?
- 배움과 네트워킹을 함께 하기에 좋은 기회
- 흥미로운 Task들을 접하고 SOTA(State-of-the-art) 모델들로 해결해볼 좋은 기회
- (잘만 한다면) 소정의 금전적 보상도 얻을 기회
Competition Concept
- Data : Competition을 위한 데이터, Competition 규칙에 따라 다른 데이터셋도 활용 가능
- Model : Competition 동안 실제로 구축해야하는 것. 최고의 성능을 내면서 재현가능해야 함
- Submission : ID, 구축한 모델로 예측한 결과 등을 제출
- Evaluation : 제출한 모델의 결과가 얼마나 좋은 성능을 내는지 보임 (ex. Accuracy, AUC 등등)
- Leaderboard : Evaluation 후 Best Score들을 보이는 곳
- Public, Private 테스트셋을 나누어서 평가하며 최종적으로는 두 테스트셋을 모두 활용하여 순위 매김
- Public 테스트셋 : Competition동안 참가자들이 평가를 위해 사용하는 데이터
- Private 테스트셋 : 공개되지는 않으나 최종 순위 결정을 위해 평가에 사용되는 테스트셋
Competition Mechanism
- 데이터 평가, 모델 학습, 제출, Public 테스트셋으로 평가를 반복하여 최적의 알고리즘 탐색
Week 1에서 배우는 것
- Competition과 real-life data science의 차이점
- Competition에서 자주 사용되는 Machine Learning 모델들
- 데이터 전처리, Feature 생성과 추출
Real World 문제 해결과 Competition 비교
- Real World에서의 문제 해결 과정보다 Competition에서의 과정이 더 간단하다.
Real World에서의 ML 파이프라인
- 실제 비지니스 문제들을 이해하고 문제를 정의
- 데이터 수집 및 전처리
- 모델링
- 실세계에서의 모델 평가
- 최적의 모델 배포
Competition에서의 ML 파이프라인
- 실제 비지니스 문제 이해
- 데이터 수집 및 전처리
- 모델링
주요 ML 알고리즘 종류
- Linear model
- 소개 : 2개의 Subspace로 분할하며, 비선형 데이터에 대해서는 제대로 분할하기 힘듦
- 모델 종류 : Logistic Regression, Support Vector Machine
- 추천 라이브러리 : scikit learn
- Tree-based model
- 소개 : Box형태로 Space 분할
- 모델 종류 : Decision Tree, Random Forest, Gradient Boosting Decision Tree(GBDT), Extra Tree
- 추천 라이브러리 : scikit learn, dmlc XGBoost, Light GBM
- kNN model
- 소개 : 사전에 측정된 데이터들과의 가까운 정도를 이용하여 입력 데이터의 클래스 예측
- 추천 라이브러리 : scikit learn
- Neural Networks model
- 소개 : 비선형적인 Decision Boundary를 생성해낼 수 있음
- 추천 라이브러리 : Tensorflow, Keras, Pytorch 등
Feature 전처리, 생성과 모델 타입
- Feature 종류 : Numeric, Categorical, Ordinal, Datetime, Coordinates
- Numeric : 정량적으로 측정 가능하며 정수 혹은 실수로 표현됨(ex. 시간, 온도 등)
- Categorical : 범주로 구분되고 비연속적인 값으로 표시됨(ex. 성별)
- Ordinal : 범주로 구분되면서 범주간의 순서가 존재함, 비연속적인 값으로 표시됨(ex. 영화 평점. 1, 2, 3, 4, 5점으로 구분되면서 순서가 존재)
- Datetime : 연도, 월, 일 정보로 표시되는 정보
- Coordinates : 지도 상의 경도, 위도 등으로 표시되는 좌표 정보
- 다뤄보기 좋은 데이터셋 : Titanic 데이터셋(데이터셋, 데이터셋 설명 블로그)
- Age : Numeric
- SibSp : Categorical
- Ticket : ID
- Name : Text
- 각 Feature 종류 및 사용할 모델에 따라 다른 Feature 전처리, 생성 방법 수행 필요
- 강의에서는 Tree-based, Non-tree-based 모델로 구분하여 설명하며, 본 글에서는 Non-tree-based 모델 위주로만 언급
- 추가 읽을 거리 : Discover Feature Engineering, How to Engineer Features and How to Get Good at It
Numeric Feature
- Feature 전처리
- Scaling : MinMaxScaler, RobustScaler, StandardScaler
- Outlier : 대다수의 데이터 분포와 다른 특성을 갖는 데이터. 제거하거나 다른 값으로 대체 필요
- Trimming : 데이터 값의 Quantile을 계산하여 특정 범위의 Quntaile(주로 5%~95%)만 취하고, 나머지는 제외
- Winsorization : 다른 값으로 대체
- Rank : 직접 Outlier를 일일이 제거하기 힘들 경우 사용 가능
- log 변환 : 데이터에 log(x+1) 등을 취하는 것, 데이터가 로그정규 분포를 가지는 경우에 유용함
- Feature 생성
- Prior Knowledge : 상식, 수학적 공식 등의 지식을 활용하여 알고있는 정보로부터 새로운 Feature를 생성 (ex. 2차원 공간 상의 두 점의 x, y 좌표값을 알면 distance를 구할 수 있음)
- Exploratory Data Analysis 과정
- 추가 읽을 거리 : Feature Scaling and the effect of standardization for machine learning algorithms
Categorical과 Ordinal Feature
- 모델 입력을 위해 Encoding 과정 거칠 필요 있으며 크게 Label, One-hot Encoding으로 구분
- Label Encoding : 문자열 형태의 범주형 값을 수치형 값으로 변경(ex. 남자 -> 0, 여자 ->1)
- Alphabetic Encoding: 알파벳 순서대로 숫자 부여하여 Encoding
- Frequency Encoding : 범주형 값의 등장 빈도를 부여하여 Encoding
- One-hot Encoding : 여러 개의 0과 1개의 1 값으로 구성된 Array로 변환하는 Encoding 방법
(출처)
- 위 그림처럼 Array의 각 Column마다 다른 지명 Category가 부여되며, 각 지명에 해당하는 Column만 1의 값을 가짐
- 자연어 처리 분야에서 단어를 Encoding하기 위해 자주 사용
- Tree-based model에서는 Feature 수가 너무 많을 경우 One-hot Encoding을 지양하는 것이 좋다
Datetime, Coordinate Feature
- Datetime
- Periodicity : 연, 월, 일 등의 숫자로 나타나짐
- Time Since : 특정 순간에 독립적인 경우(ex. 1월 1일 이후)와 특정 순간에 종속적인 경우(ex. 지난 휴일 이후 몇 일이 지났는지)로 나뉨
- Difference between Dates : 두 Datetime 사이의 기간
- Coordinate : Map상의 좌표값들로 나타나짐.
- 주변 건물, 지형 등의 추가적인 데이터가 주어질 수 있음(ex. 위치에 따른 부동산 가격 예측 등에 활용)
- 데이터 좌표 별로 Cluster 형성 후 Center 값 활용 가능
Missing Value 처리
- Feature를 전처리하는 과정에서 특정 종류의 데이터가 누락되어 있는 경우가 있음
- 데이터가 누락되었을 때 이를 바로 입력에 사용할 수 없으므로 별도의 처리 필요(보통 NaN 값으로 기재됨)
- Fillna 방법 : Missing Value를 특정값으로 채움
- 임의의 값 사용 : -999, -1 등
- 통계값 사용 : Mean 혹은 Median 값으로 채움(Outlier가 많을 때는 Median을 사용하는 것이 유리)
- Reconstruct Value : Missing Value 값을 예측하여 예측한 값으로 채움
(출처)
- 위 경우 mean값을 사용하면 0이 될 수 있어 모델링을 통해 예측하여 값을 채우는 것이 유리
- 데이터 제거 : Missing Value가 포함된 데이터 포인트를 제거하거나, 해당 데이터 종류를 제거
- 데이터 포인트 제거 : 데이터 중 10번째 값에서 Gender가 Missing Value면 10번째 값 자체를 데이터셋에서 제거
- 데이터 종류 제거 : 데이터셋 내에서 Gender가 Missing Value로 작성된 데이터 포인트가 1개라도 있으면 Gender 종류 자체를 데이터셋 내에서 제거
- 아무것도 안하기 : XGboost와 같은 알고리즘은 Missing Value를 고려해서 학습한다고 한다.
Text 처리
- Text 전처리 과정 : Lowercase, Lemmatization, Stemming, Stopwords 처리 과정 수행
- Lowercase : (영어일 때) 모든 문자들을 소문자로 변형, 대문자를 고려할 경우 단어의 종류가 너무 많아지기 때문.
- Lemmatization : 단어의 기본형을 추출 (am, are, is -> be)
- Stemming : 단어의 어미를 예측하여 제거(formalize -> formal)
- Stopwords : 실제 의미를 분석하는데 의미가 없는 단어들을 제거(ex. i, me 등은 문장에서 흔하게 등장하여 의미 이해하는데 Critical 하지 않다고 볼 수 있음)
- Text 후처리 과정 : 모델 입력을 위해 각 단어 혹은 문장을 하나의 Vector로 만드는 Word Embedding 수행. Bag of Words, N-grams, 딥러닝 모델 이용 가능
- Bag of Words : 문장 내에서 단어가 등장하는 횟수로 Vector 생성(TF-IDF도 사용 가능)
- N-gram : 문장 내에서 연속된 N개의 단어들이 등장하는 횟수로 Vector 생성
- 딥러닝 모델 : Pre-trained 모델의 파라미터를 이용하여 Vector 생성 (추천하는 방법)
- 단어 단위 Embedding : Word2Vec(CBOW, Skip-gram), Glove, FastText 등 사용 가능
- 문장 단위 Embedding : Doc2Vec 등 사용 가능
- 추가 읽을 거리
- Numeric : 정량적으로 측정 가능하며 정수 혹은 실수로 표현됨(ex. 시간, 온도 등)
- Categorical : 범주로 구분되고 비연속적인 값으로 표시됨(ex. 성별)
- Ordinal : 범주로 구분되면서 범주간의 순서가 존재함, 비연속적인 값으로 표시됨(ex. 영화 평점. 1, 2, 3, 4, 5점으로 구분되면서 순서가 존재)
- Datetime : 연도, 월, 일 정보로 표시되는 정보
- Coordinates : 지도 상의 경도, 위도 등으로 표시되는 좌표 정보
- Age : Numeric
- SibSp : Categorical
- Ticket : ID
- Name : Text
- 강의에서는 Tree-based, Non-tree-based 모델로 구분하여 설명하며, 본 글에서는 Non-tree-based 모델 위주로만 언급
Numeric Feature
- Feature 전처리
- Scaling : MinMaxScaler, RobustScaler, StandardScaler
- Outlier : 대다수의 데이터 분포와 다른 특성을 갖는 데이터. 제거하거나 다른 값으로 대체 필요
- Trimming : 데이터 값의 Quantile을 계산하여 특정 범위의 Quntaile(주로 5%~95%)만 취하고, 나머지는 제외
- Winsorization : 다른 값으로 대체
- Rank : 직접 Outlier를 일일이 제거하기 힘들 경우 사용 가능
- log 변환 : 데이터에 log(x+1) 등을 취하는 것, 데이터가 로그정규 분포를 가지는 경우에 유용함
- Feature 생성
- Prior Knowledge : 상식, 수학적 공식 등의 지식을 활용하여 알고있는 정보로부터 새로운 Feature를 생성 (ex. 2차원 공간 상의 두 점의 x, y 좌표값을 알면 distance를 구할 수 있음)
- Exploratory Data Analysis 과정
- 추가 읽을 거리 : Feature Scaling and the effect of standardization for machine learning algorithms
Categorical과 Ordinal Feature
- 모델 입력을 위해 Encoding 과정 거칠 필요 있으며 크게 Label, One-hot Encoding으로 구분
- Label Encoding : 문자열 형태의 범주형 값을 수치형 값으로 변경(ex. 남자 -> 0, 여자 ->1)
- Alphabetic Encoding: 알파벳 순서대로 숫자 부여하여 Encoding
- Frequency Encoding : 범주형 값의 등장 빈도를 부여하여 Encoding
- One-hot Encoding : 여러 개의 0과 1개의 1 값으로 구성된 Array로 변환하는 Encoding 방법
(출처)
- 위 그림처럼 Array의 각 Column마다 다른 지명 Category가 부여되며, 각 지명에 해당하는 Column만 1의 값을 가짐
- 자연어 처리 분야에서 단어를 Encoding하기 위해 자주 사용
- Tree-based model에서는 Feature 수가 너무 많을 경우 One-hot Encoding을 지양하는 것이 좋다
Datetime, Coordinate Feature
- Datetime
- Periodicity : 연, 월, 일 등의 숫자로 나타나짐
- Time Since : 특정 순간에 독립적인 경우(ex. 1월 1일 이후)와 특정 순간에 종속적인 경우(ex. 지난 휴일 이후 몇 일이 지났는지)로 나뉨
- Difference between Dates : 두 Datetime 사이의 기간
- Coordinate : Map상의 좌표값들로 나타나짐.
- 주변 건물, 지형 등의 추가적인 데이터가 주어질 수 있음(ex. 위치에 따른 부동산 가격 예측 등에 활용)
- 데이터 좌표 별로 Cluster 형성 후 Center 값 활용 가능
Missing Value 처리
- Feature를 전처리하는 과정에서 특정 종류의 데이터가 누락되어 있는 경우가 있음
- 데이터가 누락되었을 때 이를 바로 입력에 사용할 수 없으므로 별도의 처리 필요(보통 NaN 값으로 기재됨)
- Fillna 방법 : Missing Value를 특정값으로 채움
- 임의의 값 사용 : -999, -1 등
- 통계값 사용 : Mean 혹은 Median 값으로 채움(Outlier가 많을 때는 Median을 사용하는 것이 유리)
- Reconstruct Value : Missing Value 값을 예측하여 예측한 값으로 채움
(출처)
- 위 경우 mean값을 사용하면 0이 될 수 있어 모델링을 통해 예측하여 값을 채우는 것이 유리
- 데이터 제거 : Missing Value가 포함된 데이터 포인트를 제거하거나, 해당 데이터 종류를 제거
- 데이터 포인트 제거 : 데이터 중 10번째 값에서 Gender가 Missing Value면 10번째 값 자체를 데이터셋에서 제거
- 데이터 종류 제거 : 데이터셋 내에서 Gender가 Missing Value로 작성된 데이터 포인트가 1개라도 있으면 Gender 종류 자체를 데이터셋 내에서 제거
- 아무것도 안하기 : XGboost와 같은 알고리즘은 Missing Value를 고려해서 학습한다고 한다.
Text 처리
- Text 전처리 과정 : Lowercase, Lemmatization, Stemming, Stopwords 처리 과정 수행
- Lowercase : (영어일 때) 모든 문자들을 소문자로 변형, 대문자를 고려할 경우 단어의 종류가 너무 많아지기 때문.
- Lemmatization : 단어의 기본형을 추출 (am, are, is -> be)
- Stemming : 단어의 어미를 예측하여 제거(formalize -> formal)
- Stopwords : 실제 의미를 분석하는데 의미가 없는 단어들을 제거(ex. i, me 등은 문장에서 흔하게 등장하여 의미 이해하는데 Critical 하지 않다고 볼 수 있음)
- Text 후처리 과정 : 모델 입력을 위해 각 단어 혹은 문장을 하나의 Vector로 만드는 Word Embedding 수행. Bag of Words, N-grams, 딥러닝 모델 이용 가능
- Bag of Words : 문장 내에서 단어가 등장하는 횟수로 Vector 생성(TF-IDF도 사용 가능)
- N-gram : 문장 내에서 연속된 N개의 단어들이 등장하는 횟수로 Vector 생성
- 딥러닝 모델 : Pre-trained 모델의 파라미터를 이용하여 Vector 생성 (추천하는 방법)
- 단어 단위 Embedding : Word2Vec(CBOW, Skip-gram), Glove, FastText 등 사용 가능
- 문장 단위 Embedding : Doc2Vec 등 사용 가능
- 추가 읽을 거리
How to Win a Data Science Competition: Learn from Top Kagglers-Week 1 강의 내용 정리
Reviewed by parkjh
on
10월 22, 2021
Rating:
댓글 없음: