
在数据科学和人工智能领域取得重大进展之后,我们往往会听到有关伦理和可解释性AI的讨论,尤其是在银行和保险等行业中。尽管有许多易于访问且具有高度预测性的算法可供使用,但是对于从事这些行业的分析师和数据科学家而言,面临着选择预测准确性还是履行其监管职责的两难选择。研究人员和行业专家正努力使机器学习模型透明化和可解释化。
使模型输出更实用的一种创新称为单调约束。
单调是一个函数或数量的变化。

单调递增函数:如果对所有 x和 y,当 x≤y时,都有f(x)≤ f(y),则该函数被称为单调递增函数(见图1)。这个函数不必定要增加,只是不能减少。
单调递减函数:如果对所有 x和 y,当 x≤y时,都有 f(x)≥f(y),则该函数被称为单调递减函数(见图2)。这个函数不必定要减少,只是不能增加。
目前,你必定想知道为什么我们需要一个约束模型。在现实生活中,许多场景都表现出单调关系,请看下面给出的一些例子。
在缺乏单调约束的情况下,银行和保险公司可能会面临一种不合逻辑和不道德的决策的奇怪情况,列如信用评分较高(列如610分)的申请被拒绝,而信用评分较低(列如600分)的申请被批准。类似地,客户A为100万美元的房产支付1000美元的溢价,客户B为110万美元的房产支付990美元的溢价。在上面的例子中,我们假设所有其他因素对于两对客户都是一样的。
我将在python中使用XGBoost向您介绍这个概念,并且本教程的底部也提供了LightGBM实现的代码。
生成样本数据
第一步,我们将根据上述两种情况模拟一些数据。
场景1:以正斜率模拟数据
import numpy as np
%matplotlib inline
import matplotlib.pyplot as plt
plt.style.use('seaborn-whitegrid')
#Sample data with positive slope
size = 100
Xp = np.linspace(0,7, size)
yp = Xp**2 + 10 - (10 * np.random.random(size))
plt.plot(Xp, yp, '.', color='b');
在这种情况下,两个变量x和y之间存在正相关关系,当x增加时,y也会增加,而当x减少y时也会减少,例如保险金额和保费金额。
场景2:以负斜率模拟数据
def f(Xn, a, b, c):
"""Fit function y=f(x,p) with parameters p=(a,b,c). """
return a * np.exp(- b * Xn) +c
#Sample data with negative slope
size = 100
Xn = np.linspace(0, 2, size)
yi = f(Xn, a=2.5, b=1.3, c=.5)
#add some noise
yn = yi + 0.5 * np.random.random(size=len(Xn))
这种情况是两个变量之间的负相关关系,当x增加时,y减少,当x减少时,y增加,例如,驾照年龄和保费金额。
拟合无单调约束的机器学习模型
我们将在两个场景中使用缺省参数和不强制任何约束来拟合增强树模型。
#Code for positive scenario, use same code for other scenario Creating DMatrix
import xgboost as xgb
dtrain_positive = xgb.DMatrix(Xp.reshape(-1,1), label=yp)
#Setting default parameters
params_no_constraints =
{'booster':'gbtree',
'eta':0.3,
'gamma':0,
'max_depth':6,
'min_child_weight':1,
'colsample_bytree':1
}
#Model Fitting
model_no_constraints_positive = xgb.train(params=params_no_constraints, dtrain=dtrain_positive)
#Prediction
preds_positive = model_no_constraints_positive.predict(dtrain_positive)
#Plotting observed versus prediction
plt.plot(Xp,yp,'.',color = "b")
plt.plot(Xp, preds_positive.reshape(-1,1), color = "r")
plt.xlabel("X")
plt.ylabel("Non-monotonic Model Fit")您可以看到输出的可视化

我们来分析一下输出,蓝点显示X个数据点,红线显示拟合模型。我们可以看到两个模型都表现良好,能够捕获数据的整体趋势,而且这种曲线也很自然,但是这可能会影响决策。当我们在很短的时间间隔内分析模型时,我们可以观察到与我们期望相反的趋势。例如,在上述模型中,Yb <Ya和Yn> Ym与我们的预期相反。
对模型添加单调约束
目前,我们将添加附加参数(即单调约束)对样本数据进行建模。根据XGBoost文档,它们分别为1和-1。
params_increasing_monotone =
{'booster':'gbtree',
'eta':0.3,
'gamma':0,
'max_depth':6,
'min_child_weight':1,
'colsample_bytree':1,
'monotone_constraints':1
}让我们在X值上绘制预测线,以可视化我们的拟合模型。

我们可以看到整体的趋势看起来与早期的非单调模型类似。目前,解释这些机器学习模型变得容易多了,不像以前那样有矛盾的情况。
LightGBM中单调约束的实现
您可以使用以下Python代码对数据建模并分析输出,对于其余步骤,您可以使用与上述一样的代码。
#Fitting LightGBM model with monotonic constraints
import lightgbm as lgb
monotone_model = lgb.LGBMRegressor(min_child_samples=5,
monotone_constraints="-1") # 1 for increasing constraints
monotone_model.fit(X.reshape(-1,1),y)
#predicted output from the model from the same input
prediction = monotone_model.predict(X.reshape(-1,1))我们在这里讨论了单变量模型的单调约束,这些约束也可以应用于多个变量,并且可以使用部分依赖图来分析对单个变量的影响。有时,强制约束有助于避免过度拟合,这取决于数据之间的关系,但是当您有一个过度拟合的模型时,测试这种技术没有害处。
¥85.00
PC正版 steam 中文游戏 伊克西翁 IXION 国区激活码 城市建造 生存 策略 游戏
¥22.00
PC中文正版 steam平台 国区 游戏 神之亵渎 Blasphemous 渎神 国区激活码
¥21.80
PC正版 steam平台 国区 游戏 黑暗领域2 The Darkness II 激活码
¥28.00
PC中文正版 steam游戏 超凡双生 Beyond: Two Souls 国区激活码
¥110.80
Steam 英雄传说闪之轨迹1 The Legend of Heroes: Trails of Cold Steel 国区激活码CDKey steam PC正版游戏
¥86.00
PC中文steam正版 行会3 The Guild 3 激活码现货秒发 cdkey