训练阶段
train 阶段的目标是使用输入数据集或数据源中提供的历史数据来训练模型。该数据集包括我们目标变量(即我们希望预测的变量)的时间序列,以及可能影响目标变量的所有其他变量(特征)的时间序列。
在此阶段,仅选择相关特征。然后测试不同的模型,并选择准确度最佳的模型。
训练阶段包含 4 个步骤:
- 预处理
- 特征工程
- 特征选择
- 模型选择
预处理步骤¶
分析每个变量,以确定它能在多大程度上解释其他变量。
分析是成对进行的:变量 A 在多大程度上解释变量 B,B 在多大程度上解释 A,A 在多大程度上解释 C,依此类推,针对所有变量对。选择过程保留:
- 自变量,即不被其他变量解释的变量。

 - 基于特定阈值(可在参数中设置)的因变量。如果发现一个变量对另一个变量的解释超过某个阈值,则只选择两者之一(具体而言,选择 R 平方值较高的那个——参见参数部分)。

例如,输入 train 数据集/数据源中的特征为:
- COVID_RATE
- PRICE
- MARKETING
- SALES_ST
- DISCOUNT_P
- CUST_SATISF
- QUAL_INDEX
- MARKET_VOL
而 VOLUME 是目标变量。
图检测依赖算法对所有特征运行,并消除 CUST_SATISF,因为它依赖于:
- PRICE
- DISCOUNT_P
- QUAL_INDEX
特征工程步骤¶
Predictive Planning 计算每个目标变量和特征的特征季节性,并通过将原始特征从 1 偏移到该特征的季节性来创建新特征(如果 Use Target Feature Seasonality 参数为 Y)。
例如,Predictive Planning 计算目标变量的季节性,为 12,软件计算每个特征的季节性:
- COVID_RATE(LAG -6)
- PRICE(LAG -12)
- MARKETING(LAG -6)
- SALES_ST(LAG -12)
- DISCOUNT_P(LAG –6)
- CUST_SATISF(LAG –12)
- QUAL_INDEX(LAG –12)
- MARKET_VOL(LAG -12)
Predictive Planning 随后计算偏移直到 Feature max lag 参数中设置的值:
| Features | Ref_Date | Amount |
|---|---|---|
| COVID_RATE | 2024.02 | 0,20 |
| COVID_RATE (LAG -1) | 2024.02 | 0,15 |
| COVID_RATE (LAG -2) | 2024.02 | 0,01 |
| MARKETING | 2024.02 | -141000 |
| MARKETING (LAG -1) | 2024.02 | -166300 |
| MARKETING (LAG -2) | 2024.02 | -165000 |
特征选择步骤¶
Predictive Planning 使用 Boruta 算法执行特征选择(如果 Perform Features Selection 参数为 Y)。
例如,Boruta 算法选择三个特征来预测变量 VOLUME:
- COVID_RATE
- MARKETING-2
- DISCOUNT_P




模型选择步骤¶
在模型选择步骤中,Model List 参数中的所有模型都应用于训练数据。该参数的默认值是所有方法的列表:
- AdaBoost
- ElasticNetReg
- DecisionTree
- GradientBoosting
- LinearRegressor
- RidgeRegressor
- LassoRegressor
- SGDRegressor
- KNeighbors
- SupportVector
- ExtraTreesReg
-
RandomForestReg
- Sarimax
- HoltWinters
- LightGBM
此步骤计算训练数据上的拟合、特征重要性以及要优化的度量。参数中的默认度量为 MAPE(平均绝对百分比误差),但选项包括:
- MAPE (mean_absolute_percentage_error)
- MGD (mean_gamma_deviance)
- MPD (mean_poisson_deviance)
- R2 (r2)
- MEAE (median_absolute_error)
- MSLE (mean_squared_log_error)
- MSE (mean_squared_error)
- MAE (mean_absolute_error)
- ME (max_error)
- E_VARIANCE (explained_variance)
然后选择具有最佳度量分数的模型。
最后,对于每个目标变量,Predictive Planning 在四个不同的数据集中返回特征重要性、具有度量分数的方法、训练数据的拟合,以及每个变量对实现目标变量的贡献(附录 1.3 至 1.6)。例如,以下列表中的所有模型都应用于训练数据并计算 MAPE:
- AdaBoost Regressor;MAPE = 12%
- Decision Tree Regressor;MAPE = 15%
- Elastic Net Regressor;MAPE = 7%
- Extra Trees Regressor;MAPE = 14%
- Grandient Boost Regressor;MAPE = 5%
- Linear Regressor;MAPE = 8%
- Ridge Regressor;MAPE = 12%
- Sarimax;MAPE = 3%
- SDG Regressor;MAPE = 11%
- Random Forest Regressor;MAPE = 10%
- Holt-Winters;MAPE = 7%
- Light GBM;MAPE = 6%
- LassoRegressor;MAPE = 11%
- KNeighbors;MAPE = 8%
- SupportVector;MAPE = 12%
Predictive Planning 选择 MAPE = 3% 的 Sarimax 方法。
该信息被保存下来,以便在训练阶段重复使用。
Predictive Planning 使用诸如 "shapely" 值之类的 "可解释性" 技术,为每个变量计算对实现目标变量的贡献。
Predictive Planning 在以下数据集中返回特征重要性、具有 MAPE 的方法、训练数据拟合,以及每个变量对实现目标变量的贡献。
附录 1:输入与输出数据集¶
Execute 阶段有一个输入数据集和四个输出数据集。
数组可以定义若干字段,这意味着可以将更多数据集列与该字段关联。
数组定义为构成我的维度或时间键的一组字段。所有数据集的键必须相同(字段顺序也相同)。
附录 1.1:输入 Train 数据集¶
该数据集包含历史数据,其中包括三(3)个固定字段以及两个(2)数组的附加字段。您需要标识时间 ID 和时间序列维度键:
- MEASURE:这是历史序列的科目(文本)
- REF_DATE_1:标识历史序列时间 ID 的第一个字段(文本/数字)
- REF_DATE_2:标识历史序列时间 ID 的第二个字段(文本/数字)
- TARGET_WEIGHTS:在此字段中,根据您需要预测的历史序列的重要性分配一个数字。(文本)该值必须为正数。 如果设置 TARGET_WEIGHTS=0,这意味着模型将该变量识别为目标变量,但为该字段组合分配零权重。
- AMOUNT:每个历史序列的金额(数字)
- DIMENSION_1:标识时间序列维度键的第一个字段(文本/数字)
- DIMENSION_2:标识时间序列维度键的第二个字段(文本/数字)
例如:
| MEASURE | REF_DATE_1 | REF_DATE_2 | TARGET_WEIGHTS | AMOUNT | DIMENSION_1 | DIMENSION_2 |
|---|---|---|---|---|---|---|
| VOLUME | 2023_ACT | 12 | 1 | 1500 | CHANNEL_1 | PRODUCT_1 |
| VOLUME | 2024_ACT | 01 | 0 | 2000 | CHANNEL_1 | PRODUCT_1 |
| VOLUME | 2024_ACT | 02 | 2 | 1980 | CHANNEL_1 | PRODUCT_1 |
| COVID_RATE | 2013_ACT | 12 | 0,01 | CHANNEL_1 | PRODUCT_1 | |
| COVID_RATE | 2024_ACT | 01 | 0,15 | CHANNEL_1 | PRODUCT_1 | |
| COVID_RATE | 2024_ACT | 02 | 0,20 | CHANNEL_1 | PRODUCT_1 | |
| MARKETING | 2013_ACT | 12 | -165000 | CHANNEL_1 | PRODUCT_1 | |
| MARKETING | 2024_ACT | 01 | -166300 | CHANNEL_1 | PRODUCT_1 | |
| MARKETING | 2024_ACT | 02 | -141000 | CHANNEL_1 | PRODUCT_1 | |
| MARKETING | 2026_PLAN | 03 | -140900 | CHANNEL_1 | PRODUCT_1 |
附录 1.2:用于 Method 的输出 Train 数据集¶
该数据集包含在 train 步骤中所选 Metric 得分最佳的方法。它包括四(4)个固定字段以及数组的附加字段。您需要标识时间序列维度键:
- MEASURE:历史序列的科目(文本)
- METHOD:在训练阶段选择的方法(文本)
- METRIC:所选的指标(文本)
- SCORE:所选指标的值(数字)
- DIMENSION_1:标识时间序列维度键的第一个字段(文本/数字)
- DIMENSION_2:标识时间序列维度键的第二个字段(文本/数字)
例如:
| MEASURE | METHOD | METRIC | SCORE | DIMENSION_1 | DIMENSION_2 |
|---|---|---|---|---|---|
| VOLUME | SARIMAX | MAPE | 3 | CHANNEL_1 | PRODUCT_1 |
附录 1.3:用于拟合的训练输出数据集¶
该数据集包含模型对每个日期的拟合值。需要标识时间 ID 和时间序列维度键:
- MEASURE:历史序列的科目(文本)
- REF_DATE_1:标识历史序列时间 ID 的第一个字段(文本/数字)
- REF_DATE_2:标识历史序列时间 ID 的第二个字段(文本/数字)
- AMOUNT:历史序列的拟合值(数字)
- DIMENSION_1:标识时间序列维度键的第一个字段(文本/数字)
- DIMENSION_2:标识时间序列维度键的第二个字段(文本/数字)
例如:
| MEASURE | REF_DATE_1 | REF_DATE_2 | AMOUNT | DIMENSION_1 | DIMENSION_2 |
|---|---|---|---|---|---|
| VOLUME | 2019_ACT | 12 | 1503 | CHANNEL_1 | PRODUCT_1 |
| VOLUME | 2020_ACT | 01 | 2010 | CHANNEL_1 | PRODUCT_1 |
| VOLUME | 2020_ACT | 02 | 1975 | CHANNEL_1 | PRODUCT_1 |
附录 1.4:用于解释的训练输出数据集¶
该数据集包含特征的重要性。
需要标识时间序列和变量:
- VARIABLE:针对目标变量通过特征选择所选出的特征(文本)
- DIMENSION_1_VAR:标识该变量的第一个字段(文本/数字)
- DIMENSION_2_VAR:标识该变量的第二个字段(文本/数字)
- OVERALL_IMPORTANCE:特征重要性(数字)
- MEASURE:要预测的科目(文本)
- DIMENSION_1:标识时间序列维度键的第一个字段(文本/数字)
- DIMENSION_2:标识时间序列维度键的第二个字段(文本/数字)
- SHIFT:需要向前回溯的期间数(文本)
例如:
| VARIABLE | OVERALL_ IMPORTANCE | MEASURE | DIMENSION_1_VAR | DIMENSION_2_VAR | DIMENSION_1 | DIMENSION_2 | SHIFT |
|---|---|---|---|---|---|---|---|
| COVID_RATE | 0.15 | VOLUME | CHANNEL_2 | PRODUCT_2 | CHANNEL_1 | PRODUCT_1 | 0 |
| MARKETING-2 | 0.60 | VOLUME | CHANNEL_1 | PRODUCT_2 | CHANNEL_1 | PRODUCT_1 | 0 |
| DISCOUNT_P | 0.25 | VOLUME | CHANNEL_2 | PRODUCT_1 | CHANNEL_1 | PRODUCT_1 | -1 |
附录 1.5:用于贡献度的训练输出数据集¶
该数据集包含预测中每个变量和日期的贡献度。
需要标识时间 ID、时间序列维度键和变量:
- VARIABLE:针对目标变量通过特征选择所选出的特征(文本)
- DIM_1_VAR:标识该变量的第一个字段(文本/数字)
- DIM_2_VAR:标识该变量的第二个字段(文本/数字)
- CONTRIBUTE:贡献度(数字)
- MEASURE:要预测的科目(文本)
- REF_DATE_1:标识历史序列时间 ID 的第一个字段(文本/数字)
- REF_DATE_2:标识历史序列时间 ID 的第二个字段(文本/数字)
- DIM_1:标识时间序列维度键的第一个字段(文本/数字)
- DIM_2:标识时间序列维度键的第二个字段(文本/数字)
- SHIFT:需要向前回溯的期间数(文本)
| VARIABLE | CONTRIBUTE | MEASURE | REF_DATE_1 | REF_DATE_2 | DIM_1_VAR | DIM_2_VAR | DIM_1 | DIM_2 | SHIFT |
|---|---|---|---|---|---|---|---|---|---|
| COVID_RATE | -340 | VOLUME | 2019_ACT | 12 | CHANNEL_2 | PRODUCT_2 | CHANNEL_1 | PRODUCT_1 | 0 |
| COVID_RATE | -289 | VOLUME | 2020_ACT | 01 | CHANNEL_2 | PRODUCT_2 | CHANNEL_1 | PRODUCT_1 | 0 |
| COVID_RATE | -378 | VOLUME | 2020_ACT | 02 | CHANNEL_2 | PRODUCT_2 | CHANNEL_1 | PRODUCT_1 | -1 |
| MARKETING-2 | 468 | VOLUME | 2019_ACT | 12 | CHANNEL_1 | PRODUCT_2 | CHANNEL_1 | PRODUCT_1 | -2 |
| MARKETING-2 | 550 | VOLUME | 2020_ACT | 01 | CHANNEL_1 | PRODUCT_2 | CHANNEL_1 | PRODUCT_1 | 0 |
| MARKETING-2 | 491 | VOLUME | 2020_ACT | 02 | CHANNEL_1 | PRODUCT_2 | CHANNEL_1 | PRODUCT_1 | -1 |
| DISCOUNT_P | 578 | VOLUME | 2019_ACT | 12 | CHANNEL_2 | PRODUCT_1 | CHANNEL_1 | PRODUCT_1 | 0 |
附录 2:维度和参考日期¶
DIMENSIONS LIST:如果需要多个维度来标识时间序列键(例如 ENTITY、CHANNEL、PRODUCT),可以直接在配置窗口中映射字段。
REF_DATE:如果需要多个维度来标识历史序列的时间 ID(例如 SCENARIO、PERIOD),可以直接在配置窗口中映射字段。
例如:

附录 3:参数¶
训练阶段需要设置的参数包括以下内容:
Perform Features Selection:该参数可设置为 Y(是)或 N(否),以决定是否使用 Boruta 算法执行特征选择。
Log level:该参数可设置为:
- DEBUG(记录所有信息)
- INFO(记录所有警告、错误、严重错误和一般信息,不记录调试信息)
- WARNING(记录所有警告、错误和严重错误)
- ERROR(记录所有错误和严重错误)
- CRITICAL(仅记录严重错误)
严重程度低于参数所指定级别的日志消息将被忽略;严重程度等于或高于该级别的日志消息将被输出。
Models List:列出用于训练数据的模型。该参数可设置为模型列表中的全部模型或子集:
- AdaBoost
- ElasticNetReg
- DecisionTree
- GradientBoost
- LinearRegressor
- RidgeReg
- SGDReg
- ExtraTreesReg
- RandomForestReg
- Sarimax
- HoltWinters
- LightGBM
Metric to Optimize:用于评估所有模型的指标。该参数可设置为列表中的某一指标:
- MAPE(mean_absolute_percentage_error)
- MGD(mean_gamma_deviance)
- MPD(mean_poisson_deviance)
- R2(r2)
- MEAE(median_absolute_error)
- MSLE(mean_squared_log_error)
- MSE(mean_squared_error)
- MAE(mean_absolute_error)
- ME(max_error)
- E_VARIANCE(explained_variance)
R2 Threshold to detect independent features only:回归方法用于检测独立特征的阈值。默认值为 0.6,但该参数可设置为区间 [0;1] 内的值。值越高,检测到的特征依赖性越低。
Max time spent to detect independent features (in seconds):创建特征之间依赖图的时间。如果算法超过该参数设置的时间,算法将停止,并选择所有特征。默认值为 1800,但该参数可设置为区间 [0, 86400] 内的值。
例如:
