Я пытаюсь предоставить графики принятия решения для небольшого подмножества прогнозов, но результаты, полученные с помощью shap, отличаются от того, что я получаю, когда просто использую модель для прогнозирования даже при использовании link = 'logit' в вызове,Результат каждого графика решения, который я пытаюсь создать, должен быть больше ожидаемого значения из-за подмножества, которое я пытаюсь построить. Однако каждый полученный график имеет прогнозируемое значение ниже ожидаемого.
У меня есть две модели в минимальном ансамбле, поэтому я использую цикл for, чтобы определить, для какой модели создать график. У меня нет проблем с созданием правильных графиков для модели RandomForestClassifier, но проблема возникает для модели XGB.
rf_explainer = shap.TreeExplainer(RF_model)
xgb_explainer = shap.TreeExplainer(XGB_model)
for i in range(flagged.shape[0]):
if flagged_preds.RF_Score[i] == flagged_preds.Ensemble_Score[i]:
idx = flagged.index[i]
idxstr = idx[1].astype('str') + ' -- ' + idx[2].date().strftime('%Y-%m-%d') + ' -- ' + idx[0].astype('str')
shap_value = rf_explainer.shap_values(flagged.iloc[i,:])
shap.decision_plot(rf_explainer.expected_value[1], shap_value[1], show=False)
plt.savefig(f'//PathToFolder/{idxstr} -- RF.jpg', format = 'jpg', bbox_inches = 'tight', facecolor = 'white')
if flagged_preds.XGB_Score[i] == flagged_preds.Ensemble_Score[i]:
idx = flagged.index[i]
idxstr = idx[1].astype('str') + ' -- ' + idx[2].date().strftime('%Y-%m-%d') + ' -- ' + idx[0].astype('str')
shap_value = xgb_explainer.shap_values(flagged.iloc[i,:])
shap.decision_plot(xgb_explainer.expected_value, shap_value, link = 'logit', show=False)
plt.savefig(f'//PathToFolder/{idxstr} -- XGB.jpg', format = 'jpg', bbox_inches = 'tight', facecolor = 'white')
plt.close()
Как уже упоминалось ранее, при подсчете очков каждое наблюдение (из тех, что меня интересуют) должно иметь оценку> 0,5, но это не то, что я вижу на своих графиках. Вот пример:
Этот график показывает результат около .1, но при оценке этого наблюдения с использованием предиката_пробы я получаю значение .608
Я не могу предоставить данные из-за деликатного характера данных, и я не уверен, что является основной проблемой.
Любая обратная связь будет приветствоваться, спасибо.
Соответствующие пункты замораживания пунктов:
Python 3.7.3
matplotlib== 3.0.3
shap == 0.30.1
xgboost == 0.90