Во-первых, я использовал модель LightGBM, соответствующую моим данным. Что-то вроде
import shap
import lightgbm as lgb
params = {'object':'binary,
...}
gbm = lgb.train(params, lgb_train, num_boost_round=300)
e = shap.TreeExplainer(gbm)
shap_values = e.shap_values(X)
shap.summary_plot(shap_values[0][:, interested_feature], X[interested_feature])
Поскольку это проблема двоичной классификации. Shap_values состоит из двух частей. Я предполагаю, что один из них относится к классу 0, а другой — к классу 1. Если я хочу узнать вклад одной функции. Мне нужно построить две фигуры, подобные приведенным ниже.
Для класса 0
[img]https: //i.sstatic.net/F08oO.png[/img]
Для класса 1
[img]https://i .sstatic.net/4O9zV.png[/img]
Но как мне улучшить визуализацию? Результаты не могут помочь мне понять, «увеличивает ли cold_days вероятность того, что выходные данные станут классом 1 или классом 0?»
С тем же набором данных, если я использую ИНС, вывод примерно такой. Я думаю, что результат Шепли ясно говорит мне, что «холодные_дни» положительно увеличивают вероятность того, что результат станет классом 1.

Я чувствую, что с выводом LightGBM что-то не так, но я не знаю, как это исправить. Как я могу получить более четкую визуализацию, аналогичную модели ИНС?
#Edit
Я подозреваю, что каким-то образом ошибочно использовал LightGBM, чтобы получить странный результат. Вот исходный код
import lightgbm as lgb
import shap
lgb_train = lgb.Dataset(x_train, y_train, free_raw_data=False)
lgb_eval = lgb.Dataset(x_val, y_val, free_raw_data=False)
params = {
'boosting_type': 'gbdt',
'objective': 'binary',
'metric': 'binary_logloss',
'num_leaves': 70,
'learning_rate': 0.005,
'feature_fraction': 0.7,
'bagging_fraction': 0.7,
'bagging_freq': 10,
'verbose': 0,
'min_data_in_leaf': 30,
'max_bin': 128,
'max_depth': 12,
'early_stopping_round': 20,
'min_split_gain': 0.096,
'min_child_weight': 6,
}
gbm = lgb.train(params,
lgb_train,
num_boost_round=300,
valid_sets=lgb_eval,
)
e = shap.TreeExplainer(gbm)
shap_values = e.shap_values(X)
shap.summary_plot(shap_values[0][:, interested_feature], X[interested_feature])
Подробнее здесь: https://stackoverflow.com/questions/660 ... on-problem