python如何Fleiss Kappa
目的
检验数据一致性
示例
机器学习中涉及新数据集发布的论文通常会描述数据集的构建过程,一份数据集往往由多位标注员共同完成,不同标注员对数据的理解很容易存在偏差,这极大程度上会影响数据集的一致性,从而限制算法的性能。因此在构建数据集的标注过程中,大多数构建数据集的工作都会对标注员之间的标注一致性进行评估,以保证数据集的质量。
假如有一个15个项目,7个评委,每行是一个项目的评委评分
代码
import numpy as np from statsmodels.stats.inter_rater import fleiss_kappa # 原始数据:一个15个项目,7个评委,每行是一个项目的评委评分 data = np.array([ [5,5,5,5,5,5,5], [4,4,2,4,4,3,3], [3,4,5,5,3,5,4], [2,2,2,3,3,3,3], [1,3,3,3,3,2,3], [1,1,1,2,1,2,2], [1,2,1,3,4,2,1], [1,5,3,2,2,2,5], [1,1,2,2,3,1,3], [2,2,2,2,2,2,2], [1,1,1,2,1,2,2], [1,2,1,3,4,2,1], [5,5,5,5,5,5,5], [1,1,2,2,3,1,3], [2,2,2,2,2,2,2] ]) # 获取评分类别范围(假设评分为整数,类别从最小值到最大值) categories = np.arange(data.min(), data.max() + 1) # [2, 3, 4, 5] num_categories = len(categories) # 初始化 Fleiss' kappa 格式矩阵 ratings_matrix = np.zeros((data.shape[0], num_categories), dtype=int) # 统计每个项目中每个类别的评分人数 for i, row in enumerate(data): for category in categories: ratings_matrix[i, category - categories.min()] = np.sum(row == category) # 打印整理后的矩阵 # print("整理后的数据矩阵 (Fleiss' kappa 格式):") # print(ratings_matrix) # 计算 Fleiss' kappa kappa = fleiss_kappa(ratings_matrix) # 计算额外统计量 n = np.sum(ratings_matrix, axis=1)[0] # 每个项目的评分人数(假设一致) N = ratings_matrix.shape[0] # 项目数 P = np.sum(ratings_matrix, axis=0) / (N * n) # 每个类别的总体比例 P_bar = np.sum(np.sum(ratings_matrix**2, axis=1) - n) / (N * n * (n - 1)) # 平均项目一致性 P_e = np.sum(P**2) # 预期一致性 # 计算标准误差 se_kappa = np.sqrt((P_bar * (1 - P_bar) / (N * (1 - P_e)**2))) # 计算 Z 值 z_kappa = kappa / se_kappa # 计算 p-value from scipy.stats import norm p_value = 2 * (1 - norm.cdf(np.abs(z_kappa))) # 计算 95% CI ci_lower = kappa - 1.96 * se_kappa ci_upper = kappa + 1.96 * se_kappa # 打印结果 print("\nFleiss' kappa: {:.4f}".format(kappa)) print("Standard Error: {:.4f}".format(se_kappa)) print("Z-value: {:.4f}".format(z_kappa)) print("p-value: {:.4f}".format(p_value)) print("95% CI: ({:.4f}, {:.4f})".format(ci_lower, ci_upper))
指标解释
kappa计算结果为[-1,1],但通常kappa是落在 [0,1] 间
第一种分析准则–可分为五组来表示不同级别的一致性:
0.0~0.20极低的一致性(slight)
0.21~0.40一般的一致性(fair)
0.41~0.60 中等的一致性(moderate)
0.61~0.80 高度的一致性(substantial)
0.81~1几乎完全一致(almost perfect)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验