이 프로젝트는 사용자의 시청 기록과 영화에 대한 추가 메타데이터를 활용하여 사용자가 각 영화를 어떻게 평가할지 예측함으로써 사용자에게 영화를 추천하는 것을 목표로 합니다. 추천 시스템은 명시적 평점 대신 시청 순서와 같은 암시적 피드백을 기반으로 학습됩니다.
- train_ratings.csv: 31,360명의 사용자(user)가 6,807개의 영화(item)에 대해 남긴 5,154,471건의 평점을 남긴 시간(time) 데이터 입니다.
- Ml_item2attributes.json: item과 genre의 mapping 데이터입니다.
- titles.tsv: 6,807개의 영화(item)에 대한 제목(title)정보를 담고 있는 메타데이터입니다.
- years.tsv: 6,799개의 영화(item)에 대한 개봉연도(year) 정보를 담고 있는 메타데이터입니다.
- directors.tsv: 5,905개의 영화(item)에 대한 감독(director) 정보를 담고 있는 메타데이터입니다.
- genres.tsv: 15,934개의 영화(item)에 대한 장르(genre) 정보를 담고 있는 메타데이터입니다.
- writers.tsv: 11,307개의 영화(item)에 대한 작가(writer) 정보를 담고 있는 메타데이터입니다.
Recall@K
-
Recall@K는 는 사용자가 선호할 수 있는 아이템들 중에서 상위 K개에 실제로 포함된 아이템의 비율을 측정하는 지표입니다. 이 지표는 모델의 추천 성능을 평가하는 데 사용됩니다.
-
Recall@K는 다음과 같이 정의됩니다:
$$ Recall@K= \frac{1}{|U|} \sum_{u \in U} \frac{| { i \in I_u \ | \ \text{rank}_u(i) \leq K } |}{\min(K, |I_u|)} $$ $$ |U| : 총 사용자 수, \ \ I_u : 사용자가 상호작용한 아이템의 수, \ \ {rank}_u(i) : 사용자의 아이템에 대한 순위, \ \ K : 평가하려는 추천 목록의 상위 K개의 아이템, \ \\ $$
- 구글 공유 폴더 (데이터 공유 용)
- GitHub (issue, pr 로 전체적인 흐름 관리)
- Notion (회의록, 보드로 프로젝트 관리)
- RecBole
python version: 3.11x
pip install -r requirements.txt
run.sh
: DeepFM, EASE, SLIM 모델의 학습 및 예측 과정을 자동으로 실행하는 Bash 스크립트입니다.main.py
: Argparser 형식을 정의하고config.yaml
파일과 통합하여 파이프라인을 실행하는 파일입니다.models/
: 구현된 모델들의 아키텍처 파일을 포함하고 있습니다.train/
: 각 모델의 학습 로직을 구현한 트레이너 클래스가 포함되어 있습니다.data/
:basic_data/
: 기본 입력 데이터로 사용되는 행렬 기반 데이터가 포함되어 있습니다.context_data/
: 기본 행렬 데이터와 부가 정보를 결합한 데이터를 포함하고 있습니다.
- 실행 코드 :
bash run.sh
-c
는 필수사항이므로 반드시 지정해야 합니다.-m
은 모델의 약자로, DeepFM 또는 slim만 입력 가능합니다.config/
폴더 안에는 각 모델의 파라미터 및 디바이스 설정이 포함되어 있습니다.Predict False
는 학습 과정에서 검증(validation)만 진행하며, 최종 테스트를 포함하지 않습니다.Predict True
는 학습 후 결과를 제출 가능한 출력(output)을 생성합니다.
Model | 리더보드 Recall@10 (중간) | 리더보드 Recall@10 (최종) |
---|---|---|
ease_slim_multivae_ensemble_optuna | 0.1600 | 0.1601 |
ease(lambda : 350) | 0.1600 | 0.1596 |