自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

用Python監(jiān)測MLOps管道中的模型性能

譯文
人工智能 機(jī)器學(xué)習(xí)
這篇Python教程介紹了如何通過監(jiān)測性能來維持生產(chǎn)環(huán)境中模型的質(zhì)量。

點(diǎn)擊參加51CTO網(wǎng)站內(nèi)容調(diào)查問卷

譯者 | 布加迪

審校 | 重樓

機(jī)器學(xué)習(xí)模型只有在生產(chǎn)環(huán)境中用于解決業(yè)務(wù)問題時(shí)才有幫助。然而,業(yè)務(wù)問題和機(jī)器學(xué)習(xí)模型在不斷發(fā)展變化。這就要求我們維護(hù)機(jī)器學(xué)習(xí),以便性能跟上業(yè)務(wù)KPI。這就是MLOps概念的由來

MLOps或機(jī)器學(xué)習(xí)運(yùn)營是一整套用于生產(chǎn)環(huán)境中機(jī)器學(xué)習(xí)的技術(shù)和工具。MLOps處理的事情機(jī)器學(xué)習(xí)自動化、版本控制、交付和監(jiān)測。本文重點(diǎn)介紹監(jiān)測以及如何在生產(chǎn)環(huán)境中使用Python軟件來監(jiān)測模型性能

監(jiān)測模型性能

當(dāng)我們談?wù)?/span>MLOps中的監(jiān)測時(shí),它其實(shí)指很多方面,因?yàn)?/span>MLOps的原則之一就是監(jiān)測。比如說:

  • 監(jiān)測數(shù)據(jù)分布在一段時(shí)間以來的變化
  • 監(jiān)測開發(fā)環(huán)境和生產(chǎn)環(huán)境中使用的功能特性
  • 監(jiān)測模型衰減
  • 監(jiān)測模型性能
  • 監(jiān)測系統(tǒng)失效情況

MLOps中仍然有許多方面需要監(jiān)測,但是本文重點(diǎn)關(guān)注監(jiān)測模型性能。在本文中,模型性能是指模型利用沒有見過的數(shù)據(jù)做出可靠預(yù)測的能力,用特定的度量指標(biāo)(比如準(zhǔn)確性、精度召回率等)加以衡量。

什么我們需要監(jiān)測模型性能?為了保持模型預(yù)測的可靠性以解決業(yè)務(wù)問題。在部署到生產(chǎn)環(huán)境之前,我們經(jīng)常計(jì)算模型性能及其對KPI的影響。比如說,如果我們希望模型仍然遵循業(yè)務(wù)需求,基準(zhǔn)要求是70%的準(zhǔn)確性,但低于這個(gè)標(biāo)準(zhǔn)不可接受。這就是為什么監(jiān)測性能可以保證模型始終滿足業(yè)務(wù)需求。

使用Python,我們將學(xué)習(xí)如何實(shí)現(xiàn)模型監(jiān)測。不妨從安裝軟件入手。模型監(jiān)測方面有很多選擇,但是就本文而言,我們將使用名為evidently開源軟件包進(jìn)行監(jiān)測。

用Python設(shè)置模型監(jiān)測

首先,我們需要用以下代碼安裝evidently軟件包。

pip install evidently

安裝完軟件包后,我們將下載數(shù)據(jù)示例,即來自Kaggle的保險(xiǎn)索賠數(shù)據(jù)。此外,我們將在進(jìn)一步使用這些數(shù)據(jù)之前清理數(shù)據(jù)。

import pandas as pd

df = pd.read_csv("insurance_claims.csv")

# Sort the data based on the Incident Data
df = df.sort_values(by="incident_date").reset_index(drop=True)

# Variable Selection
df = df[
 [
  "incident_date",
 "months_as_customer",
  "age",
 "policy_deductable",
  "policy_annual_premium",
 "umbrella_limit",
  "insured_sex",
 "insured_relationship",
  "capital-gains",
 "capital-loss",
 "incident_type",
  "collision_type",
 "total_claim_amount",
 "injury_claim",
 "property_claim",
 "vehicle_claim",
  "incident_severity",
 "fraud_reported",
 ]
]

# Data Cleaning and One-Hot Encoding
df = pd.get_dummies(
 df,
 columns=[
  "insured_sex",
  "insured_relationship",
 "incident_type",
 "collision_type",
  "incident_severity",
 ],
 drop_first=True,
)

df["fraud_reported"] = df["fraud_reported"].apply(lambda x: 1 if x == "Y" else 0)

df = df.rename(columns={"incident_date": "timestamp", "fraud_reported": "target"})

for i in df.select_dtypes("number").columns:
 df[i] = df[i].apply(float)

data = df[df["timestamp"] < "2015-02-20"].copy()
val = df[df["timestamp"] >= "2015-02-20"].copy()

在上面的代碼中,我們選擇了一些用于訓(xùn)練模型的列,將它們轉(zhuǎn)換數(shù)字表示,并將數(shù)據(jù)分為參考數(shù)據(jù)data和當(dāng)前數(shù)據(jù)val

我們需要MLOps管道中的參考或基準(zhǔn)數(shù)據(jù)來監(jiān)測模型性能。它通常是訓(xùn)練數(shù)據(jù)分開來的數(shù)據(jù)(比如測試數(shù)據(jù)。此外,我們還需要當(dāng)前數(shù)據(jù)或模型未看到的數(shù)據(jù)(入站數(shù)據(jù))。

不妨使用evidently來監(jiān)測數(shù)據(jù)和模型性能。由于數(shù)據(jù)漂移會影響模型性能,所以它也是需要監(jiān)測的對象。

from evidently.report import Report
from evidently.metric_preset import DataDriftPreset

data_drift_report = Report(metrics=[
  DataDriftPreset(),
])

data_drift_report.run(current_data=val, reference_data=data, column_mapping=None)
data_drift_report.show(mode='inline')

數(shù)據(jù)集漂移

evidently軟件包將自動顯示一份報(bào)告,表明數(shù)據(jù)集所出現(xiàn)的情況。該信息包括數(shù)據(jù)集漂移和列漂移。對于上述示例而言,沒有出現(xiàn)任何數(shù)據(jù)集漂移,但是有兩列出現(xiàn)了漂移。

報(bào)告顯示,列property_claimtimestamp確實(shí)檢測到了漂移。這些信息可以在MLOps管道中重新訓(xùn)練模型,或者我們?nèi)孕枰M(jìn)一步的數(shù)據(jù)探索。

如果需要,我們也可以在日志字典對象中獲取上述數(shù)據(jù)報(bào)告。

data_drift_report.as_dict()

接下來,不妨嘗試從數(shù)據(jù)中訓(xùn)練分類器模型,并嘗試使用evidently來監(jiān)測模型性能。

from sklearn.ensemble import RandomForestClassifier

rf = RandomForestClassifier()
rf.fit(data.drop(['target', 'timestamp'], axis = 1), data['target']) 

evidently將需要參考數(shù)據(jù)集和當(dāng)前數(shù)據(jù)集中的目標(biāo)列和預(yù)測列。不妨將模型預(yù)測添加到數(shù)據(jù)集中,并使用evidently來監(jiān)測性能。

data['prediction'] = rf.predict(data.drop(['target', 'timestamp'], axis = 1))
val['prediction'] = rf.predict(val.drop(['target', 'timestamp'], axis = 1))

捎帶提一下,最好使用不是訓(xùn)練數(shù)據(jù)的參考數(shù)據(jù)來監(jiān)測模型性能。不妨使用以下代碼設(shè)置模型性能監(jiān)測。

from evidently.metric_preset import ClassificationPreset

classification_performance_report = Report(metrics=[
  ClassificationPreset(),
])

classification_performance_report.run(reference_data=data, current_data=val)

classification_performance_report.show(mode='inline')

在結(jié)果中,我們得到的當(dāng)前模型質(zhì)量指標(biāo)低于參考(由于我們使用訓(xùn)練數(shù)據(jù)作為參考,這在預(yù)料之中)。業(yè)務(wù)需求而定上述度量指標(biāo)表明我們需要采取的下一步。不妨看看從evidently報(bào)告中得到的其他信息。

類Representation報(bào)告顯示了實(shí)際的類分布。

混淆矩陣顯示了預(yù)測值與參考數(shù)據(jù)集和當(dāng)前數(shù)據(jù)集中的實(shí)際數(shù)據(jù)的對比情況。

按類的質(zhì)量度量指標(biāo)顯示每個(gè)類的性能如何。

與前面一樣,我們可以使用以下代碼將分類性能報(bào)告轉(zhuǎn)換字典日志。

classification_performance_report.as_dict ()

以上就是全部內(nèi)容。您可以在當(dāng)前擁有的任何MLOps管道中設(shè)置模型性能監(jiān)測機(jī)制,它仍然可以很好地工作。

結(jié)語

模型性能監(jiān)測是MLOps管道中的一項(xiàng)基本任務(wù),幫助確保我們的模型跟上業(yè)務(wù)需求。使用一個(gè)名為evidently的Python軟件包,我們就能輕松設(shè)置模型性能監(jiān)測機(jī)制,它可以整合到任何現(xiàn)有的MLOps管道中。

原文標(biāo)題:Monitor Model Performance in the MLOps Pipeline with Python,作者:Cornellius Yudha Wijaya


責(zé)任編輯:華軒 來源: 51CTO
相關(guān)推薦

2024-12-23 00:27:40

2021-02-20 20:36:56

Linux無名管道

2018-09-10 08:45:04

Linux管道命令

2010-12-22 12:54:03

Linux性能監(jiān)測

2023-04-27 13:09:10

MLOps工程師軟技能

2013-07-01 17:35:30

2025-03-27 00:45:00

2010-12-22 13:14:52

Linux性能監(jiān)測

2010-12-22 13:09:23

Linux性能監(jiān)測CPU

2010-12-22 13:19:43

Linux性能監(jiān)測網(wǎng)絡(luò)

2024-06-17 15:59:53

2022-04-23 16:30:22

Linux磁盤性能

2023-09-13 08:00:00

MLOps數(shù)據(jù)科學(xué)

2021-07-06 14:17:16

MLOps機(jī)器學(xué)習(xí)AI

2011-11-08 21:51:43

Linux 監(jiān)控 IO

2010-12-22 13:17:47

Linux性能監(jiān)測磁盤IO

2016-11-07 18:26:39

IT可視化

2022-11-14 15:07:09

Linux管道

2023-09-08 15:37:29

軟件開發(fā)性能

2019-10-22 14:56:14

物聯(lián)網(wǎng)IoT預(yù)測性維護(hù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號