Найти в Дзене
ЦифроПроф

Матрица ошибок

Фото автора
Фото автора

TP, FP, TN, FN собираются в одну таблицу — матрицу ошибок, или матрицу неточностей. По главной диагонали (от верхнего левого угла) выстроены правильные прогнозы:TN в левом верхнем углу;
TP в правом нижнем углу.
Вне главной диагонали — ошибочные варианты:
FP в правом верхнем углу;
FN в левом нижнем углу.

Рассчитаем матрицу ошибок функцией confusion_matrix().

import pandas as pd
from sklearn.metrics import confusion_matrix

target = pd.Series([1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1])
predictions = pd.Series([1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1])

print(confusion_matrix(target, predictions))

Построим матрицу ошибок для решающего дерева.

import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import confusion_matrix
from sklearn.model_selection import train_test_split

data = pd.read_csv('/datasets/travel_insurance_preprocessed.csv')

target = data['Claim']
features = data.drop('Claim', axis=1)
features_train, features_valid, target_train, target_valid = train_test_split(
features, target, test_size=0.25, random_state=12345)

model = DecisionTreeClassifier(random_state=12345)
model.fit(features_train, target_train)
predicted_valid = model.predict(features_valid)

print(confusion_matrix(target_valid, predicted_valid))

Матрица ошибок поможет построить новые метрики. Recall - полнота, выявляет, какую долю положительных среди всех ответов выделила модель.

Рассмотрим на примере. Применим функцию, которая отвечает за вычисление полноты.

import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split

from sklearn.metrics import recall_score

data = pd.read_csv('/datasets/travel_insurance_preprocessed.csv')

target = data['Claim']
features = data.drop('Claim', axis=1)
features_train, features_valid, target_train, target_valid = train_test_split(
features, target, test_size=0.25, random_state=12345)

model = DecisionTreeClassifier(random_state=12345)
model.fit(features_train, target_train)
predicted_valid = model.predict(features_valid)

recall_score(target_valid, predicted_valid)
print(recall_score(target_valid, predicted_valid))

Ещё одна метрика для оценки качества прогноза целевого класса — точность precision. Применим функцию, которая отвечает за вычисление точности.

import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split

from sklearn.metrics import precision_score

data = pd.read_csv('/datasets/travel_insurance_preprocessed.csv')

target = data['Claim']
features = data.drop('Claim', axis=1)
features_train, features_valid, target_train, target_valid = train_test_split(
features, target, test_size=0.25, random_state=12345)

model = DecisionTreeClassifier(random_state=12345)
model.fit(features_train, target_train)
predicted_valid = model.predict(features_valid)

print(precision_score(target_valid, predicted_valid))