【问题标题】:Is fleiss kappa a reliable measure for interannotator agreement? The following results confuses me, are there any involved assumptions while using it?fleiss kappa 是一个可靠的注释者间协议衡量标准吗?以下结果让我感到困惑,使用它时是否有任何涉及的假设?
【发布时间】:2018-08-19 16:54:43
【问题描述】:

我有带有以下描述的注释矩阵: 3个注释器, 3类, 206个科目

数据存储在一个 numpy.ndarray 变量 z 中:

array([[ 0.,  2.,  1.],
   [ 0.,  2.,  1.],
   [ 0.,  2.,  1.],
   [ 0.,  2.,  1.],
   [ 1.,  1.,  1.],
   [ 0.,  2.,  1.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.],
   [ 0.,  3.,  0.]])

可以看出,206 个注释中有 200 个是由所有三个注释器针对相同类别的。现在实施 Fleiss Kappa:

from statsmodels.stats.inter_rater import fleiss_kappa
fleiss_kappa(z)
0.062106000466964177

尽管大多数科目 (200/206) 被标注为同一类别,但为什么分数如此之低?

【问题讨论】:

    标签: python annotations kappa


    【解决方案1】:

    我使用的是“评价者”而不是“注释者”。 请记住,这些是评分者之间一致性高于机会的衡量标准。

    弗莱斯卡帕

    对于 Fleiss kappa,您需要先聚合_raters():这会将您从作为行的主题和作为列的评价者 (主题,评价者) 到 -> 作为行的主题和作为列的类别 (主题、类别)

    from statsmodels.stats import inter_rater as irr
    agg = irr.aggregate_raters(arr) # returns a tuple (data, categories)
    agg
    

    如果每个评估者为每个主题分配一个类别,则每行值将加起来最多为评估者的数量 (3)。现在,这些列代表这里看到的类别https://en.wikipedia.org/wiki/Fleiss'_kappa#Data

    (array([[1, 1, 1, 0],   # all three raters disagree
            [1, 1, 1, 0],   # again
            [1, 1, 1, 0],   # and again
            [1, 1, 1, 0],   # and again
            [0, 3, 0, 0],   # all three raters agree on 1
            [1, 1, 1, 0],   
            [2, 0, 0, 1],   # two raters agree on 0, third picked 3
            [2, 0, 0, 1],   # perfect disagreement 
            [2, 0, 0, 1],   # for the rest of the dataset.
            [2, 0, 0, 1],  . . . ),           
     array([0, 1, 2, 3]))   # categories
    

    完美的分歧:'每次我选0,你选3'

    ...您的数据表明您有 4 个类别 [0, 1, 2, 3]

    对于前 4 个科目,每个评分者都对不同的类别进行了编码!然后对于其余的科目,评分者一和三同意类别 0,而评分者二评分为 3。 现在这对于大多数数据集来说是完全不同的,所以看到负 alpha 或 kappa 我不会感到惊讶!让我们看看...我们只需要聚合数据 agg[0 ](元组的第一部分)。

    irr.fleiss_kappa(agg[0], method='fleiss')
    

    -0.44238 ...考虑到大多数主题的分歧,这是有道理的

    克里彭多夫阿尔法

    当前的 krippendorff 实现期望评估者为行,主题为列(评估者、主题)。 所以我们需要转置原始数据。如果我们不这样做,则假设 206 位评分者对 3 个科目进行了评分,分为四个类别 [0,1,2,3],从而得出之前给出的答案 (0.98)。 Krippendorff 并不期望聚合格式!

    import numpy as np
    import krippendorff as kd 
    arrT = np.array(arr).transpose()  #returns a list of three lists, one per rater
    kd.alpha(arrT, level_of_measurement='nominal')  #assuming nominal categories
    

    -0.4400 …这是有道理的,因为它应该接近/等于 Fleiss 的 kappa。

    【讨论】:

      【解决方案2】:

      This solution 可能会为您服务。这是为您提供的代码 sn-p,它产生 kappa 分数0.98708

      import krippendorff
      
      arr = [[ 0,  2,  1],
         [ 0,  2,  1],
         [ 0,  2,  1],
         [ 0,  2,  1],
         [ 1,  1,  1],
         [ 0,  2,  1],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0],
         [ 0,  3,  0]]
      
      kappa = krippendorff.alpha(arr)
      print(kappa)
      

      它适用于 Python 3.4+,这里是您需要安装的依赖项

      pip install numpy krippendorff

      【讨论】:

        【解决方案3】:

        我还想计算 Fleiss 的 kappa 或 krippendorff。 ut,krippendorff 的值比 Fleiss 低得多,低得多,它是 0.032,而我的 fleiss 是 0.49。

        我有 3 个类别,每个类别由 3 个注释者评分。在 52% 的情况下,3 个注释者同意相同的类别,43% 的两个注释者同意一个类别,并且只有 5% 的情况下,每个注释者选择了不同的类别。是不是协议太低了,尤其是用krippendorff?

        【讨论】:

        • 这不是原始问题的答案。 StackOverflow 问题不是论坛主题。请发布个别问题。
        猜你喜欢
        • 2023-03-05
        • 2011-01-18
        • 1970-01-01
        • 1970-01-01
        • 2011-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-28
        相关资源
        最近更新 更多