张伟作业
由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
\