Вопрос или проблема
Я работаю над анализом кредитных рисков. Я хочу предсказать риск каждой компании, развивающей долг с вымышленной компанией. Я получил важность признаков от модели, но я хочу узнать, возможно ли определить, какие индикаторы влияют на риск, найденный для каждой клиентской компании.
Например, клиентская компания 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 предоставляют мощные методы для оценки важности признаков на уровне отдельных предсказаний. Выбор метода зависит от ваших предпочтений и требований к интерпретируемости. Важно помнить, что объяснения предсказаний моделей являются ключевым аспектом в таких областях, как кредитный риск, и их использование позволяет лучше понимать, как и почему принимаются решения.