오늘은 train-test 분리 전략에 문제가 생겨 알아봤다.
각 유저당 rating을 train 8 : test 2 의 비율로 분리
장점:
전체적으로 train-test 비율이 일정하게 유지됨.
데이터셋이 균형적으로 유지되어 모델의 일반화 성능을 평가하기에 적절함
단점:
유저별로 테스트셋의 아이템 수가 다르기 때문에, 평가 지표(특히 recall@k, precision@k)에 영향을 미칠 수 있음
아이템 수가 적은 유저의 경우, 테스트셋 크기가 너무 작아 신뢰할만한 평가가 어려울 수 있음
각 유저당 rating을 10~20개만 test에 두고 나머지는 train으로 분리
장점:
유저당 동일한 테스트셋 크기를 유지할 수 있어, 모델 성능 비교가 일관성 있게 가능
특히 Recall@K, Precision@K, NDCG@K 등의 순위 기반 평가 지표에서 공정한 비교가 가능
극단적으로 적거나 많은 아이템을 가진 유저로부터 발생할 수 있는 불균형 문제를 완화할 수 있음
단점:
전체적으로 train-test 비율이 유저마다 달라질 수 있어, 특정 유저의 데이터가 과적합(오버피팅)되거나 일부 유저의 학습 기여도가 낮아질 가능성
아이템 수가 적은 유저의 경우, 학습 데이터가 너무 작아 모델이 충분히 학습되지 않을 수 있음
유저 A
총 100개의 rating 기록
20% 테스트셋 → 20개의 테스트 아이템
유저 B
총 10개의 rating 기록
20% 테스트셋 → 2개의 테스트 아이템
Recall@10의 경우
유저 A: 10개 중 5개 맞춤 → Recall = 5/20 = 0.25
유저 B: 2개 중 1개 맞춤 → Recall = 1/2 = 0.50
NDCG@10의 경우
유저 A: 20개의 관련 아이템 중 순위를 평가
유저 B: 2개의 관련 아이템 중 순위를 평가
유저 B는 적은 수의 아이템으로 인해 높은 NDCG 값을 얻기 쉬움
결과적 문제점
테스트셋 크기가 작은 유저들의 평가 지표가 과대 평가될 수 있음
최종 평균 계산 시 유저별 신뢰도가 다름에도 동일한 가중치로 처리됨
특히 Top-K 추천에서 K값이 테스트셋 크기보다 큰 경우 평가 자체가 왜곡될 수 있음