作者:amitvkulkarni
CDA数据分析师编译

概述
对于任何评估来说,最难的是保持简单易操作,在数据科学中也是如此。在任何数据科学项目中,细化数据、微调模型、部署它们的迭代过程都是一个持续的过程。随着工具、算法的进步,以及随着 MLOps 的出现,事情变得容易了很多,而且未来也会继续发展——技术会优化自己。

业务方面呢?说服客户相信使用先进工具和技术构建的复杂模型的预测能力有多容易?客户是否愿意为项目提供资金并信任我们模型的建议?好吧,不妨试着解释模型的 ROC 曲线,试着用特异性和敏感性指标来说服客户——你会看到的只是眼球在滚动。

但是,如果我们能够在没有复杂指标和技术术语的情况下回答业务问题呢?那么,我们就可能有机会从业务部门那里获得支持。在本文中,我们将看到一个用例,在该用例中,我们仍将构建我们的模型,但以不同的方式对其进行解释——业务方式。

使用 ML 模型提取商业价值的方法

在这篇博客中,我们将探索十分位数的使用,了解各种评估图,如累积增益图和提升图等,以评估 ML 模型的商业价值。该方法将帮助我们解释 ML 模型的预测能力,并使解释模型结果变得很简单。这些图表和指标将使企业能够更有信心地做出明智的决策。

我们将在本文中探索以下主题。

数据探索
数据处理
建立模型
生成十分位数和报告
模型对比
业务场景
结论
入门
我们将使用来自 UCI 机器学习存储库的公开可用的银行数据 集, zip 文件中有四个数据集,但我们感兴趣的是*bank-additional-full.csv。*所有的属性信息都可以在上面的 URL 中找到。数据来自直接营销电话联系客户,以评估客户是否有兴趣订阅银行定期存款。如果订阅,则为 Yes,否则为 No。本文讨论的是如何评估 ML 模型的商业价值。

数据加载和处理:
让我们加载数据并查看一下以便更好的理解数据。

import wget
import zipfile
import pandas as pd
import numpy as np
url = ‘https://archive.ics.uci.edu/ml/machine-learning-databases/00222/bank-additional.zip’
wget.download(url)
zf = zipfile.ZipFile(‘bank-additional.zip’)
df= pd.read_csv(zf.open(‘bank-additional/bank-additional-full.csv’), sep=’;’)
我们可以进行完整的EDA/特征工程/选择重要变量然后构建模型,但为了简单起见,我们将选择很少的变量进行模型构建。

df= df[[‘y’, ‘duration’, ‘campaign’, ‘pdays’, ‘previous’, ‘euribor3m’]]
此外,还需要更进一步地探索数据,将目标变量转换为分类变量并对其进行编码。

df.y[df.y == ‘yes’] = ‘term deposit’
df.y = pd.Categorical(df.y)
df[‘y’] = df.y.cat.codes
df.info()
输出:
RangeIndex: 41188 entries, 0 to 41187

Data columns (total 6 columns):

# Column Non-Null Count Dtype

— —— ————– —–

0 y 41188 non-null int8

1 duration 41188 non-null int64

2 campaign 41188 non-null int64

3 pdays 41188 non-null int64

4 previous 41188 non-null int64

5 euribor3m 41188 non-null float64

dtypes: float64(1), int64(4), int8(1)

memory usage: 1.6 MB
df.head()
y duration campaign pdays previous euribor3m
0 261 1 999 0 4.857
0 149 1 999 0 4.857
0 226 1 999 0 4.857
0 151 1 999 0 4.857
0 307 1 999 0 4.857
df.describe()
y duration campaign pdays previous euribor3m
count 41188.000000 41188.000000 41188.000000 41188.000000 41188.000000 41188.000000
mean 0.112654 258.285010 2.567593 962.475454 0.172963 3.621291
std 0.316173 259.279249 2.770014 186.910907 0.494901 1.734447
min 0.000000 0.000000 1.000000 0.000000 0.000000 0.634000
25% 0.000000 102.000000 1.000000 999.000000 0.000000 1.344000
50% 0.000000 180.000000 2.000000 999.000000 0.000000 4.857000
75% 0.000000 319.000000 3.000000 999.000000 0.000000 4.961000
max 1.000000 4918.000000 56.000000 999.000000 7.000000 5.045000
模型构建以提取商业价值

逻辑回归
Step1:定义自变量和目标变量

y = df.y
X = df.drop(‘y’, axis = 1)
Step2:将数据集拆分为训练集和测试集,其中测试大小为整个数据集的 20%

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 2021)
Step3:建立逻辑回归模型

from sklearn.model_selection import train_test_split

from sklearn.linear_model import LogisticRegression

Logistic regression model

clf_glm = LogisticRegression(multi_class = ‘multinomial’, solver = ‘newton-cg’).fit(X_train, y_train)

prob_glm = clf_glm.predict_proba(X_test)

max_prob_glm = round(pd.DataFrame(np.amax(prob_glm, axis=1), columns = [‘prob_glm’]),2)
至此,我们已经建立了模型,并在测试数据上对其进行了评分(预测),这为我们提供了每个观察结果的预测概率。

生成十分位数

简单地说,十分位数把数据进行分箱。所以,我们将所有预测的概率分成十组,并对它们进行排名,这意味着最高的预测概率将在十分之一,最低的设置将在十分之一。我们将使用pandas的 cut() 函数拆分数据。

下面的代码行创建一个名为Decile_rank_glm的新列, 它保存每个预测记录的排名。

max_prob_glm[‘Decile_rank_glm’] = pd.cut(max_prob_glm[‘prob_glm’], 10, labels = np.arange(10,0, -1))
prob_glm Decile_rank_glm
0 0.99 1
1 0.59 9
2 0.96 1
3 0.83 4
4 0.85 4
… … …
8233 0.98 1
8234 0.98 1
8235 0.99 1
8236 0.99 1
8237 0.93 2
注: 0.99 的概率为 1,0.93 为 2,0.85 为 4,0.59 为 9。我们将在后面的部分中看到此结果的可视化。

模型评估以提取商业价值

我们构建的任何模型都必须与基线模型进行比较,以评估模型的性能。让我们在下面进一步探讨这一点。

随机模型:基线模型将是一个随机模型,这意味着它与抛硬币一样好,这意味着有 50% 的概率客户的电话是正确的或者客户购买我们的产品。我们的逻辑回归模型的性能显然应该比这更好。
向导模型:这是另一个极端模型,它的预测是完美的,这意味着它几乎以 100% 的准确度进行预测。此模型不应用于生产或任何业务决策,因为很可能会过度拟合。
逻辑回归:我们的模型应该介于这两个极端模型之间,这使我们有足够的信心做出业务决策。
我们将在累积增益图中可视化上述模型。展现逻辑回归的性能。

kds.metrics.plot_cumulative_gain(y_test.to_numpy(), prob_glm[:,1])

累积增益图 | 商业价值机器学习模型

到目前为止看起来不错,图在预期线上,逻辑回归模型介于我们讨论的两个极端模型之间。

累积增益图的见解:

如果我们只能选择前 20%(十分位数 1 和十分位数 2),那么我们就可以覆盖**近 80%的目标类别。
由于这是一个累积图,我们看到
曲线在十分位数 5 之后变平,**这意味着十分位数 6 到 10 要么有最少的记录,要么没有。
向导模型在十分位数 2 的位置达到了100% 标记——我们已经知道这是一个理想模型,仅供参考。如果我们的模型开始接近或者类似于这两个极端模型中的任何一个,那么需要检查我们的模型。
到目前为止,我们已经讨论了模型、十分位数及其性能比较。让我们在十分位数级别上进一步探讨这一点,以更清楚地了解发生了什么以及我们如何更好地解释这个过程。我们将在视觉效果的帮助下进行分析,这使它变得更加容易。kds 包有一个非常好的功能,可以在一行代码中生成所有指标报告。

kds.metrics.report(y_test, prob_glm[:,1])

metrics report | Business value ML model

让我们了解这些情节中的每一个。需要注意的是,所有图的 x 轴都是十分位数。

提升图(Lift Plot):这个图向我们展示了逻辑回归模型与随机模型相比到底有多好。例如:十分位数 2 给了我们几乎 4 倍的提升,这意味着我们可以比随机模型方法做得好 4 倍。当我们进入更高的十分位数时,升力下降并最终满足随机模型线,这是因为所有更高的概率分数值都在我们已经在累积增益图中看到的最高十分位数(1 到 3)中。因此,底部十分位数的概率较低且几乎与随机模型相同。
十分位数提升图(Decile-wise Lift Plot):该图向我们展示了每个十分位数中目标类观察的百分比,我们观察到十分位数 1 具有最大值,随着x轴数值的延伸,十分位数百分比下降,在某个点之后它甚至低于随机模型线。这是因为随机模型具有随机设置的均匀分布的观测值,而我们的模型在较高的十分位数中预测的观测值较少。
累积增益图(Cumulative Gain Plot):在以前的部分中讨论过这个问题,还研究了对图的解释。
KS 统计图(KS Statistic Plot):KS 图评估不同的分布,即事件和非事件,KS 值是分布之间差异最大的点。简而言之,它有助于我们理解 ML 模型区分两个事件的能力。KS 分数大于 40,如果它恰好在前 3 个十分位数中,那么它被认为是好的。在我们的例子中,我们从图中得到了 68.932 和十分位数 3 的分数。
让我们用随机森林再构建一个模型,看看结果如何。

clf_rf = RandomForestClassifier().fit(X_train, y_train)
prob_rf = clf_rf.predict_proba(X_test)
max_prob_rf = pd.DataFrame(np.amax(prob_rf, axis=1), columns = [‘prob_rf’])
max_prob_rf[‘Decile_rank_rf’] = pd.cut(max_prob_rf[‘prob_rf’], 10, labels = np.arange(10,0, -1))
kds.metrics.plot_cumulative_gain(y_test.to_numpy(), prob_rf[:,1])
kds.metrics.report(y_test, prob_rf[:,1])

img

观察:

随机森林模型略好于逻辑回归模型。
十分位数 2 的提升略高,KS 统计数据为 72.18,而logistic统计数据为 68.93
业务场景

建议控制:在某些情况下,客户有业务需求,即应始终生成最少 X 条建议。在这种情况下,我们可以通过考虑前 3 个十分位数而不是 2 个十分位数来获得更大的建议,并且还可以对其他记录进行精细控制。

衡量市场反应:推荐后分析和市场反应很容易衡量。例如,从前一点,我们可以单独跟踪来自十分位数 3 的所有额外推荐的表现。来自十分位数 3 的额外推送是否产生了任何影响(正面或负面)?

优化营销支出:通过关注前 20-30% 的人群,企业可以节省时间、资源和金钱。以避免这些时间、资源和金钱会花费在无响应者或定位错误客户上。

结语

技术有其一席之地,企业也有发言权。归根结底,这一切都与技术带来的商业价值有关。当这些收益用商业术语来解释时,它总是会更有效。它不仅有助于从业务中获得信心,而且还开辟了新的探索机会。

请注意,我们构建了两个分类模型,但没有研究我们通常为此类模型所做的 ROC 曲线、混淆矩阵、精度、召回率和其他标准指标。强烈建议跟踪和测量这些指标以评估模型的性能,然后遵循此文中的十分位数方法。根据目标受众和目标,使用最适合目标的方法。

如何评估机器学习模型的商业价值相关推荐

  1. 如何评估机器学习模型的性能

    您可以整天训练有监督的机器学习模型,但是除非您评估其性能,否则您永远无法知道模型是否有用.这个详细的讨论回顾了您必须考虑的各种性能指标,并对它们的含义和工作方式提供了直观的解释. 为什么需要评估? 让 ...

  2. 机器学习 模型性能评估_如何评估机器学习模型的性能

    机器学习 模型性能评估 Table of contents: 目录: Why evaluation is necessary?为什么需要评估? Confusion Matrix混淆矩阵 Accurac ...

  3. 为什么引入验证集来评估机器学习模型?只用训练集和测试集可以吗?

    评估模型的重点是将数据划分为三个集合:训练集.验证集和测试集.在训练数据上训练模型,在验证数据上评估模型.一旦找到了最佳参数,就在测试数据上最后测试一次.你可能会问,为什么不是两个集合:一个训练集和一 ...

  4. 机器学习笔记 十五:随机森林(Random Forest)评估机器学习模型的特征重要性

    随机森林 1. 随机森林介绍 1.1 租赁数据案例 2. 特征相关性分析(热图) 2.1 热图绘制 2.2 构建随机森林模型 2.3 不同特征合并的重要性 2.3.1 经纬度合并(分3类) 2.3.2 ...

  5. 如何在评估机器学习模型时防止数据泄漏

    本文讨论了评估模型性能时的数据泄漏问题以及避免数据泄漏的方法. 在模型评估过程中,当训练集的数据进入验证/测试集时,就会发生数据泄漏.这将导致模型对验证/测试集的性能评估存在偏差.让我们用一个使用Sc ...

  6. 如何评估机器学习模型?

    目录 概述 为什么不是两个集合:一个训练集和一个测试集? 具体方法 1. 简单的留出验证 2. K折验证 3. 带有打乱数据的重复 K 折验证 大家好,我是爱做梦的鱼,我是一个大三的小菜鸡,非常向往优 ...

  7. 【机器学习基础】机器学习模型评估教程!

    译者:追风者,Datawhale成员 如何在投入生产前评估机器学习模型性能? 想象一下,你训练了一个机器学习模型.也许,可以从中选几个候选方案. 你在测试集上运行它,得到了一些质量评估.模型没有过度拟 ...

  8. 交叉验证和超参数调整:如何优化您的机器学习模型

    In the first two parts of this article I obtained and preprocessed Fitbit sleep data, split the data ...

  9. 机器学习模型的性能指标

    There are various metrics that we can use to evaluate the performance of ML algorithms, classificati ...

最新文章

  1. 此问题可能是由配置更改或安装另一个扩展导致的
  2. gevent-zookeeper for windows
  3. AngularJS---核心特性
  4. 中段尾段全段什么意思_头段?中尾段?还是全段?只要排气改对,还怕撩不到妹?...
  5. pandas保存新增sheet表,且不overwrite原有内容
  6. 视频编解码:第一章 编解码基础
  7. python中定义一个空的字符串_04python—15种字符串操作
  8. Android 系统(68)---使用Xshell在Windows系统和Linux系统之间进行文件传输
  9. linux命令行安装vnc_CentOS下安装VNC并设置远程服务
  10. Hadoop环境的配置搭建和基本概念
  11. 第5章 高效的多线程日志
  12. python生成3d人体模型_make human开源3D人体建模软件免费下载|make human开源3D人体建模软件2018最新版下载_v1.0.2_9号软件下载...
  13. HTML深海骑兵制作,深海迷航代码独眼巨人号护盾发生器 | 手游网游页游攻略大全...
  14. 开关电源(DC/DC)原理分析
  15. 【数据挖掘】XGBoost面试题:与GBDT的区别?为什么使用泰勒二阶展开?为什么可以并行训练?为什么快?防止过拟合的方法?如何处理缺失值?
  16. windows10加域/退域
  17. TransDecoder识别转录本中编码区并预测蛋白
  18. [unity] build项目报错:Currently selected scripting backend (.NET)is not installed
  19. 不用深度学习网络,只需预先设置NAS算法,就能实现AutoML自动机器学习的革命吗?
  20. 《Android源代码设计模式解析与实战》读书笔记(十四)

热门文章

  1. BZOJ2080 POI2010 Railway
  2. 绿色信贷数据合集(更新至2021年)
  3. 现在,我们用大炮来打蚊子:蚊子分布在一个M×N格的二维平面上,每只蚊子占据一格。向该平面的任意位置发射炮弹,炮弹的杀伤范围如下示意:
  4. 如何同步更新本地代码与GitHub代码
  5. [Matlab科学计算] 频谱分析和FFT算法总结
  6. 图形化编写html,怎么使用Pytest+Allure生成漂亮的HTML图形化测试报告
  7. NLP-生成模型-2014:Seq2Seq【缺点:①解码器无法对齐编码器(Attention机制);②编码器端信息过使用或欠使用(Coverage机制);③解码器无法解决OOV(Pointer机制)】
  8. 老鼠试药——二进制算法
  9. R语言数据科学:变量选择(一)逐步回归法
  10. 2022年上半年信息系统项目管理师上午客观题参考答案及解析(三)