京公网安备 11010802034615号
经营许可证编号:京B2-20210330
作者: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。我们将在后面的部分中看到此结果的可视化。
模型评估以提取商业价值
我们构建的任何模型都必须与基线模型进行比较,以评估模型的性能。让我们在下面进一步探讨这一点。
我们将在累积增益图中可视化上述模型。展现逻辑回归的性能。
kds.metrics.plot_cumulative_gain(y_test.to_numpy(), prob_glm[:,1])
累积增益图 | 商业价值机器学习模型
到目前为止看起来不错,图在预期线上,逻辑回归模型介于我们讨论的两个极端模型之间。
累积增益图的见解:
到目前为止,我们已经讨论了模型、十分位数及其性能比较。让我们在十分位数级别上进一步探讨这一点,以更清楚地了解发生了什么以及我们如何更好地解释这个过程。我们将在视觉效果的帮助下进行分析,这使它变得更加容易。kds 包有一个非常好的功能,可以在一行代码中生成所有指标报告。
kds.metrics.report(y_test, prob_glm[:,1])
metrics report | Business value ML model
让我们了解这些情节中的每一个。需要注意的是,所有图的 x 轴都是十分位数。
让我们用随机森林再构建一个模型,看看结果如何。
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
观察:
业务场景
建议控制:在某些情况下,客户有业务需求,即应始终生成最少 X 条建议。在这种情况下,我们可以通过考虑前 3 个十分位数而不是 2 个十分位数来获得更大的建议,并且还可以对其他记录进行精细控制。
衡量市场反应:推荐后分析和市场反应很容易衡量。例如,从前一点,我们可以单独跟踪来自十分位数 3 的所有额外推荐的表现。来自十分位数 3 的额外推送是否产生了任何影响(正面或负面)?
优化营销支出:通过关注前 20-30% 的人群,企业可以节省时间、资源和金钱。以避免这些时间、资源和金钱会花费在无响应者或定位错误客户上。
结语
技术有其一席之地,企业也有发言权。归根结底,这一切都与技术带来的商业价值有关。当这些收益用商业术语来解释时,它总是会更有效。它不仅有助于从业务中获得信心,而且还开辟了新的探索机会。
请注意,我们构建了两个分类模型,但没有研究我们通常为此类模型所做的 ROC 曲线、混淆矩阵、精度、召回率和其他标准指标。强烈建议跟踪和测量这些指标以评估模型的性能,然后遵循此文中的十分位数方法。根据目标受众和目标,使用最适合目标的方法。
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
主讲人简介 张冲,海归统计学硕士,CDA 认证数据分析师,前云南白药集团资深数据分析师,自媒体 Python 讲师,全网课程播放量破 ...
2026-10-29大学里“比较有用”的证书,不能靠一张榜单排出来。同一张证,对目标岗位明确的人是简历上的能力证据,对没有方向的人只是一次报 ...
2026-10-29“比较好考”是选证书时最常被搜索、也最容易被误读的一个词。有人把它理解成报名条件宽松,有人理解成科目少、背一背就能过,还 ...
2026-10-29本科毕业能考的证书很多,但真正值得在毕业求职阶段投入的,通常只有一两个。判断顺序建议反过来:先按报考资格分档,确认“现在 ...
2026-10-29“中国证书难度排行”很难做成一张绝对总榜。原因不在证书太多,而在“难”的口径不同:有的证书难在报名资格,工作年限和专业限 ...
2026-10-29先把结论说清楚:真正以“在校学籍”为报考前置、社会人员完全不能报的证书并不多。网上流传的“大学生专属证书”清单,很多其实 ...
2026-10-29“有哪些比较好考的证书”,这个问题看似在要一份名单,实际难点在于“好考”本身没有统一口径。有人指报名不设专业限制,有人指 ...
2026-10-29“考什么证书有用”这个问题,很难有一个统一答案。同一张证书,对想进某个行业的人是敲门砖,对已经在该行业工作多年的人可能只 ...
2026-10-29大专学历能考的证书不少,但真正值得投入时间的,要先过两道筛子:第一道是“大专能不能报”,第二道是“这个证对应什么岗位、能 ...
2026-10-29“普通人能考的证书”这个问题,真正的难点不在找证书名单,而在两件事:一是你能不能报,二是考完有没有对应的岗位任务。前者看 ...
2026-10-29“女孩子容易考什么证”这个问题,真正难的不是找证书名单,而是“容易”两个字没有说清。报考门槛低,不等于考试简单;考试简单 ...
2026-10-29先说结论:不存在一张“所有女性都吃香”的证书。把“吃香”拆开看,无非三种意思——能不能进某个岗位(岗位需求)、单位认不认 ...
2026-10-29上班族选证书,最容易犯的错是先看“哪个证含金量高”,再倒推自己要不要考。更稳妥的顺序反过来:先看这个证能不能在业余时间学 ...
2026-10-29“目前哪个证书含金量高”没有放之四海皆准的答案。同一张证书,对财会在校生、想转行做数据分析的在职人员、工程从业者,价值完 ...
2026-10-29会计岗位没有一张“通吃”的证书。比较务实的思路是:先确认自己当前做的是哪一段工作——出纳与核算、成本与总账、税务申报、审 ...
2026-10-29计算机专业能考的证书不少,但真正值得先考的,取决于你准备走哪条岗位路径。比较稳妥的分类是四类:软考职称类、厂商技术认证、 ...
2026-10-29“国家认可的人工智能证书”这句话本身容易误导。证书体系里并没有一个统一的“国家认可”标签,同一个说法可能指向五种完全不同 ...
2026-10-29“各个行业都能考的证书”这句话,其实包含两个不同的问题:一是报考时不限专业、不限行业;二是考出来以后,在不同行业的岗位上 ...
2026-10-29大学生考证最容易踩的坑,是把“别人考了什么”当成自己的清单。更实用的做法是先回答三个问题:我打算投什么岗位?这个证书现在 ...
2026-10-29结论先说:大学生没有适合所有人的“必考清单”,把证书控制在2—4本核心组合较合理——1—2本通用基础,1—2本岗位技能,学有余 ...
2026-10-29