Driverless AI:信用卡演示

本 notebook 提供了 H2OAI 客户端的模型构建和评分工作流,此工作流与 Driverless AI 工作流并行执行。

点击此处,获取 Python 客户端文档资料 .

py-client

工作流步骤

通过 Python API 创建实验:

  1. 登录

  2. 导入训练和测试集/新数据

  3. 指定实验参数

  4. 启动实验

  5. 检查实验

  6. 下载预测结果

在 Web UI 中构建实验并通过 Python 进行访问:

  1. 获取指向实验的指针

对新数据进行评分:

  1. 通过 H2OAI 模型对新数据进行评分

对新数据进行模型诊断:

  1. 通过 H2OAI 模型对新数据运行模型诊断

运行模型解释

  1. 对原始特征运行模型解释

  2. 对外部模型预测结果运行模型解释

构建评分管道

  1. 构建 Python 评分管道

  2. 构建 MOJO 评分管道

通过 Python API 构建实验

1. 登录

导入所需模块并登录。

通过客户端类传入凭证,此客户端类将创建一个身份验证令牌并发送至 Driverless AI 服务器。简单来说:登录至 Driverless AI web 页面 (随后会将请求发送至 Driverless 服务器),通过您的 Driverless AI 地址和登录凭证将客户端类实例化。

[2]:
import driverlessai
import matplotlib.pyplot as plt
import pandas as pd
[3]:
address = 'http://ip_where_driverless_is_running:12345'
username = 'username'
password = 'password'
dai = driverlessai.Client(address = address, username = username, password = password)
# make sure to use the same user name and password when signing in through the GUI

2. 上传数据集

上传 Driverless AI /data 文件夹中的训练和测试数据集。

您可以提供训练、验证和测试数据集并将其用于实验中。验证和测试数据集为可选项。在此示例中,我们将仅提供训练和测试数据集。

[4]:
train_path = 's3://h2o-public-test-data/smalldata/kaggle/CreditCard/creditcard_train_cat.csv'
test_path = 's3://h2o-public-test-data/smalldata/kaggle/CreditCard/creditcard_test_cat.csv'

train = dai.datasets.create(data=train_path, data_source='s3')
test = dai.datasets.create(data=test_path, data_source='s3')
Complete 100.00% - [4/4] Computing column statistics
Complete 100.00% - [4/4] Computing column statistics

Driverless 中的等效步骤:上传训练和测试 CSV 文件

|Driverless 中的等效步骤:上传训练和测试 CSV 文件|

3. 设置实验参数

我们现在将设置实验参数。其中包括:

  • 目标列:我们将尝试预测的列。

  • 删除列:我们不想用作预测因子的列,例如 ID 列、存在数据泄露的列等。

  • 权重列:显示每行观测值权重的列。如果 权重列,则每行的观测值权重为 1。

  • 折叠列:显示折叠的列。如果 折叠列,则将由 Driverless AI 来确定折叠数。

  • 是时间序列:实验是否为时间序列用例。

请参阅 实验设置 ,了解关于实验设置的信息。

在此示例中,我们将预测 ``下个月的默认付款`` 。控制实验进程的参数为:准确度时间可解释性. 我们可使用 get_experiment_preview_sync 函数来了解实验期间将会发生什么。

我们首先将 准确度时间可解释性 均设置为 5,查看实验会得到什么结果。

[5]:
target = "DEFAULT_PAYMENT_NEXT_MONTH"
exp_preview = dai.experiments.preview(train_dataset=train,
                                      task='classification',
                                      target_column=target,
                                      enable_gpus=False,
                                      accuracy=5,
                                      time=5,
                                      interpretability=5,
                                      config_overrides=None)
exp_preview
ACCURACY [5/10]:
- Training data size: *23,999 rows, 25 cols*
- Feature evolution: *[Constant, LightGBM, XGBoostGBM]*, *1/4 validation split*
- Final pipeline: *Ensemble (8 models), 4-fold CV*

TIME [5/10]:
- Feature evolution: *4 individuals*, up to *66 iterations*
- Early stopping: After *10* iterations of no improvement

INTERPRETABILITY [5/10]:
- Feature pre-pruning strategy: None
- Monotonicity constraints: disabled
- Feature engineering search space: [CVCatNumEncode, CVTargetEncode, CatOriginal, Cat, ClusterDist, ClusterTE, Frequent, Interactions, NumCatTE, NumToCatTE, NumToCatWoE, Original, TextLinModel, Text, TruncSVDNum, WeightOfEvidence]

[Constant, LightGBM, XGBoostGBM] models to train:
- Model and feature tuning: *16*
- Feature evolution: *104*
- Final pipeline: *8*

Estimated runtime: *minutes*
Auto-click Finish/Abort if not done in: *1 day*/*7 days*

通过以上设置,Driverless AI 实验将训练约 124 个模型:* 16 个用于模型和特征调优 * 104 个用于特征演变 * 8 个用于最终管道

在启动实验时,我们可以:

  • 指定参数

  • 使用 Driverless AI 建议参数

Driverless AI 可基于数据集和目标列来建议参数。接下来我们将使用 ``get_experiment_tuning_suggestion`` 来查看 Driverless AI 建议的设置。

Driverless AI 发现最佳参数是 ``accuracy = 5````time = 4````interpretability = 6`` 。已选择 ``AUC`` 作为评分器(此评分器为二项式问题的默认评分器)。

Driverless 中的等效步骤:设置旋钮、配置和启动

|Driverless 中的等效步骤:设置旋钮|

4. 启动实验:特征工程 + 最终模型训练

使用 Driverless AI 建议的参数和添加的测试集、评分器和种子来启动实验。我们可以使用建议参数启动实验或创建自己的参数。

[7]:
ex = dai.experiments.create(train_dataset=train,
                            test_dataset=test,
                            target_column=target,
                            task='classification',
                            accuracy=5,
                            time=4,
                            interpretability=6,
                            scorer="AUC",
                            enable_gpus=True,
                            seed=1234,
                            cols_to_drop=['ID'])
Experiment launched at: http://localhost:12345/#experiment?key=b7aba0d4-e235-11ea-9088-0242ac110002
Complete 100.00% - Status: Complete

5. 检查实验

查看验证数据集的最终模型评分。特征工程完成后,可根据准确度设置构建整体模型。实验对象还包含对此整体模型的验证和测试数据的评分。在此示例中,验证评分是训练交叉验证预测结果的分数。

[11]:
metrics = ex.metrics()

print("Final model Score on Validation Data: " + str(round(metrics['val_score'], 3)))
Final model Score on Validation Data: 0.774

6. 下载结果

实验完成后,我们可看到 UI 中会显示下载以下内容的选项:

  • 预测

    • (维持)训练数据

    • 测试数据

  • 实验摘要 – 实验的摘要信息,包括特征重要性

我们将在下方展示一个下载测试预测结果的示例。请注意,也可运行等效命令,以下载训练(维持)预测结果。

[12]:
ex.artifacts.download(only=['test_predictions'], dst_dir='', overwrite=True,)
Downloaded 'test_preds.csv'
[12]:
{'test_predictions': 'test_preds.csv'}
[13]:
test_preds = pd.read_csv("./test_preds.csv")
test_preds.head()
[13]:
DEFAULT_PAYMENT_NEXT_MONTH.0 DEFAULT_PAYMENT_NEXT_MONTH.1
0 0.299739 0.700261
1 0.862815 0.137185
2 0.958172 0.041828
3 0.599148 0.400852
4 0.882068 0.117932

在 Web UI 中创建实验并通过 Python 进行访问

还可使用 Python API 检查通过实验密钥在 Web UI 中启动的实验。

|实验列表|

1. 获取指向实验的指针

您可以通过在 Web UI 中引用实验密钥来获取指向实验的指针。

[14]:
# Get list of experiments
experiment_list = dai.experiments.list()
experiment_list
[14]:
[<class 'driverlessai._experiments.Experiment'> b7aba0d4-e235-11ea-9088-0242ac110002 nivufeke,
 <class 'driverlessai._experiments.Experiment'> aed84080-e234-11ea-9088-0242ac110002 sewateru]
[12]:
# Get pointer to experiment
exp = experiment_list[0]
exp

对新数据进行评分

您可使用 Python API 对新数据进行评分,这相当于使用 Web UI 上 对另一数据集进行评分 按钮。下方示例对测试数据进行了评分,并下载了预测结果。

传入与原始训练集具有相同列的任何数据集。如果您在构建 H2OAI 模型时已传入测试集,则预测结果就已经存在。

1. 使用 H2OAI 模型进行评分

下图显示测试中每项记录的默认预测概率。

[15]:
# Get unlabeled data to make predictions on
data = dai.datasets.create(data='s3://h2o-public-test-data/smalldata/kaggle/CreditCard/creditcard_test_cat.csv',
                           data_source='s3',
                           force=True)

target = "DEFAULT_PAYMENT_NEXT_MONTH"
prediction = ex.predict(data, [target])
pred_path = prediction.download('.')
pred_table = pd.read_csv(pred_path)
pred_table.head()
Complete 100.00% - [4/4] Computing column statistics
Complete
Downloaded './b7aba0d4-e235-11ea-9088-0242ac110002_preds_01963cda.csv'
[15]:
DEFAULT_PAYMENT_NEXT_MONTH.0 DEFAULT_PAYMENT_NEXT_MONTH.1
0 0.299739 0.700261
1 0.862815 0.137185
2 0.958172 0.041828
3 0.599148 0.400852
4 0.882068 0.117932

我们还可通过设置 pred_contribs = True 获取每个特征对最终预测结果的贡献值,有助于我们了解每个特征对预测结果的影响。

[16]:
prediction = ex.predict(data, [target], include_shap_values=True)

pred_contributions_path = prediction.download('.')
pred_contributions_table = pd.read_csv(pred_contributions_path)
pred_contributions_table.head()
Complete
Downloaded 'b7aba0d4-e235-11ea-9088-0242ac110002_preds_e92e68d4.csv'
[16]:
DEFAULT_PAYMENT_NEXT_MONTH.0 DEFAULT_PAYMENT_NEXT_MONTH.1 contrib_0_AGE contrib_10_PAY_3 contrib_11_PAY_4 contrib_12_PAY_5 contrib_13_PAY_6 contrib_14_PAY_AMT1 contrib_15_PAY_AMT2 contrib_16_PAY_AMT3 ... contrib_45_CVTE:PAY_1:PAY_2:PAY_4.0 contrib_46_WoE:AGE:LIMIT_BAL:PAY_1:PAY_2:PAY_3:PAY_5.0 contrib_47_WoE:PAY_3:PAY_5:PAY_6.0 contrib_48_ClusterTE:ClusterID20:PAY_1:PAY_4:PAY_5:PAY_AMT1:PAY_AMT6.0 contrib_4_BILL_AMT4 contrib_5_BILL_AMT5 contrib_6_BILL_AMT6 contrib_7_LIMIT_BAL contrib_8_PAY_1 contrib_bias
0 0.299739 0.700261 -0.051685 0.017082 -0.012476 -0.023556 -0.007033 0.016873 0.062995 -0.037905 ... 1.314687 0.019138 -0.039752 -0.004087 0.043153 -0.014567 -0.024331 0.024522 0.526365 -1.34867
1 0.862815 0.137185 0.044812 0.017206 0.001976 0.002324 -0.001514 0.030999 -0.087150 -0.092674 ... -0.437666 -0.079960 -0.119075 0.008777 0.052826 0.019449 0.061261 0.138121 -0.015459 -1.34867
2 0.958172 0.041828 -0.054909 0.003906 -0.003241 0.002495 -0.003469 0.087790 -0.315745 -0.047180 ... -0.455067 0.007856 -0.103681 0.036041 -0.032951 0.021452 -0.060518 -0.161278 -0.015956 -1.34867
3 0.599148 0.400852 -0.003953 0.016077 0.002315 0.040801 0.007007 0.024191 -0.020707 0.147297 ... 1.342796 0.066763 0.025450 0.003859 -0.020837 -0.050288 0.019743 -0.096786 0.371450 -1.34867
4 0.882068 0.117932 0.000450 -0.038284 -0.013007 -0.001538 -0.003652 0.036131 0.219968 0.124056 ... -0.519380 -0.006065 -0.109650 -0.029302 -0.116205 0.007022 0.004275 0.031202 -0.016736 -1.34867

5 rows × 53 columns

我们将更仔细地检查对第一个记录的贡献。

[17]:
contrib = pd.DataFrame(pred_contributions_table.iloc[0][1:])
contrib.columns = ["contribution"]
contrib["abs_contribution"] = contrib.contribution.abs()
contrib.sort_values(by="abs_contribution", ascending=False)[["contribution"]].head()
[17]:
contribution
contrib_bias -1.348670
contrib_45_CVTE:PAY_1:PAY_2:PAY_4.0 1.314687
DEFAULT_PAYMENT_NEXT_MONTH.1 0.700261
contrib_8_PAY_1 0.526365
contrib_21_CVTE:EDUCATION.0 0.140235

自定义用户的 PAY_0PAY_2LIMIT_BAL 聚类对其预测结果影响最大。由于贡献值为正,我们便可得知其默认概率会增大。

构建评分管道

在最后一节中,我们将根据实验构建评分管道。有两种评分管道选项:

  • Python 评分管道:需要 Python 运行时

  • MOJO 评分管道:需要 Java 运行时

关于评分管道的文档,请访问:http://docs.h2o.ai/driverless-ai/latest-stable/docs/userguide/python-mojo-pipelines.html

|Driverless 中的等效步骤:查看结果 3|

实验屏幕中显示两个评分管道按钮:下载 Python 评分管道构建 MOJO 评分管道 。Driverless AI 将确定是否应基于 config.toml 文件自动构建任何评分管道。在此示例中,我们将通过以下设置运行 Driverless AI:

# Whether to create the Python scoring pipeline at the end of each experiment
make_python_scoring_pipeline = true

# Whether to create the MOJO scoring pipeline at the end of each experiment
# Note: Not all transformers or main models are available for MOJO (e.g. no gblinear main model)
make_mojo_scoring_pipeline = false

因此,默认仅构建 Python 评分管道。

1. 构建 Python 评分管道

默认已基于 config.toml 设置构建 Python 评分管道,但是如果我们愿意,也可重新构建 – 如果将 ``make_python_scoring_pipeline`` 选项设置为 false,即可重新构建。

[18]:
ex.artifacts.create('python_pipeline')
Building Python scoring pipeline...

现在将下载评分管道 zip 文件。

[19]:
ex.artifacts.download(only='python_pipeline',
                      dst_dir='.',
                      overwrite=True)
Downloaded './scorer.zip'
[19]:
{'python_pipeline': './scorer.zip'}

2. 构建 MOJO 评分管道

由于 config.toml 设置的原因,未默认构建 MOJO 评分管道。我们可使用 Python 客户端构建 MOJO 评分管道。这相当于在实验屏幕上选择 构建 MOJO 评分管道

[61]:
ex.artifacts.create('mojo_pipeline')

现在可下载评分管道 zip 文件。

[63]:
ex.artifacts.download(only='mojo_pipeline', dst_dir='.', overwrite=True)
[63]:
'./mojo.zip'

构建 MOJO 评分管道后,构建 MOJO 评分管道 将变为 下载 MOJO 评分管道

|Driverless 中的等效步骤:下载 MOJO|

[ ]: