3.8 预测

通过运行 ML_TRAIN 预测任务并将其指定为 JSON 对象来生成预测。 ML_PREDICT_TABLE 然后可以预测所选列的值。 ML_SCORE 也可用于对模型质量进行评分。

您可以为具有数字数据类型的单个列创建时间序列预测。在预测方面,这是一个单变量内生变量。

训练预测模型

当您运行 ML_TRAIN 例程来创建预测模型时,请在选项中使用以下键值对JSON_OBJECT

'任务','预测'

将机器学习任务类型指定为“预测”。

'datetime_index', '<column_name>'

指定用作预测变量索引的日期时间列的列名称。该列可以是受支持的日期时间列类型之一(DATETIMETIMESTAMPDATETIMEYEAR),也可以是自动递增索引。

'endogenous_variables', JSON_ARRAY(<endogenous_column>)

指定要预测的列。预测函数支持单个数字列。该列也必须在例程的 target_column_name选项中 指定ML_TRAIN ,因为该字段是必需的,但在该位置未使用。

以下示例 ML_TRAINml_data.opsd_germany_daily_train 训练数据集上运行以创建预测模型以预测consumption给定日期(列)的消耗量(ddate列):

CALL sys.ML_TRAIN('ml_data.opsd_germany_daily_train', 'consumption', JSON_OBJECT(
'task', 'forecasting',
'datetime_index', 'ddate',
'endogenous_variables', JSON_ARRAY('consumption')),
@forecast_model);

有关使用ML_TRAIN 例程的说明,请参阅第 3.4 节“训练模型”,有关选项说明的完整列表,请参阅 ML_TRAIN

使用预测模型

要生成预测,请 ML_PREDICT_TABLE 对与训练模型具有相同列的数据运行例程,但必须删除包含内生变量的列(未标记数据)。预测模型预测与标识为索引的日期时间列相关的内生变量的值。日期时间列中的数据可以与训练数据集中的数据重叠,也可以是训练数据集末尾的未来数据。

以下示例显示了正在加载并用于创建消费预测的预测模型:

mysql> CALL sys.ML_MODEL_LOAD(@forecast_model, NULL);
Query OK, 0 rows affected (1.07 sec)

mysql> CALL sys.ML_PREDICT_TABLE('ml_data.`opsd_germany_daily_test`', @forecast_model, 'ml_data.`opsd_germany_daily_train_predictions`');
Query OK, 0 rows affected (1.50 sec)

mysql> select * from opsd_germany_daily_train_predictions LIMIT 5;
+------------+---------+--------+------------+------------+
| ddate      | wind    | solar  | wind_solar | Prediction |
+------------+---------+--------+------------+------------+
| 2017-12-01 |  52.323 | 19.266 |     71.589 |    1528.13 |
| 2017-12-02 | 126.274 | 16.459 |    142.733 |    1333.16 |
| 2017-12-03 |  387.49 | 12.411 |    399.901 |     1276.1 |
| 2017-12-04 | 479.798 | 10.747 |    490.545 |    1602.18 |
| 2017-12-05 | 611.488 | 10.953 |    622.441 |    1615.38 |
+------------+---------+--------+------------+------------+
5 rows in set (0.01 sec)

有关使用 ML_PREDICT_TABLE 例程的说明,请参阅第 3.6 节“预测”,有关选项说明的完整列表,请参阅 ML_PREDICT_TABLEML_PREDICT_ROW 不能与预测模型一起使用。

您可以使用支持的评分指标之一运行例程来对预测模型 ML_SCORE 评分,如以下示例所示:

mysql> CALL sys.ML_MODEL_LOAD(@model, NULL);
Query OK, 0 rows affected (1.07 sec)
 
mysql> CALL sys.ML_SCORE('ml_data.`opsd_germany_daily_test`', 'consumption', @model, 'neg_sym_mean_abs_percent_error', @score);
Query OK, 0 rows affected (1.40 sec)
 
mysql> select @score;
+----------------------+
| @score               |
+----------------------+
| -0.07764234393835068 |
+----------------------+
1 row in set (0.00 sec)