-
프로젝트 주제
- 과거 특정 사용자가 어떠한 책에 대해 내린 평점 데이터를 바탕으로 사용자가 어떤 책을 더 선호할지 예측하는 테스크
- 진행기간 : 4월 10일 (월) 10:00 ~ 4월 20일 (목) 19:00
-
프로젝트 구현 내용
- 어떠한 소비자가 수백 페이지로 이루어진 책을 상세히 읽지 않아도 본인의 과거 의사결정 정보를 통해 학습한 머신러닝/딥러닝 모델으로 책의 선호도를 예측해 책 구매 결정에 대한 도움을 줄 수 있는 프로세스를 개발함
-
활용 장비 및 재료(개발환경, 협업 tool 등)
- (팀 구성 및 컴퓨팅 환경) 4인 1팀, 인당 V100 서버를 VSCode와 SSH로 연결하여 사용
- (협업 환경) GitHub, Notion
- (의사 소통) Slack, Zoom
-
프로젝트 구조 및 사용 데이터셋의 구조도(연관도)
├── [1] main.py ├── [2] src │ ├── data │ │ └── dl_data.py │ ├── models │ │ ├── DCN(= Parallel DCN with Context) │ ├── train │ │ └── trainer.py │ └── utils.py ├── [3] Data_Search_Final.ipynb ├── [4] Data_Search_Prev.ipynb ├── [5] Make_ensembles.ipynb ├── [6] Optuna-Catboost-10Fold.ipynb └── [7] Optuna-Total-DCNC-10Fold.ipynb
- 김수민_T5040: EDA 및 Preprocessing, FM/FFM/NCF 성능 확인 및 튜닝, Rule-based 모델 설계
- 김영서_T5042: EDA 및 Preprocessing, DCN/FM/FFM 성능 확인
- 김지우_T5063: EDA 및 Preprocessing, DCN/WDN 성능 확인 및 튜닝, Rule-Based/DeepCoNN 모델 설계
- 박수현_T5085: 팀의 목표 설정 및 리딩, EDA 및 Preprocessing, Catboost 설계 및 튜닝, Parallel DCN with Context 설계 및 튜닝
<전반적인 Process>
-
탐색적 분석 및 전처리
- Fill The Missing Value
- Cardinality Reduction
- Binning
-
모델 개요
- Catboost
- PDCNC(Parallel DCN with Context)
- Baseline Code에서 수정한 점
- Parallel DCN : High-Order Interaction을 잡아낼 수 있는 Cross Network와 비선형적인 상호작용을 잡아낼 수 있는 MLP의 조합을 기대하여 Stacked DCN에서 Parallel DCN으로 구조를 변경하였습니다.
- Context Information 활용 : User-Book 간에 Interaction 뿐만 아니라 User Profile, Book Profile 정보를 활용하면 더욱더 풍부한 예측이 이루어질 것으로 기대하였습니다.
- 그 밖에 Model Capacity를 증가시켜 약간의 성능 향상을 이끌어냈습니다.
- Baseline Code에서 수정한 점
-
모델 선정 및 분석
-
Catboost
- 대부분 Categorical Feature로 이루어졌기 때문에 이러한 부분을 Target Encoding으로 대응할 수 있는 Catboost 모델을 사용하였습니다.
- 아래에 언급한 그림과 같이 group(user_id).var()과 group(book_author).var()의 경우, 0에 근접한 분포를 보이는 것을 알 수 있습니다. 즉, 특정 유저 또는 책을 작성한 저자에 따른 평점의 경향성이 존재함을 의미 하는 것으로, Catboost에서 제공하는 Target Encoding이 이러한 경향성을 담아낼 수 있을 것으로 기대하여 Catboost를 사용하였습니다.
-
PDCNC
-
-
모델 평가 및 개선
-
모델 평가
- Catboost : Cross Validation
- PDCNC : Holdout(train_test_split(ratio = 0.2))
-
모델 개선
-
-
시연 결과(모델 성능)