Day 27 : 模型解释 Shap

在经过集成式学习(ensemble learning)之後的 tree based (像是 Random Forest, XGBoost, LightGBM) 机器学习演算法,该方法通常可以提高相当不错的模型成效。但是其中的理论很难让人去参透,常常被人诟病说是一个黑盒子。 一个黑盒子是很难去判断里面做了什麽事情,我们如果要进行做决策、改良模型等等,都需要了解这个演算法到底学习到了什麽。这时候模型解释就相当重要,有一块领域 Explainable AI 就是在探讨这方面的知识。

「人非圣贤,孰能无过」,机器与人一样不是圣贤,都可能会有犯错的可能性。当发生预测错误的时候,若我们能够透过解释型 AI 告诉合理的原因,或许可为下一次改版做一些根因探讨。

「科技始终来自於人性」,我们有时候很难跟我们的需求方讲解或讨论这些演算法的深奥的原理或数学知识,也随着我们越来越倚重机器学习产出的结果,我们势必也需要能了解其中的原因,我们才可以用的安心,让大家放心(好像推广产品XDDD)。

Shap

Shap 最早来源是赛局理论,详细可以参考wiki。Shap 是将模型的预测解释分析成每个因子的贡献,计算每个特徵的 shapely value,来衡量该特徵对预测的贡献度。如此一来,我们可以详细了解每个因子的贡献程度。

图片来源自 shap 的 github 连结

Shap 是一个可以将机器学习透过视觉化方式辅助理解的 Explainable AI 套件,优点如下

  • 简单安装
    pip install shap
    
  • 视觉化呈现多元
  • 容易上手操作

实作程序码

import xgboost
import shap

classifier = xgboost.XGBClassifier().fit(X_train, y_train)

explainer = shap.Explainer(classifier)
shap_values = explainer(X_train)

单一资料解释

# waterfall
shap.plots.waterfall(shap_values[0])
# force plot
shap.force_plot(explainer.expected_value, shap_values.values[0,:], X_train.iloc[0,:])

红色代表正的贡献度、蓝色代表负的贡献度

  • 正面的影响:
    • Age: +3.3
    • Salary: +2
  • 负面的影响:
    • VIP: -0.32
    • Gender: -0.3

整体资料解释

1. Summary plot
  • 点的颜色: Feature value 的大小,越红越高、越蓝越低;
  • X 轴: shape value 的范围
shap.summary_plot(shap_values, X_train)

  • VIP 的注记对於分类很有帮助
  • Age、Salary 的大小某种程度都会影响预测值;而 Gender 并没有什麽帮助
  • 年龄越小对於预测值的贡献度越低
2. Aggregated force plot

这张图真的是 shap 一大卖点,还可以操作 x 、y 轴 切换不同的维度看资料

# 看整体资料
shap.force_plot(explainer.expected_value, shap_values.values, X_train, plot_cmap="DrDb")

其他图参考

# bar plot
shap.plots.bar(shap_values)
# scatter plot
shap.plots.scatter(shap_values[:, "Age"], color=shap_values[:,"VIP"])


小结论

希望透过 shap 解释性 AI 套件可以帮助在机器学习迷惘在黑盒子的人们,藉此大家可以更广泛地应用机器学习所带来的服务。/images/emoticon/emoticon07.gif

github 程序码

更详细可以请参考连结


<<:  [面试][人格特质]当你分享工作经验时会被问到的种种问题

>>:  予焦啦!附录:那些作业系统的巨人们与参考资料

Day 8 - Rancher 丛集管理指南 - 架设 K8s(上)

本文将於赛後同步刊登於笔者部落格 有兴趣学习更多 Kubernetes/DevOps/Linux 相...

理解网际网路协定(二):浮动 IP、固定 IP、虚拟 IP,这麽多种 IP 都是什麽?

理解了 IP 位置的组成,我们接着来看看一些常被提到的相关名词:浮动、固定及虚拟 IP 位置。 浮动...

Day 3 — 拆解 GAS 的执行

昨天我们写了第一个 GAS 程序: Hello World ,今天我们来拆解一下我们到底写了什麽东西...

Scrum 也自然吗

前言 昨天谈到敏捷的重点是其背後的精神,而 Scrum 也不例外,但为什麽 Scrum 的导入还是这...

在Excel中输入 AAAA……

当您在Excel中直接输入AAAA,依旧是4个A,而喵喵酱我在Excel表格输入则是这个样子滴: 1...