admin管理员组

文章数量:1609966

可解释性机器学习

背景

写这篇文章的背景就是可解释性机器学习在中文领域资料非常少,有一些零散的资料也不成系统,笔者根据这两个月的整理现阶段的一些可解释性的资料,可常用的代码和库,希望为大家尽一份力。文章分成,原理讲解,论文解析,代码整理,衡量特征重要性的度量四个部分。

Model-Agnostic Methods

找到所有模型都通用的检验方法,也成为post hoc interpretation。

模型解释分为两类,一类是全局的解释性(global),衡量特征在模型中起的整体作用,另一类是局部的解释性(local),目的是对一个特定的预测条目,衡量该条样本预测分高的原因。

两类解释具有较大区别,以线性模型的解释为例,对于进行了归一化处理后的特征而言,最终的模型权重绝对值即为全局的特征重要性,因为权值越大该特征对最终分值影响越大,而对于一个取得高分的具体预测实例而言,可能在全局最重要的特征上,其分值较小,在该条样本的得分计算上并无多大贡献,因此对于线性模型单条样本的局部解释性,会使用权值乘以特征值来作为该维特征的贡献度,从而得到各个特征间的重要性排序。

Local的解释性可以通过两种方式来实现:

  • 通过在一个instance的领域取点,通过简单的可解释性模型来学习complex模型的这个特定instance周边的关系。
  • 用Surrogate方式。

PDP, Feature Importance, 是Global的解释方法。ICE, LIME, ALE, Anchors是local的解释方法。 Shap是既可以local又可以global。

PD & ICE

Partial Dependence和ICE通常放置在一起用,原理是对给定instance,固定除选择的特征外的其它特征值,然后对选择的特征列进行分箱迭代,每次迭代将选择的特征列全部赋予同一个值,从小到大,如果是PDP,则平均所有样本的预测值。
能展示预测值和特征之间的关系是线性的,单调性的,还是更复杂的。

For a selected predictor (x)
1. Determine grid space of j evenly spaced values across distribution of x
2: for value i in {1,...,j} of grid space do
     | set x to i for all observations
     | apply given ML model
     | estimate predicted value
     | if PDP: average predicted values across all observations
   end
def par_dep(xs, frame, model, resolution=20, bins=None):
	'''
		xs: 列名
		frame: Dataframe
		model: xgboost, lightgbm
		resolution: 分箱的精度
	'''
    pd.options.mode.chained_assignment = None
    par_dep_frame = pd.DataFrame(columns=[xs, 'partial_dependence'])    
    # 保留特定列
    col_cache = frame.loc[:, xs].copy(deep=True)  
    # 确定PD图x轴需要计算值
    if bins == None:
        min_ = frame[xs].min()
        max_ = frame[xs].max()
        by = (max_ - min_)/resolution
        bins = np.arange(min_, max_, by)  
    # 设置列为一个常数j,j按bins取值。i为总体预测的y值,j为i的均值。      
    for j in bins:
        frame.loc[:, xs] = j
        dframe = xgb.DMatrix(frame)
        par_dep_i = pd.DataFrame(model.predict(dframe))
        par_dep_j = par_dep_i.mean()[0]
        par_dep_frame = par_dep_frame.append({
   xs:j,
                                              'partial_dependence': par_dep_j}, 
                                              ignore_index=True)
    # 将特定列返回
    frame.loc[:, xs] = col_cache
    return par_dep_frame

ALE

主要解决特征间相互依赖问题。比如预测房子价格,特征-房间数量和特征-房子大小,比如PD会固定住房间大小,增加房间数量来画PD图,但这两个变量明显是有相关性的。ALE希望反映特征效果的相关性。通过找特征的条件分布的均值,我们平均了相似的x1值的instances的预测值。M-Plots避免平均不相似的数据的instances,但是他们混合了一个特征和其它相关特征的效果,其实就是画出两个变量的条件概率的分布。ALE通过计算预测值之间的差值,而不是求平均。比如,对于面积30m的,ALE用所有30m的例子,假装这批房子是31m和29m,用模型预测后做差。这样给了我们纯粹的面积的效果,而没有混合其它相关的特征。简单来说
,PDP和ALE都是计算了一个特征在某个格点值v时的效果。

  • PDP展示的是,模型的平均预测值,在数据的instance对应想要知道的特征,都赋予选定同一个格点值v,。

  • ALE是展示模型预测值在small window的变化。也就是用特征在格点值v的附近的small window的变化值。用small window的upper and lower limit of the interval来输入模型中预测后相减得到差值。

For a selected predictor (x)
1. Determine grid space of j evenly spaced values across distribution of x
2: for value i_lower, i_upper in {1,...,j} of grid space do
	   if x in (i_lower, i_upper)
	     | set x to i for all observations
	     | apply given ML model
	     | estimate difference between predicted value i_lower and i_upper
   end

Feature Interaction

通过H-statistic来衡量特征与其它特征的interaction的强度,H-statistic能够衡量根据预测结果中的特征间交互程度的方差。一般的工作流程是,先衡量interaction的强度,然后画出2D-PDP来检验interaction。
例子1: 衡量两个特征之间的Interaction程度。若两个特征之间没有interaction,则
P D j k ( x j , x k ) = P D j ( x j ) + P D k ( x k ) P D_{j k}\left(x_{j}, x_{k}\right)=P D_{j}\left(x_{j}\right)+P D_{k}\left(x_{k}\right) PDjk(xj,xk)=PDj(xj)+PDk(xk)
H j k 2 = ∑ i = 1 n [ P D j k ( x j ( i ) , x k ( i ) ) − P D j ( x j ( i ) ) − P D k ( x k ( i ) ) ] 2 / ∑ i = 1 n P D j k 2 ( x j ( i ) , x k ( i ) ) H_{j k}^{2}=\sum_{i=1}^{n}\left[P D_{j k}\left(x_{j}^{(i)}, x_{k}^{(i)}\right)-P D_{j}\left(x_{j}^{(i)}\right)-P D_{k}\left(x_{k}^{(i)}\right)\right]^{2} / \sum_{i=1}^{n} P D_{j k}^{2}\left(x_{j}^{(i)}, x_{k}^{(i)}\right) Hjk2=i=1n[PDjk(xj(i),xk(i))PDj(xj(i))PDk(xk(i))]2/i=1nPDjk2(xj(i),xk(i))

PD指partial dependence function。

1: for variable i in {1,...,p} do
     | f(x) = estimate predicted values with original model
     | pd(x) = partial dependence of variable i
     | pd(!x) = partial dependence of all features excluding i
     | upper = sum(f(x) - pd(x) - pd(!x))
     | lower = variance(f(x))
     | rho = upper / lower
   end
5. Sort variables by descending rho (interaction strength)  

例子2:衡量一个特征与其余特征之间的Interaction程度。

f ^ ( x ) = P D j ( x j ) + P D − j ( x − j ) \hat{f}(x)=P D_{j}\left(x_{j}\right)+P D_{-j}\left(x_{-j}\right) f^(x)=P

本文标签: 解释性机器