寻求可衡量因果发现方法排名相似度的Python可用指标
排名相似度量化方法与Python实现
针对你验证因果发现方法基准结果的需求,以下是几种适用于对比两个排名相似度的量化指标,附Python实现代码:
核心指标选择
- 斯皮尔曼等级相关系数:衡量两个排名的单调关联程度,结果范围[-1, 1]。1表示排名完全一致,-1表示完全反向,0表示无关联,适合评估整体趋势的一致性。
- 肯德尔tau系数:基于配对样本的一致/不一致对统计,同样范围[-1,1],对小样本(比如你这里的3种方法)稳定性更好。
- 秩次差平方和:计算对应位置排名的差值平方总和,数值越小说明排名越相似,直观反映差异大小。
实现步骤与代码
首先需要根据指标的优劣方向生成排名:
- SHD、FDR:数值越小性能越好,排名1给最小的结果;
- TPR:数值越大性能越好,排名1给最大的结果。
以下代码适配你的示例数据,包含同分处理(比如你的TPR中GES和PC得分相同):
import numpy as np from scipy.stats import spearmanr, kendalltau # 论文结果(方法顺序:LiNGAM, GES, PC) paper_data = { 'shd': [35.00, 44.00, 64.00], 'tpr': [0.37, 0.70, 0.80], 'fdr': [0.32, 0.55, 0.63] } # 自己的实验结果 my_data = { 'shd': [28.00, 13.00, 16.00], 'tpr': [0.00, 0.65, 0.65], 'fdr': [1.00, 0.42, 0.56] } # 生成排名:支持同分平均排名,根据指标优劣方向调整排序 def generate_ranks(scores, higher_is_better): sorted_idx = np.argsort(scores) # 按优劣方向反转排序索引 if higher_is_better: sorted_idx = sorted_idx[::-1] ranks = np.zeros(len(scores)) # 初始分配排名 for rank, idx in enumerate(sorted_idx, 1): ranks[idx] = rank # 处理同分,替换为平均排名 for score in np.unique(scores): mask = scores == score rank_count = np.sum(mask) avg_rank = np.mean(ranks[mask]) ranks[mask] = avg_rank return ranks # 逐个指标计算相似度 for metric in ['shd', 'tpr', 'fdr']: # 确定当前指标的优劣方向 better_higher = metric == 'tpr' # 生成两个排名序列 paper_ranks = generate_ranks(paper_data[metric], better_higher) my_ranks = generate_ranks(my_data[metric], better_higher) # 计算三种相似度指标 spearman, _ = spearmanr(paper_ranks, my_ranks) kendall, _ = kendalltau(paper_ranks, my_ranks) squared_diff_sum = np.sum((paper_ranks - my_ranks)**2) # 输出结果 print(f"--- 指标:{metric} ---") print(f"论文排名:{paper_ranks.round(2)}") print(f"我的排名:{my_ranks.round(2)}") print(f"斯皮尔曼相关系数:{spearman:.4f}") print(f"肯德尔tau系数:{kendall:.4f}") print(f"秩次差平方和:{squared_diff_sum:.2f}\n")
代码说明
generate_ranks函数自动处理同分情况,给得分相同的方法分配平均排名(比如你的TPR中GES和PC都会得到1.5名);- 针对不同指标的性能逻辑(越大越好/越小越好)自动调整排序方向,确保排名生成准确;
- 输出的三种指标可以互补使用:系数类指标看趋势一致性,平方和看具体差异大小。
额外提示
- 小样本场景下优先参考肯德尔tau系数;
- 如果需要综合多个指标的相似度,可以对单个指标的相似度结果加权平均;
- 依赖的scipy库可通过
pip install scipy安装。
内容的提问来源于stack exchange,提问作者Jules_Soria
相关产品推荐
相关产品推荐

