99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀如何評估機器學(xué)習(xí)模型的商業(yè)價值
如何評估機器學(xué)習(xí)模型的商業(yè)價值
2021-09-22
收藏
如何評估<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機器學(xué)習(xí)</a>模型的商業(yè)價值

作者:amitvkulkarni

CDA數(shù)據(jù)分析師編譯

概述

對于任何評估來說,最難的是保持簡單易操作,在數(shù)據(jù)科學(xué)中也是如此。在任何數(shù)據(jù)科學(xué)項目中,細化數(shù)據(jù)、微調(diào)模型、部署它們的迭代過程都是一個持續(xù)的過程。隨著工具、算法的進步,以及隨著 MLOps 的出現(xiàn),事情變得容易了很多,而且未來也會繼續(xù)發(fā)展——技術(shù)會優(yōu)化自己。

業(yè)務(wù)方面呢?說服客戶相信使用先進工具和技術(shù)構(gòu)建的復(fù)雜模型的預(yù)測能力有多容易?客戶是否愿意為項目提供資金并信任我們模型的建議?好吧,不妨試著解釋模型的 ROC 曲線,試著用特異性和敏感性指標(biāo)來說服客戶——你會看到的只是眼球在滾動。

但是,如果我們能夠在沒有復(fù)雜指標(biāo)和技術(shù)術(shù)語的情況下回答業(yè)務(wù)問題呢?那么,我們就可能有機會從業(yè)務(wù)部門那里獲得支持。在本文中,我們將看到一個用例,在該用例中,我們?nèi)詫?gòu)建我們的模型,但以不同的方式對其進行解釋——業(yè)務(wù)方式。

使用 ML 模型提取商業(yè)價值的方法

在這篇博客中,我們將探索十分位數(shù)的使用,了解各種評估圖,如累積增益圖和提升圖等,以評估 ML 模型的商業(yè)價值。該方法將幫助我們解釋 ML 模型的預(yù)測能力,并使解釋模型結(jié)果變得很簡單。這些圖表和指標(biāo)將使企業(yè)能夠更有信心地做出明智的決策。

我們將在本文中探索以下主題。

  1. 數(shù)據(jù)探索
  2. 數(shù)據(jù)處理
  3. 建立模型
  4. 生成十分位數(shù)和報告
  5. 模型對比
  6. 業(yè)務(wù)場景
  7. 結(jié)論

入門

我們將使用來自 UCI 機器學(xué)習(xí)存儲庫的公開可用的銀行數(shù)據(jù) 集, zip 文件中有四個數(shù)據(jù)集,但我們感興趣的是*bank-additional-full.csv。*所有的屬性信息都可以在上面的 URL 中找到。數(shù)據(jù)來自直接營銷電話聯(lián)系客戶,以評估客戶是否有興趣訂閱銀行定期存款。如果訂閱,則為 Yes,否則為 No。本文討論的是如何評估 ML 模型的商業(yè)價值。

數(shù)據(jù)加載和處理:

讓我們加載數(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=';')

我們可以進行完整的EDA/特征工程/選擇重要變量然后構(gòu)建模型,但為了簡單起見,我們將選擇很少的變量進行模型構(gòu)建。

df= df[['y', 'duration', 'campaign', 'pdays', 'previous', 'euribor3m']]

此外,還需要更進一步地探索數(shù)據(jù),將目標(biāo)變量轉(zhuǎ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è)價值

邏輯回歸

Step1:定義自變量和目標(biāo)變量

y = df.y X = df.drop('y', axis = 1)

Step2:將數(shù)據(jù)集拆分為訓(xùn)練集和測試集,其中測試大小為整個數(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)建立了模型,并在測試數(shù)據(jù)上對其進行了評分(預(yù)測),這為我們提供了每個觀察結(jié)果的預(yù)測概率。

生成十分位數(shù)

簡單地說,十分位數(shù)把數(shù)據(jù)進行分箱。所以,我們將所有預(yù)測的概率分成十組,并對它們進行排名,這意味著最高的預(yù)測概率將在十分之一,最低的設(shè)置將在十分之一。我們將使用pandas的 cut() 函數(shù)拆分數(shù)據(jù)。

下面的代碼行創(chuàng)建一個名為Decile_rank_glm的新列, 它保存每個預(yù)測記錄的排名。

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é)果的可視化。

模型評估以提取商業(yè)價值

我們構(gòu)建的任何模型都必須與基線模型進行比較,以評估模型的性能。讓我們在下面進一步探討這一點。

  • 隨機模型:基線模型將是一個隨機模型,這意味著它與拋硬幣一樣好,這意味著有 50% 的概率客戶的電話是正確的或者客戶購買我們的產(chǎn)品。我們的邏輯回歸模型的性能顯然應(yīng)該比這更好。
  • 向?qū)P?/span>:這是另一個極端模型,它的預(yù)測是完美的,這意味著它幾乎以 100% 的準確度進行預(yù)測。此模型不應(yīng)用于生產(chǎn)或任何業(yè)務(wù)決策,因為很可能會過度擬合。
  • 邏輯回歸:我們的模型應(yīng)該介于這兩個極端模型之間,這使我們有足夠的信心做出業(yè)務(wù)決策。

我們將在累積增益圖中可視化上述模型。展現(xiàn)邏輯回歸的性能。

kds.metrics.plot_cumulative_gain(y_test.to_numpy(), prob_glm[:,1])
如何評估<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機器學(xué)習(xí)</a>模型的商業(yè)價值

累積增益圖 | 商業(yè)價值機器學(xué)習(xí)模型

到目前為止看起來不錯,圖在預(yù)期線上,邏輯回歸模型介于我們討論的兩個極端模型之間。

累積增益圖的見解:

  • 如果我們只能選擇前 20%(十分位數(shù) 1 和十分位數(shù) 2),那么我們就可以覆蓋**近 80%**的目標(biāo)類別。
  • 由于這是一個累積圖,我們看到**曲線在十分位數(shù) 5 之后變平,**這意味著十分位數(shù) 6 到 10 要么有最少的記錄,要么沒有。
  • 向?qū)P?/span>在十分位數(shù) 2 的位置達到了100% 標(biāo)記——我們已經(jīng)知道這是一個理想模型,僅供參考。如果我們的模型開始接近或者類似于這兩個極端模型中的任何一個,那么需要檢查我們的模型。

到目前為止,我們已經(jīng)討論了模型、十分位數(shù)及其性能比較。讓我們在十分位數(shù)級別上進一步探討這一點,以更清楚地了解發(fā)生了什么以及我們?nèi)绾胃玫亟忉屵@個過程。我們將在視覺效果的幫助下進行分析,這使它變得更加容易。kds 包有一個非常好的功能,可以在一行代碼中生成所有指標(biāo)報告。

kds.metrics.report(y_test, prob_glm[:,1])
如何評估<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機器學(xué)習(xí)</a>模型的商業(yè)價值

metrics report | Business value ML model

讓我們了解這些情節(jié)中的每一個。需要注意的是,所有圖的 x 軸都是十分位數(shù)。

  1. 提升圖(Lift Plot):這個圖向我們展示了邏輯回歸模型與隨機模型相比到底有多好。例如:十分位數(shù) 2 給了我們幾乎 4 倍的提升,這意味著我們可以比隨機模型方法做得好 4 倍。當(dāng)我們進入更高的十分位數(shù)時,升力下降并最終滿足隨機模型線,這是因為所有更高的概率分數(shù)值都在我們已經(jīng)在累積增益圖中看到的最高十分位數(shù)(1 到 3)中。因此,底部十分位數(shù)的概率較低且?guī)缀跖c隨機模型相同。
  2. 十分位數(shù)提升圖(Decile-wise Lift Plot):該圖向我們展示了每個十分位數(shù)中目標(biāo)類觀察的百分比,我們觀察到十分位數(shù) 1 具有最大值,隨著x軸數(shù)值的延伸,十分位數(shù)百分比下降,在某個點之后它甚至低于隨機模型線。這是因為隨機模型具有隨機設(shè)置的均勻分布的觀測值,而我們的模型在較高的十分位數(shù)中預(yù)測的觀測值較少。
  3. 累積增益圖(Cumulative Gain Plot):在以前的部分中討論過這個問題,還研究了對圖的解釋。
  4. KS 統(tǒng)計圖(KS Statistic Plot):KS 圖評估不同的分布,即事件和非事件,KS 值是分布之間差異最大的點。簡而言之,它有助于我們理解 ML 模型區(qū)分兩個事件的能力。KS 分數(shù)大于 40,如果它恰好在前 3 個十分位數(shù)中,那么它被認為是好的。在我們的例子中,我們從圖中得到了 68.932 和十分位數(shù) 3 的分數(shù)。

讓我們用隨機森林再構(gòu)建一個模型,看看結(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])
如何評估<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機器學(xué)習(xí)</a>模型的商業(yè)價值

img

觀察:

  • 隨機森林模型略好于邏輯回歸模型。
  • 十分位數(shù) 2 的提升略高,KS 統(tǒng)計數(shù)據(jù)為 72.18,而logistic統(tǒng)計數(shù)據(jù)為 68.93

業(yè)務(wù)場景

建議控制:在某些情況下,客戶有業(yè)務(wù)需求,即應(yīng)始終生成最少 X 條建議。在這種情況下,我們可以通過考慮前 3 個十分位數(shù)而不是 2 個十分位數(shù)來獲得更大的建議,并且還可以對其他記錄進行精細控制。

衡量市場反應(yīng):推薦后分析和市場反應(yīng)很容易衡量。例如,從前一點,我們可以單獨跟蹤來自十分位數(shù) 3 的所有額外推薦的表現(xiàn)。來自十分位數(shù) 3 的額外推送是否產(chǎn)生了任何影響(正面或負面)?

優(yōu)化營銷支出:通過關(guān)注前 20-30% 的人群,企業(yè)可以節(jié)省時間、資源和金錢。以避免這些時間、資源和金錢會花費在無響應(yīng)者或定位錯誤客戶上。

結(jié)語

技術(shù)有其一席之地,企業(yè)也有發(fā)言權(quán)。歸根結(jié)底,這一切都與技術(shù)帶來的商業(yè)價值有關(guān)。當(dāng)這些收益用商業(yè)術(shù)語來解釋時,它總是會更有效。它不僅有助于從業(yè)務(wù)中獲得信心,而且還開辟了新的探索機會。

請注意,我們構(gòu)建了兩個分類模型,但沒有研究我們通常為此類模型所做的 ROC 曲線、混淆矩陣精度、召回率和其他標(biāo)準指標(biāo)。強烈建議跟蹤和測量這些指標(biāo)以評估模型的性能,然后遵循此文中的十分位數(shù)方法。根據(jù)目標(biāo)受眾和目標(biāo),使用最適合目標(biāo)的方法。

數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務(wù)器是否宕機 new_captcha: data.new_captcha, // 用于宕機時表示是新驗證碼的宕機 product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }