
作者:amitvkulkarni
CDA數(shù)據(jù)分析師編譯
對(duì)于任何評(píng)估來(lái)說(shuō),最難的是保持簡(jiǎn)單易操作,在數(shù)據(jù)科學(xué)中也是如此。在任何數(shù)據(jù)科學(xué)項(xiàng)目中,細(xì)化數(shù)據(jù)、微調(diào)模型、部署它們的迭代過(guò)程都是一個(gè)持續(xù)的過(guò)程。隨著工具、算法的進(jìn)步,以及隨著 MLOps 的出現(xiàn),事情變得容易了很多,而且未來(lái)也會(huì)繼續(xù)發(fā)展——技術(shù)會(huì)優(yōu)化自己。
業(yè)務(wù)方面呢?說(shuō)服客戶相信使用先進(jìn)工具和技術(shù)構(gòu)建的復(fù)雜模型的預(yù)測(cè)能力有多容易?客戶是否愿意為項(xiàng)目提供資金并信任我們模型的建議?好吧,不妨試著解釋模型的 ROC 曲線,試著用特異性和敏感性指標(biāo)來(lái)說(shuō)服客戶——你會(huì)看到的只是眼球在滾動(dòng)。
但是,如果我們能夠在沒(méi)有復(fù)雜指標(biāo)和技術(shù)術(shù)語(yǔ)的情況下回答業(yè)務(wù)問(wèn)題呢?那么,我們就可能有機(jī)會(huì)從業(yè)務(wù)部門那里獲得支持。在本文中,我們將看到一個(gè)用例,在該用例中,我們?nèi)詫?gòu)建我們的模型,但以不同的方式對(duì)其進(jìn)行解釋——業(yè)務(wù)方式。
使用 ML 模型提取商業(yè)價(jià)值的方法
在這篇博客中,我們將探索十分位數(shù)的使用,了解各種評(píng)估圖,如累積增益圖和提升圖等,以評(píng)估 ML 模型的商業(yè)價(jià)值。該方法將幫助我們解釋 ML 模型的預(yù)測(cè)能力,并使解釋模型結(jié)果變得很簡(jiǎn)單。這些圖表和指標(biāo)將使企業(yè)能夠更有信心地做出明智的決策。
我們將在本文中探索以下主題。
我們將使用來(lái)自 UCI 機(jī)器學(xué)習(xí)存儲(chǔ)庫(kù)的公開(kāi)可用的銀行數(shù)據(jù) 集, zip 文件中有四個(gè)數(shù)據(jù)集,但我們感興趣的是*bank-additional-full.csv。*所有的屬性信息都可以在上面的 URL 中找到。數(shù)據(jù)來(lái)自直接營(yíng)銷電話聯(lián)系客戶,以評(píng)估客戶是否有興趣訂閱銀行定期存款。如果訂閱,則為 Yes,否則為 No。本文討論的是如何評(píng)估 ML 模型的商業(yè)價(jià)值。
讓我們加載數(shù)據(jù)并查看一下以便更好的理解數(shù)據(jù)。
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=';')
我們可以進(jìn)行完整的EDA/特征工程/選擇重要變量然后構(gòu)建模型,但為了簡(jiǎn)單起見(jiàn),我們將選擇很少的變量進(jìn)行模型構(gòu)建。
df= df[['y', 'duration', 'campaign', 'pdays', 'previous', 'euribor3m']]
此外,還需要更進(jìn)一步地探索數(shù)據(jù),將目標(biāo)變量轉(zhuǎn)換為分類變量并對(duì)其進(jìn)行編碼。
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
模型構(gòu)建以提取商業(yè)價(jià)值
Step1:定義自變量和目標(biāo)變量
y = df.y X = df.drop('y', axis = 1)
Step2:將數(shù)據(jù)集拆分為訓(xùn)練集和測(cè)試集,其中測(cè)試大小為整個(gè)數(shù)據(jù)集的 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)
至此,我們已經(jīng)建立了模型,并在測(cè)試數(shù)據(jù)上對(duì)其進(jìn)行了評(píng)分(預(yù)測(cè)),這為我們提供了每個(gè)觀察結(jié)果的預(yù)測(cè)概率。
生成十分位數(shù)
簡(jiǎn)單地說(shuō),十分位數(shù)把數(shù)據(jù)進(jìn)行分箱。所以,我們將所有預(yù)測(cè)的概率分成十組,并對(duì)它們進(jìn)行排名,這意味著最高的預(yù)測(cè)概率將在十分之一,最低的設(shè)置將在十分之一。我們將使用pandas的 cut() 函數(shù)拆分?jǐn)?shù)據(jù)。
下面的代碼行創(chuàng)建一個(gè)名為Decile_rank_glm的新列, 它保存每個(gè)預(yù)測(cè)記錄的排名。
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。我們將在后面的部分中看到此結(jié)果的可視化。
模型評(píng)估以提取商業(yè)價(jià)值
我們構(gòu)建的任何模型都必須與基線模型進(jìn)行比較,以評(píng)估模型的性能。讓我們?cè)谙旅孢M(jìn)一步探討這一點(diǎn)。
我們將在累積增益圖中可視化上述模型。展現(xiàn)邏輯回歸的性能。
kds.metrics.plot_cumulative_gain(y_test.to_numpy(), prob_glm[:,1])
累積增益圖 | 商業(yè)價(jià)值機(jī)器學(xué)習(xí)模型
到目前為止看起來(lái)不錯(cuò),圖在預(yù)期線上,邏輯回歸模型介于我們討論的兩個(gè)極端模型之間。
累積增益圖的見(jiàn)解:
到目前為止,我們已經(jīng)討論了模型、十分位數(shù)及其性能比較。讓我們?cè)谑治粩?shù)級(jí)別上進(jìn)一步探討這一點(diǎn),以更清楚地了解發(fā)生了什么以及我們?nèi)绾胃玫亟忉屵@個(gè)過(guò)程。我們將在視覺(jué)效果的幫助下進(jìn)行分析,這使它變得更加容易。kds 包有一個(gè)非常好的功能,可以在一行代碼中生成所有指標(biāo)報(bào)告。
kds.metrics.report(y_test, prob_glm[:,1])
metrics report | Business value ML model
讓我們了解這些情節(jié)中的每一個(gè)。需要注意的是,所有圖的 x 軸都是十分位數(shù)。
讓我們用隨機(jī)森林再構(gòu)建一個(gè)模型,看看結(jié)果如何。
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
觀察:
業(yè)務(wù)場(chǎng)景
建議控制:在某些情況下,客戶有業(yè)務(wù)需求,即應(yīng)始終生成最少 X 條建議。在這種情況下,我們可以通過(guò)考慮前 3 個(gè)十分位數(shù)而不是 2 個(gè)十分位數(shù)來(lái)獲得更大的建議,并且還可以對(duì)其他記錄進(jìn)行精細(xì)控制。
衡量市場(chǎng)反應(yīng):推薦后分析和市場(chǎng)反應(yīng)很容易衡量。例如,從前一點(diǎn),我們可以單獨(dú)跟蹤來(lái)自十分位數(shù) 3 的所有額外推薦的表現(xiàn)。來(lái)自十分位數(shù) 3 的額外推送是否產(chǎn)生了任何影響(正面或負(fù)面)?
優(yōu)化營(yíng)銷支出:通過(guò)關(guān)注前 20-30% 的人群,企業(yè)可以節(jié)省時(shí)間、資源和金錢。以避免這些時(shí)間、資源和金錢會(huì)花費(fèi)在無(wú)響應(yīng)者或定位錯(cuò)誤客戶上。
結(jié)語(yǔ)
技術(shù)有其一席之地,企業(yè)也有發(fā)言權(quán)。歸根結(jié)底,這一切都與技術(shù)帶來(lái)的商業(yè)價(jià)值有關(guān)。當(dāng)這些收益用商業(yè)術(shù)語(yǔ)來(lái)解釋時(shí),它總是會(huì)更有效。它不僅有助于從業(yè)務(wù)中獲得信心,而且還開(kāi)辟了新的探索機(jī)會(huì)。
請(qǐng)注意,我們構(gòu)建了兩個(gè)分類模型,但沒(méi)有研究我們通常為此類模型所做的 ROC 曲線、混淆矩陣、精度、召回率和其他標(biāo)準(zhǔn)指標(biāo)。強(qiáng)烈建議跟蹤和測(cè)量這些指標(biāo)以評(píng)估模型的性能,然后遵循此文中的十分位數(shù)方法。根據(jù)目標(biāo)受眾和目標(biāo),使用最適合目標(biāo)的方法。
數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實(shí)戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無(wú)論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢效率:打破 “拆分必慢” 的認(rèn)知誤區(qū) 在 MySQL 數(shù)據(jù)庫(kù)管理中,“大表” 始終是性能優(yōu)化繞不開(kāi)的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫(kù)表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動(dòng)態(tài)隨機(jī)一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開(kāi)始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價(jià)值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫(kù)表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實(shí)戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫(kù))處理 Excel 數(shù)據(jù)時(shí),“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗(yàn)與 t 檢驗(yàn):差異、適用場(chǎng)景與實(shí)踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計(jì)學(xué)領(lǐng)域,假設(shè)檢驗(yàn)是驗(yàn)證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤(pán)手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計(jì)劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計(jì)劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對(duì)象的 text 與 content:區(qū)別、場(chǎng)景與實(shí)踐指南 在 Python 進(jìn)行 HTTP 網(wǎng)絡(luò)請(qǐng)求開(kāi)發(fā)時(shí)(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價(jià)值的核心操盤(pán)手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫(kù)表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請(qǐng)求工具對(duì)比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請(qǐng)求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長(zhǎng)浮點(diǎn)數(shù)據(jù)的科學(xué)計(jì)數(shù)法問(wèn)題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長(zhǎng)浮點(diǎn)數(shù)據(jù)時(shí)的科學(xué)計(jì)數(shù)法問(wèn)題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價(jià)值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運(yùn)營(yíng)問(wèn)題、提升執(zhí)行效率的核心手段,其價(jià)值 ...
2025-09-12用 SQL 驗(yàn)證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實(shí)戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過(guò)程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計(jì)” 與 “用戶體驗(yàn) ...
2025-09-11塔吉特百貨孕婦營(yíng)銷案例:數(shù)據(jù)驅(qū)動(dòng)下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見(jiàn)頂” 的當(dāng)下,精準(zhǔn)營(yíng)銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務(wù)數(shù)據(jù)分析:概念辨析與協(xié)同價(jià)值 在數(shù)據(jù)驅(qū)動(dòng)決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務(wù)數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類分析:從操作實(shí)踐到業(yè)務(wù)價(jià)值挖掘 在數(shù)據(jù)分析場(chǎng)景中,聚類分析作為 “無(wú)監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計(jì)模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價(jià)值導(dǎo)向 統(tǒng)計(jì)模型作為數(shù)據(jù)分析的核心工具,并非簡(jiǎn)單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10