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)

作者:耀扬原文地址:https://www.cnblogs.com/duoba/p/18591237

%s 个评论

要回复文章请先登录注册