在本教程中,您将了解 DeepChecks,并学习如何用它进行数据验证和机器学习测试。我们还将使用 GitHub Actions 自动化模型测试,并将结果保存为制品(artifacts)。
随着教程推进,我们将了解机器学习测试与 DeepChecks,运行 DeepChecks 的数据完整性套件并生成综合报告。我们还将通过运行模型评估套件生成机器学习测试报告,学习如何只运行单个测试而非完整套件,使用 GitHub Actions 自动化测试流程,并将机器学习测试报告保存为 GitHub Artifact。
作者供图
什么是机器学习测试?
机器学习测试是一项关键流程,用于评估与验证机器学习模型的表现,以确保其公平性、准确性与稳健性。它不只是关于模型准确率与性能,我们还需要关注模型偏见、假阳性、假阴性、各类性能指标、模型吞吐量,以及模型与 AI 伦理的契合度。
测试过程包含多种评估,如数据验证、交叉验证、F1 分数、混淆矩阵、预测漂移、数据漂移与稳健性测试等,分别用于检验模型性能与可靠性的不同方面。
我们还会将数据集划分为三个子集,以便在训练过程中以及训练后在未见过的数据上评估模型。
机器学习测试是 AI 应用的必要组成部分,将其与模型训练一同自动化能够为我们带来可靠、可用的 AI 系统。
如果您是机器学习新手,想系统学习基础知识,建议学习 Machine Learning Fundamentals with Python 技能路径。该课程将从使用 scikit-learn 进行监督学习开始,讲解 Python 机器学习基础。
开始使用 DeepChecks
DeepChecks 是一个开源的 Python 包,旨在促进对机器学习模型与数据的全面测试与验证。它提供了丰富的内置检查,用于识别模型性能、数据分布、数据完整性等方面的问题。DeepChecks 还支持持续验证功能,确保模型在部署并用于真实场景后依然可靠有效。
我们将先使用 pip 命令安装该 Python 包。
% pip install deepchecks - - upgrade - q技术支持
加载数据集
在本教程中,我们使用 DataCamp 数据集中的 贷款数据(Loan Data) 。它包含 9578 行,记录了贷款结构、借款人信息以及是否全额还款。
使用 Pandas 加载 CSV 文件并展示前 5 行。
import pandas as pd
loan_data = pd. read_csv( "loan_data.csv" )
loan_data. head( ) 技术支持
准备数据集
使用贷款数据集、标签列名和分类型特征名创建 DeepChecks 数据集。
from sklearn. model_selection import train_test_split
from deepchecks. tabular import Dataset
label_col = 'not.fully.paid'
deep_loan_data = Dataset( loan_data, label= label_col, cat_features= [ "purpose" ] ) 技术支持
运行 DeepChecks 数据完整性套件
我们将使用适用于表格数据的数据完整性套件。该套件将自主运行所有测试,并生成带结果的交互式报告。
为此,我们将导入数据完整性套件,实例化后传入 DeepChecks 贷款数据运行套件,并最终显示结果。
from deepchecks. tabular. suites import data_integrity
integ_suite = data_integrity( )
suite_result = integ_suite. run( deep_loan_data)
suite_result. show( ) 技术支持
注意: 我们使用 DataLab 作为开发环境。ipywidgets 被禁用,导致无法直接显示结果。我们将使用 “show_in_iframe” 函数以 iframe 形式展示结果。各层级显示的结果是一致的。
suite_result. show_in_iframe( ) 技术支持
我们的数据完整性报告包含以下测试结果:
特征-标签 相关性
特征-特征 相关性
列中单一取值
特殊字符
混合空值
混合数据类型
字符串不匹配
数据重复
字符串长度越界
冲突标签
异常样本检测
Jupyter Notebook 中的数据完整性测试结果。
您还可以将结果保存为 HTML 文件,与同事分享。
suite_result. save_as_html( ) 技术支持
'output.html' 技术支持
运行单个测试
在大数据集上运行整个套件效率不高,因为生成结果会花费较长时间。相反,您可以只运行与数据相关的少量单项测试,并自行生成报告。
要运行单个测试,导入表格检查、初始化检查,并在 DeepCheck 贷款数据上运行。随后,使用 results.value 函数显示数值,而不是生成交互式报告。
from deepchecks. tabular. checks import IsSingleValue, DataDuplicates
result = IsSingleValue( ) . run( deep_loan_data)
result. value技术支持
如您所见,它显示了每列中唯一值的数量。
{ 'credit.policy' : 2 ,
'purpose' : 7 ,
'int.rate' : 249 ,
'installment' : 4788 ,
'log.annual.inc' : 1987 ,
'dti' : 2529 ,
'fico' : 44 ,
'days.with.cr.line' : 2687 ,
'revol.bal' : 7869 ,
'revol.util' : 1035 ,
'inq.last.6mths' : 28 ,
'delinq.2yrs' : 11 ,
'pub.rec' : 6 ,
'not.fully.paid' : 2 } 技术支持
我们再来检查数据中的重复样本。
result = DataDuplicates( ) . run( deep_loan_data)
result. value技术支持
数据集中重复值为 0。
0.0 技术支持
使用 DeepChecks 进行机器学习测试
本节我们将集成多种模型并在处理后的贷款数据集上进行训练。随后,为生成模型测试报告,我们将在训练集与测试集上运行模型评估套件。
数据处理与模型训练
从 Scikit-learn 导入必要函数。
将数据集划分为训练集与测试集。
使用标签编码器将分类型列“purpose”转换为数值。
定义 LogisticRegression、RandomForestClassifier 和 GaussianNB 模型。
使用投票分类器集成模型。
在训练集上训练集成模型。
from sklearn. linear_model import LogisticRegression
from sklearn. ensemble import RandomForestClassifier
from sklearn. ensemble import VotingClassifier
from sklearn. naive_bayes import GaussianNB
from sklearn. preprocessing import LabelEncoder
df_train, df_test = train_test_split( loan_data, stratify= loan_data[ label_col] , random_state= 0 )
label_encoder = LabelEncoder( )
df_train[ 'purpose' ] = label_encoder. fit_transform( df_train[ 'purpose' ] )
df_test[ 'purpose' ] = label_encoder. fit_transform( df_test[ 'purpose' ] )
model_1 = LogisticRegression( random_state= 1 , max_iter= 10000 )
model_2 = RandomForestClassifier( n_estimators= 50 , random_state= 1 )
model_3 = GaussianNB( )
clf_model = VotingClassifier(
estimators= [ ( 'lr' , model_1) , ( 'rf' , model_2) , ( 'svc' , model_3) ] ,
voting= 'soft'
)
clf_model. fit( df_train. drop( label_col, axis= 1 ) , df_train[ label_col] ) 技术支持
运行模型评估套件
我们将运行 DeepChecks 的模型评估套件来评估模型性能。
将训练集与测试集都转换为 DeepCheck 数据集。
初始化模型评估并在训练集、测试集与模型上运行。
在 iframe 中展示结果。
from deepchecks. tabular. suites import model_evaluation
deep_train = Dataset( df_train, label= label_col, cat_features= [ ] )
deep_test = Dataset( df_test, label= label_col, cat_features= [ ] )
evaluation_suite = model_evaluation( )
suite_result = evaluation_suite. run( deep_train, deep_test, clf_model)
suite_result. show_in_iframe( ) 技术支持
我们的模型评估报告包含以下测试结果:
ROC 报告
弱分段表现
未使用特征
训练-测试性能
预测漂移
简单模型对比
模型推理时间
混淆矩阵报告
以及更多
如需以 JSON 格式查看结果,使用 to_json() 函数。
suite_result. to_json( ) 技术支持
运行单个测试
与数据验证类似,您也可以只运行单项的机器学习测试。这里我们将在训练集与测试集上运行标签漂移检查,以判断标签随时间是否发生变化。
from deepchecks. tabular. checks import LabelDrift
check = LabelDrift( )
result = check. run( deep_train, deep_test)
result. value技术支持
未检测到数据漂移。
{ 'Drift score' : 0.0 , 'Method' : "Cramer's V" } 技术支持
如果您在运行数据验证与模型评估套件时遇到问题,请参考 DataLab 工作区 Machine Learning Testing with DeepChecks 。
如果您对“手动”的机器学习测试感兴趣,请查阅 Machine Learning Experimentation 教程,学习如何使用 Weights & Biases 来构建、记录并分析您的机器学习实验。
使用 GitHub Actions 与 DeepChecks 实现机器学习测试自动化
让我们使用 GitHub Actions 将数据验证、模型训练与模型评估阶段自动化,并将结果保存为 zip 文件。
机器学习测试自动化是 MLOps 流水线不可或缺的一部分。您可以学习 MLOps Fundamentals 技能路径,进一步了解如何将机器学习模型投入生产并进行监控,从而创造业务价值。
环境设置
前往您的 GitHub 账号,创建一个包含必要信息的新仓库。
在本地系统克隆该仓库。
进入仓库目录。
创建新文件夹 “data”,并将“下载”文件夹中的贷款数据 CSV 移动到仓库文件夹。
编写用于数据验证的 Python 脚本,并启动 VSCode(集成开发环境)。
$ cd C:\Repository\GitHub\
$ git clone https://github.com/kingabzpro/Automating-Machine-Learning-Testing.git
$ cd .\Automating-Machine-Learning-Testing\
$ mkdir data
$ mv -v ".Downloads\loan_data.csv" ".\Automating-Machine-Learning-Testing\data"
$ code -r data_validation.py技术支持
数据验证文件
在数据验证文件中,您将加载 CSV、将其转换为 DeepChecks 数据集,初始化数据完整性套件并在贷款数据上运行。
创建新文件夹 “results”,并将结果保存为 HTML 文件。
import pandas as pd
from deepchecks. tabular import Dataset
from deepchecks. tabular. suites import data_integrity
loan_data = pd. read_csv( "data/loan_data.csv" )
label_col = "not.fully.paid"
deep_loan_data = Dataset( loan_data, label= label_col, cat_features= [ "purpose" ] )
integ_suite = data_integrity( )
suite_result = integ_suite. run( deep_loan_data)
suite_result. save_as_html( "results/data_validation.html" ) 技术支持
模型测试文件
创建一个用于数据验证的 Python 文件,包含数据处理、模型构建、训练与评估。文件还应包含将数据集转换为 DeepChecks 数据集、运行模型评估套件,并将其保存为 “results” 文件夹下的 HTML 文件。
$ code -r train_validation.py技术支持
import pandas as pd
from sklearn. ensemble import RandomForestClassifier, VotingClassifier
from sklearn. linear_model import LogisticRegression
from sklearn. model_selection import train_test_split
from sklearn. naive_bayes import GaussianNB
from sklearn. preprocessing import LabelEncoder, StandardScaler
from deepchecks. tabular import Dataset
from deepchecks. tabular. suites import model_evaluation
loan_data = pd. read_csv( "data/loan_data.csv" )
label_col = "not.fully.paid"
df_train, df_test = train_test_split(
loan_data, stratify= loan_data[ label_col] , random_state= 0
)
label_encoder = LabelEncoder( )
df_train[ "purpose" ] = label_encoder. fit_transform( df_train[ "purpose" ] )
df_test[ "purpose" ] = label_encoder. transform( df_test[ "purpose" ] )
scaler = StandardScaler( )
df_train[ df_train. columns. difference( [ label_col] ) ] = scaler. fit_transform( df_train[ df_train. columns. difference( [ label_col] ) ] )
df_test[ df_test. columns. difference( [ label_col] ) ] = scaler. transform( df_test[ df_test. columns. difference( [ label_col] ) ] )
model_1 = LogisticRegression( random_state= 1 , max_iter= 10000 )
model_2 = RandomForestClassifier( n_estimators= 50 , random_state= 1 )
model_3 = GaussianNB( )
clf_model = VotingClassifier(
estimators= [ ( "lr" , model_1) , ( "rf" , model_2) , ( "gnb" , model_3) ] , voting= "soft"
)
clf_model. fit( df_train. drop( label_col, axis= 1 ) , df_train[ label_col] )
accuracy = clf_model. score( df_test. drop( label_col, axis= 1 ) , df_test[ label_col] )
print ( f"Accuracy: { accuracy: .2f } " )
deep_train = Dataset( df_train, label= label_col, cat_features= [ "purpose" ] )
deep_test = Dataset( df_test, label= label_col, cat_features= [ "purpose" ] )
evaluation_suite = model_evaluation( )
suite_result = evaluation_suite. run( deep_train, deep_test, clf_model)
suite_result. save_as_html( "results/model_validation.html" ) 技术支持
使用 GitHub Actions
如果您首次接触 GitHub Actions,建议在开始自动化前先完成“ GitHub Actions and MakeFile: A Hands-on Introduction ”教程。该教程将通过代码示例详细讲解 GitHub Actions 的工作方式。
要初始化 GitHub Actions,您需要暂存并提交更改,然后推送到远程 GitHub 仓库。
$ git add .
$ git commit -m "Data and Validation files"
$ git push技术支持
前往 GitHub 仓库 ,点击“Actions”标签,然后点击蓝色文字“set up a workflow yourself”。
此时会跳转到工作流 main.yml 文件。请复制并粘贴以下代码。 以下代码将先设置环境并安装 DeepChecks 包,随后创建文件夹,运行数据验证与模型评估,并将结果作为 GitHub Artifact 保存。
name: Model Training and Validation
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Set up Python 3.10
uses: actions/setup-python@v5
with:
python-version: '3.10'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install deepchecks
- name: Create a folder
run: |
mkdir -p results
- name: Validate Data
run: |
python data_validation.py
- name: Validate Model Performance
run: |
python train_validation.py
- name: Archive Deepchecks Results
uses: actions/upload-artifact@v4
if: always()
with:
name: deepchecks results
path: results/*_validation.html技术支持
填写提交信息并提交更改。
将更改提交到 main 分支后,工作流运行将被触发。要查看运行日志,请进入 “Actions” 标签,并点击与提交信息对应的当前工作流运行。
工作流运行完成后,请向下滚动,在 “Artifacts” 区域下载 zip 文件。
在本地解压该 zip 文件,查看数据与模型验证结果。
您也可参考 kingabzpro/Automating-Machine-Learning-Testing GitHub 仓库作为指南。它包含数据、Python 代码、工作流文件及其他运行全自动测试所需文件。
要实现整个机器学习流水线的自动化,需要掌握多种流程与工具。若想系统学习,建议选修 MLOps Deployment and Lifecycle 课程。该课程将探讨现代 MLOps 框架,重点介绍机器学习模型的生命周期与部署。
总结
通过自动化测试流程,开发者可以快速高效地在大型、复杂数据集上验证模型的准确性与稳健性。自动化测试有助于及早发现诸如数据不一致、数据漂移与模型偏见等问题,这些问题在手动测试中可能并不明显。这既节省时间,也提升模型做出公平、准确预测的能力。
在本教程中,我们学习了机器学习测试,以及如何使用 DeepChecks 进行数据验证与机器学习测试。我们还借助 GitHub Actions 将数据与模型测试实现自动化,并将结果保存为制品。
如果您喜欢本教程并有意开启机器学习职业生涯,建议报名 Machine Learning Scientist with Python 职业路径。完成全部课程(约 3 个月)即可获得从事机器学习科学家职位所需技能。
在本教程中,您将了解 DeepChecks,并学习如何用它进行数据验证和机器学习测试。我们还将使用 GitHub Actions 自动化模型测试,并将结果保存为制品(artifacts)。
随着教程推进,我们将了解机器学习测试与 DeepChecks,运行 DeepChecks 的数据完整性套件并生成综合报告。我们还将通过运行模型评估套件生成机器学习测试报告,学习如何只运行单个测试而非完整套件,使用 GitHub Actions 自动化测试流程,并将机器学习测试报告保存为 GitHub Artifact。
作者供图
什么是机器学习测试?
机器学习测试是一项关键流程,用于评估与验证机器学习模型的表现,以确保其公平性、准确性与稳健性。它不只是关于模型准确率与性能,我们还需要关注模型偏见、假阳性、假阴性、各类性能指标、模型吞吐量,以及模型与 AI 伦理的契合度。
测试过程包含多种评估,如数据验证、交叉验证、F1 分数、混淆矩阵、预测漂移、数据漂移与稳健性测试等,分别用于检验模型性能与可靠性的不同方面。
我们还会将数据集划分为三个子集,以便在训练过程中以及训练后在未见过的数据上评估模型。
机器学习测试是 AI 应用的必要组成部分,将其与模型训练一同自动化能够为我们带来可靠、可用的 AI 系统。
如果您是机器学习新手,想系统学习基础知识,建议学习 Machine Learning Fundamentals with Python 技能路径。该课程将从使用 scikit-learn 进行监督学习开始,讲解 Python 机器学习基础。
开始使用 DeepChecks
DeepChecks 是一个开源的 Python 包,旨在促进对机器学习模型与数据的全面测试与验证。它提供了丰富的内置检查,用于识别模型性能、数据分布、数据完整性等方面的问题。DeepChecks 还支持持续验证功能,确保模型在部署并用于真实场景后依然可靠有效。
我们将先使用
pip命令安装该 Python 包。加载数据集
在本教程中,我们使用 DataCamp 数据集中的 贷款数据(Loan Data)。它包含 9578 行,记录了贷款结构、借款人信息以及是否全额还款。
使用 Pandas 加载 CSV 文件并展示前 5 行。
准备数据集
使用贷款数据集、标签列名和分类型特征名创建 DeepChecks 数据集。
运行 DeepChecks 数据完整性套件
我们将使用适用于表格数据的数据完整性套件。该套件将自主运行所有测试,并生成带结果的交互式报告。
为此,我们将导入数据完整性套件,实例化后传入 DeepChecks 贷款数据运行套件,并最终显示结果。
注意: 我们使用 DataLab 作为开发环境。ipywidgets 被禁用,导致无法直接显示结果。我们将使用 “show_in_iframe” 函数以 iframe 形式展示结果。各层级显示的结果是一致的。
我们的数据完整性报告包含以下测试结果:
Jupyter Notebook 中的数据完整性测试结果。
您还可以将结果保存为 HTML 文件,与同事分享。
运行单个测试
在大数据集上运行整个套件效率不高,因为生成结果会花费较长时间。相反,您可以只运行与数据相关的少量单项测试,并自行生成报告。
要运行单个测试,导入表格检查、初始化检查,并在 DeepCheck 贷款数据上运行。随后,使用
results.value函数显示数值,而不是生成交互式报告。如您所见,它显示了每列中唯一值的数量。
我们再来检查数据中的重复样本。
数据集中重复值为 0。
使用 DeepChecks 进行机器学习测试
本节我们将集成多种模型并在处理后的贷款数据集上进行训练。随后,为生成模型测试报告,我们将在训练集与测试集上运行模型评估套件。
数据处理与模型训练
运行模型评估套件
我们将运行 DeepChecks 的模型评估套件来评估模型性能。
我们的模型评估报告包含以下测试结果:
to_json()函数。运行单个测试
与数据验证类似,您也可以只运行单项的机器学习测试。这里我们将在训练集与测试集上运行标签漂移检查,以判断标签随时间是否发生变化。
未检测到数据漂移。
如果您在运行数据验证与模型评估套件时遇到问题,请参考 DataLab 工作区 Machine Learning Testing with DeepChecks。
如果您对“手动”的机器学习测试感兴趣,请查阅 Machine Learning Experimentation 教程,学习如何使用 Weights & Biases 来构建、记录并分析您的机器学习实验。
使用 GitHub Actions 与 DeepChecks 实现机器学习测试自动化
让我们使用 GitHub Actions 将数据验证、模型训练与模型评估阶段自动化,并将结果保存为 zip 文件。
机器学习测试自动化是 MLOps 流水线不可或缺的一部分。您可以学习 MLOps Fundamentals 技能路径,进一步了解如何将机器学习模型投入生产并进行监控,从而创造业务价值。
环境设置
数据验证文件
模型测试文件
使用 GitHub Actions
如果您首次接触 GitHub Actions,建议在开始自动化前先完成“GitHub Actions and MakeFile: A Hands-on Introduction”教程。该教程将通过代码示例详细讲解 GitHub Actions 的工作方式。
main.yml文件。请复制并粘贴以下代码。以下代码将先设置环境并安装 DeepChecks 包,随后创建文件夹,运行数据验证与模型评估,并将结果作为 GitHub Artifact 保存。将更改提交到 main 分支后,工作流运行将被触发。要查看运行日志,请进入 “Actions” 标签,并点击与提交信息对应的当前工作流运行。
您也可参考 kingabzpro/Automating-Machine-Learning-Testing GitHub 仓库作为指南。它包含数据、Python 代码、工作流文件及其他运行全自动测试所需文件。
要实现整个机器学习流水线的自动化,需要掌握多种流程与工具。若想系统学习,建议选修 MLOps Deployment and Lifecycle 课程。该课程将探讨现代 MLOps 框架,重点介绍机器学习模型的生命周期与部署。
总结
通过自动化测试流程,开发者可以快速高效地在大型、复杂数据集上验证模型的准确性与稳健性。自动化测试有助于及早发现诸如数据不一致、数据漂移与模型偏见等问题,这些问题在手动测试中可能并不明显。这既节省时间,也提升模型做出公平、准确预测的能力。
在本教程中,我们学习了机器学习测试,以及如何使用 DeepChecks 进行数据验证与机器学习测试。我们还借助 GitHub Actions 将数据与模型测试实现自动化,并将结果保存为制品。
如果您喜欢本教程并有意开启机器学习职业生涯,建议报名 Machine Learning Scientist with Python 职业路径。完成全部课程(约 3 个月)即可获得从事机器学习科学家职位所需技能。