Можно ли получить важность признаков для каждой предсказанной строки?

Вопрос или проблема

Я работаю над анализом кредитных рисков. Я хочу предсказать риск каждой компании, развивающей долг с вымышленной компанией. Я получил важность признаков от модели, но я хочу узнать, возможно ли определить, какие индикаторы влияют на риск, найденный для каждой клиентской компании.

Например, клиентская компания X имеет риск 70%, и этот риск связан с переменными город, возраст и количество сотрудников. Другая клиентская компания Y может иметь риск 80%, и риск связан с переменными город, услуги и средняя зарплата.

Я провожу простой первоначальный анализ с помощью следующих шагов, где модель обучается на 20 индикаторах компаний, которые уже понесли долг (классификация 1) и таком же количестве других компаний, которые не понесли долг (классификация 0). Модель настроена, и затем делаются прогнозы для новых компаний без классификации.

#Определение модели
rf_classifier = RandomForestClassifier(n_estimators=100, random_state=42)

#Обучение модели с использованием тренировочных данных
rf_classifier.fit(X, y)

#Прогнозирование с использованием данных активов
y_pred = rf_classifier.predict_proba(df_companies.iloc[:, 71:])
Включаем данные в набор данных
df_companies['Risk_0'] = y_pred[:, 0] # Вероятность принадлежать к классу 0: долг не понесен df_companies['Risk_1'] = y_pred[:, 1] # Вероятность принадлежать к классу 1: долг понесен

Ответ или решение

Да, возможно получить важность признаков для каждой предсказанной строки. Для этого существует несколько методов, позволяющих интерпретировать модель и выявить, какие именно признаки влияют на предсказания для отдельных клиентов. Наиболее распространённые подходы включают методы, такие как LIME (Local Interpretable Model-agnostic Explanations) и SHAP (SHapley Additive exPlanations).

1. Использование LIME

LIME позволяет оценить, какие признаки были важны для конкретного предсказания. Этот метод работает, создавая локальную модель вокруг предсказанного объекта и используя её для объяснения, как каждая переменная влияет на результат.

Пример использования LIME в вашем случае:

import lime
import lime.lime_tabular

# Инициализируем LIME
explainer = lime.lime_tabular.LimeTabularExplainer(training_data=X.values, feature_names=X.columns, class_names=['No Debt', 'Debt'], mode='classification')

# Объяснение для конкретного клиента (например, индекс 0)
i = 0
exp = explainer.explain_instance(df_companies.iloc[i, 71:].values, rf_classifier.predict_proba)
exp.show_in_notebook(show_table=True)

Этот код создаст объяснение для первого клиента, покажет, какие признаки положительно или отрицательно влияют на риск.

2. Использование SHAP

SHAP – ещё один мощный инструмент для объяснения предсказаний модели. Этот метод основан на теории игр и предоставляет значения Шепли для каждого признака, объясняя вклад каждого из них в предсказание.

Вот как вы можете использовать SHAP в вашем случае:

import shap

# Создаем объект SHAP Explainer
explainer = shap.TreeExplainer(rf_classifier)

# Получаем значения SHAP для всех прогнозов
shap_values = explainer.shap_values(df_companies.iloc[:, 71:])

# Визуализация значений SHAP для конкретного клиента
shap.initjs()
shap.force_plot(explainer.expected_value[1], shap_values[1][i], df_companies.iloc[i, 71:])

Этот код создаст визуализацию, показывающую, какие признаки повлияли на предсказание для клиента с индексом i.

Итог

Как LIME, так и SHAP предоставляют мощные методы для оценки важности признаков на уровне отдельных предсказаний. Выбор метода зависит от ваших предпочтений и требований к интерпретируемости. Важно помнить, что объяснения предсказаний моделей являются ключевым аспектом в таких областях, как кредитный риск, и их использование позволяет лучше понимать, как и почему принимаются решения.

Оцените материал
Добавить комментарий

Капча загружается...