快速开始

HyperTS是 DataCanvas Automatic Toolkit (DAT) 工具链中, 依托 Hypernets 衍生的关于时间序列的全Pipeline的自动化工具包。它遵循了 make_expriment 的使用习惯(类似于 HyperGBM 的API, 一个针对于结构化表格数据的AutoML工具), 也符合 scikit-learn 中model API的使用规范。我们可以创造一个 make_expriment, run 之后获得pipeline_model, 即一个最终优化完毕的estimator, 然后使用它的 predict, evaluate, plot 去分析未知的数据。

通过 make_experiment 训练模型的基本步骤如下图所示:

workflow

HyperTS可以被用来解决时序预测、分类及回归任务, 它们公用统一的API。接下来, 我们将分为快速演示关于时序预测与分类任务的使用方法。


准备数据

可以根据实际业务情况通过pandas加载数据, 得到用于模型训练的DataFrame, 本例将加载HyperTS内置的数据集。

from hyperts.datasets import load_network_traffic
from sklearn.model_selection import train_test_split

对于划分训练集和测试集, 由于数据存在时间上的先后顺序, 因此为防止信息泄露, 我们从整体数据集的后边切分一部分, 故 shuffle=False

df = load_network_traffic()
train_data, test_data = train_test_split(df, test_size=168, shuffle=False)
df.head()
../_images/quickstart_0.png

该数据集的一些基本信息具体如下:

  • 时间列名称: ‘TimeStamp’;

  • 目标列名称: [‘Var_1’, ‘Var_2’, ‘Var_3’, ‘Var_4’, ‘Var_5’, ‘Var_6’];

  • 协变量列名称: [‘HourSin’, ‘WeekCos’, ‘CBWD’];

  • 时间频率: ‘H’。

小技巧

如果您对HyperTS的数据格式不了解或者存有疑惑, 请参看 数据规范


创建实验并训练

我们通过 make_experiment 创建实验, 然后调用 run() 方法来执行实验去搜索一个时序模型。

from hyperts import make_experiment
experiment = make_experiment(train_data=train_data.copy(),
                            task='forecast',
                            timestamp='TimeStamp',
                            covariables=['HourSin', 'WeekCos', 'CBWD'])
model = experiment.run()

其中, model 就是本次 run() 搜索并训练所得到的最优的模型。

备注

在预测任务中, 我们必须向 make_experiment 传入参数 timestamp 列名。如果存在协变量, 也需要传入 covariables 列名。因此, 在本案例中, 我们需要向 make_experiment 传入以下参数:

  • 时序预测任务, 即 task='forecast';

  • 数据集的时间列名称, 即 timestamp='TimeStamp';

  • 数据集中协变量列的名称, 即 covariables=['HourSin', 'WeekCos', 'CBWD'];

小技巧

如果想要获得强大的性能表现, 还可以修改其他默认的参数, 具体可以参考 高级应用


未知数据预测

对test data切分X与y, 调用 predict() 方法执行结果预测。

X_test, y_test = model.split_X_y(test_data.copy())
forecast = model.predict(X_test)
forecast.head()
../_images/quickstart_1.png

结果评估

调用 evaluate() 方法执行结果评估, 便可以观测到各个评估指标下的得分情况。

这里会返回一些默认的指标评分, 如果想观测指定指标的评分, 可以设置参数 metrics, 例如metrics=[‘mae’, ‘mse’, mape_func]。 其中, mape_func可以是自定义的评估函数或者来自于sklearn的评估函数。

results = model.evaluate(y_true=y_test, y_pred=forecast)
results.head()
../_images/quickstart_2.png

可视化

调用 plot() 方法可视化, 观测预测曲线, 并与实际的曲线做对比分析。

model.plot(forecast=forecast, actual=test_data, var_id='Var_3', interactive=False)
../_images/Actual_vs_Forecast.jpg

备注

  • 这里会显示某一个变量的预测曲线, 默认为第一个目标变量;

  • 如果为多变量预测, 想要观测其他的变量曲线变化的情况, 可以修改参数var_id, 例如: var_id=2 或者 var_id='Var_3';

  • plot可支持交互式可视化通过设置 interactive=False (默认交互, 需安装plotly);

  • 绘制更长期的历史信息, 设置参数 history=sub_train_data;

  • actual=None (默认), 则只绘制预测曲线;

  • show_forecast_interval=True (默认), 则利用贝叶斯推断预测置信区间.

小技巧

预测曲线由plotly工具绘制时, 通过点击可以交互式观测每个时刻的数值信息。


保存模型

使用 save() 去保存训练好的模型.

model.save(model_file="./xxx/xxx/models")

此外,也可以采用如下保存模型方式:

from hyperts.utils.models import save_model

save_model(model=model, model_file="./xxx/xxx/models")

加载模型

使用 load_model() 去加载已保存的模型.

from hyperts.utils.models import load_model

pipeline_model = load_model(model_file="./xxx/xxx/models/dl_models")