
시계열 데이터를 다루기 위해서는 시퀀스 모델이 필요하나, 그것을 다룰 능력이 프로젝트를 시작할 시기(1학년 말)에는 없었기에, 딥러닝이 아닌 머신러닝 모델을 다루기 위해서 데이터를 collapsing하기 시작했다.(시계열-시퀀스 데이터는 일반적인 지도학습에 사용되는 데이터처럼 서로 독립적인 것이 아니라 특정 순서를 가지며 비-독립적이기 때문이다.)
Numerical : 평균
Categorical : 최빈값 추출 이후 Integer Encoding / One Hot Encoding
Time : 시간대를 4개로 나누어 분류한 후 Integer Encoding
Target(Modality) : One-Hot Encoding으로 Binary Classification 문제로 변환
+Categorical feature에는 각 카테고리들의 비율, 카테고리 사이의 이동의 비율을
+가속도 센서 값에는 이전 row와의 가속도 센서 x, y, z값의 차이를 계산한 diff x, y, z 그리고 그 값을 이용하여 현의 길이와 호의 길이를 새로운 feature로 추가.
+Integer Encoding / One-Hot Encoding을 판단한 기준 : categorical feature이지만 category 사이의 순서나 랭크가 존재할 경우에는 Integer, 그렇지 않을 경우에는 One-Hot Encoding을 진행했다.
collapsing을 진행한 후 데이터를 살펴보니, 모든 값이 동일하나 target의 One-Hot Encoding만 다른 row들을 발견. 사용자는 앱에서 여러개의 label을 동시에 체크할 수 있었으나 target에 list를 담지 않고 서로 다른 label을 가진 복제된 row들을 생성하는 것으로 데이터가 저장된 것을 확인. 이미 label에 대해 one-hot encoding을 한 상태이기 때문에 기록 시간이 정확히 일치하는 collapsed row들에 대해서 중복 제거를 처리, 대신 multi-label 데이터로 변경함
위 과정을 통해 약 256만개의 row를 지닌 데이터가 단 255개의 row로 줄어들음. 평균적으로 1.4개의 label이 체크되었음을 알 수 있음.
이후 type casting을 통해 전처리를 마친 후, EDA를 통해서 전처리된 데이터의 분포 및 상관관계를 파악한 후 머신러닝을 진행
Feature Engineering을 통해서 다양한 feature들을 새로 만들어 냈기 때문에 feature selection을 통해 모델의 간소화와 feature importance등을 통해 모델의 설명력을 높여보고자 했다.
하는 일 : eliminating redundant or irrelevant features and narrowing down the set of features to those most relevant to the machine learning model. 중복되거나 관계없는 feature들을 제거해서 ML model에 가장 연관된 feature의 set를 얻어내는 것.
효과
각 특성과 target 사이의 통계적인 관계가 있는지 계산하여, 깊은 관계가 있는 상위 K개의 feature을 선택하는 방식이다.
지정된 Model의 weight나 feature importance등을 연산하여, 가장 덜 중요한 feature부터 제거해 나가는 방식이다.
단점은 각 case에 대해서 model을 fitting해야하기 때문에 데이터의 수와 feature의 개수 그리고 선택한 모델에 따라서 굉장한 computational cost가 요구될 수 있으며, training data set에 overfitting될 위험이 있다.
GBM을 사용하되, split을 수행할 때 exact greedy가 아닌 bucket(global || local)을 이용한 approximate greedy을 활용하므로써 계산량을 줄임과 동시에 병렬처리가 가능하게 만들었다.
sparsity aware split finding : 학습과정에서 missing value가 존재하는 데이터를 맨왼쪽 or 맨 오른쪽으로 보낸 후 split을 시도하여 더 나은 쪽을 default direction으로 설정해두어, missing value가 evaluation을 시도할 때 들어오면 바로 default direction으로 보내는 것이다.
어차피 정렬해야하니 column-wise로 데이터 저장, feature value 기준으로 sort(index와 함께)
regression 진행할 때는, similarity를 계산하여 similarity gain을 이용하고, 그 식에 들어가는 lambda는 pruning과 regularization에 관여하며, gamma는 pruning의 기준이 되는 값이다. 특히나 lambda는 split된 node에 속한 데이터의 갯수가 적으면 적을 수록 더 harsh한 regularization이 된다. 또한, gamma가 0이라고 해서 pruning을 진행하지 않는 것이 아니다.