trainer.fit()
elif params["loss"] == "pairwise":
    print("pairwise ranking loss")
    trainer.fit_pairwise_ranking_loss()
elif params["loss"] == "pairwise+utility":
    print("pairwise + utility loss")
    trainer.fit_pairwise_utility_loss()
else:
    raise ValueError(
        "loss must be in ['utility', 'logit', 'pairwise', 'pairwise+utility']")

users_test = X_test[:, 0].reshape(-1, 1)
items_test = X_test[:, 1].reshape(-1, 1)
y_test = y_test.reshape(-1, 1)

preds = trainer.predict(users=users_test,
                        items=items_test,
                        y=y_test,
                        batch_size=TEST_BATCH_SIZE).reshape(-1, 1)

output = pd.DataFrame(np.concatenate((users_test, preds, y_test), axis=1),
                      columns=['user_id', 'pred', 'y_true'])

output, hit_ratio, ndcg = get_choice_eval_metrics(output,
                                                  at_k=params['eval_k'])

print("hit ratio: {:.4f}".format(hit_ratio))
print("ndcg: {:.4f}".format(ndcg))

log_output(MODEL_DIR, MODEL_NAME, params, output=[hit_ratio, ndcg])
                               checkpoint=args.checkpoint,
                               lmbda=params["lambda"],
                               max_iter=params["max_iter"],
                               num_workers=params["num_workers"])

if params['loss'] == 'utility':
    print("utility loss")
    trainer.fit_utility_loss()
else:
    print("mse loss")
    trainer.fit()

users_test = X_test[:, 0].reshape(-1, 1)
items_test = X_test[:, 1].reshape(-1, 1)
y_test = y_test.reshape(-1, 1)

preds = trainer.predict(users=users_test,
                        items=items_test,
                        y=y_test,
                        batch_size=TEST_BATCH_SIZE).reshape(-1, 1)

output = pd.DataFrame(np.concatenate((users_test, preds, y_test), axis=1),
                      columns=['user_id', 'pred', 'y_true'])

output, rmse, dcg = get_eval_metrics(output, at_k=params['eval_k'])

print("rmse: {:.4f}".format(rmse))
print("dcg: {:.4f}".format(dcg))

log_output(MODEL_DIR, MODEL_NAME, params, output=[rmse, dcg])