PLUS会员

张伟作业

由bqz709ry创建,最终由bqz709ry 被浏览 2 用户

分别用stockranker和xgboost做了滚动训练,stockranker的结果相对正常,xgboost非常离谱,不太清楚原因

一、stockranker

每年训练一次,每次用一年的数据滚动训练

from bigmodule import M

result = M.tune.run(
    "rolling",
    [
         # 2023年训练模型, 2022进行预测, 输出预测值m6模块
        {"m3.start_date": "2022-01-01", "m3.end_date": "2023-01-01", "m4.start_date": "2023-01-01", "m4.end_date": "2024-01-01", '__outputs__': ['m6']},
        # 2024年训练模型, 2023进行预测, 输出预测值m6模块
        {"m3.start_date": "2023-01-01", "m3.end_date": "2024-01-01", "m4.start_date": "2024-01-01", "m4.end_date": "2025-01-01", '__outputs__': ['m6']},
        # 2025年训练模型, 2024进行预测, 输出预测值m6模块
        {"m3.start_date": "2024-01-01", "m3.end_date": "2025-01-01", "m4.start_date": "2025-01-01", "m4.end_date": "2026-01-01", '__outputs__': ['m6']},
    ],
)

https://bigquant.com/codesharev3/254086fe-62a6-4728-911b-0b0de6d42b65

二、XGBoost

效果不好,做了几次修改都不行,用程序写了滚动训练的脚本。每个月训练一次, 每次训练用半年数据。原因还需要老师帮忙看下!

import pandas as pd
from dateutil.relativedelta import relativedelta

# 定义时间范围(2025年每月滚动)
start_date = pd.to_datetime("2025-01-01")
end_date = pd.to_datetime("2025-07-30")

# 生成每月滚动配置
configs = []
current_date = start_date

while current_date < end_date:
    # 训练期:前6个月 (current_date - 6 months → current_date)
    train_start = (current_date - relativedelta(months=6)).strftime('%Y-%m-%d')
    train_end = current_date.strftime('%Y-%m-%d')
    
    # 预测期:下1个月 (current_date → current_date + 1 month)
    pred_start = current_date.strftime('%Y-%m-%d')
    pred_end = (current_date + relativedelta(months=1)).strftime('%Y-%m-%d')
    
    configs.append({
        "m3.start_date": train_start,  # 训练开始
        "m3.end_date": train_end,     # 训练结束
        "m4.start_date": pred_start,  # 预测开始
        "m4.end_date": pred_end,      # 预测结束
        '__outputs__': ['m5']         # 输出预测模块
    })
    
    # 移动到下个月
    current_date += relativedelta(months=1)
configs

https://bigquant.com/codesharev3/b6390bbd-0de2-4e35-ae77-addec79e380a

\

{link}