安全的關(guān)鍵.png)
使用這些基本 REST API 最佳實(shí)踐構(gòu)建出色的 API
均方根誤差(RMSE)是對(duì)MSE的開(kāi)根號(hào)
平均絕對(duì)誤差(MAE)是預(yù)測(cè)值與真實(shí)值之間的誤差取絕對(duì)值的平均
由于MAE用到了絕對(duì)值(不可導(dǎo)),很少用在訓(xùn)練的損失函數(shù)。用于最終評(píng)估模型還是可以的。
上述指標(biāo)的差異對(duì)比:
① 異常值敏感性:MAE也就是真實(shí)預(yù)測(cè)誤差,而RMSE,MSE都有加平方,放大了較大誤差樣本的影響(對(duì)于異常值更敏感),如果遇到個(gè)別偏離程度非常大的離群點(diǎn)時(shí),即便數(shù)量很少,也會(huì)讓這兩個(gè)指標(biāo)變得很差。減少異常點(diǎn)的影響,可以采用RMSLE,它關(guān)注的是預(yù)測(cè)誤差的比例,即便存在離群點(diǎn),也可以降低這些離群點(diǎn)的影響。
② 量綱差異:不同于MSE做了平方,RMSE(平方后又開(kāi)根號(hào))及MAE對(duì)于原量綱是不變,會(huì)更直觀些。而RMSE 與 MAE 的盡管量綱相同,RMSE比MAE實(shí)際會(huì)大一些。這是因?yàn)镽MSE是先對(duì)誤差進(jìn)行平方的累加后再開(kāi)方,也放大了誤差之間的差距。
③ 跨任務(wù)的量綱差異問(wèn)題:實(shí)際運(yùn)用中,像RMSE、MAE是有個(gè)問(wèn)題的,不同任務(wù)的量綱是會(huì)變的,比如我們預(yù)測(cè)股價(jià)誤差是10元,預(yù)測(cè)房?jī)r(jià)誤差是1w,跨越了不同任務(wù)我們就沒(méi)法評(píng)估哪個(gè)模型效果更好。接下來(lái)介紹,R2分?jǐn)?shù)指標(biāo),它對(duì)上面的誤差進(jìn)一步做了歸一化,就有了統(tǒng)一的評(píng)估標(biāo)準(zhǔn)。
R^2分?jǐn)?shù)常用于評(píng)估線性回歸擬合效果時(shí),其定義如下:
R^2分?jǐn)?shù)可以視為我們模型的均方誤差除以用實(shí)際值平均值作為預(yù)測(cè)值時(shí)的均方誤差(像baseline模型)的比值。
這樣,R^2分?jǐn)?shù)范圍被歸約到了[0,1],當(dāng)其值為0時(shí),意味著我們的模型沒(méi)有什么效果,和baseline模型那樣猜的效果一致。當(dāng)值為1,模型效果最好,意味著模型沒(méi)有任何誤差。
補(bǔ)充一點(diǎn),當(dāng)R^2值為0時(shí)且模型為線性回歸時(shí),也可以間接說(shuō)明特征與標(biāo)簽沒(méi)有線性關(guān)系。
這也是常用的共線性指標(biāo)VIF的原理,分別嘗試以各個(gè)特征作為標(biāo)簽,用其他特征去學(xué)習(xí)擬合,得到線性模型R^2值,算出VIF。VIF為1即特征之間完全沒(méi)有共線性(共線性對(duì)線性模型穩(wěn)定性及可解釋性會(huì)有影響,工程上常用VIF<10作為閾值)。
對(duì)于分類模型的分類誤差,可以用損失函數(shù)(如交叉熵。在分類模型中交叉熵比MSE更合適,簡(jiǎn)單來(lái)說(shuō),MSE無(wú)差別得關(guān)注全部類別上預(yù)測(cè)概率和真實(shí)概率的差。交叉熵關(guān)注的是正確類別的預(yù)測(cè)概率。)來(lái)評(píng)估:
但損失函數(shù)評(píng)估分類效果不太直觀,所以,分類任務(wù)的評(píng)估還常用f1-score、precision、recall,可以直接展現(xiàn)各種類別正確分類情況。
準(zhǔn)確率(accuracy)。即所有的預(yù)測(cè)正確(TP+TN)的占總數(shù)(TP+FP+TN+FN)的比例;
查準(zhǔn)率P(precision):是指分類器預(yù)測(cè)為Positive的正確樣本(TP)的個(gè)數(shù)占所有預(yù)測(cè)為Positive樣本個(gè)數(shù)(TP+FP)的比例;
查全率R(recall):是指分類器預(yù)測(cè)為Positive的正確樣本(TP)的個(gè)數(shù)占所有的實(shí)際為Positive樣本個(gè)數(shù)(TP+FN)的比例。
F1-score是查準(zhǔn)率P、查全率R的調(diào)和平均:
上述指標(biāo)的總結(jié):
① 綜合各類別的準(zhǔn)確度:準(zhǔn)確率accuracy對(duì)于分類錯(cuò)誤情況的描述是比較直接的,但是對(duì)于正負(fù)例不平衡的情況下,accuracy評(píng)價(jià)基本沒(méi)有參考價(jià)值,比如 欺詐用戶識(shí)別的分類場(chǎng)景,有950個(gè)正常用戶樣本(負(fù)例),50個(gè)異常用戶(正例),模型把樣本都預(yù)測(cè)為正常用戶樣本,準(zhǔn)確率是非常好的達(dá)到95%。但實(shí)際上是分類效果很差。accuracy無(wú)法表述出少數(shù)類別錯(cuò)誤分類的情況,所以更為常用的是F1-score,比較全面地考量到了查準(zhǔn)率與查全率。
② 權(quán)衡查準(zhǔn)率與查全率:查準(zhǔn)率與查全率常常是矛盾的一對(duì)指標(biāo),有時(shí)要結(jié)合業(yè)務(wù)有所偏倚低地選擇“更準(zhǔn)”或者“更全”(比如在欺詐用戶的場(chǎng)景里面,通常偏向于對(duì)正例識(shí)別更多“更全”,盡管會(huì)有更高的誤判。“寧愿錯(cuò)殺一百,也不放走一個(gè)”),這時(shí)可以根據(jù)不同劃分閾值下的presion與recall曲線(P-R曲線),做出兩者權(quán)衡。
其公式含義可解釋為總準(zhǔn)確度對(duì)比隨機(jī)準(zhǔn)確度的提升 與 完美模型對(duì)比隨機(jī)準(zhǔn)確度的提升的比值:
kappa取值為-1到1之間,通常大于0,可分為五組來(lái)表示不同級(jí)別的一致性:0.0~0.20極低的一致性(slight)、0.21~0.40一般的一致性(fair)、0.41~0.60 中等的一致性(moderate)、0.61~0.80 高度的一致性(substantial) 和 0.81~1幾乎完全一致(almost perfect)。
對(duì)于每個(gè)混淆矩陣,我們計(jì)算兩個(gè)指標(biāo)TPR(True positive rate)和FPR(False positive rate),TPR=TP/(TP+FN)=Recall 即召回率,F(xiàn)PR=FP/(FP+TN),F(xiàn)PR即為實(shí)際負(fù)樣本中,預(yù)測(cè)為正樣本占比。最后,我們以FPR為x軸,TPR為y軸畫(huà)圖,就得到了ROC曲線。
我們通過(guò)求解ROC曲線下的面積,也就是AUC(Area under Curve),AUC可以直觀的評(píng)價(jià)分類器的好壞,通常介于0.5和1之間,值越大越好。
對(duì)AUC指標(biāo)的分析總結(jié):
AUC 對(duì)比 F1-score差異
# 上述指標(biāo)可以直接調(diào)用 sklearn.metrics
from sklearn.metrics import precision_score, recall_score, f1_score, accuracy_score, roc_curve, auc, cohen_kappa_score,mean_squared_error
...
yhat = model.predict(x)
f1_score(y, yhat)
對(duì)于模型的擬合程度,常用欠擬合、擬合良好、過(guò)擬合來(lái)表述。通常,擬合良好的模型有更好泛化能力,在未知數(shù)據(jù)(測(cè)試集)有更好的效果。
我們可以通過(guò)訓(xùn)練及驗(yàn)證集誤差(如損失函數(shù))情況評(píng)估模型的擬合程度。從整體訓(xùn)練過(guò)程來(lái)看,欠擬合時(shí)訓(xùn)練誤差和驗(yàn)證集誤差均較高,隨著訓(xùn)練時(shí)間及模型復(fù)雜度的增加而下降。在到達(dá)一個(gè)擬合最優(yōu)的臨界點(diǎn)之后,訓(xùn)練誤差下降,驗(yàn)證集誤差上升,這個(gè)時(shí)候模型就進(jìn)入了過(guò)擬合區(qū)域。
實(shí)踐中的欠擬合通常不是問(wèn)題,可以通過(guò)使用強(qiáng)特征及較復(fù)雜的模型提高學(xué)習(xí)的準(zhǔn)確度。而解決過(guò)擬合,即如何減少泛化誤差,提高泛化能力,通常才是優(yōu)化模型效果的重點(diǎn)。對(duì)于解決過(guò)擬合,常用的方法在于提高數(shù)據(jù)的質(zhì)量、數(shù)量以及采用適當(dāng)?shù)恼齽t化策略。具體可見(jiàn)系列文章:一文深層解決模型過(guò)擬合
如果上線的模型不穩(wěn)定,意味著模型不可控,影響決策的合理性。對(duì)于業(yè)務(wù)而言,這就是一種不確定性風(fēng)險(xiǎn),這是不可接受的(特別對(duì)于厭惡風(fēng)險(xiǎn)的風(fēng)控領(lǐng)域)。
我們通常用群體穩(wěn)定性指標(biāo)(Population Stability Index,PSI),?衡量未來(lái)的(測(cè)試集)樣本及模型訓(xùn)練樣本評(píng)分的分布比例是否保持一致,以評(píng)估模型的穩(wěn)定性。同理,PSI也可以用衡量特征值的分布差異,評(píng)估數(shù)據(jù)特征層面的穩(wěn)定性。
PSI計(jì)算以訓(xùn)練樣本的模型評(píng)分作為穩(wěn)定性的參考點(diǎn)(預(yù)期分?jǐn)?shù)占比),衡量未來(lái)的實(shí)際預(yù)測(cè)分?jǐn)?shù)(實(shí)際分布占比)的誤差情況。計(jì)算公式為 SUM(各分?jǐn)?shù)段的 (實(shí)際占比 – 預(yù)期占比)* ln(實(shí)際占比 / 預(yù)期占比) )
具體的計(jì)算步驟及示例代碼如下:step1:將預(yù)期數(shù)值分布(開(kāi)發(fā)數(shù)據(jù)集)進(jìn)行分箱離散化,統(tǒng)計(jì)各個(gè)分箱里的樣本占比。step2: 按相同分箱區(qū)間,對(duì)實(shí)際分布(測(cè)試集)統(tǒng)計(jì)各分箱內(nèi)的樣本占比。step3:計(jì)算各分箱內(nèi)的A – E和Ln(A / E),計(jì)算index = (實(shí)際占比 – 預(yù)期占比)* ln(實(shí)際占比 / 預(yù)期占比) 。step4: 將各分箱的index進(jìn)行求和,即得到最終的PSI
import?math
import?numpy?as?np
import?pandas?as?pd
def?calculate_psi(base_list,?test_list,?bins=20,?min_sample=10):
????try:
????????base_df?=?pd.DataFrame(base_list,?columns=['score'])
????????test_df?=?pd.DataFrame(test_list,?columns=['score'])?
????????
????????#?1.去除缺失值后,統(tǒng)計(jì)兩個(gè)分布的樣本量
????????base_notnull_cnt?=?len(list(base_df['score'].dropna()))
????????test_notnull_cnt?=?len(list(test_df['score'].dropna()))
????????#?空分箱
????????base_null_cnt?=?len(base_df)?-?base_notnull_cnt
????????test_null_cnt?=?len(test_df)?-?test_notnull_cnt
????????
????????#?2.最小分箱數(shù)
????????q_list?=?[]
????????if?type(bins)?==?int:
????????????bin_num?=?min(bins,?int(base_notnull_cnt?/?min_sample))
????????????q_list?=?[x?/?bin_num?for?x?in?range(1,?bin_num)]
????????????break_list?=?[]
????????????for?q?in?q_list:
????????????????bk?=?base_df['score'].quantile(q)
????????????????break_list.append(bk)
????????????break_list?=?sorted(list(set(break_list)))?#?去重復(fù)后排序
????????????score_bin_list?=?[-np.inf]?+?break_list?+?[np.inf]
????????else:
????????????score_bin_list?=?bins
????????
????????#?4.統(tǒng)計(jì)各分箱內(nèi)的樣本量
????????base_cnt_list?=?[base_null_cnt]
????????test_cnt_list?=?[test_null_cnt]
????????bucket_list?=?["MISSING"]
????????for?i?in?range(len(score_bin_list)-1):
????????????left??=?round(score_bin_list[i+0],?4)
????????????right?=?round(score_bin_list[i+1],?4)
????????????bucket_list.append("("?+?str(left)?+?','?+?str(right)?+?']')
????????????
????????????base_cnt?=?base_df[(base_df.score?>?left)?&?(base_df.score?<=?right)].shape[0]
????????????base_cnt_list.append(base_cnt)
????????????
????????????test_cnt?=?test_df[(test_df.score?>?left)?&?(test_df.score?<=?right)].shape[0]
????????????test_cnt_list.append(test_cnt)
????????
????????#?5.匯總統(tǒng)計(jì)結(jié)果????
????????stat_df?=?pd.DataFrame({"bucket":?bucket_list,?"base_cnt":?base_cnt_list,?"test_cnt":?test_cnt_list})
????????stat_df['base_dist']?=?stat_df['base_cnt']?/?len(base_df)
????????stat_df['test_dist']?=?stat_df['test_cnt']?/?len(test_df)
????????
????????def?sub_psi(row):
????????????#?6.計(jì)算PSI
????????????base_list?=?row['base_dist']
????????????test_dist?=?row['test_dist']
????????????#?處理某分箱內(nèi)樣本量為0的情況
????????????if?base_list?==?0?and?test_dist?==?0:
????????????????return?0
????????????elif?base_list?==?0?and?test_dist?>?0:
????????????????base_list?=?1?/?base_notnull_cnt???
????????????elif?base_list?>?0?and?test_dist?==?0:
????????????????test_dist?=?1?/?test_notnull_cnt
????????????????
????????????return?(test_dist?-?base_list)?*?np.log(test_dist?/?base_list)
????????
????????stat_df['psi']?=?stat_df.apply(lambda?row:?sub_psi(row),?axis=1)
????????stat_df?=?stat_df[['bucket',?'base_cnt',?'base_dist',?'test_cnt',?'test_dist',?'psi']]
????????psi?=?stat_df['psi'].sum()
????????
????except:
????????print('error!!!')
????????psi?=?np.nan?
????????stat_df?=?None
????return?psi,?stat_df
##?也可直接調(diào)用toad包計(jì)算psi
#?prob_dev模型在訓(xùn)練樣本的評(píng)分,prob_test測(cè)試樣本的評(píng)分
psi?=?toad.metrics.PSI(prob_dev,prob_test)
分析psi指標(biāo)原理,經(jīng)過(guò)公式變形,我們可以發(fā)現(xiàn)psi的含義等同于第一項(xiàng)實(shí)際分布(A)與預(yù)期分布(E)的KL散度 + 第二項(xiàng)預(yù)期分布(E)與實(shí)際分布(A)之間的KL散度之和,KL散度可以單向(非對(duì)稱性指標(biāo))地描述信息熵差異,上式更為綜合地描述分布的差異情況。
PSI數(shù)值越小(經(jīng)驗(yàn)是常以<0.1作為標(biāo)準(zhǔn)),兩個(gè)分布之間的差異就越小,代表越穩(wěn)定。
PSI值在實(shí)際應(yīng)用中的優(yōu)點(diǎn)在于其計(jì)算的便捷性,但需要注意的是,PSI的計(jì)算受分組數(shù)量及方式、群體樣本量和現(xiàn)實(shí)業(yè)務(wù)政策等多重因素影響,尤其是對(duì)業(yè)務(wù)變動(dòng)劇烈的小樣本來(lái)說(shuō),PSI的值往往超出一般的經(jīng)驗(yàn)水平,因此需要結(jié)合實(shí)際的業(yè)務(wù)和數(shù)據(jù)情況進(jìn)行具體分析。
文章轉(zhuǎn)自微信公眾號(hào)@算法進(jìn)階
對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力
一鍵對(duì)比試用API 限時(shí)免費(fèi)