Weighted Kappa Loss(加重カッパ損失)

weighted kappa lossとは?

Weighted Kappa Lossは、予測と実際のカテゴリの間の一致度を測定する損失関数です。これは、主に順序付けられたカテゴリカルデータでの予測の評価に使用されます。

コーエンのカッパ係数(Kappa Score)

Weighted Kappa Lossは、コーエンのカッパ係数に基づいています。カッパ係数は、偶然による一致を除外した上で、実際の観測値と予測値の一致度を評価する指標です。値は-1(完全な不一致)から1(完全な一致)の範囲で、0は偶然による一致を示します。Weighted Kappa Lossは、モデルが単に正確なクラスを予測するだけでなく、順序データの自然な順序を尊重するようにする際に特に有用です。特に、クラス間の順序が重要な場合や、誤差が大きいクラスの間違いを特に重く罰する必要がある場合に適しています。

この記事では、順序関係があるデータセットを生成してweighted kappa lossを評価してみます。

ライブラリのインポート

import pandas as pd
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, cohen_kappa_score, make_scorer

データの読み込み

url = "https://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv"
data = pd.read_csv(url, sep=';')

データセットとしてワイン品質データセット (Wine Quality Dataset)をもちいています。ワインの品質を評価するスコアが付与されています。品質スコアは0から10までの順序尺度です。

目的変数の設定

X = data.drop('quality', axis=1)
y = data['quality']

訓練データとテストデータに分割

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)

モデルの構築

model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)

予測

predictions = model.predict(X_test)

評価

正確性と加重カッパスコアを評価しています。

accuracy = accuracy_score(y_test, predictions)
kappa_score = cohen_kappa_score(y_test, predictions, weights='quadratic')

print(f"Accuracy: {accuracy}")
print(f"Weighted Kappa Score: {kappa_score}")

Accuracy: 0.67
Weighted Kappa Score: 0.5977252319664771