カッパ係数とは、分類者や機械学習モデルの判定がどの程度一致しているかを、偶然に一致する分を差し引いて測る指標です。単純な一致率は、あるクラスが大多数を占めるデータでは高く見えます。カッパ係数は、観測された一致度と、クラスの出現割合から期待される偶然の一致度を比較するため、分類の信頼性を別の角度から確認できます。
代表的なCohenのカッパ係数は、2人の評価者や2つの分類結果の一致を測る方法です。順序のある評価には重み付きカッパ、3人以上の評価者にはFleissのカッパなど、条件に応じたバリエーションがあります。本記事では、カッパ係数の意味と計算式、単純一致率との違い、解釈の注意点、機械学習の分類評価やアノテーション品質管理での使い方を整理します。
カッパ係数とは?偶然の一致を除いた分類の一致度
カッパ係数(kappa coefficient)は、2つのカテゴリ判定がどれだけ一致したかを表す統計指標です。入力は、同じ対象に対する評価者Aと評価者Bのラベル、または正解ラベルとモデル予測の組み合わせです。観測された一致率を P_o、各評価者が同じ分布で独立に判定したと仮定した期待一致率を P_e とすると、Cohenのカッパは次の式になります。
κ = (P_o - P_e) / (1 - P_e)分子は偶然を超えて得られた一致、分母は偶然を除いたときに残る一致の最大量に相当します。完全一致ならκは1、観測一致が期待一致と同じなら0です。期待一致率を上回らず、分布の偏りによって負になる場合もあります。したがって、カッパ係数を「一致率の百分率」と解釈してはいけません。
カッパ係数の計算方法|混同行列から観測一致と期待一致を求める
観測一致率Poを計算する
まず、混同行列の対角成分、つまり2つの判定が同じセルの数を合計し、全件数で割ります。たとえば、100件のうち80件でラベルが一致していれば、観測一致率は P_o=0.80 です。この値は通常のaccuracyと同じ形ですが、カッパでは次に偶然の一致を差し引きます。
期待一致率Peを計算する
期待一致率は、各評価者がどのクラスをどの割合で選んだかを使います。2クラスの場合、評価者Aが陽性を選ぶ割合と評価者Bが陽性を選ぶ割合を掛け、陰性の割合同士を掛けた値を足します。多クラスでも、クラスごとの周辺比率を掛けて合計します。片方がほとんどの対象を「正常」と判定する場合、偶然一致の割合が高くなり、単純一致率との差が現れます。
具体例で見る一致率との違い
100件のうち90件が陰性で、評価者AとBがともにほぼすべてを陰性と判定すると、一致率は95%になることがあります。しかし、両者の陽性判定が十分に一致していなければ、クラス分布だけで高い一致率が生まれた可能性があります。期待一致率が0.90、観測一致率が0.95なら、κは (0.95-0.90)/(1-0.90)=0.50 です。accuracyの95%だけを見る場合と評価が大きく変わります。
カッパ係数の種類|評価者数とラベルの順序で選ぶ
Cohenのカッパ|2つの判定を比較する
Cohenのカッパは、2人の評価者、または正解ラベルとモデル予測のように2つの判定系列を比較します。各対象が同じ2クラス以上のカテゴリに分類されていることが前提です。モデル評価で使うときは、正解ラベルの作り方が妥当であること、評価対象が独立していること、クラスの定義が固定されていることを確認します。
重み付きカッパ|順序尺度の離れ方を考慮する
「軽度・中等度・重度」のようにカテゴリに順序がある場合、軽度と中等度の不一致と、軽度と重度の不一致を同じ扱いにするのは不自然です。重み付きカッパでは、隣接カテゴリの不一致には小さなペナルティ、離れたカテゴリには大きなペナルティを設定します。線形重み、二乗重みなどの選択によって値が変わるため、採用した重みと理由を報告します。
Fleissのカッパ|3人以上の評価者を扱う
3人以上の評価者が同じ対象をカテゴリ分けする場合、Fleissのカッパなど複数評価者向けの指標を使います。全員のペアを作ってCohenのカッパを平均する方法とは、前提や解釈が異なります。評価者が固定の2人なのか、複数の評価者から一部が割り当てられるのかによって設計が変わるため、人数だけでなくデータ収集の構造を確認してください。
カッパ係数の解釈|数値の目安を機械的に適用しない
κの解釈として、0未満、0〜0.20、0.21〜0.40、0.41〜0.60、0.61〜0.80、0.81〜1.00のような段階的な目安が紹介されることがあります。しかし、これは普遍的な合格ラインではありません。誤りのコスト、クラスの希少性、専門家間の合意可能性、判定の難しさによって、許容できる値は変わります。研究や業務の基準を事前に定め、信頼区間も併記します。
特にκが低いときは、評価者が本当に不一致なのか、対象が偏っているのか、カテゴリ定義が曖昧なのかを分けて調べます。混同行列やクラス別再現率を確認し、どのラベル間で判断が割れているかを特定します。反対に、κが高くても少数クラスを見逃している可能性があるため、accuracyやF1、適合率・再現率を置き換えるものではありません。
カッパ係数の注意点|クラス分布と評価設計の影響
有病率やクラス割合による影響
カッパは期待一致率を計算するため、クラスの出現割合に影響されます。まれな陽性を扱うデータでは、評価者が陽性判定について高い一致を示していても、陰性の一致が支配的になり、κが低く見えることがあります。逆に、クラス割合を人工的に変えたデータでは、実運用時と値を直接比較できません。元の分布とサンプリング方法を報告してください。
評価者の偏りとバイアス
2人の評価者が同じ対象を高い割合で陽性と判定し、別の対象を陰性と判定しても、互いの判定分布が大きく違えばκは変わります。これはカッパが「一致」だけでなく「各評価者の判定分布」も評価しているためです。分析では、κ、一致率、各評価者のクラス別割合を並べ、どの前提で値が変わったのかを説明します。
サンプル数と信頼区間
対象数が少ないと、1件の判定変更でκが大きく動きます。点推定だけでなく、ブートストラップや漸近近似による信頼区間を示し、対象数とカテゴリ数を報告します。評価者を追加しただけで値が上がったのか、カテゴリ定義を見直した結果なのかも、同じ期間と同じ対象で比較しないと判断できません。
機械学習の分類評価でカッパ係数を使う方法
分類モデルでカッパを使う場合は、まず訓練データと独立した検証・テストデータで予測を作ります。正解ラベルと予測ラベルを同じ順序で並べ、クラス名の対応を固定してから計算します。確率を出力するモデルなら、しきい値を変更するとκも変わるため、業務上の判定ルールと一緒に評価します。
from sklearn.metrics import cohen_kappa_score
kappa = cohen_kappa_score(y_true, y_pred)
weighted_kappa = cohen_kappa_score(y_true, y_pred, weights="quadratic")
print(kappa, weighted_kappa)scikit-learnでは cohen_kappa_score がCohenのカッパを計算します。順序カテゴリでは weights による重み付けを検討できますが、重み付きと通常の値を混同しないよう、指標名を結果表に明記します。二値分類のモデル比較では、カッパだけでなく、混同行列、F1、PR-AUC、業務上重要なクラスの再現率も併記してください。
アノテーション品質管理での活用|一致しない理由を改善につなげる
画像、文章、音声のアノテーションでは、複数の担当者が同じサンプルを判定し、カッパ係数でガイドラインの一貫性を確認できます。値が低いときは、単に評価者を責めるのではなく、ラベルの定義、境界事例の例示、判定手順、専門用語の説明を見直します。合意形成後に同じサンプルを再評価し、改善前後の混同行列とκを比較します。
品質管理では、全件を一人で再確認するより、評価者間で重複するサンプルを計画的に抽出し、定期的にκを監視する方法が現実的です。カテゴリの出現割合が変わった場合は値が変動するため、月ごとのκだけでなく、共通の監査セットで評価します。監査セットを長期間固定すると慣れによる影響が出るため、更新方法も記録してください。
カッパ係数まとめ|一致率と混同行列を合わせて判断する
カッパ係数は、観測された一致率から偶然の一致を差し引き、2つのカテゴリ判定の一致度を測る指標です。Cohenのカッパは2つの判定系列、重み付きカッパは順序カテゴリ、Fleissのカッパは複数評価者というように、データ構造に応じて方法を選びます。
κの数値を単独で良し悪しとせず、単純一致率、クラス分布、混同行列、信頼区間、業務上の誤りコストを合わせて解釈してください。機械学習では独立した評価データを使い、アノテーションではラベル定義の改善につなげます。指標の種類、重み、サンプリング条件を明記することが、他の評価結果との比較を可能にします。
よくある質問(FAQ)
Q. カッパ係数とは何ですか?
カッパ係数とは、2つのカテゴリ判定の一致度を、クラス分布から生じる偶然の一致を差し引いて測る指標です。値は一致率とは異なる尺度で解釈します。
Q. カッパ係数が1や0の場合はどういう意味ですか?
1は完全一致を示し、0は観測された一致が期待される偶然一致と同程度であることを示します。負の値は偶然より一致が少ない状態を表します。
Q. カッパ係数と一致率(accuracy)はどちらを使うべきですか?
どちらか一方ではなく併記するのが基本です。一致率は直感的ですがクラス割合の影響を受け、カッパは偶然一致を考慮します。ただしκも分布の影響を受けるため、混同行列とクラス別指標を確認します。
Q. 順序のある評価にはどのカッパを使いますか?
軽度・中等度・重度のような順序カテゴリでは、離れた不一致を重く扱える重み付きカッパを検討します。線形か二乗かなど、重みの定義を明記してください。
Q. カッパ係数が低いときは何を見直しますか?
混同行列で不一致のカテゴリを確認し、ラベル定義、境界事例の例、評価者への手順説明、クラス分布を見直します。少数データなら信頼区間も確認し、単一の値で原因を決めないようにします。
参考資料
- scikit-learn「cohen_kappa_score」
https://scikit-learn.org/stable/modules/generated/sklearn.metrics.cohen_kappa_score.html - scikit-learn User Guide「Classification metrics」
https://scikit-learn.org/stable/modules/model_evaluation.html#classification-metrics - IBM Documentation「Cohen’s kappa」
https://www.ibm.com/docs/en/spss-statistics/latest?topic=classification-cohens-kappa
