提示和技巧

本节介绍 Arno 关于运行 Driverless AI 的提示和建议。

关于管道的提示

如果给定训练数据和需预测的目标列,H2O Driverless AI 会产生端到端的管道,并针对一般分类和回归任务调优此管道被调优,以获得高预测性能(和/或高可解释性)。管道只有一个目的:逐行获取测试集,并将其特征值转化为预测值。

典型的管道可通过用户给定的数据集创建几十甚至几百个衍生特征。这些转换经常基于预先计算的查找表和在训练过程中选择和优化的参数化数学运算。之后,其向一个或多个机器学习算法如线性模型、深度学习模型或梯度提升模型(以及多个派生程度更高的模型)提供所有这些衍生特征。如果有多个模型,其输出将经过后处理,以得出最终的预测结果(概率或目标值)。管道是有向非循环图表。

请务必注意,为了获取更好的结果(如聚合统计),需将训练数据集作为一个整体进行处理。但是,对于评分,必须独立处理测试数据集的每一行,以模拟实际生产场景。

为了方便部署到各种生产环境,可以使用多种方法通过 GUI、R 客户端或 Python 客户端 API 或独立管道获得来自于已完成的 Driverless AI 实验的预测结果。

GUI

  • 对另一数据集进行评分 – 方便、并行化,特别适用于导入的数据

  • 下载预测结果 – 在训练过程中提供了测试集时可用

  • 部署 – 创建 Amazon Lambda 端点(会产生更多的端点)

  • 诊断 – 测试集包含有目标列时使用

客户端 API

  • Python 客户端 – 使用 make_prediction_sync() 方法。可使用可选的参数来逐行和逐特征获取“Shapley”预测贡献值。(传递 pred_contribs=True. )

  • R 客户端 – 使用 predict() 方法。可使用可选的参数来逐行和逐特征获取“Shapley”预测贡献值。(传递 pred_contribs=True. )

独立管道

  • Python – 支持所有模型和转换器,并且支持“Shapley”预测贡献值和 MLI 原因码

  • Java – 具有最高可移植性、低延迟,支持默认启用的所有模型和转换器(TensorFlow NLP 转换器除外),可在 Spark/H2O-3/SparklingWater 中使用,以实现扩展

  • C++ – 高度可移植、低延迟,独立运行时带有方便的 Python 和 R 包装器。

关于时间序列的提示

H2O Driverless AI 可立即处理时间序列预测问题。

在启动时间序列实验时您只需要提供包含特征的正则纵列数据集。之后选择目标列,并且选择”时间列” – 包含有每个记录(行)时间戳(如 “April 10 2019 09:13:41” 或 “2019/04/10”)的指定列。如果您有一个测试集并且希望针对该测试集获得每个记录的预测值,请务必提供未来的时间戳和特征。

大多数情况就是如此。您可以启动实验并让 Driverless AI 完成剩余工作。其甚至会(通过查找用于识别需分组的门店和部门的列)自动检测用于同一个数据集中不同分组的多个时间序列,如门店和部门的每周销量。Driverless AI 也会自动检测包括周末期间可能间隔的时间段、预测期、训练时间段与测试时间段之间可能的时间间隔(在部署延迟的情况下被优化),甚至还会跟踪假期日历。当然,其会自动创建多个基于时间的因果验证拆分段(滑动时间窗口),以实现正确验证,并整合很多其他相关大师插件,如自动目标和非目标滞后特征生成以及滞后项之间的交互、一阶导数和二阶导数以及指数平滑。

  • 如果您发现基于滞后的自动时间序列插件没有为您的数据集发挥出良好的性能,我们建议您尝试通过禁用专家设置中的”时间序列滞后插件”来禁止创建基于滞后的特征。这样会导致执行正则特征工程,但会实施基于时间的因果验证拆分。尤其是对于小数据集和短预测期,这样会带来更好的结果。

  • 如果测试集中存在目标列,并且目标列包含部分填充的信息(非缺失值),则 Driverless AI 会自动使用这些未来目标值增强模型,以执行更好的预测。这种方法可用来延长模型的使用寿命,无需通过提供过去已知的结果进行重新训练。如果您有兴趣了解更多关于测试时增强的信息,请联系我们。

  • 目前,训练数据集和测试数据集应具有相同的可用输入特征,因此考虑哪些预测因子(输入特征)将在生产环境中可用,并丢弃剩余预测因子(或创建可用于训练数据集和测试数据集的滞后特征)。

  • 对于时间不固定的数据集,通过数据的最后一个时间部分创建测试集,并创建基于时间的特征。这样就允许针对生产环境优化模型。

  • 我们正在努力进一步改进时间序列插件的许多方面。例如,我们会增加支持,以自动生成只在训练集而非测试集中可用的特征滞后项,这些特征包括环境因子或经济因子。我们还将提升利用了滚动窗口的回溯测试性能。

关于评分器的提示

H2O Driverless AI 的核心功能就是为受监控的问题创建自动机器学习建模管道。除了数据和要预测的目标列以外,用户还可以选择评分器。评分器是一种函数,用于针对数据集获取实际值和预测值,并返回一个数值。为了通过比较模型对数据集得出的预测值与实际值估算预测模型对不可见数据的泛化性能,最常用的方法就是分析这个数值。还有一些更详细的方法可用来估算机器学习模型的性能,如残差图(可在 Driverless AI 中的“诊断”页面上获取),但这里我们重点关注的是评分器。

对于给定的评分器,Driverless AI 将优化管道,以输出此评分器的可能最佳评分。用于回归问题的默认评分器为 RMSE(均方根误差),其中 0 为可能的最优值。例如,对于含有 4 行的数据集,如果实际目标值为 [1, 1, 10, 0]、但预测值为 [2, 3, 4, -1],则 RMSE 为 sqrt((1+4+36+1)/4),最大预测误差(以平方的方式)决定了总评分。Driverless AI 专注于为第三数据点改进预测,当数据中存在难以预测的异常值时,这种改进会非常困难。如果让异常值恢复正常并没有那么重要,使用 MAE (平均绝对误差)等指标可获得更好的结果。在此例中,MAE 为 (1+2+6+1)/4,优化过程会均等(以线性方式)地考虑所有误差。另一个对异常值不敏感的评分器是 RMSLE(均方根对数误差),其与 RMSE 类似,但是使用了实际值与预测值的算法,而且其只适用于正值。对于价格预测,MAPE(平均绝对百分比误差)或 MER(平均误差率)等评分器非常有用,但存在有零值或正值非常小的问题。可使用 SMAPE(对称平均绝对百分比误差)来改善此问题。

对于分类问题,默认的评分器为 AUC(受试者工作特征曲线下面积)或用于不平衡问题的 LOGLOSS(对数损失)。LOGLOSS 主用用于使概率恢复正常(严格地错误概率应用对罚分),而 AUC 则用于解决排序问题。基尼系数与 AUC 类似,但用于针对回归问题衡量排序质量(不等性)。对于一般不平衡分类问题,AUCPR 和 MCC 是不错的选择,而 F05、F1 和 F2 则设计用于平衡召回率与精确率。

我们强烈建议对不同评分器进行实验,研究它们对所生成模型的影响。通过使用 Driverless AI 中的“诊断”页面,可以为任何给定的模型计算所有适用的评分,无论在训练过程中使用了何种评分器。

关于旋钮设置的提示

H2O Driverless AI 让您能通过专家设置详细自定义每一个实验。但是,最重要的控制措施为三个旋钮,即准确度旋钮、时间旋钮和可解释性旋钮。准确度设置越高,模型泛化性能的估算就越好;为此,通常需要使用更多的数据、更多的保持数据集、更多的参数调优回合和其他高级方法。更高的时间设置意味着为实验提供更多的时间,以聚合至最优解。更高的可解释性设置能通过更少的特征工程和使用更简单的模型降低模型的复杂程度。总之,如果设置为 1/1/10,会得到最简单但准确率最低的建模管道;而如果设置为 10/10/1,则会导致实验最复杂和最耗时。一般来讲,使用 7/5/5 或类似设置就已足够,我们建议从默认设置开始。我们强烈建议在每次实验之前研究 GUI 左侧的实验预览,其能帮助您微调设置并节省总体时间。

请注意,您可提前结束实验:点击“结束”让可部署的最终管道退出,或点击“中止”以立即终止实验。对于任一情况,可在稍晚的时刻通过“从最后一个检查点重新开始”或“重新训练最终管道”,以无缝的方式继续执行实验,而且您可以调节旋钮(或修改专家设置)来满足自己的需求。

关于运行实验的提示

H2O Driverless AI 是一种自动机器学习平台,用于通过表格式训练数据创建高度准确的建模管道。管道的预测性能是训练数据和管道参数(特征工程和建模的详细信息)的函数。在实验过程中,Driverless AI 可对保持的(”验证”)数据对候选管道进行评分,从而自动调节这些参数。这些重要的验证数据由用户(为专家)提供或由 Driverless AI 自动创建(随机、基于时间或基于折叠)。创建最终管道后,应立即对另一保留数据集(”测试数据”)进行评分,以估算其泛化性能。了解训练、验证和测试数据集(”验证方案”)的来源对于机器学习的成功非常关键,我们欢迎您提出各种反馈和建议,以帮助我们为您的用例制定正确的验证方案。

关于专家设置的建议

H2O Driverless AI 提供各种不同的“专家设置”,让您能通过这些设置自定义每个实验。例如,您可以通过减小“特征工程工作量”值或“最大特征交互深度”值或通过禁用“目标编码”来限制特征工程量。您也可以选择用于对工程特征(如 XGBoost、LightGBM、GLM、TensorFlow、FTRL 或 RuleFit)进行训练的某些模型类型。对于所选 time_column 会导致产生错误消息的时间序列问题(时间结构不够规范时会发生这种情况,我们正在努力开发改进版本),您可以禁用“时间序列滞后插件”,Driverless AI 会按时间顺序创建训练/验证拆分,这样如果时间列非常重要,就可以提高模型的性能。

关于设置检查点的提示

Driverless AI 提供用于对实验设置检查点的选项,当对同一数据集运行多个实验时,可提升特征工程和模型调优的速度。H2O Driverless AI 默认会自动扫描所有之前的实验(包括中止的实验),以便从最优的检查点重新开始。您可以选择之前的某一特定实验,通过实验列表页面上的“从最后一个检查点重新开始”功能重新开始新的实验(单击右侧的 3 个黄条)。您可以通过将专家设置中的“特征大脑级别”(或配置文件中的 feature_brain_level)设置为 0 来禁用检查点设置,以强制实验从头开始。

关于文本数据的提示

对于包含文本(字符串)列的数据集(在这些数据集中,每个值可以是几个单词、一段话或整个文档),Driverless AI 将基于词袋、tf-idf、奇异值分解和折外似然估计,创建 NLP 特征。在 1.3 及以上的版本中,您可以在专家设置中启用 TensorFlow,以了解基于 CNN(卷积神经网络)的新学词汇嵌入可以实现的预测准确率提升幅度。您可以将尝试将此方法用于情感分析、文档分类和通用富文本数据集。