评估模块#
Python 评估#
- exception recommenders.evaluation.python_evaluation.ColumnMismatchError[source]#
当列不匹配时引发的异常。
当涉及列的操作遇到不匹配或不一致时,会引发此异常。
- message#
错误说明。
- 类型:
str
- exception recommenders.evaluation.python_evaluation.ColumnTypeMismatchError[source]#
当列类型不匹配时引发的异常。
当涉及列类型的操作遇到不匹配或不一致时,会引发此异常。
- message#
错误说明。
- 类型:
str
- recommenders.evaluation.python_evaluation.auc(rating_true, rating_pred, col_user='userID', col_item='itemID', col_rating='rating', col_prediction='prediction')[source]#
计算隐式反馈推荐系统的曲线下面积 (Area-Under-Curve) 指标,其中评分是二元的,预测是介于 0 到 1 之间的浮点数。
https://en.wikipedia.org/wiki/Receiver_operating_characteristic#Area_under_the_curve
注意
该评估不需要留一法场景。此指标不计算考虑用户平均 AUC 分数的基于组的 AUC。它也不限于 k。相反,它计算整个预测结果的分数,无论用户如何。
- 参数:
rating_true (pandas.DataFrame) – 真实数据
rating_pred (pandas.DataFrame) – 预测数据
col_user (str) – 用户列名
col_item (str) – 项目列名
col_rating (str) – 评分列名
col_prediction (str) – 预测列名
- 返回:
auc_score(最小=0,最大=1)
- 返回类型:
float
- recommenders.evaluation.python_evaluation.catalog_coverage(train_df, reco_df, col_user='userID', col_item='itemID')[source]#
计算所有用户推荐的目录覆盖率。该指标定义基于以下参考文献中的“目录覆盖率”定义
- 引用:
G. Shani and A. Gunawardana, Evaluating Recommendation Systems, Recommender Systems Handbook pp. 257-297, 2010.
- 参数:
train_df (pandas.DataFrame) – 包含用户及其交互项目的历史数据集;包含 col_user, col_item。假定不包含任何重复行。这里的交互遵循 Castells 等人的项目选择模型。
reco_df (pandas.DataFrame) – 推荐系统的预测输出,包含 col_user, col_item, col_relevance(可选)。假定不包含任何重复的用户-项目对。
col_user (str) – 用户 ID 列名。
col_item (str) – 项目 ID 列名。
- 返回:
目录覆盖率
- 返回类型:
float
- recommenders.evaluation.python_evaluation.distributional_coverage(train_df, reco_df, col_user='userID', col_item='itemID')[source]#
计算所有用户推荐的分发覆盖率。该指标定义基于以下参考文献中的公式 (21)
- 引用:
G. Shani and A. Gunawardana, Evaluating Recommendation Systems, Recommender Systems Handbook pp. 257-297, 2010.
- 参数:
train_df (pandas.DataFrame) – 包含用户及其交互项目的历史数据集;包含 col_user, col_item。假定不包含任何重复行。这里的交互遵循 Castells 等人的项目选择模型。
reco_df (pandas.DataFrame) – 推荐系统的预测输出,包含 col_user, col_item, col_relevance(可选)。假定不包含任何重复的用户-项目对。
col_user (str) – 用户 ID 列名。
col_item (str) – 项目 ID 列名。
- 返回:
分发覆盖率
- 返回类型:
float
- recommenders.evaluation.python_evaluation.diversity(train_df, reco_df, item_feature_df=None, item_sim_measure='item_cooccurrence_count', col_item_features='features', col_user='userID', col_item='itemID', col_sim='sim', col_relevance=None)[source]#
计算所有用户推荐的平均多样性。
- 参数:
train_df (pandas.DataFrame) – 包含用户及其交互项目的历史数据集;包含 col_user, col_item。假定不包含任何重复行。
reco_df (pandas.DataFrame) – 推荐系统的预测输出,包含 col_user, col_item, col_relevance(可选)。假定不包含任何重复的用户-项目对。
item_feature_df (pandas.DataFrame) –(可选)仅当 item_sim_measure=’item_feature_vector’ 时需要。它包含两列:col_item 和 features(一个特征向量)。
item_sim_measure (str) –(可选)此列指示使用哪种项目相似度度量。可用度量包括 item_cooccurrence_count(默认选择)和 item_feature_vector。
col_item_features (str) – 项目特征列名。
col_user (str) – 用户 ID 列名。
col_item (str) – 项目 ID 列名。
col_sim (str) – 此列指示项目相似度的列名。
col_relevance (str) – 此列指示推荐的项目是否实际与用户相关。
- 返回:
多样性。
- 返回类型:
float
- recommenders.evaluation.python_evaluation.exp_var(rating_true, rating_pred, col_user='userID', col_item='itemID', col_rating='rating', col_prediction='prediction')[source]#
计算解释方差。
- 参数:
rating_true (pandas.DataFrame) – 真实数据。不应存在重复的 (userID, itemID) 对
rating_pred (pandas.DataFrame) – 预测数据。不应存在重复的 (userID, itemID) 对
col_user (str) – 用户列名
col_item (str) – 项目列名
col_rating (str) – 评分列名
col_prediction (str) – 预测列名
- 返回:
解释方差(最小=0,最大=1)。
- 返回类型:
float
- recommenders.evaluation.python_evaluation.get_top_k_items(dataframe, col_user='userID', col_rating='rating', k=10)[source]#
获取以 Pandas DataFrame 格式输入的客户-项目-评分元组,输出每个用户的 top k 项目的密集格式 Pandas DataFrame。
注意
如果是隐式评分,只需附加一个常数列作为评分。
- 参数:
dataframe (pandas.DataFrame) – 评分数据的 DataFrame(格式为
customerID-itemID-rating)
col_user (str) – 用户列名
col_rating (str) – 评分列名
k (int 或 None) – 每个项目的数量;None 表示输入已经
again. (筛选出 top k 项目并按评分排序,无需再次执行)
- 返回:
每个用户的 top k 项目的 DataFrame,按 col_user 和 rank 排序
- 返回类型:
pandas.DataFrame
- recommenders.evaluation.python_evaluation.historical_item_novelty(train_df, reco_df, col_user='userID', col_item='itemID')[source]#
计算每个项目的新颖性。新颖性计算为(与项目交互次数/总交互次数)的负对数。该指标的定义基于以下参考文献使用选择模型(等式 1 和 6)
- 引用:
P. Castells, S. Vargas, and J. Wang, Novelty and diversity metrics for recommender systems: choice, discovery and relevance, ECIR 2011
项目的新颖性可以相对于所有项目集合上的一组观测事件来定义。这些事件可以是用户选择(项目被随机用户“选中”)或用户发现(项目被随机用户“知道”)。上述新颖性定义反映了项目流行度的因素。高新颖性值对应于密度函数中的长尾项目,这些项目与少数用户交互过;低新颖性值对应于热门头部品项目。
- 参数:
train_df (pandas.DataFrame) – 包含用户及其交互项目的历史数据集;包含 col_user, col_item。假定不包含任何重复行。这里的交互遵循 Castells 等人的项目选择模型。
reco_df (pandas.DataFrame) – 推荐系统的预测输出,包含 col_user, col_item, col_relevance(可选)。假定不包含任何重复的用户-项目对。
col_user (str) – 用户 ID 列名。
col_item (str) – 项目 ID 列名。
- 返回:
一个包含以下列的 dataframe:col_item, item_novelty。
- 返回类型:
pandas.DataFrame
- recommenders.evaluation.python_evaluation.logloss(rating_true, rating_pred, col_user='userID', col_item='itemID', col_rating='rating', col_prediction='prediction')[source]#
计算隐式反馈推荐系统的对数损失 (logloss) 指标,其中评分是二元的,预测是介于 0 到 1 之间的浮点数。
https://en.wikipedia.org/wiki/Loss_functions_for_classification#Cross_entropy_loss_(Log_Loss)
- 参数:
rating_true (pandas.DataFrame) – 真实数据
rating_pred (pandas.DataFrame) – 预测数据
col_user (str) – 用户列名
col_item (str) – 项目列名
col_rating (str) – 评分列名
col_prediction (str) – 预测列名
- 返回:
log_loss_score(最小=-inf,最大=inf)
- 返回类型:
float
- recommenders.evaluation.python_evaluation.mae(rating_true, rating_pred, col_user='userID', col_item='itemID', col_rating='rating', col_prediction='prediction')[source]#
计算平均绝对误差 (Mean Absolute Error)。
- 参数:
rating_true (pandas.DataFrame) – 真实数据。不应存在重复的 (userID, itemID) 对
rating_pred (pandas.DataFrame) – 预测数据。不应存在重复的 (userID, itemID) 对
col_user (str) – 用户列名
col_item (str) – 项目列名
col_rating (str) – 评分列名
col_prediction (str) – 预测列名
- 返回:
平均绝对误差。
- 返回类型:
float
- recommenders.evaluation.python_evaluation.map(rating_true, rating_pred, col_user='userID', col_item='itemID', col_prediction='prediction', relevancy_method='top_k', k=10, threshold=10, **_)[source]#
Top k 预测项目的平均精度 (Mean Average Precision)
MAP 的实现参考了 Spark MLlib 的评估指标。https://spark.apache.ac.cn/docs/2.3.0/mllib-evaluation-metrics.html#ranking-systems
可以在以下链接找到很好的参考资料:http://web.stanford.edu/class/cs276/handouts/EvaluationNew-handout-6-per.pdf
注意
MAP 用于计算相关项目的平均精度,因此它通过真实数据中相关项目的数量进行归一化,而不是通过 k 进行归一化。
- 参数:
rating_true (pandas.DataFrame) – 真实 DataFrame
rating_pred (pandas.DataFrame) – 预测 DataFrame
col_user (str) – 用户列名
col_item (str) – 项目列名
col_prediction (str) – 预测列名
relevancy_method (str) – 确定相关性的方法 [‘top_k’, ‘by_threshold’, None]。None 表示直接提供 top k 项目,无需计算相关性操作。
k (int) – 每个用户的 top k 项目数量
threshold (float) – 每个用户的 top 项目阈值(可选)
- 返回:
MAP(最小=0,最大=1)
- 返回类型:
float
- recommenders.evaluation.python_evaluation.map_at_k(rating_true, rating_pred, col_user='userID', col_item='itemID', col_prediction='prediction', relevancy_method='top_k', k=10, threshold=10, **_)[source]#
Top k 平均精度 (Mean Average Precision at k)
MAP@k 的实现参考了 Spark MLlib 的评估指标。apache/spark
- 参数:
rating_true (pandas.DataFrame) – 真实 DataFrame
rating_pred (pandas.DataFrame) – 预测 DataFrame
col_user (str) – 用户列名
col_item (str) – 项目列名
col_prediction (str) – 预测列名
relevancy_method (str) – 确定相关性的方法 [‘top_k’, ‘by_threshold’, None]。None 表示直接提供 top k 项目,无需计算相关性操作。
k (int) – 每个用户的 top k 项目数量
threshold (float) – 每个用户的 top 项目阈值(可选)
- 返回:
MAP@k(最小=0,最大=1)
- 返回类型:
float
- recommenders.evaluation.python_evaluation.merge_ranking_true_pred(rating_true, rating_pred, col_user, col_item, col_prediction, relevancy_method, k=10, threshold=10, **_)[source]#
基于共同用户过滤真实数据框和预测数据框
- 参数:
rating_true (pandas.DataFrame) – 真实 DataFrame
rating_pred (pandas.DataFrame) – 预测 DataFrame
col_user (str) – 用户列名
col_item (str) – 项目列名
col_prediction (str) – 预测列名
relevancy_method (str) – 确定相关性的方法 [‘top_k’, ‘by_threshold’, None]。None 表示直接提供 top k 项目,无需计算相关性操作。
k (int) – 每个用户的 top k 项目数量(可选)
threshold (float) – 每个用户的 top 项目阈值(可选)
- 返回:
推荐命中 DataFrame,按 col_user 和 rank 排序 每个用户命中次数与实际相关项目的 DataFrame 唯一用户 ID 数量
- 返回类型:
pandas.DataFrame, pandas.DataFrame, int
- recommenders.evaluation.python_evaluation.merge_rating_true_pred(rating_true, rating_pred, col_user='userID', col_item='itemID', col_rating='rating', col_prediction='prediction')[source]#
在 userID 和 itemID 上连接真实数据框和预测数据框,并返回具有正确索引的真实和预测评分。
- 参数:
rating_true (pandas.DataFrame) – 真实数据
rating_pred (pandas.DataFrame) – 预测数据
col_user (str) – 用户列名
col_item (str) – 项目列名
col_rating (str) – 评分列名
col_prediction (str) – 预测列名
- 返回:
包含真实评分的数组 numpy.ndarray: 包含预测评分的数组
- 返回类型:
numpy.ndarray
- recommenders.evaluation.python_evaluation.ndcg_at_k(rating_true, rating_pred, col_user='userID', col_item='itemID', col_rating='rating', col_prediction='prediction', relevancy_method='top_k', k=10, threshold=10, score_type='binary', discfun_type='loge', **_)[source]#
归一化折损累积增益 (Normalized Discounted Cumulative Gain, nDCG)。
信息: https://en.wikipedia.org/wiki/Discounted_cumulative_gain
- 参数:
rating_true (pandas.DataFrame) – 真实 DataFrame
rating_pred (pandas.DataFrame) – 预测 DataFrame
col_user (str) – 用户列名
col_item (str) – 项目列名
col_rating (str) – 评分列名
col_prediction (str) – 预测列名
relevancy_method (str) – 确定相关性的方法 [‘top_k’, ‘by_threshold’, None]。None 表示直接提供 top k 项目,无需计算相关性操作。
k (int) – 每个用户的 top k 项目数量
threshold (float) – 每个用户的 top 项目阈值(可选)
score_type (str) – 相关性评分类型 [‘binary’, ‘raw’, ‘exp’]。默认选项 ‘binary’ 将相关性评分简化为 1(命中)或 0(未命中)。选项 ‘raw’ 使用原始相关性评分。选项 ‘exp’ 使用 (2 ** RAW_RELEVANCE - 1) 作为相关性评分
discfun_type (str) – 用于计算 DCG 的折扣函数类型 [‘loge’, ‘log2’]。
- 返回:
k 处的 nDCG(最小=0,最大=1)。
- 返回类型:
float
- recommenders.evaluation.python_evaluation.novelty(train_df, reco_df, col_user='userID', col_item='itemID')[source]#
计算推荐项目列表中的平均新颖性(这假设推荐列表已经计算完成)。遵循以下参考文献第 5 节的内容
- 引用:
P. Castells, S. Vargas, and J. Wang, Novelty and diversity metrics for recommender systems: choice, discovery and relevance, ECIR 2011
- 参数:
train_df (pandas.DataFrame) – 包含用户及其交互项目的历史数据集;包含 col_user, col_item。假定不包含任何重复行。这里的交互遵循 Castells 等人的项目选择模型。
reco_df (pandas.DataFrame) – 推荐系统的预测输出,包含 col_user, col_item, col_relevance(可选)。假定不包含任何重复的用户-项目对。
col_user (str) – 用户 ID 列名。
col_item (str) – 项目 ID 列名。
- 返回:
新颖性。
- 返回类型:
float
- recommenders.evaluation.python_evaluation.precision_at_k(rating_true, rating_pred, col_user='userID', col_item='itemID', col_prediction='prediction', relevancy_method='top_k', k=10, threshold=10, **_)[source]#
K 处的精度 (Precision at K)。
注意
我们使用与 Spark 中相同的公式计算 precision@k。更多详情请参见 https://spark.apache.ac.cn/docs/2.1.1/api/python/pyspark.mllib.html#pyspark.mllib.evaluation.RankingMetrics.precisionAt 特别是,如果用户在 rating_pred 中的项目数量小于 k,则可达到的最大精度可能 < 1。
- 参数:
rating_true (pandas.DataFrame) – 真实 DataFrame
rating_pred (pandas.DataFrame) – 预测 DataFrame
col_user (str) – 用户列名
col_item (str) – 项目列名
col_prediction (str) – 预测列名
relevancy_method (str) – 确定相关性的方法 [‘top_k’, ‘by_threshold’, None]。None 表示直接提供 top k 项目,无需计算相关性操作。
k (int) – 每个用户的 top k 项目数量
threshold (float) – 每个用户的 top 项目阈值(可选)
- 返回:
k 处的精度(最小=0,最大=1)
- 返回类型:
float
- recommenders.evaluation.python_evaluation.r_precision_at_k(rating_true, rating_pred, col_user='userID', col_item='itemID', col_prediction='prediction', relevancy_method='top_k', k=10, threshold=10, **_)[source]#
K 处的 R-precision。
R-precision 可以定义为每个用户的 precision@R,其中 R 是查询的相关项目数量。它也等同于第 R 个位置的召回率。
注意
由于 R 可能很高,在这种情况下,k 表示可能的最大 R。如果每个用户都有多于 k 个的真实项目,那么 r-precision@k 等于 precision@k。您可能需要提高 k 值才能获得有意义的结果。
- 参数:
rating_true (pandas.DataFrame) – 真实 DataFrame
rating_pred (pandas.DataFrame) – 预测 DataFrame
col_user (str) – 用户列名
col_item (str) – 项目列名
col_prediction (str) – 预测列名
relevancy_method (str) – 确定相关性的方法 [‘top_k’, ‘by_threshold’, None]。None 表示直接提供 top k 项目,无需计算相关性操作。
k (int) – 每个用户的 top k 项目数量
threshold (float) – 每个用户的 top 项目阈值(可选)
- 返回:
k 处的召回率(最小=0,最大=1)。即使 rating_true 中用户的项目少于 k 个,最大值也是 1。
- 返回类型:
float
- recommenders.evaluation.python_evaluation.recall_at_k(rating_true, rating_pred, col_user='userID', col_item='itemID', col_prediction='prediction', relevancy_method='top_k', k=10, threshold=10, **_)[source]#
K 处的召回率 (Recall at K)。
- 参数:
rating_true (pandas.DataFrame) – 真实 DataFrame
rating_pred (pandas.DataFrame) – 预测 DataFrame
col_user (str) – 用户列名
col_item (str) – 项目列名
col_prediction (str) – 预测列名
relevancy_method (str) – 确定相关性的方法 [‘top_k’, ‘by_threshold’, None]。None 表示直接提供 top k 项目,无需计算相关性操作。
k (int) – 每个用户的 top k 项目数量
threshold (float) – 每个用户的 top 项目阈值(可选)
- 返回:
k 处的召回率(最小=0,最大=1)。即使 rating_true 中用户的项目少于 k 个,最大值也是 1。
- 返回类型:
float
- recommenders.evaluation.python_evaluation.rmse(rating_true, rating_pred, col_user='userID', col_item='itemID', col_rating='rating', col_prediction='prediction')[source]#
计算均方根误差 (Root Mean Squared Error)
- 参数:
rating_true (pandas.DataFrame) – 真实数据。不应存在重复的 (userID, itemID) 对
rating_pred (pandas.DataFrame) – 预测数据。不应存在重复的 (userID, itemID) 对
col_user (str) – 用户列名
col_item (str) – 项目列名
col_rating (str) – 评分列名
col_prediction (str) – 预测列名
- 返回:
均方根误差
- 返回类型:
float
- recommenders.evaluation.python_evaluation.rsquared(rating_true, rating_pred, col_user='userID', col_item='itemID', col_rating='rating', col_prediction='prediction')[source]#
计算 R 平方
- 参数:
rating_true (pandas.DataFrame) – 真实数据。不应存在重复的 (userID, itemID) 对
rating_pred (pandas.DataFrame) – 预测数据。不应存在重复的 (userID, itemID) 对
col_user (str) – 用户列名
col_item (str) – 项目列名
col_rating (str) – 评分列名
col_prediction (str) – 预测列名
- 返回:
R 平方(最小=0,最大=1)。
- 返回类型:
float
- recommenders.evaluation.python_evaluation.serendipity(train_df, reco_df, item_feature_df=None, item_sim_measure='item_cooccurrence_count', col_item_features='features', col_user='userID', col_item='itemID', col_sim='sim', col_relevance=None)[source]#
计算所有用户推荐的平均意外性 (serendipity)。
- 参数:
train_df (pandas.DataFrame) – 包含用户及其交互项目的历史数据集;包含 col_user, col_item。假定不包含任何重复行。
reco_df (pandas.DataFrame) – 推荐系统的预测输出,包含 col_user, col_item, col_relevance(可选)。假定不包含任何重复的用户-项目对。
item_feature_df (pandas.DataFrame) –(可选)仅当 item_sim_measure=’item_feature_vector’ 时需要。它包含两列:col_item 和 features(一个特征向量)。
item_sim_measure (str) –(可选)此列指示使用哪种项目相似度度量。可用度量包括 item_cooccurrence_count(默认选择)和 item_feature_vector。
col_item_features (str) – 项目特征列名。
col_user (str) – 用户 ID 列名。
col_item (str) – 项目 ID 列名。
col_sim (str) – 此列指示项目相似度的列名。
col_relevance (str) – 此列指示推荐的项目是否实际与用户相关。
- 返回:
意外性。
- 返回类型:
float
- recommenders.evaluation.python_evaluation.user_diversity(train_df, reco_df, item_feature_df=None, item_sim_measure='item_cooccurrence_count', col_item_features='features', col_user='userID', col_item='itemID', col_sim='sim', col_relevance=None)[source]#
计算每个用户推荐的平均多样性。该指标定义基于以下参考文献中的公式 (3)
- 引用:
Y.C. Zhang, D.Ó. Séaghdha, D. Quercia and T. Jambor, Auralist: introducing serendipity into music recommendation, WSDM 2012
- 参数:
train_df (pandas.DataFrame) – 包含用户及其交互项目的历史数据集;包含 col_user, col_item。假定不包含任何重复行。
reco_df (pandas.DataFrame) – 推荐系统的预测输出,包含 col_user, col_item, col_relevance(可选)。假定不包含任何重复的用户-项目对。
item_feature_df (pandas.DataFrame) –(可选)仅当 item_sim_measure=’item_feature_vector’ 时需要。它包含两列:col_item 和 features(一个特征向量)。
item_sim_measure (str) –(可选)此列指示使用哪种项目相似度度量。可用度量包括 item_cooccurrence_count(默认选择)和 item_feature_vector。
col_item_features (str) – 项目特征列名。
col_user (str) – 用户 ID 列名。
col_item (str) – 项目 ID 列名。
col_sim (str) – 此列指示项目相似度的列名。
col_relevance (str) – 此列指示推荐的项目是否实际与用户相关。
- 返回:
一个包含以下列的 dataframe:col_user, user_diversity。
- 返回类型:
pandas.DataFrame
- recommenders.evaluation.python_evaluation.user_item_serendipity(train_df, reco_df, item_feature_df=None, item_sim_measure='item_cooccurrence_count', col_item_features='features', col_user='userID', col_item='itemID', col_sim='sim', col_relevance=None)[source]#
计算每个用户推荐中每个项目的意外性。该指标定义基于以下参考文献
- 引用:
Y.C. Zhang, D.Ó. Séaghdha, D. Quercia and T. Jambor, Auralist: introducing serendipity into music recommendation, WSDM 2012
Eugene Yan, Serendipity: Accuracy’s unpopular best friend in Recommender Systems, eugeneyan.com, April 2020
- 参数:
train_df (pandas.DataFrame) – 包含用户及其交互项目的历史数据集;包含 col_user, col_item。假定不包含任何重复行。
reco_df (pandas.DataFrame) – 推荐系统的预测输出,包含 col_user, col_item, col_relevance(可选)。假定不包含任何重复的用户-项目对。
item_feature_df (pandas.DataFrame) –(可选)仅当 item_sim_measure=’item_feature_vector’ 时需要。它包含两列:col_item 和 features(一个特征向量)。
item_sim_measure (str) –(可选)此列指示使用哪种项目相似度度量。可用度量包括 item_cooccurrence_count(默认选择)和 item_feature_vector。
col_item_features (str) – 项目特征列名。
col_user (str) – 用户 ID 列名。
col_item (str) – 项目 ID 列名。
col_sim (str) – 此列指示项目相似度的列名。
col_relevance (str) – 此列指示推荐的项目是否实际与用户相关。
- 返回:
一个包含以下列的 dataframe:col_user, col_item, user_item_serendipity。
- 返回类型:
pandas.DataFrame
- recommenders.evaluation.python_evaluation.user_serendipity(train_df, reco_df, item_feature_df=None, item_sim_measure='item_cooccurrence_count', col_item_features='features', col_user='userID', col_item='itemID', col_sim='sim', col_relevance=None)[source]#
计算每个用户推荐的平均意外性。
- 参数:
train_df (pandas.DataFrame) – 包含用户及其交互项目的历史数据集;包含 col_user, col_item。假定不包含任何重复行。
reco_df (pandas.DataFrame) – 推荐系统的预测输出,包含 col_user, col_item, col_relevance(可选)。假定不包含任何重复的用户-项目对。
item_feature_df (pandas.DataFrame) –(可选)仅当 item_sim_measure=’item_feature_vector’ 时需要。它包含两列:col_item 和 features(一个特征向量)。
item_sim_measure (str) –(可选)此列指示使用哪种项目相似度度量。可用度量包括 item_cooccurrence_count(默认选择)和 item_feature_vector。
col_item_features (str) – 项目特征列名。
col_user (str) – 用户 ID 列名。
col_item (str) – 项目 ID 列名。
col_sim (str) – 此列指示项目相似度的列名。
col_relevance (str) – 此列指示推荐的项目是否实际与用户相关。
- 返回:
一个包含以下列的 dataframe:col_user, user_serendipity。
- 返回类型:
pandas.DataFrame
PySpark 评估#
- class recommenders.evaluation.spark_evaluation.SparkDiversityEvaluation(train_df, reco_df, item_feature_df=None, item_sim_measure='item_cooccurrence_count', col_user='userID', col_item='itemID', col_relevance=None)[source]#
Spark 多样性、覆盖率、新颖性、意外性评估器
- __init__(train_df, reco_df, item_feature_df=None, item_sim_measure='item_cooccurrence_count', col_user='userID', col_item='itemID', col_relevance=None)[source]#
初始化方法。
这是 Spark 版本的多样性指标评估器。此类的方法计算以下多样性指标
- 覆盖率 - 包括两个指标
catalog_coverage,它衡量从项目目录中获得推荐的项目比例;
distributional_coverage,它衡量向所有用户推荐不同项目的分布不均程度。
新颖性 - 更具新颖性的项目表示它不太受欢迎,即它被推荐的频率较低。
多样性 - 被推荐项目之间的不同程度。
- 意外性 - 推荐给用户的“不寻常”或“惊喜”。当使用 'col_relevance' 时,
它表示推荐给用户的“愉快的惊喜”程度。
该指标的定义/公式基于以下参考文献,并经过修改
- 引用:
G. Shani and A. Gunawardana, Evaluating Recommendation Systems, Recommender Systems Handbook pp. 257-297, 2010.
Y.C. Zhang, D.Ó. Séaghdha, D. Quercia and T. Jambor, Auralist: introducing serendipity into music recommendation, WSDM 2012
P. Castells, S. Vargas, and J. Wang, Novelty and diversity metrics for recommender systems: choice, discovery and relevance, ECIR 2011
Eugene Yan, Serendipity: Accuracy’s unpopular best friend in Recommender Systems, eugeneyan.com, April 2020
- 参数:
train_df (pyspark.sql.DataFrame) – 包含用户及其交互项目的历史数据集;包含 col_user, col_item。假定不包含任何重复行。这里的交互遵循 Castells 等人的项目选择模型。
reco_df (pyspark.sql.DataFrame) – 推荐系统的预测输出,包含 col_user, col_item, col_relevance(可选)。假定不包含任何重复的用户-项目对。
item_feature_df (pyspark.sql.DataFrame) –(可选)仅当 item_sim_measure=’item_feature_vector’ 时需要。它包含两列:col_item 和 features(一个特征向量)。
item_sim_measure (str) –(可选)此列指示使用哪种项目相似度度量。可用度量包括 item_cooccurrence_count(默认选择)和 item_feature_vector。
col_user (str) – 用户 ID 列名。
col_item (str) – 项目 ID 列名。
col_relevance (str) – 可选。此列指示推荐的项目是否实际与用户相关。
- catalog_coverage()[source]#
计算所有用户推荐的目录覆盖率。该指标定义基于以下参考文献中的“目录覆盖率”定义
- 引用:
G. Shani and A. Gunawardana, Evaluating Recommendation Systems, Recommender Systems Handbook pp. 257-297, 2010.
- 返回:
目录覆盖率
- 返回类型:
float
- distributional_coverage()[source]#
计算所有用户推荐的分发覆盖率。该指标定义基于以下参考文献中的公式 (21)
- 引用:
G. Shani and A. Gunawardana, Evaluating Recommendation Systems, Recommender Systems Handbook pp. 257-297, 2010.
- 返回:
分发覆盖率
- 返回类型:
float
- historical_item_novelty()[source]#
计算每个项目的新颖性。新颖性计算为(与项目交互次数/总交互次数)的负对数。该指标的定义基于以下参考文献使用选择模型(等式 1 和 6)
- 引用:
P. Castells, S. Vargas, and J. Wang, Novelty and diversity metrics for recommender systems: choice, discovery and relevance, ECIR 2011
项目的新颖性可以相对于所有项目集合上的一组观测事件来定义。这些事件可以是用户选择(项目被随机用户“选中”)或用户发现(项目被随机用户“知道”)。上述新颖性定义反映了项目流行度的因素。高新颖性值对应于密度函数中的长尾项目,这些项目与少数用户交互过;低新颖性值对应于热门头部品项目。
- 返回:
一个包含以下列的 dataframe:col_item, item_novelty。
- 返回类型:
pyspark.sql.dataframe.DataFrame
- novelty()[source]#
计算推荐项目列表中的平均新颖性(这假设推荐列表已经计算完成)。遵循以下参考文献第 5 节的内容
- 引用:
P. Castells, S. Vargas, and J. Wang, Novelty and diversity metrics for recommender systems: choice, discovery and relevance, ECIR 2011
- 返回:
一个包含以下列的 dataframe:novelty。
- 返回类型:
pyspark.sql.dataframe.DataFrame
- user_diversity()[source]#
计算每个用户推荐的平均多样性。该指标定义基于以下参考文献中的公式 (3)
- 引用:
Y.C. Zhang, D.Ó. Séaghdha, D. Quercia and T. Jambor, Auralist: introducing serendipity into music recommendation, WSDM 2012
- 返回:
一个包含以下列的 dataframe:col_user, user_diversity。
- 返回类型:
pyspark.sql.dataframe.DataFrame
- user_item_serendipity()[source]#
计算每个用户推荐中每个项目的意外性。该指标定义基于以下参考文献
- 引用:
Y.C. Zhang, D.Ó. Séaghdha, D. Quercia and T. Jambor, Auralist: introducing serendipity into music recommendation, WSDM 2012
Eugene Yan, Serendipity: Accuracy’s unpopular best friend in Recommender Systems, eugeneyan.com, April 2020
- 返回:
一个包含以下列的 dataframe:col_user, col_item, user_item_serendipity。
- 返回类型:
pyspark.sql.dataframe.DataFrame
- class recommenders.evaluation.spark_evaluation.SparkRankingEvaluation(rating_true, rating_pred, k=10, relevancy_method='top_k', col_user='userID', col_item='itemID', col_rating='rating', col_prediction='prediction', threshold=10)[source]#
Spark 排序评估器
- __init__(rating_true, rating_pred, k=10, relevancy_method='top_k', col_user='userID', col_item='itemID', col_rating='rating', col_prediction='prediction', threshold=10)[source]#
初始化。这是 Spark 版本的排序指标评估器。此类的方法计算排序指标,例如 precision@k、recall@k、ndcg@k 和平均精度。
precision@k、ndcg@k 和平均精度的实现参考了 Spark MLlib,可在此链接找到。
- 参数:
rating_true (pyspark.sql.DataFrame) – 真实评分数据的 DataFrame(格式为 customerID-itemID-rating 元组)。
rating_pred (pyspark.sql.DataFrame) – 预测评分数据的 DataFrame(格式为 customerID-itemID-rating 元组)。
col_user (str) – 用户列名。
col_item (str) – 项目列名。
col_rating (str) – 评分列名。
col_prediction (str) – 预测列名。
k (int) – 推荐给每个用户的项目数量。
relevancy_method (str) – 确定相关项目的方法。可能的值有 “top_k”、“by_time_stamp” 和 “by_threshold”。
threshold (float) – 确定相关推荐项目的阈值。这适用于预测评分遵循已知分布的情况。注意:此选项仅在将 relevancy_method 设置为 “by_threshold” 时激活。
- map_at_k()[source]#
获取 k 处的平均精度 (mean average precision at k)。
注意
更多详情请参阅 meanAveragePrecision PySpark 文档。
- 返回:
k 处的 MAP(最小=0,最大=1)。
- 返回类型:
float
- ndcg_at_k()[source]#
获取归一化折损累积增益 (Normalized Discounted Cumulative Gain, NDCG)
注意
更多详情请参阅 ndcgAt PySpark 文档。
- 返回:
k 处的 nDCG(最小=0,最大=1)。
- 返回类型:
float
- precision_at_k()[source]#
获取 precision@k。
注意
更多详情请参阅 precisionAt PySpark 文档。
- 返回:
k 处的精度(最小=0,最大=1)
- 返回类型:
float
- recall_at_k()[source]#
获取 recall@K。
注意
更多详情请参阅 recallAt PySpark 文档。
- 返回:
k 处的召回率(最小=0,最大=1)。
- 返回类型:
float
- class recommenders.evaluation.spark_evaluation.SparkRatingEvaluation(rating_true, rating_pred, col_user='userID', col_item='itemID', col_rating='rating', col_prediction='prediction')[source]#
Spark 评分评估器
- __init__(rating_true, rating_pred, col_user='userID', col_item='itemID', col_rating='rating', col_prediction='prediction')[source]#
初始化方法。
这是评分指标评估器的 Spark 版本。此类的方法计算评分指标,例如均方根误差、平均绝对误差、R 方和解释方差。
- 参数:
rating_true (pyspark.sql.DataFrame) – 真实标签。
rating_pred (pyspark.sql.DataFrame) – 预测标签。
col_user (str) – 用户列名。
col_item (str) – 项目列名。
col_rating (str) – 评分列名。
col_prediction (str) – 预测列名。