Собесов

Сценарий ML: Cohen's kappa для multiclass

ML / Data ScienceМетрики и оценкаСредняяMiddle

Условие

Multi-class классификатор: 5 классов, 60% accuracy. Это много или мало? Какую метрику использовать?

Решение

Подход

Accuracy 60% сам по себе не информативен — зависит от baseline (a) доли majority class, (b) baseline random.

Cohen's kappa:

κ = (p_o − p_e) / (1 − p_e)

p_o — observed agreement (accuracy), p_e — expected agreement под случайностью.

  • κ = 1: идеально.
  • κ = 0: не лучше случайности.
  • κ < 0: хуже случайности (есть!).

Интерпретация (Landis-Koch):

κ Согласие
0.81–1.00 almost perfect
0.61–0.80 substantial
0.41–0.60 moderate
0.21–0.40 fair
0.00–0.20 slight

Реализация

from sklearn.metrics import cohen_kappa_score, confusion_matrix
import numpy as np
 
# Простой случай
kappa = cohen_kappa_score(y_true, y_pred)
 
# Quadratic weighted kappa (для ordinal классов)
kappa_q = cohen_kappa_score(y_true, y_pred, weights='quadratic')

p_e считается как сумма произведений marginal распределений:

def kappa_manual(y_true, y_pred, n_classes):
    cm = confusion_matrix(y_true, y_pred)
    n = cm.sum()
    p_o = np.trace(cm) / n
    p_e = sum((cm[i].sum()/n) * (cm[:,i].sum()/n) for i in range(n_classes))
    return (p_o - p_e) / (1 - p_e)

Quadratic weighted kappa

Для ordinal классификации (например, оценки 1-5): ошибка «4 vs 5» легче, чем «1 vs 5». Веса:

w_{ij} = ((i − j) / (K − 1))²

Используется в Kaggle (Diabetic Retinopathy, Asthma).

Multi-class альтернативы

  • Macro-F1: среднее F1 по классам, равный вес каждому.
  • Weighted-F1: взвешенное по поддержке.
  • MCC multiclass: обобщение MCC.
  • Balanced accuracy: среднее recall по классам.

Подводные камни

  1. На сильно imbalanced (90% majority) accuracy 90% = baseline. Kappa = 0. Используйте kappa или balanced accuracy.
  2. Kappa чувствителен к prevalence — на двух датасетах с разным class balance не сравним напрямую.
  3. Weighted kappa требует ordinal классов; на nominal не имеет смысла.
  4. Cohen's vs Fleiss's kappa: Cohen на 2 разметчика (или предсказание vs label), Fleiss — на много.
  5. Kappa может быть отрицательным — модель систематически предсказывает не то.

Эталонный ответ

Cohen's κ = (p_o − p_e)/(1 − p_e) корректирует accuracy на случайное согласие. >0.6 — хорошо. Для ordinal классов — quadratic weighted kappa. На imbalanced лучше чем raw accuracy. Не сравним между датасетами с разным prevalence.

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти