评估推荐系统的性能:指标和评估技术的探索

2023年11月22日 由 alex 发表 331 0

介绍


推荐系统已经成为数字领域不可或缺的一部分,影响着电子商务、流媒体服务和内容平台的用户体验。这些系统分析用户的偏好和行为,以推荐产品、电影、文章和其他项目。这些系统的有效性对于提高用户满意度和业务成果至关重要。推荐系统中的指标是评估和完善这些系统的重要工具。从准确预测用户偏好到提供多种选择,它们提供了可量化的措施来评估系统实现其目标的程度。


1


指标类型


1. 精度指标:


  • 平均绝对误差(MAE)和均方根误差(RMSE):  MAE测量一组预测中误差的平均大小,而不考虑它们的方向。RMSE通过在取平均值之前对误差进行平方来提供更敏感的度量,强调较大的误差。两者都是评估推荐预测精度的基础。


  • 准确性和召回率: 这些指标评估推荐项目的相关性。精确度衡量的是推荐的相关条目的比例,召回率评估的是推荐的相关条目的数量。


2. 多样性指标::


  • 列表内多样性: 该指标评估推荐项目集内的多样性,确保系统为用户提供一系列选择。


  • 项目覆盖率: 它评估推荐系统如何很好地代表整个可用项目目录,防止过度集中在有限的流行项目集上。


3. 新颖性和偶然性指标:


  • 新颖性: 这衡量的是系统推荐不太为人所知或新事物的能力,将用户的体验扩展到他们的典型选择之外。


  • Serendipity: 它衡量系统在提供令人惊讶但又吸引人的推荐、增强用户乐趣和发现方面的成功程度。


4. 效用指标:


  • 点击率(CTR): CTR通过跟踪用户点击推荐项目的频率来衡量用户参与度,表明用户的直接兴趣。


  • 转化率: 这个指标反映了推荐在影响用户决策方面的有效性,通过购买或订阅等行为来衡量。


5. 用户满意度指标:


  • 用户调查: 来自用户的直接反馈为他们对建议的满意度提供了宝贵的见解。


  • 长期用户粘性指标: 这些指标评估系统在长期维持用户兴趣和用户粘性方面的有效性。


指标选择的挑战


指标之间的权衡:优化一个指标有时会对另一个指标产生不利影响。例如,只关注准确性可能会减少推荐的多样性。平衡这些权衡对于一个全面的系统是至关重要的。


上下文敏感性:指标的相关性和有效性取决于上下文,例如推荐的内容类型或特定的用户群。


代码


创建一个完整的Python代码,用合成数据集上的图来演示推荐系统指标,涉及几个步骤。我们需要:


  1. 生成合成数据集。
  2. 实施一个简单的推荐系统。
  3. 应用各种指标来评估推荐系统。
  4. 绘制结果以便可视化。


让我们分解一下这些步骤:


1. 生成合成数据集


我们可以创建用户-项目交互的合成数据集。每个交互都可以用用户ID、项目ID和评级(例如,从1到5的等级)来表示。


2. 实施一个简单的推荐系统


为了简单起见,我们可以实现一个基本的推荐系统,例如协同过滤算法或基于内容的过滤算法。


3.应用各种指标


我们可以使用RMSE(均方根误差)、精度、召回率和多样性等指标。我们将根据系统给出的建议计算这些值。


4. 绘制结果


我们将使用像matplotlib或seaborn这样的库来绘制这些指标的结果,以获得更好的可视化效果。


import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.metrics.pairwise import cosine_similarity
from sklearn.metrics import mean_squared_error
import matplotlib.pyplot as plt
# Generating a synthetic dataset
np.random.seed(0)
n_users = 100
n_items = 50
n_interactions = 1000
users = np.random.randint(0, n_users, n_interactions)
items = np.random.randint(0, n_items, n_interactions)
ratings = np.random.randint(1, 6, n_interactions)
df = pd.DataFrame({'user': users, 'item': items, 'rating': ratings})
# Splitting the dataset into training and testing sets
train_df, test_df = train_test_split(df, test_size=0.2, random_state=0)
# Creating user-item matrices for training and testing
train_matrix = pd.pivot_table(train_df, values='rating', index='user', columns='item', fill_value=0)
test_matrix = pd.pivot_table(test_df, values='rating', index='user', columns='item', fill_value=0)
# Computing the cosine similarity matrix
user_similarity = cosine_similarity(train_matrix)
item_similarity = cosine_similarity(train_matrix.T)
# Predicting ratings
def predict(ratings, similarity, type='user'):
    if type == 'user':
        mean_user_rating = ratings.mean(axis=1)
        ratings_diff = (ratings - mean_user_rating[:, np.newaxis])
        pred = mean_user_rating[:, np.newaxis] + similarity.dot(ratings_diff) / np.array([np.abs(similarity).sum(axis=1)]).T
    elif type == 'item':
        pred = ratings.dot(similarity) / np.array([np.abs(similarity).sum(axis=1)])
    return pred
user_prediction = predict(train_matrix.to_numpy(), user_similarity, type='user')
# Evaluating the recommender system
def rmse(prediction, ground_truth):
    prediction = prediction[ground_truth.nonzero()].flatten() 
    ground_truth = ground_truth[ground_truth.nonzero()].flatten()
    return np.sqrt(mean_squared_error(prediction, ground_truth))
user_rmse = rmse(user_prediction, test_matrix.to_numpy())
# Correcting the plotting section
plt.figure(figsize=(8, 6))
plt.bar(['User-Based CF'], [user_rmse], color='skyblue')
plt.title('RMSE of the Recommender System')
plt.ylabel('Root Mean Square Error')
plt.ylim(0, user_rmse + 1)  # Adding 1 to the RMSE for a better visual margin
plt.show()
# Displaying the RMSE value
user_rmse


我们简单的基于用户的协同过滤推荐系统在合成数据集上的均方根误差(RMSE)约为2.90。上面的条形图直观地表示了这个指标。


2.9020453110702777


RMSE值表示推荐系统预测的评分与测试集中的实际评分相比的平均误差大小。RMSE值越低,通常表明推荐系统在预测用户偏好方面的性能越好。


2


本演示提供了一个基本示例。在更全面的分析中,您可以包括精确度、召回率、多样性等其他指标,并比较不同类型的推荐系统。


结论


本文总结了推荐系统中使用的主要度量类型——准确性、多样性、新颖性、实用性和用户满意度——以及它们在评估和改进这些系统中的重要性。推荐系统指标的未来可能包括开发更复杂的指标,以考虑动态用户偏好和道德考虑,如公平和隐私。



文章来源:https://medium.com/@evertongomede/assessing-the-performance-of-recommender-systems-an-exploration-of-metrics-and-evaluation-d0a0c3639d5b
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
热门职位
Maluuba
20000~40000/月
Cisco
25000~30000/月 深圳市
PilotAILabs
30000~60000/年 深圳市
写评论取消
回复取消