본문 바로가기

부스트캠프 AI Tech 3기/프로젝트 : P-stage

[Day62] DKT 3. Baseline (LGBM, LSTM, Transformer)

Sequence 모델링

transcaction data 같은 sequence data를 사용하기 위해서는 feature engineering을 통해 집계해서 non-sequence하게 만들어 사용할 수도 있다.

 

집계 : Aggregation

다음과 같은 방법으로 feature engineering을 해서 사용할 수 있다.

여러 유저의 신용카드 사용 내역이 있다고 하면 한 유저에 대해서 여러 사용내역이 있게 되고 이것을 한 유저에 대해서 집계할 수 있다.

  • categorical 변수같은 경우는 많이 나온 한 카테고리를 선택할 수도 있다. 
  • null이 아닌 것의 횟수를 센다
  • 연속형 변수면 평균을 취한다

 

하지만 집계하는 과정에서 정보들이 많이 손실된다. 집계하지 않고 transaction을 그대로 sequence datat를 사용하면 sequence modeling 이 필요하다. transaction을 그대로 사용해도 feature engineering을 하면 성능이 더 좋아질 수도 있다. 기록이 하나 마칠 때 마다 예측을 하는 것이 아니라 그 연속된 값들이 끝난 마지막 시점에서 예측을 하게되는 경우가 생길 수 있다.

 

Tabular Approach

DKT문제를 정형 데이터 형태로 가정하고 모델 적용을 해보자

 

Feature engineering

  • 문제를 푼 시점에서의 사용자의 적중률/갯수
  • 사람의 실력, 문제의 난이도를 나타내는 feature
    시험지 평균, 태그별 평균

Train/Valid Data Split

행 단위로 개수를 세는 것이 아니라, 사용자별로 묶어서 사용자의 단위로 train data와 valid data로 split해야한다. 즉, 한 사람의 학습기록이 train와 valid에 둘 다 존재해서는 안 된다.

 

Model Training

하이퍼 파라미터 튜닝을 아예 안 한 상태에서 하면 성능 향상이 있지만, 일정 수준 이상을 바라면 feature engineering을 해야한다.

Feature importance를 보고 feature를 버릴 수도 있다.

 

Sequential Approach

task의 종류에 따라 입출력의 구조가 달라진다

  • one-to-one
    ex) 주식의 하루 데이터만 주고 종가 맞추기
  • one-to-many
    ex) 사진 한 장으로 여러 단어로 이루어진 문장 만들어내기
  • many-to-one
    ex) sequence가 쭉 들어가고 마지막 sequence에서 일어날 일 맞추기
  • many-to-many
    ex) 주식의 5일치 데이터를 주고 그 5일치의 종가 맞추기
  • sequence-to-sequence
    ex) 여러 단어로 이루어진 한 문장을 여러 단어로 이루어진 한 문장으로 번역

 

Model

  • LSTM
    + attention
  • Transformer
  • BERT
    기존의 LSTM 레이어를 BERT로 대체

Embedding

범주형 변수는 embedding을 거치게 된다. Lookup Table을 만든다.

  1. Category(A,B,C)들을 integar(0,1,2..)로 바꾼다
  2. embedding의 loss가 최소가 되는 lookup table을 학습한다.
  3. 카테고리별로 embedding을 시킨다.

연속형 변수는 embedding없이 바로 linear layer를 통해 hidden size를 조절만 한다.

 

Imput Transformation

user 별로 나누게 되면 user별 sequence길이가 다를 것이다. 한 유저에 대해서 학습하게 되면 max_sequence_length라는 하이퍼 파라미터를 통해서 그 길이를 일정하게 맞추어주면서 제한한다. 모자르면 앞에서부터 padding으로 채우고, max_sequence_length보다 길면 가장 최신 sequence를 기준으로 자른다. 가장 오래된 것부터 사용하지 않게 된다. 이론적으로는 앞에서부터 padding으로 채우지만, 뒤에 채워도 성능차이가 크지 않는 경우도 있다.

 

max_sequence_length는 하이퍼 파라미터이기 때문에 조절할 수 있는데, 당연히 실험적으로 정할 수 있고 max_sequence_length가 데이터의 90%이상을 커버하는 지점을 EDA를 통해 찾아서 설정해도 된다.

 

Modeling

  1. feature engineering없이 baseline을 1차적으로 빨리 만들어라
    input넣어서 output 나오는 시스템 구축
  2. Feature Engineering(FE)하면서 데이터 이해하기
  3. 좋은 Cross validation 전략 찾기
    cv성능이 높아지면 리더보드도 높아지고, cv가 내려가면 리더보드도 내려가는 그런 cv전략을 찾아보기
  4. Feature Selection
    하나씩 넣어보고 빼면서 하면 best지만 노력이 필요하기에 파이프라인을 잘 만들어야한다.
  5. 큰 틀에서 Model tuning
  6. 다른 모델 사용해보기
  7. bleding, stacking, ensembling
    정말 할 거 없으면 seed ensemble
  8. final tuning