股票预测中:如何用树提升模型处理3D输入实现多输出回归?
股票预测任务中训练数据构建方案及模型优化建议
当前展平方式的核心问题
你直接把32种商品×27个特征展平为单一行向量的做法,确实会丢失商品间的关联性与特征归属信息——原本每个商品的特征是独立的逻辑分组,展平后模型无法识别哪些特征属于同一商品,相当于把所有商品的特征混在一起,既难学习到单个商品特征与自身收益率的对应关系,也捕捉不到商品间的联动规律,这大概率是MSE偏高的主要原因。
更合理的训练数据构建方案
方案1:单商品独立建模(优先尝试)
把每个商品拆成独立的回归任务处理:
- 对每个商品,提取它的27个特征在连续n个时间步的序列,构建成
(样本数, n*27)的特征矩阵,目标变量是该商品在t+2时刻的收益率。 - 每个模型只专注学习单个商品的历史特征与未来收益率的映射,避免不同商品特征的干扰。
- 直接用LightGBM/XGBoost做单输出回归即可,无需
MultiOutputRegressor。最后可通过32个模型的平均性能或加权结果完成对比。
方案2:保留商品维度的多输出建模
如果需要捕捉商品间的联动关系,可调整数据结构让模型识别商品维度:
- 重构特征时给每个特征添加商品标识,比如命名为
商品1_特征1_t-1、商品2_特征3_t-2,将数据整理为(样本数, 32*(n*27))的矩阵,让模型通过特征命名规律间接学习商品分组。 - 或者采用长格式数据:把每个商品-时间步的组合作为一条样本,特征包含该商品的n步历史特征+其他商品的同期/历史特征,同时加入商品ID作为标签编码特征,让模型区分不同商品,目标变量为该商品
t+2的收益率。
额外优化方向
- 归一化规范:用训练集的均值/标准差拟合归一化规则,再应用到测试集,避免数据泄露;针对大量0值,可单独标记或对非0特征做独立归一化。
- 时间窗口优化:通过网格搜索尝试不同的n值(如20、50、100步),找到适配数据的最优窗口,过长易引入噪声,过短会丢失趋势信息。
- 模型调参:当前MSE高可能并非数据结构问题,可重点优化核心参数——比如LightGBM的
learning_rate、num_leaves,XGBoost的gamma、subsample,用交叉验证找到最优组合。 - Adaboost适配性:Adaboost对噪声数据敏感,你的数据含大量0值,其性能大概率弱于LightGBM/XGBoost,对比时需注意这一特性。
内容的提问来源于stack exchange,提问作者nlurker
相关产品推荐
相关产品推荐

