如何理解Quadratic Weighted Kappa?

Motivation

假定我们现在有 N N N个作文样例,以及它们对应的人类评分和GPT评分。评分一共有 C C C个互斥类别,分别是{0,1,2,3}。现在我们要衡量人类评分和GPT评分的一致性。

一个很直观的想法是,画出混淆矩阵,然后将对角线上的值汇总,除以总的样本数:
C o n s i s t e n c y h u m a n − G P T = N 人类评分 = G P T 评分 N 样本总数 Consistency_{human-GPT} = \frac{N_{人类评分=GPT评分}}{N_{样本总数}} Consistencyhuman−GPT=N样本总数N人类评分=GPT评分

这种计算方法没有考虑随机一致性。由于在分类任务中,有时两名评分者可能仅仅因为偶然而达成一致。下面引入的Cohen's kappa指标,不仅仅考虑了观察到的一致性 ,而是通过考虑评分者随机达成一致的概率来调整这种一致性。

Cohen's kappa:最基本的kappa统计

该指标用于衡量评分者之间的一致性。其值位于0和1之间,值越大说明一致性越高。下表解释了不同区间值所代表的一致性程度[1]:

有如下定义:
κ = p o − p e 1 − p e = 1 − 1 − p o 1 − p e \kappa = \frac{p_o - p_e}{1 - p_e} =1-\frac{1 - p_o}{1 - p_e} κ=1−pepo−pe=1−1−pe1−po

其中,
p o p_o po: observed agreement,观察到的评分者间的一致性
p e p_e pe: chance agreement,假定的基于随机选择的评分者间一致性

可以看到,相比于原来的直接使用 p o p_o po来计算一致性,这里分子分母同时剔除了"随机一致性" p e p_e pe。

随机一致性的计算如下:
P 人类评分 = 0 = N 人类评分 = 0 N 样本总数 P_{人类评分=0} = \frac{N_{人类评分=0}}{N_{样本总数}} P人类评分=0=N样本总数N人类评分=0
P G P T 评分 = 0 = N G P T 评分 = 0 N 样本总数 P_{GPT评分=0} = \frac{N_{GPT评分=0}}{N_{样本总数}} PGPT评分=0=N样本总数NGPT评分=0
p e 人类评分 = G P T 评分 = 0 = P 人类评分 = 0 ∗ P G P T 评分 = 0 p_{e_{人类评分=GPT评分=0}} = P_{人类评分=0} * P_{GPT评分=0} pe人类评分=GPT评分=0=P人类评分=0∗PGPT评分=0

得到最终的随机一致性为:
p e = ∑ i C ( P 人类评分 = i ∗ P G P T 评分 = i ) p_e = \sum_i^C{(P_{人类评分=i} * P_{GPT评分=i})} pe=i∑C(P人类评分=i∗PGPT评分=i)

Weighted Kappa

Weighted kappa是Cohen's kappa的扩展,特别适用于有序分类的情境。通过为每一对分类分配一个权重,可以根据不一致的严重性给予不同的惩罚。比如,评分0和3之间的不一致,大于1和2之间的不一致,那么应当给前者更重的惩罚。Quadratic Weighted Kappa,应用了平方权重,通常为分类间的距离的平方:
w i , j = ( i − j ) 2 ( C − 1 ) 2 w_{i,j} = \frac{(i-j)^2}{(C-1)^2} wi,j=(C−1)2(i−j)2

这里使用了归一化权重,分母用了 C − 1 C-1 C−1,是因为两个评分 i i i和 j j j的差异的最大值是 C − 1 C-1 C−1。如此,确保权重的范围在0到1之间。
κ = 1 − ∑ i , j w i , j O i , j ∑ i , j w i , j E i , j \kappa = 1- \frac{\sum_{i,j}{w_{i,j}O_{i,j}}}{\sum_{i,j}{w_{i,j}E_{i,j}}} κ=1−∑i,jwi,jEi,j∑i,jwi,jOi,j

(未完待续)

1\] 图片源自https://www.statology.org/cohens-kappa-statistic/

相关推荐
老胖闲聊1 小时前
Python Copilot【代码辅助工具】 简介
开发语言·python·copilot
Blossom.1181 小时前
使用Python和Scikit-Learn实现机器学习模型调优
开发语言·人工智能·python·深度学习·目标检测·机器学习·scikit-learn
曹勖之1 小时前
基于ROS2,撰写python脚本,根据给定的舵-桨动力学模型实现动力学更新
开发语言·python·机器人·ros2
lyaihao2 小时前
使用python实现奔跑的线条效果
python·绘图
郄堃Deep Traffic3 小时前
机器学习+城市规划第十四期:利用半参数地理加权回归来实现区域带宽不同的规划任务
人工智能·机器学习·回归·城市规划
ai大师3 小时前
(附代码及图示)Multi-Query 多查询策略详解
python·langchain·中转api·apikey·中转apikey·免费apikey·claude4
GIS小天3 小时前
AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年6月7日第101弹
人工智能·算法·机器学习·彩票
小小爬虾3 小时前
关于datetime获取时间的问题
python
蓝婷儿4 小时前
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
开发语言·python·学习
小喵喵生气气5 小时前
Python60日基础学习打卡Day46
深度学习·机器学习