前言
在本教程中,你将学习如何将Arize集成到梯度部署中,以实现强大的ML模型可观察性。本教程中使用的代码可以在GitHub仓库中找到。
本教程的视角来自一家拥有客户数据(如任期、账单历史等)并希望防止客户流失的电信公司。这家电信公司希望创建一个模型,以确定客户是否有可能流失,如果是的话,就采取行动(例如,联系客户进行销售),以防止这种情况发生。一旦模型创建完成,该公司希望部署该模型,并通过跟踪数据随时间的变化和更好地可视化他们的数据来监测模型的性能。
我们将通过5个主要步骤完成上述构建工作:
- 建立分类模型
- 集成Arize API和记录数据
- 配置Arize模型基线
- 创建模型的梯度部署
- 记录进入Arize的请求
我们开始吧
教程步骤
建立模型
在这个练习中,我们首先需要的是一个预测流失率的分类模型。在上面链接的GitHub repo中,有一个名为churn_model.ipynb的文件,包含了模型构建过程。在这个Python笔记本中,有数据导入步骤,数据预处理步骤,以及模型训练步骤。在这个模型训练过程的最后,XGBoost分类模型被保存为一个名为 *xgb_cl_model.*json的.json文件。
这个笔记本中使用的数据来自Kaggle,可以在这里找到。
你可以从下面的笔记本中看到模型的训练和保存过程:
import xgboost as xgb
from sklearn.metrics import accuracy_score
# Create and train a XGBoost Classifier
xgb_cl = xgb.XGBClassifier(use_label_encoder=False)
xgb_cl.fit(X_train, y_train)
# Predict on test set
preds = xgb_cl.predict(X_test)
print(accuracy_score(y_test, preds))
# Save model as .json file
xgb_cl.save_model('xgb_cl_model.json')
Arize API
现在我们已经训练并保存了我们的模型,让我们把这个模型的训练数据记录到Arize,这样我们就可以把它作为一个基线。一旦设定了基线,任何未来的实时预测将通过我们在Arize的模型与基线数据集进行比较,以监测数据或预测的任何漂移。
我们需要做的第一件事是创建一个Arize账户。Arize有一个免费级别,你可以在本教程中使用。
第一步是进入Arize网站,点击 "开始",按照提示创建你的账户。一旦你创建了你的账户,你将需要你的空间密钥和API密钥,以便从你的Python代码连接到Arize。
你可以在你的Arize项目中找到这两个密钥,点击Space Setting,在页面右侧的Overview标签中找到它们。
一旦你有了上面的两个键,你可以把它们插入churn_model.ipynb文件中,如下图:
from arize.pandas.logger import Client, Schema
from arize.utils.types import Environments, ModelTypes
SPACE_KEY = "YOUR-SPACE-KEY"
API_KEY = "YOUR-API-KEY"
arize_client = Client(space_key=SPACE_KEY, api_key=API_KEY)
model_id = (
"telco-churn-demo-model" # This is the model name that will show up in Arize
)
model_version = "v1.0" # Version of model - can be any string
if SPACE_KEY == "YOUR-SPACE-KEY" or API_KEY == "YOUR-API-KEY":
raise ValueError("❌ NEED TO CHANGE SPACE AND/OR API_KEY")
else:
print("✅ Arize setup complete!")
一旦上面的单元格填充了你的键,你就可以运行Python笔记本的其余部分,它将使用下面的代码将训练数据加载到你的Arize模型:
# Define a Schema() object for Arize to pick up data from the correct columns for logging
training_schema = Schema(
prediction_id_column_name="customerID",
prediction_label_column_name="Predicted_Churn",
actual_label_column_name="Churn",
feature_column_names=feature_cols,
)
# Logging Training DataFrame
training_response = arize_client.log(
dataframe=combined_train_df,
model_id=model_id,
model_version=model_version,
model_type=ModelTypes.SCORE_CATEGORICAL,
environment=Environments.TRAINING,
schema=training_schema,
)
# If successful, the server will return a status_code of 200
if training_response.status_code != 200:
print(
f"logging failed with response code {training_response.status_code}, {training_response.text}"
)
else:
print(f"✅ You have successfully logged training set to Arize")
一旦你成功运行上述代码单元,回到你的Arize账户,点击空间概述,并点击进入telco-churn-demo-model。一旦进入你的Arize模型,导航到数据摄取标签,你会看到训练数据被Arize摄取和处理。
这个过程可能需要10分钟。一旦这个过程完成,继续进行教程中的配置数据基线步骤。
配置数据基线
要知道数据摄取是否已经完成,在Arize数据集标签上,你应该看到你的数据集以及它的特征细节被列出。
现在,我们要把我们的训练数据设置为Arize模型的基线数据。你可以通过点击数据集选项卡中的配置基线按钮来做到这一点。
使用以下设置来完成配置基线的过程:
- 设置一个基线。生产前
- 设置一个生产前的基线。培训版本 v1.0
一旦设置了这个基线,今后进入你的模型的任何请求都将与基线进行比较,这样我们就可以监测数据和预测的漂移。
创建一个部署
现在基线数据已经设置好了,我们将创建一个实时部署的应用程序,为我们的模型服务,能够接受传入的API调用,并将其记录在Arize中进行监控。
在GitHub资源库中,有一个Flask应用程序的Python文件:app.py。这个Flask应用程序在请求正文中接收一个json对象,处理数据,预测客户是否会流失,并将请求数据和预测记录到Arize。
**在这个app.py文件中,你需要做的一个改动是在文件的第71和72行插入你的Arize空间密钥和API密钥。**像在Python笔记本中一样,这将允许你的应用程序连接到你的Arize模型。
一旦写好了Flask应用,我们就需要在Gradient中部署它。第一步将是创建一个Gradient数据集。你可以通过导航到Gradient项目中的数据标签,然后点击添加按钮来完成。在表格中填写你所需要的数据集名称(例如:areze-deployment-repo),然后点击Create来创建你的新数据集。一旦数据集被创建,注意数据集的ID(它将是一个15个字符的字符串)。
在你创建了数据集之后,我们现在可以部署我们的模型了。在GitHub repo中有一个叫deployment.yaml的文件。你可以用它作为模板部署规范来构建你的Gradient部署。
要建立你的部署,请导航到Gradient项目中的部署选项卡,一旦进入该选项卡,点击创建按钮,然后点击上传部署规范链接,如下图所示。
进入表格后,将deployment.yaml 中的文本复制到文本框中,并将第11行的数据集ID替换为你上面创建的数据集的ID。一旦你把该文本作为部署规格粘贴进去,并命名了部署,点击创建部署。你的部署可能需要几分钟的时间来启动。一旦部署成功启动,在 "部署 "选项卡中,它将显示为 "就绪"。
如果你点击你的部署,你会看到一个与部署端点相对应的链接,如下所示。
点击该链接以检查你的部署是否已经启动和运行。如果部署成功运行,你将看到一个页面,说明部署是健康的。
记录收到的请求
现在你的应用程序已经上线,可以接受传入的请求,我们将向你的应用程序的端点发送请求。当你的应用程序收到一个请求,它将处理数据并将其输入模型,预测客户是否会流失,然后将该预测和请求数据一起写入Arize。随着来电不断,你可以监测任何数据漂移,并查看来电流量。
有多种方法来发送API调用到你的部署,但我将使用一个叫做Postman的应用程序。你可以在这里下载Postman,为了本教程的目的,它是免费使用的。
安装后,你可以使用Postman向你的部署端点发送一个Post请求。在Postman中,通过点击页面左侧工具栏上的 "新建 "按钮,创建一个新的HTTP请求。然后,将请求的类型改为POST,并在请求的正文中粘贴下面的JSON对象:
{"customerID":"7590-VHVEG","gender":"Female","SeniorCitizen":0,
"Partner":"Yes","Dependents":"No","tenure":1,"PhoneService":"No",
"MultipleLines":"No phone service","InternetService":"DSL",
"OnlineSecurity":"No","OnlineBackup":"Yes","DeviceProtection":"No",
"TechSupport":"No","StreamingTV":"No","StreamingMovies":"No",
"Contract":"Month-to-month","PaperlessBilling":"Yes",
"PaymentMethod":"Electronic check","MonthlyCharges":29.85,
"TotalCharges":"29.85"}
最后,你将在请求的URL文本框中粘贴你的部署端点,并在端点上附加"/prediction"。当所有这些都完成后,你应该有一个Postman请求,看起来像下面这个
一旦你设置了请求,你可以点击发送,这将把你的请求发送到你的部署。一旦请求完成处理,你将能够在Postman页面的底部看到一个响应,它将告诉你该模型预测客户将流失(Churn)或不流失(No Churn)。
现在我们已经看到了响应,让我们看看Arize,看看我们是否能看到请求被摄入。如果你回到你的Arize模型,看一下数据摄取标签,你应该看到一个额外的请求。这可能需要几分钟的时间,但如果成功的话,你应该看到类似于下面的图片
成功了!我们的部署正在工作,并记录传入的请求和预测到Arize。
为了加快这个过程,我将在下面分享一些观点,就像我们在几天内记录了1300个请求一样。
首先,让我们看看预测的漂移。下面的视图可以在漂移标签的分布比较图中找到。
我们可以看到,到目前为止,预测分布与基线预测分布相似,所以这里没有明显的担忧。
接下来,让我们看看我们的特征中是否有任何其他的数据漂移。
对于大多数特征来说,除了TotalCharges经历了较高的漂移之外,看起来只有轻微的漂移。我可以通过点击该功能来调查TotalCharges,以获得更详细的视图。
总收费的详细视图
从上面的视图中,我可以看到TotalCharges的漂移在8.7PSI左右徘徊。我们可以关注这个功能,并随着时间的推移监测PSI,看看我们在过去3个小时内是否有不寻常的数据分布,或者这是一个更持久的问题。
本教程就到此为止!本教程的重点是了解如何将梯度部署与Arize整合,但还有许多其他教程可以让你更深入地了解Arize,我将在下面提供链接。
接下来的步骤
上述过程将允许你跟踪传入的请求,并分析Gradient部署模型中的任何数据或预测的漂移。然而,你可以采取很多潜在的下一步措施来建立你的ML可观察系统的健壮性。
你可以创建监控器来跟踪指标,并在某些阈值被跨越时向你发出警报。你也可以在你的过程中,在实际结果已知的情况下记录实际情况(例如,客户最终是否流失)。这将帮助你跟踪你的模型在任何特定时刻的准确性,并允许你看到随着时间的推移而发生的变化。
结论
很好!现在你应该能够启动一个梯度部署,为一个模型提供服务,并与Arize集成,以观察生产中的应用程序。
同样,本教程中提到的代码库的链接可以在这里找到。
最后,如果你想看其他使用Arize的教程,请看他们的例子页面。
今天就为您的机器学习工作流程增加速度和简单性吧