최신머신러닝을 이용한 추천 시스템 12주차 (NGCF metrics 분석, Recommender FrameWork)
UROP
12주차 (NGCF metrics 분석, Recommender FrameWork)
라이브러리에서 사용하는 NGCF Metrics 분석
- Pointwise: Pointwise 방법론은 각 사용자-아이템 쌍에 대해 개별적으로 예측 값을 생성하고 평가하는 방법입니다. 이 방법론에서는 각 쌍의 예측 값과 실제 평가 값 사이의 차이를 최소화하거나 평가 지표를 최적화하는 것이 목표입니다. 대표적인 예로는 평점 예측 문제가 있습니다. 사용자-아이템 쌍에 대해 평점을 예측하고, 실제 평점과의 차이를 최소화하여 모델을 학습합니다.
- Listwise: Listwise 방법론은 추천 목록 전체에 대해 평가하고 최적화하는 방법입니다. 이 방법론에서는 추천 목록의 순서를 고려하여 평가 지표를 최적화하거나 추천 목록 자체를 최적화하는 것이 목표입니다. Listwise 방법론은 사용자의 선호도 순서를 모델에 반영하여 개별적인 아이템 예측보다 전체 목록의 품질을 개선하는 데 초점을 둡니다. 예를 들어, 검색 결과의 순위매기기나 추천 시스템에서의 Top-N 추천 문제에 사용될 수 있습니다.
Pointwise와 Listwise 방법론은 모델의 학습과 평가 방식에서 차이가 있습니다. Pointwise는 개별 예측 값에 대해 최적화를 수행하고, Listwise는 전체 추천 목록에 대한 최적화를 수행합니다. 선택은 문제의 성격과 데이터의 특성에 따라 달라질 수 있습니다
eval_result = evaluate(
model=movie_ngcf,
data=movie_test_data,
neg_sampling=True,
metrics=["loss", "precision", "recall"],
k = 10
)
POINTWISE_METRICS = {
"loss",
"log_loss",
"balanced_accuracy",
"roc_auc",
"pr_auc",
"roc_gauc",
}
LISTWISE_METRICS = {"precision", "recall", "map", "ndcg", "coverage"}
RANKING_METRICS = POINTWISE_METRICS | LISTWISE_METRICS
-
precision_at_k 함수
def precision_at_k(y_true, y_reco, k): common_items = set(y_reco).intersection(y_true) #-- 추천된 아이템 중 실제로 사용자가 선호하는(구매하거나 클릭한) 아이템의 갯수 / k return len(common_items) / k
TF/(TF + FT) → 전체 아이템 중 실제 아이템 비율을 다시 K로 나눔
#– 실제값들과 예측값, 샘플링된 유저들, k를 인자로 listwise_scores 계산
-
listwise_scores(fn, y_trues, y_recos, users, k) 함수
scores = list() for u in users: y_true = y_true_lists[u] y_reco = y_reco_lists[u] scores.append(fn(y_true, y_reco, k)) return np.mean(scores)
precision_at_k를 통해 얻은 값들을 scores 리스트에 모두 저장 후 평균값 계산