diff --git a/src/experiment/regression.ipynb b/src/experiment/regression.ipynb index dfa6f5f..4a5641a 100644 --- a/src/experiment/regression.ipynb +++ b/src/experiment/regression.ipynb @@ -11,8 +11,8 @@ "cell_type": "code", "metadata": { "ExecuteTime": { - "end_time": "2026-03-08T15:07:39.837396Z", - "start_time": "2026-03-08T15:07:39.834964Z" + "end_time": "2026-03-09T14:21:04.748286Z", + "start_time": "2026-03-09T14:21:04.170825Z" } }, "source": [ @@ -28,7 +28,7 @@ " LightGBMModel,\n", " STFilter,\n", " StandardScaler,\n", - " StockFilterConfig,\n", + " # StockFilterConfig, # 已删除,使用 StockPoolManager + filter_func 替代\n", " StockPoolManager,\n", " Trainer,\n", " Winsorizer,\n", @@ -37,7 +37,7 @@ "from src.training.config import TrainingConfig" ], "outputs": [], - "execution_count": 19 + "execution_count": 1 }, { "cell_type": "markdown", @@ -49,8 +49,8 @@ { "metadata": { "ExecuteTime": { - "end_time": "2026-03-08T15:07:39.849909Z", - "start_time": "2026-03-08T15:07:39.843845Z" + "end_time": "2026-03-09T14:21:04.761117Z", + "start_time": "2026-03-09T14:21:04.756245Z" } }, "cell_type": "code", @@ -83,10 +83,10 @@ "\n", "\n", "def prepare_data(\n", - " engine: FactorEngine,\n", - " feature_cols: List[str],\n", - " start_date: str,\n", - " end_date: str,\n", + " engine: FactorEngine,\n", + " feature_cols: List[str],\n", + " start_date: str,\n", + " end_date: str,\n", ") -> pl.DataFrame:\n", " print(\"\\n\" + \"=\" * 80)\n", " print(\"准备数据\")\n", @@ -110,7 +110,7 @@ " return data" ], "outputs": [], - "execution_count": 20 + "execution_count": 2 }, { "cell_type": "markdown", @@ -124,8 +124,8 @@ { "metadata": { "ExecuteTime": { - "end_time": "2026-03-08T15:07:39.857927Z", - "start_time": "2026-03-08T15:07:39.853639Z" + "end_time": "2026-03-09T14:21:04.770022Z", + "start_time": "2026-03-09T14:21:04.766036Z" } }, "cell_type": "code", @@ -134,65 +134,49 @@ "LABEL_NAME = 'future_return_5'\n", "\n", "FACTOR_DEFINITIONS = {\n", - " # ================= 1. 价格与趋势因子 (Trend & Momentum) =================\n", + " # 1. 趋势因子\n", " \"ma_5\": \"ts_mean(close, 5)\",\n", " \"ma_20\": \"ts_mean(close, 20)\",\n", - " \"ma_ratio_5_20\": \"ts_mean(close, 5) / (ts_mean(close, 20) + 1e-8) - 1\", # 均线发散度\n", - " \"bias_10\": \"close / (ts_mean(close, 10) + 1e-8) - 1\", # 10日乖离率(反转/动量)\n", - " \"high_low_ratio\": \"(close - ts_min(low, 20)) / (ts_max(high, 20) - ts_min(low, 20) + 1e-8)\", # 价格在近20日的位置(威廉指标变形)\n", - " \"bbi_ratio\": \"(ts_mean(close, 3) + ts_mean(close, 6) + ts_mean(close, 12) + ts_mean(close, 24)) / (4 * close + 1e-8)\", # BBI 多空指标比率\n", + " \"ma_ratio_5_20\": \"ts_mean(close, 5) / (ts_mean(close, 20) + 1e-8) - 1\",\n", + " \"bias_10\": \"close / (ts_mean(close, 10) + 1e-8) - 1\",\n", + " \"bbi_ratio\": \"(ts_mean(close, 3) + ts_mean(close, 6) + ts_mean(close, 12) + ts_mean(close, 24)) / (4 * close + 1e-8)\",\n", "\n", - " # ================= 2. 收益率与波动率因子 (Return & Volatility) =================\n", - " \"return_5\": \"(close / ts_delay(close, 5)) - 1\", # 5日动量/反转\n", - " \"return_10\": \"(close / ts_delay(close, 10)) - 1\",\n", + " # 2. 动量与反转\n", + " \"return_5\": \"(close / ts_delay(close, 5)) - 1\",\n", " \"return_20\": \"(close / ts_delay(close, 20)) - 1\",\n", - " \"return_diff_5_10\": \"(close / ts_delay(close, 5)) - (close / ts_delay(close, 10))\", # 收益率加速/减速趋势\n", - " \"volatility_5\": \"ts_std(close, 5)\",\n", - " \"volatility_20\": \"ts_std(close, 20)\",\n", - " \"volatility_ratio\": \"ts_std(close, 5) / (ts_std(close, 20) + 1e-8)\", # 波动率期限结构(近期是否剧烈震荡)\n", - " \"std_return_5\": \"ts_std((close / ts_delay(close, 1)) - 1, 5)\", # 5日真实收益率波动率\n", - " \"std_return_20\": \"ts_std((close / ts_delay(close, 1)) - 1, 20)\", # 20日真实收益率波动率\n", + " \"momentum_accel\": \"(close / ts_delay(close, 5)) - (close / ts_delay(close, 20))\",\n", + " \"volatility_ratio\": \"ts_std(close, 5) / (ts_std(close, 20) + 1e-8)\",\n", + " \"reversal_1\": \"close / ts_delay(close, 1) - 1\",\n", "\n", - " # ================= 3. 量能与流动性因子 (Volume & Liquidity) =================\n", - " \"volume_ratio_5_20\": \"ts_mean(vol, 5) / (ts_mean(vol, 20) + 1e-8)\", # 相对放量指标\n", - " \"volume_change_rate\": \"ts_mean(vol, 2) / (ts_mean(vol, 10) + 1e-8) - 1\", # 短期成交量异动\n", - " \"turnover_rate_mean_5\": \"ts_mean(turnover_rate, 5)\", # 5日平均换手率(活跃度)\n", - " \"turnover_rate_std_20\": \"ts_std(turnover_rate, 20)\", # 换手率波动率(炒作情绪稳定性)\n", - " \"turnover_deviation\": \"(turnover_rate - ts_mean(turnover_rate, 10)) / (ts_std(turnover_rate, 10) + 1e-8)\", # 换手率偏离度\n", - " # \"amihud_illiq_20\": \"ts_mean(abs((close / ts_delay(close, 1)) - 1) / (amount + 1e-8), 20)\", # Amihud非流动性指标(核心Alpha)\n", + " # 3. 量能与微观结构\n", + " \"volume_ratio\": \"ts_mean(vol, 5) / (ts_mean(vol, 20) + 1e-8)\",\n", + " \"turnover_rate_mean_5\": \"ts_mean(turnover_rate, 5)\",\n", + " # \"vol_price_corr\": \"ts_corr(close, vol, 10)\",\n", + " \"turnover_deviation\": \"(turnover_rate - ts_mean(turnover_rate, 10)) / (ts_std(turnover_rate, 10) + 1e-8)\",\n", "\n", - " # ================= 4. 截面排名因子 (Cross-Sectional Rank) =================\n", - " \"market_cap_rank\": \"cs_rank(total_mv)\", # 市值规模排名(Size因子)\n", - " \"turnover_rank\": \"cs_rank(turnover_rate)\", # 当日换手率全市场排名\n", - " \"return_5_rank\": \"cs_rank((close / ts_delay(close, 5)) - 1)\", # 5日收益率截面排名(横向比价)\n", + " # 4. 财务动量与质量\n", + " \"net_profit_growth\": \"(n_income / ts_delay(n_income, 4)) - 1\",\n", + " \"revenue_growth\": \"(revenue / ts_delay(revenue, 4)) - 1\",\n", + " \"roe\": \"n_income / (total_hldr_eqy_exc_min_int + 1e-8)\",\n", + " \"roe_delta\": \"roe - ts_delay(roe, 4)\",\n", + " \"debt_to_equity\": \"total_liab / (total_hldr_eqy_exc_min_int + 1e-8)\",\n", + " \"current_ratio\": \"total_cur_assets / (total_cur_liab + 1e-8)\",\n", "\n", - " # # ================= 5. 财务质量因子 (Quality) =================\n", - " # # 注:底层数据引擎需确保 n_income 等字段已就绪,或者映射到 fina_indicator\n", - " # \"roe\": \"n_income / (total_hldr_eqy_exc_min_int + 1e-8)\", # ROE 净资产收益率 (盈利效率)\n", - " # \"roa\": \"n_income / (total_assets + 1e-8)\", # ROA 总资产收益率\n", - " # \"profit_margin\": \"n_income / (revenue + 1e-8)\", # 销售净利率 (定价权)\n", - " # \"debt_to_asset\": \"total_liab / (total_assets + 1e-8)\", # 资产负债率 (杠杆/破产风险)\n", - " # \"cash_to_liab\": \"money_cap / (total_liab + 1e-8)\", # 现金流负债比 (流动性风险)\n", - " #\n", - " # # ================= 6. 财务估值因子 (Value / Yield) =================\n", - " # # 注:经典量化不用 PE (Price/Earn),而是用 EP (Earn/Price),因为亏损公司的 PE 是负的或无穷大,EP 可以平滑处理。\n", - " # \"EP\": \"n_income / (total_mv * 10000 + 1e-8)\", # 盈利收益率 (Earnings Yield, 相当于 1/PE) *注:Tushare市值需乘10000对齐单位\n", - " # \"BP\": \"total_hldr_eqy_exc_min_int / (total_mv * 10000 + 1e-8)\", # 账面市值比 (Book to Price, 相当于 1/PB)\n", - " # \"CP\": \"n_cashflow_act / (total_mv * 10000 + 1e-8)\", # 现金流收益率 (Cashflow Yield)\n", - " # \"SP\": \"revenue / (total_mv * 10000 + 1e-8)\", # 销售收益率 (Sales to Price, 相当于 1/PS)\n", - " #\n", - " # # 估值截面排名 (直接提取全市场最便宜、最赚钱的公司)\n", - " # \"EP_rank\": \"cs_rank(n_income / (total_mv + 1e-8))\",\n", - " # \"BP_rank\": \"cs_rank(total_hldr_eqy_exc_min_int / (total_mv + 1e-8))\",\n", + " # 5. 财务估值与排名\n", + " \"EP_rank\": \"cs_rank(n_income / (total_mv * 10000 + 1e-8))\",\n", + " \"BP_rank\": \"cs_rank(total_hldr_eqy_exc_min_int / (total_mv * 10000 + 1e-8))\",\n", + " \"market_cap_rank\": \"cs_rank(total_mv)\",\n", + " \"cashflow_act_rank\": \"cs_rank(n_cashflow_act)\",\n", + " \"ebitda_rank\": \"cs_rank(ebitda)\"\n", "}\n", "\n", "# Label 因子定义(不参与训练,用于计算目标)\n", "LABEL_FACTOR = {\n", - " LABEL_NAME: \"(ts_delay(close, -5) / close) - 1\", # 未来5日收益率\n", + " LABEL_NAME: \"(ts_delay(close, -5) / ts_delay(open, -1)) - 1\", # 未来5日收益率\n", "}" ], "outputs": [], - "execution_count": 21 + "execution_count": 3 }, { "cell_type": "markdown", @@ -205,8 +189,8 @@ "cell_type": "code", "metadata": { "ExecuteTime": { - "end_time": "2026-03-08T15:07:39.865371Z", - "start_time": "2026-03-08T15:07:39.861138Z" + "end_time": "2026-03-09T14:21:04.778317Z", + "start_time": "2026-03-09T14:21:04.773776Z" } }, "source": [ @@ -219,7 +203,7 @@ "VAL_START = \"20240101\"\n", "VAL_END = \"20241231\"\n", "TEST_START = \"20250101\"\n", - "TEST_END = \"20251231\"\n", + "TEST_END = \"20261231\"\n", "\n", "# 模型参数配置\n", "MODEL_PARAMS = {\n", @@ -227,7 +211,7 @@ " \"metric\": \"mae\", # 改为 MAE,对异常值更稳健\n", " # 树结构控制(防过拟合核心)\n", " \"num_leaves\": 20, # 从31降为20,降低模型复杂度\n", - " \"max_depth\": 4, # 显式限制深度,防止过度拟合噪声\n", + " \"max_depth\": 5, # 显式限制深度,防止过度拟合噪声\n", " \"min_child_samples\": 50, # 叶子最小样本数,防止学习极端样本\n", " \"min_child_weight\": 0.001,\n", " # 学习参数\n", @@ -251,13 +235,50 @@ " {\"name\": \"cs_standard_scaler\", \"params\": {}},\n", "]\n", "\n", - "# 股票池筛选配置\n", - "STOCK_FILTER_CONFIG = {\n", - " \"exclude_cyb\": True, # 排除创业板\n", - " \"exclude_kcb\": True, # 排除科创板\n", - " \"exclude_bj\": True, # 排除北交所\n", - " \"exclude_st\": True, # 排除ST股票\n", - "}\n", + "\n", + "# 股票池筛选函数\n", + "# 使用新的 StockPoolManager API:传入自定义筛选函数和所需列/因子\n", + "# 筛选函数接收单日 DataFrame,返回布尔 Series\n", + "#\n", + "# 筛选逻辑(针对单日数据):\n", + "# 1. 先排除创业板、科创板、北交所(ST过滤由STFilter组件处理)\n", + "# 2. 然后选取市值最小的500只股票\n", + "def stock_pool_filter(df: pl.DataFrame) -> pl.Series:\n", + " \"\"\"股票池筛选函数(单日数据)\n", + "\n", + " 筛选条件:\n", + " 1. 排除创业板(代码以 300 开头)\n", + " 2. 排除科创板(代码以 688 开头)\n", + " 3. 排除北交所(代码以 8、9 或 4 开头)\n", + " 4. 选取当日市值最小的500只股票\n", + " \"\"\"\n", + " # 代码筛选(排除创业板、科创板、北交所)\n", + " code_filter = (\n", + " ~df[\"ts_code\"].str.starts_with(\"300\") & # 排除创业板\n", + " ~df[\"ts_code\"].str.starts_with(\"688\") & # 排除科创板\n", + " ~df[\"ts_code\"].str.starts_with(\"8\") & # 排除北交所\n", + " ~df[\"ts_code\"].str.starts_with(\"9\") & # 排除北交所\n", + " ~df[\"ts_code\"].str.starts_with(\"4\") # 排除北交所\n", + " )\n", + "\n", + " # 在已筛选的股票中,选取市值最小的500只\n", + " # 按市值升序排序,取前500\n", + " valid_df = df.filter(code_filter)\n", + " n = min(1000, len(valid_df))\n", + " small_cap_codes = valid_df.sort(\"total_mv\").head(n)[\"ts_code\"]\n", + "\n", + " # 返回布尔 Series:是否在被选中的股票中\n", + " return df[\"ts_code\"].is_in(small_cap_codes)\n", + "\n", + "\n", + "# 定义筛选所需的基础列\n", + "STOCK_FILTER_REQUIRED_COLUMNS = [\"total_mv\"] # ST过滤由STFilter组件处理\n", + "\n", + "# 可选:定义筛选所需的因子(如果需要用因子进行筛选)\n", + "# STOCK_FILTER_REQUIRED_FACTORS = {\n", + "# \"market_cap_rank\": \"cs_rank(total_mv)\",\n", + "# }\n", + "\n", "\n", "# 输出配置(相对于本文件所在目录)\n", "OUTPUT_DIR = \"output\"\n", @@ -268,7 +289,7 @@ "TOP_N = 5 # 可调整为 10, 20 等" ], "outputs": [], - "execution_count": 22 + "execution_count": 4 }, { "cell_type": "markdown", @@ -280,13 +301,13 @@ ] }, { - "cell_type": "code", "metadata": { "ExecuteTime": { - "end_time": "2026-03-08T15:07:47.887413Z", - "start_time": "2026-03-08T15:07:39.874187Z" + "end_time": "2026-03-09T14:21:11.178131Z", + "start_time": "2026-03-09T14:21:04.783890Z" } }, + "cell_type": "code", "source": [ "print(\"\\n\" + \"=\" * 80)\n", "print(\"LightGBM 回归模型训练\")\n", @@ -340,11 +361,17 @@ ")\n", "\n", "# 8. 创建股票池管理器\n", + "# 使用新的 API:传入自定义筛选函数和所需列\n", "pool_manager = StockPoolManager(\n", - " filter_config=StockFilterConfig(**STOCK_FILTER_CONFIG),\n", - " selector_config=None, # 暂时不启用市值选择\n", + " filter_func=stock_pool_filter,\n", + " required_columns=STOCK_FILTER_REQUIRED_COLUMNS, # 筛选所需的额外列\n", + " # required_factors=STOCK_FILTER_REQUIRED_FACTORS, # 可选:筛选所需的因子\n", " data_router=engine.router,\n", ")\n", + "print(\"[股票池筛选] 使用自定义函数进行股票池筛选\")\n", + "print(f\"[股票池筛选] 所需基础列: {STOCK_FILTER_REQUIRED_COLUMNS}\")\n", + "print(\"[股票池筛选] 筛选逻辑: 排除创业板/科创板/北交所后,每日选市值最小的500只\")\n", + "# print(f\"[股票池筛选] 所需因子: {list(STOCK_FILTER_REQUIRED_FACTORS.keys())}\")\n", "\n", "# 9. 创建 ST 股票过滤器\n", "st_filter = STFilter(\n", @@ -356,7 +383,7 @@ " model=model,\n", " pool_manager=pool_manager,\n", " processors=processors,\n", - " filters=[st_filter],\n", + " filters=[st_filter], # 使用STFilter过滤ST股票\n", " splitter=splitter,\n", " target_col=target_col,\n", " feature_cols=feature_cols,\n", @@ -385,32 +412,33 @@ " - ma_20: ts_mean(close, 20)\n", " - ma_ratio_5_20: ts_mean(close, 5) / (ts_mean(close, 20) + 1e-8) - 1\n", " - bias_10: close / (ts_mean(close, 10) + 1e-8) - 1\n", - " - high_low_ratio: (close - ts_min(low, 20)) / (ts_max(high, 20) - ts_min(low, 20) + 1e-8)\n", " - bbi_ratio: (ts_mean(close, 3) + ts_mean(close, 6) + ts_mean(close, 12) + ts_mean(close, 24)) / (4 * close + 1e-8)\n", " - return_5: (close / ts_delay(close, 5)) - 1\n", - " - return_10: (close / ts_delay(close, 10)) - 1\n", " - return_20: (close / ts_delay(close, 20)) - 1\n", - " - return_diff_5_10: (close / ts_delay(close, 5)) - (close / ts_delay(close, 10))\n", - " - volatility_5: ts_std(close, 5)\n", - " - volatility_20: ts_std(close, 20)\n", + " - momentum_accel: (close / ts_delay(close, 5)) - (close / ts_delay(close, 20))\n", " - volatility_ratio: ts_std(close, 5) / (ts_std(close, 20) + 1e-8)\n", - " - std_return_5: ts_std((close / ts_delay(close, 1)) - 1, 5)\n", - " - std_return_20: ts_std((close / ts_delay(close, 1)) - 1, 20)\n", - " - volume_ratio_5_20: ts_mean(vol, 5) / (ts_mean(vol, 20) + 1e-8)\n", - " - volume_change_rate: ts_mean(vol, 2) / (ts_mean(vol, 10) + 1e-8) - 1\n", + " - reversal_1: close / ts_delay(close, 1) - 1\n", + " - volume_ratio: ts_mean(vol, 5) / (ts_mean(vol, 20) + 1e-8)\n", " - turnover_rate_mean_5: ts_mean(turnover_rate, 5)\n", - " - turnover_rate_std_20: ts_std(turnover_rate, 20)\n", " - turnover_deviation: (turnover_rate - ts_mean(turnover_rate, 10)) / (ts_std(turnover_rate, 10) + 1e-8)\n", + " - net_profit_growth: (n_income / ts_delay(n_income, 4)) - 1\n", + " - revenue_growth: (revenue / ts_delay(revenue, 4)) - 1\n", + " - roe: n_income / (total_hldr_eqy_exc_min_int + 1e-8)\n", + " - roe_delta: roe - ts_delay(roe, 4)\n", + " - debt_to_equity: total_liab / (total_hldr_eqy_exc_min_int + 1e-8)\n", + " - current_ratio: total_cur_assets / (total_cur_liab + 1e-8)\n", + " - EP_rank: cs_rank(n_income / (total_mv * 10000 + 1e-8))\n", + " - BP_rank: cs_rank(total_hldr_eqy_exc_min_int / (total_mv * 10000 + 1e-8))\n", " - market_cap_rank: cs_rank(total_mv)\n", - " - turnover_rank: cs_rank(turnover_rate)\n", - " - return_5_rank: cs_rank((close / ts_delay(close, 5)) - 1)\n", + " - cashflow_act_rank: cs_rank(n_cashflow_act)\n", + " - ebitda_rank: cs_rank(ebitda)\n", "\n", "注册 Label 因子:\n", - " - future_return_5: (ts_delay(close, -5) / close) - 1\n", + " - future_return_5: (ts_delay(close, -5) / ts_delay(open, -1)) - 1\n", "\n", - "特征因子数: 23\n", + "特征因子数: 24\n", "Label: future_return_5\n", - "已注册因子总数: 24\n", + "已注册因子总数: 25\n", "\n", "[3] 准备数据\n", "\n", @@ -418,50 +446,67 @@ "准备数据\n", "================================================================================\n", "\n", - "计算因子: 20200101 - 20251231\n", - "数据形状: (7044952, 32)\n", - "数据列: ['ts_code', 'trade_date', 'high', 'close', 'low', 'vol', 'turnover_rate', 'total_mv', 'ma_5', 'ma_20', 'ma_ratio_5_20', 'bias_10', 'high_low_ratio', 'bbi_ratio', 'return_5', 'return_10', 'return_20', 'return_diff_5_10', 'volatility_5', 'volatility_20', 'volatility_ratio', 'std_return_5', 'std_return_20', 'volume_ratio_5_20', 'volume_change_rate', 'turnover_rate_mean_5', 'turnover_rate_std_20', 'turnover_deviation', 'market_cap_rank', 'turnover_rank', 'return_5_rank', 'future_return_5']\n", + "计算因子: 20200101 - 20261231\n", + "[FinancialLoader] 加载 financial_fina_indicator 失败: Binder Error: Referenced column \"f_ann_date\" not found in FROM clause!\n", + "Candidate bindings: \"ann_date\", \"end_date\", \"ocf_to_debt\", \"arturn_days\", \"nca_to_assets\"\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "D:\\PyProject\\ProStock\\src\\data\\financial_loader.py:148: UserWarning: Sortedness of columns cannot be checked when 'by' groups provided\n", + " merged = df_price.join_asof(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "数据形状: (7255513, 41)\n", + "数据列: ['ts_code', 'trade_date', 'turnover_rate', 'open', 'vol', 'close', 'total_mv', 'f_ann_date', 'revenue', 'n_income', 'total_hldr_eqy_exc_min_int', 'total_cur_assets', 'total_liab', 'total_cur_liab', 'roe', 'ebitda', 'n_cashflow_act', 'ma_5', 'ma_20', 'ma_ratio_5_20', 'bias_10', 'bbi_ratio', 'return_5', 'return_20', 'momentum_accel', 'volatility_ratio', 'reversal_1', 'volume_ratio', 'turnover_rate_mean_5', 'turnover_deviation', 'net_profit_growth', 'revenue_growth', 'roe_delta', 'debt_to_equity', 'current_ratio', 'EP_rank', 'BP_rank', 'market_cap_rank', 'cashflow_act_rank', 'ebitda_rank', 'future_return_5']\n", "\n", "前5行预览:\n", - "shape: (5, 32)\n", - "┌───────────┬────────────┬───────┬───────┬───┬─────────────┬─────────────┬────────────┬────────────┐\n", - "│ ts_code ┆ trade_date ┆ high ┆ close ┆ … ┆ market_cap_ ┆ turnover_ra ┆ return_5_r ┆ future_ret │\n", - "│ --- ┆ --- ┆ --- ┆ --- ┆ ┆ rank ┆ nk ┆ ank ┆ urn_5 │\n", - "│ str ┆ str ┆ f64 ┆ f64 ┆ ┆ --- ┆ --- ┆ --- ┆ --- │\n", - "│ ┆ ┆ ┆ ┆ ┆ f64 ┆ f64 ┆ f64 ┆ f64 │\n", - "╞═══════════╪════════════╪═══════╪═══════╪═══╪═════════════╪═════════════╪════════════╪════════════╡\n", - "│ 002082.SZ ┆ 20200102 ┆ 29.23 ┆ 28.24 ┆ … ┆ 0.136631 ┆ 0.728075 ┆ null ┆ -0.024079 │\n", - "│ 600387.SH ┆ 20200102 ┆ 24.42 ┆ 24.28 ┆ … ┆ 0.381818 ┆ 0.561497 ┆ null ┆ 0.058896 │\n", - "│ 000592.SZ ┆ 20200102 ┆ 18.68 ┆ 18.42 ┆ … ┆ 0.53262 ┆ 0.436898 ┆ null ┆ 0.128122 │\n", - "│ 002920.SZ ┆ 20200102 ┆ 31.51 ┆ 31.29 ┆ … ┆ 0.831551 ┆ 0.575668 ┆ null ┆ 0.129434 │\n", - "│ 600138.SH ┆ 20200102 ┆ 68.71 ┆ 68.23 ┆ … ┆ 0.702139 ┆ 0.556551 ┆ null ┆ 0.010992 │\n", - "└───────────┴────────────┴───────┴───────┴───┴─────────────┴─────────────┴────────────┴────────────┘\n", + "shape: (5, 41)\n", + "┌───────────┬────────────┬───────────┬─────────┬───┬───────────┬───────────┬───────────┬───────────┐\n", + "│ ts_code ┆ trade_date ┆ turnover_ ┆ open ┆ … ┆ market_ca ┆ cashflow_ ┆ ebitda_ra ┆ future_re │\n", + "│ --- ┆ --- ┆ rate ┆ --- ┆ ┆ p_rank ┆ act_rank ┆ nk ┆ turn_5 │\n", + "│ str ┆ str ┆ --- ┆ f64 ┆ ┆ --- ┆ --- ┆ --- ┆ --- │\n", + "│ ┆ ┆ f64 ┆ ┆ ┆ f64 ┆ f64 ┆ f64 ┆ f64 │\n", + "╞═══════════╪════════════╪═══════════╪═════════╪═══╪═══════════╪═══════════╪═══════════╪═══════════╡\n", + "│ 000001.SZ ┆ 20200102 ┆ 0.7885 ┆ 1817.67 ┆ … ┆ 0.993583 ┆ 0.997594 ┆ null ┆ -0.008857 │\n", + "│ 000001.SZ ┆ 20200103 ┆ 0.5752 ┆ 1849.33 ┆ … ┆ 0.993585 ┆ 0.997594 ┆ null ┆ -0.01881 │\n", + "│ 000001.SZ ┆ 20200106 ┆ 0.4442 ┆ 1856.97 ┆ … ┆ 0.993588 ┆ 0.997596 ┆ null ┆ -0.008171 │\n", + "│ 000001.SZ ┆ 20200107 ┆ 0.3755 ┆ 1870.07 ┆ … ┆ 0.993588 ┆ 0.997596 ┆ null ┆ -0.014117 │\n", + "│ 000001.SZ ┆ 20200108 ┆ 0.4369 ┆ 1855.88 ┆ … ┆ 0.993586 ┆ 0.997595 ┆ null ┆ -0.017252 │\n", + "└───────────┴────────────┴───────────┴─────────┴───┴───────────┴───────────┴───────────┴───────────┘\n", "\n", "[配置] 训练期: 20200101 - 20231231\n", "[配置] 验证期: 20240101 - 20241231\n", - "[配置] 测试期: 20250101 - 20251231\n", - "[配置] 特征数: 23\n", - "[配置] 目标变量: future_return_5\n" + "[配置] 测试期: 20250101 - 20261231\n", + "[配置] 特征数: 24\n", + "[配置] 目标变量: future_return_5\n", + "[股票池筛选] 使用自定义函数进行股票池筛选\n", + "[股票池筛选] 所需基础列: ['total_mv']\n", + "[股票池筛选] 筛选逻辑: 排除创业板/科创板/北交所后,每日选市值最小的500只\n" ] } ], - "execution_count": 23 + "execution_count": 5 }, { - "cell_type": "markdown", "metadata": {}, - "source": [ - "### 4.2 执行训练" - ] + "cell_type": "markdown", + "source": "### 4.2 执行训练" }, { - "cell_type": "code", "metadata": { "ExecuteTime": { - "end_time": "2026-03-08T15:07:53.576371Z", - "start_time": "2026-03-08T15:07:47.898097Z" + "end_time": "2026-03-09T14:21:13.936037Z", + "start_time": "2026-03-09T14:21:11.188410Z" } }, + "cell_type": "code", "source": [ "print(\"\\n\" + \"=\" * 80)\n", "print(\"开始训练\")\n", @@ -494,25 +539,42 @@ "\n", "[步骤 1/6] 股票池筛选\n", "------------------------------------------------------------\n", - " 执行每日独立筛选股票池...\n", - " 筛选前数据规模: (7044952, 32)\n", - " 筛选后数据规模: (4532198, 32)\n", - " 筛选前股票数: 5678\n", - " 筛选后股票数: 3359\n", - " 删除记录数: 2512754\n" + " 执行每日独立筛选股票池...\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\liaozhaorun\\AppData\\Local\\Temp\\ipykernel_29904\\547547317.py:75: DeprecationWarning: `is_in` with a collection of the same datatype is ambiguous and deprecated.\n", + "Please use `implode` to return to previous behavior.\n", + "\n", + "See https://github.com/pola-rs/polars/issues/22149 for more information.\n", + " return df[\"ts_code\"].is_in(small_cap_codes)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 筛选前数据规模: (7255513, 41)\n", + " 筛选后数据规模: (1494000, 41)\n", + " 筛选前股票数: 5694\n", + " 筛选后股票数: 2252\n", + " 删除记录数: 5761513\n" ] } ], - "execution_count": 24 + "execution_count": 6 }, { - "cell_type": "code", "metadata": { "ExecuteTime": { - "end_time": "2026-03-08T15:07:54.854708Z", - "start_time": "2026-03-08T15:07:53.584313Z" + "end_time": "2026-03-09T14:21:13.998861Z", + "start_time": "2026-03-09T14:21:13.946130Z" } }, + "cell_type": "code", "source": [ "# 步骤 2: 划分训练/验证/测试集(正确的三分法)\n", "print(\"\\n[步骤 2/6] 划分训练集、验证集和测试集\")\n", @@ -555,73 +617,73 @@ "\n", "[步骤 2/6] 划分训练集、验证集和测试集\n", "------------------------------------------------------------\n", - " 训练集数据规模: (2991506, 32)\n", - " 验证集数据规模: (769485, 32)\n", - " 测试集数据规模: (771207, 32)\n", - " 训练集股票数: 3297\n", - " 验证集股票数: 3220\n", - " 测试集股票数: 3215\n", + " 训练集数据规模: (970000, 41)\n", + " 验证集数据规模: (242000, 41)\n", + " 测试集数据规模: (282000, 41)\n", + " 训练集股票数: 1888\n", + " 验证集股票数: 1377\n", + " 测试集股票数: 1682\n", " 训练集日期范围: 20200102 - 20231229\n", " 验证集日期范围: 20240102 - 20241231\n", - " 测试集日期范围: 20250102 - 20251231\n", + " 测试集日期范围: 20250102 - 20260306\n", "\n", " 训练集前5行预览:\n", - "shape: (5, 32)\n", - "┌───────────┬────────────┬───────┬───────┬───┬─────────────┬─────────────┬────────────┬────────────┐\n", - "│ ts_code ┆ trade_date ┆ high ┆ close ┆ … ┆ market_cap_ ┆ turnover_ra ┆ return_5_r ┆ future_ret │\n", - "│ --- ┆ --- ┆ --- ┆ --- ┆ ┆ rank ┆ nk ┆ ank ┆ urn_5 │\n", - "│ str ┆ str ┆ f64 ┆ f64 ┆ ┆ --- ┆ --- ┆ --- ┆ --- │\n", - "│ ┆ ┆ ┆ ┆ ┆ f64 ┆ f64 ┆ f64 ┆ f64 │\n", - "╞═══════════╪════════════╪═══════╪═══════╪═══╪═════════════╪═════════════╪════════════╪════════════╡\n", - "│ 002082.SZ ┆ 20200102 ┆ 29.23 ┆ 28.24 ┆ … ┆ 0.136631 ┆ 0.728075 ┆ null ┆ -0.024079 │\n", - "│ 600387.SH ┆ 20200102 ┆ 24.42 ┆ 24.28 ┆ … ┆ 0.381818 ┆ 0.561497 ┆ null ┆ 0.058896 │\n", - "│ 000592.SZ ┆ 20200102 ┆ 18.68 ┆ 18.42 ┆ … ┆ 0.53262 ┆ 0.436898 ┆ null ┆ 0.128122 │\n", - "│ 002920.SZ ┆ 20200102 ┆ 31.51 ┆ 31.29 ┆ … ┆ 0.831551 ┆ 0.575668 ┆ null ┆ 0.129434 │\n", - "│ 600138.SH ┆ 20200102 ┆ 68.71 ┆ 68.23 ┆ … ┆ 0.702139 ┆ 0.556551 ┆ null ┆ 0.010992 │\n", - "└───────────┴────────────┴───────┴───────┴───┴─────────────┴─────────────┴────────────┴────────────┘\n", + "shape: (5, 41)\n", + "┌───────────┬────────────┬────────────┬───────┬───┬────────────┬───────────┬───────────┬───────────┐\n", + "│ ts_code ┆ trade_date ┆ turnover_r ┆ open ┆ … ┆ market_cap ┆ cashflow_ ┆ ebitda_ra ┆ future_re │\n", + "│ --- ┆ --- ┆ ate ┆ --- ┆ ┆ _rank ┆ act_rank ┆ nk ┆ turn_5 │\n", + "│ str ┆ str ┆ --- ┆ f64 ┆ ┆ --- ┆ --- ┆ --- ┆ --- │\n", + "│ ┆ ┆ f64 ┆ ┆ ┆ f64 ┆ f64 ┆ f64 ┆ f64 │\n", + "╞═══════════╪════════════╪════════════╪═══════╪═══╪════════════╪═══════════╪═══════════╪═══════════╡\n", + "│ 000004.SZ ┆ 20200102 ┆ 2.1613 ┆ 92.05 ┆ … ┆ 0.057219 ┆ 0.284759 ┆ null ┆ 0.000441 │\n", + "│ 000004.SZ ┆ 20200103 ┆ 1.6198 ┆ 90.67 ┆ … ┆ 0.0556 ┆ 0.284416 ┆ null ┆ 0.005875 │\n", + "│ 000004.SZ ┆ 20200106 ┆ 2.4595 ┆ 90.22 ┆ … ┆ 0.049158 ┆ 0.284264 ┆ null ┆ 0.05644 │\n", + "│ 000004.SZ ┆ 20200107 ┆ 2.1104 ┆ 88.59 ┆ … ┆ 0.049158 ┆ 0.283997 ┆ null ┆ 0.049753 │\n", + "│ 000004.SZ ┆ 20200108 ┆ 1.8769 ┆ 89.04 ┆ … ┆ 0.048904 ┆ 0.284073 ┆ null ┆ 0.019922 │\n", + "└───────────┴────────────┴────────────┴───────┴───┴────────────┴───────────┴───────────┴───────────┘\n", "\n", " 验证集前5行预览:\n", - "shape: (5, 32)\n", - "┌───────────┬────────────┬───────┬───────┬───┬─────────────┬─────────────┬────────────┬────────────┐\n", - "│ ts_code ┆ trade_date ┆ high ┆ close ┆ … ┆ market_cap_ ┆ turnover_ra ┆ return_5_r ┆ future_ret │\n", - "│ --- ┆ --- ┆ --- ┆ --- ┆ ┆ rank ┆ nk ┆ ank ┆ urn_5 │\n", - "│ str ┆ str ┆ f64 ┆ f64 ┆ ┆ --- ┆ --- ┆ --- ┆ --- │\n", - "│ ┆ ┆ ┆ ┆ ┆ f64 ┆ f64 ┆ f64 ┆ f64 │\n", - "╞═══════════╪════════════╪═══════╪═══════╪═══╪═════════════╪═════════════╪════════════╪════════════╡\n", - "│ 600099.SH ┆ 20240102 ┆ 29.14 ┆ 28.8 ┆ … ┆ 0.097785 ┆ 0.779655 ┆ 0.904941 ┆ -0.039236 │\n", - "│ 600918.SH ┆ 20240102 ┆ 7.02 ┆ 6.94 ┆ … ┆ 0.951764 ┆ 0.04298 ┆ 0.163254 ┆ -0.027378 │\n", - "│ 600590.SH ┆ 20240102 ┆ 30.84 ┆ 30.09 ┆ … ┆ 0.532282 ┆ 0.789696 ┆ 0.920534 ┆ -0.072117 │\n", - "│ 000430.SZ ┆ 20240102 ┆ 30.76 ┆ 30.67 ┆ … ┆ 0.159722 ┆ 0.473724 ┆ 0.77926 ┆ 0.039126 │\n", - "│ 601881.SH ┆ 20240102 ┆ 13.63 ┆ 13.33 ┆ … ┆ 0.984234 ┆ 0.196134 ┆ 0.139395 ┆ -0.029257 │\n", - "└───────────┴────────────┴───────┴───────┴───┴─────────────┴─────────────┴────────────┴────────────┘\n", + "shape: (5, 41)\n", + "┌───────────┬────────────┬────────────┬───────┬───┬────────────┬───────────┬───────────┬───────────┐\n", + "│ ts_code ┆ trade_date ┆ turnover_r ┆ open ┆ … ┆ market_cap ┆ cashflow_ ┆ ebitda_ra ┆ future_re │\n", + "│ --- ┆ --- ┆ ate ┆ --- ┆ ┆ _rank ┆ act_rank ┆ nk ┆ turn_5 │\n", + "│ str ┆ str ┆ --- ┆ f64 ┆ ┆ --- ┆ --- ┆ --- ┆ --- │\n", + "│ ┆ ┆ f64 ┆ ┆ ┆ f64 ┆ f64 ┆ f64 ┆ f64 │\n", + "╞═══════════╪════════════╪════════════╪═══════╪═══╪════════════╪═══════════╪═══════════╪═══════════╡\n", + "│ 000004.SZ ┆ 20240102 ┆ 2.2858 ┆ 65.43 ┆ … ┆ 0.07789 ┆ 0.247079 ┆ null ┆ -0.014188 │\n", + "│ 000004.SZ ┆ 20240103 ┆ 2.4017 ┆ 65.55 ┆ … ┆ 0.081629 ┆ 0.247079 ┆ null ┆ 0.002432 │\n", + "│ 000004.SZ ┆ 20240104 ┆ 12.6841 ┆ 65.8 ┆ … ┆ 0.0927 ┆ 0.247079 ┆ null ┆ 0.016919 │\n", + "│ 000004.SZ ┆ 20240105 ┆ 10.2752 ┆ 67.38 ┆ … ┆ 0.087038 ┆ 0.246986 ┆ null ┆ -0.013477 │\n", + "│ 000004.SZ ┆ 20240108 ┆ 6.5832 ┆ 66.04 ┆ … ┆ 0.091165 ┆ 0.246986 ┆ null ┆ -0.024684 │\n", + "└───────────┴────────────┴────────────┴───────┴───┴────────────┴───────────┴───────────┴───────────┘\n", "\n", " 测试集前5行预览:\n", - "shape: (5, 32)\n", - "┌───────────┬────────────┬────────┬────────┬───┬────────────┬────────────┬────────────┬────────────┐\n", - "│ ts_code ┆ trade_date ┆ high ┆ close ┆ … ┆ market_cap ┆ turnover_r ┆ return_5_r ┆ future_ret │\n", - "│ --- ┆ --- ┆ --- ┆ --- ┆ ┆ _rank ┆ ank ┆ ank ┆ urn_5 │\n", - "│ str ┆ str ┆ f64 ┆ f64 ┆ ┆ --- ┆ --- ┆ --- ┆ --- │\n", - "│ ┆ ┆ ┆ ┆ ┆ f64 ┆ f64 ┆ f64 ┆ f64 │\n", - "╞═══════════╪════════════╪════════╪════════╪═══╪════════════╪════════════╪════════════╪════════════╡\n", - "│ 605507.SH ┆ 20250102 ┆ 22.54 ┆ 21.55 ┆ … ┆ 0.75652 ┆ 0.281669 ┆ 0.449767 ┆ -0.058933 │\n", - "│ 600993.SH ┆ 20250102 ┆ 322.06 ┆ 312.13 ┆ … ┆ 0.75149 ┆ 0.235469 ┆ 0.626281 ┆ -0.024765 │\n", - "│ 600817.SH ┆ 20250102 ┆ 57.79 ┆ 55.83 ┆ … ┆ 0.568554 ┆ 0.162072 ┆ 0.442498 ┆ 0.007165 │\n", - "│ 603896.SH ┆ 20250102 ┆ 29.75 ┆ 28.56 ┆ … ┆ 0.411513 ┆ 0.283718 ┆ 0.504194 ┆ -0.044468 │\n", - "│ 600754.SH ┆ 20250102 ┆ 87.68 ┆ 85.56 ┆ … ┆ 0.91114 ┆ 0.477273 ┆ 0.825909 ┆ -0.062997 │\n", - "└───────────┴────────────┴────────┴────────┴───┴────────────┴────────────┴────────────┴────────────┘\n" + "shape: (5, 41)\n", + "┌───────────┬────────────┬────────────┬───────┬───┬────────────┬───────────┬───────────┬───────────┐\n", + "│ ts_code ┆ trade_date ┆ turnover_r ┆ open ┆ … ┆ market_cap ┆ cashflow_ ┆ ebitda_ra ┆ future_re │\n", + "│ --- ┆ --- ┆ ate ┆ --- ┆ ┆ _rank ┆ act_rank ┆ nk ┆ turn_5 │\n", + "│ str ┆ str ┆ --- ┆ f64 ┆ ┆ --- ┆ --- ┆ --- ┆ --- │\n", + "│ ┆ ┆ f64 ┆ ┆ ┆ f64 ┆ f64 ┆ f64 ┆ f64 │\n", + "╞═══════════╪════════════╪════════════╪═══════╪═══╪════════════╪═══════════╪═══════════╪═══════════╡\n", + "│ 000004.SZ ┆ 20250102 ┆ 9.4831 ┆ 55.8 ┆ … ┆ 0.099106 ┆ 0.310371 ┆ null ┆ -0.066193 │\n", + "│ 000004.SZ ┆ 20250103 ┆ 9.8133 ┆ 57.71 ┆ … ┆ 0.083783 ┆ 0.310313 ┆ null ┆ 0.00893 │\n", + "│ 000004.SZ ┆ 20250106 ┆ 6.7156 ┆ 50.39 ┆ … ┆ 0.079717 ┆ 0.310429 ┆ null ┆ -0.0142 │\n", + "│ 000004.SZ ┆ 20250107 ┆ 6.8175 ┆ 51.41 ┆ … ┆ 0.082837 ┆ 0.310254 ┆ null ┆ 0.013031 │\n", + "│ 000004.SZ ┆ 20250108 ┆ 7.9011 ┆ 52.95 ┆ … ┆ 0.088421 ┆ 0.310254 ┆ null ┆ 0.00442 │\n", + "└───────────┴────────────┴────────────┴───────┴───┴────────────┴───────────┴───────────┴───────────┘\n" ] } ], - "execution_count": 25 + "execution_count": 7 }, { - "cell_type": "code", "metadata": { "ExecuteTime": { - "end_time": "2026-03-08T15:07:55.786511Z", - "start_time": "2026-03-08T15:07:54.859705Z" + "end_time": "2026-03-09T14:21:14.315924Z", + "start_time": "2026-03-09T14:21:14.008258Z" } }, + "cell_type": "code", "source": [ "# 步骤 3: 训练集数据处理\n", "print(\"\\n[步骤 3/6] 训练集数据处理\")\n", @@ -663,53 +725,52 @@ "[步骤 3/6] 训练集数据处理\n", "------------------------------------------------------------\n", " [1/3] 应用处理器: NullFiller\n", - " 处理前记录数: 2991506\n", - " 处理后记录数: 2991506\n", + " 处理前记录数: 970000\n", + " 处理后记录数: 970000\n", " [2/3] 应用处理器: Winsorizer\n", - " 处理前记录数: 2991506\n", - " 处理后记录数: 2991506\n", + " 处理前记录数: 970000\n", + " 处理后记录数: 970000\n", " [3/3] 应用处理器: StandardScaler\n", - " 处理前记录数: 2991506\n", - " 处理后记录数: 2991506\n", + " 处理前记录数: 970000\n", + " 处理后记录数: 970000\n", "\n", " 训练集处理后前5行预览:\n", - "shape: (5, 32)\n", - "┌───────────┬───────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬──────────┐\n", - "│ ts_code ┆ trade_dat ┆ high ┆ close ┆ … ┆ market_ca ┆ turnover_ ┆ return_5_ ┆ future_r │\n", - "│ --- ┆ e ┆ --- ┆ --- ┆ ┆ p_rank ┆ rank ┆ rank ┆ eturn_5 │\n", - "│ str ┆ --- ┆ f64 ┆ f64 ┆ ┆ --- ┆ --- ┆ --- ┆ --- │\n", - "│ ┆ str ┆ ┆ ┆ ┆ f64 ┆ f64 ┆ f64 ┆ f64 │\n", - "╞═══════════╪═══════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪══════════╡\n", - "│ 002082.SZ ┆ 20200102 ┆ -0.303819 ┆ -0.30681 ┆ … ┆ -1.365199 ┆ 1.001092 ┆ null ┆ -0.02407 │\n", - "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 9 │\n", - "│ 600387.SH ┆ 20200102 ┆ -0.334151 ┆ -0.332286 ┆ … ┆ -0.518195 ┆ 0.411746 ┆ null ┆ 0.058896 │\n", - "│ 000592.SZ ┆ 20200102 ┆ -0.370349 ┆ -0.369985 ┆ … ┆ 0.002754 ┆ -0.029081 ┆ null ┆ 0.128122 │\n", - "│ 002920.SZ ┆ 20200102 ┆ -0.289441 ┆ -0.287188 ┆ … ┆ 1.035415 ┆ 0.461883 ┆ null ┆ 0.129434 │\n", - "│ 600138.SH ┆ 20200102 ┆ -0.054852 ┆ -0.04954 ┆ … ┆ 0.58836 ┆ 0.394246 ┆ null ┆ 0.010992 │\n", - "└───────────┴───────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴──────────┘\n", + "shape: (5, 41)\n", + "┌───────────┬───────────┬───────────┬──────────┬───┬───────────┬───────────┬───────────┬───────────┐\n", + "│ ts_code ┆ trade_dat ┆ turnover_ ┆ open ┆ … ┆ market_ca ┆ cashflow_ ┆ ebitda_ra ┆ future_re │\n", + "│ --- ┆ e ┆ rate ┆ --- ┆ ┆ p_rank ┆ act_rank ┆ nk ┆ turn_5 │\n", + "│ str ┆ --- ┆ --- ┆ f64 ┆ ┆ --- ┆ --- ┆ --- ┆ --- │\n", + "│ ┆ str ┆ f64 ┆ ┆ ┆ f64 ┆ f64 ┆ f64 ┆ f64 │\n", + "╞═══════════╪═══════════╪═══════════╪══════════╪═══╪═══════════╪═══════════╪═══════════╪═══════════╡\n", + "│ 000004.SZ ┆ 20200102 ┆ -0.158161 ┆ 4.205157 ┆ … ┆ -1.231095 ┆ -0.740158 ┆ null ┆ 0.000441 │\n", + "│ 000004.SZ ┆ 20200103 ┆ -0.308973 ┆ 4.205157 ┆ … ┆ -1.248088 ┆ -0.741819 ┆ null ┆ 0.005875 │\n", + "│ 000004.SZ ┆ 20200106 ┆ -0.07511 ┆ 4.205157 ┆ … ┆ -1.315695 ┆ -0.742554 ┆ null ┆ 0.05644 │\n", + "│ 000004.SZ ┆ 20200107 ┆ -0.172337 ┆ 4.205157 ┆ … ┆ -1.315695 ┆ -0.743846 ┆ null ┆ 0.049753 │\n", + "│ 000004.SZ ┆ 20200108 ┆ -0.237369 ┆ 4.205157 ┆ … ┆ -1.318362 ┆ -0.743479 ┆ null ┆ 0.019922 │\n", + "└───────────┴───────────┴───────────┴──────────┴───┴───────────┴───────────┴───────────┴───────────┘\n", "\n", " 训练集特征统计:\n", - " 特征数: 23\n", - " 样本数: 2991506\n", + " 特征数: 24\n", + " 样本数: 970000\n", " 缺失值统计:\n", - " ma_5: 11541 (0.39%)\n", - " ma_20: 54850 (1.83%)\n", - " ma_ratio_5_20: 54850 (1.83%)\n", - " bias_10: 25950 (0.87%)\n", - " high_low_ratio: 54850 (1.83%)\n" + " ma_5: 4000 (0.41%)\n", + " ma_20: 19000 (1.96%)\n", + " ma_ratio_5_20: 19000 (1.96%)\n", + " bias_10: 9000 (0.93%)\n", + " bbi_ratio: 23000 (2.37%)\n" ] } ], - "execution_count": 26 + "execution_count": 8 }, { - "cell_type": "code", "metadata": { "ExecuteTime": { - "end_time": "2026-03-08T15:08:10.050651Z", - "start_time": "2026-03-08T15:07:55.791554Z" + "end_time": "2026-03-09T14:21:20.028734Z", + "start_time": "2026-03-09T14:21:14.320887Z" } }, + "cell_type": "code", "source": [ "# 步骤 4: 训练模型\n", "print(\"\\n[步骤 4/6] 训练模型\")\n", @@ -742,15 +803,15 @@ "[步骤 4/6] 训练模型\n", "------------------------------------------------------------\n", " 模型类型: LightGBM\n", - " 训练样本数: 2991506\n", - " 特征数: 23\n", + " 训练样本数: 970000\n", + " 特征数: 24\n", " 目标变量: future_return_5\n", "\n", " 目标变量统计:\n", - " 均值: 0.001610\n", - " 标准差: 0.059623\n", - " 最小值: -0.155098\n", - " 最大值: 0.212842\n", + " 均值: 0.004184\n", + " 标准差: 0.058740\n", + " 最小值: -0.152621\n", + " 最大值: 0.216472\n", " 缺失值: 0\n", "\n", " 开始训练...\n", @@ -758,16 +819,16 @@ ] } ], - "execution_count": 27 + "execution_count": 9 }, { - "cell_type": "code", "metadata": { "ExecuteTime": { - "end_time": "2026-03-08T15:08:10.136262Z", - "start_time": "2026-03-08T15:08:10.055577Z" + "end_time": "2026-03-09T14:21:20.079300Z", + "start_time": "2026-03-09T14:21:20.035212Z" } }, + "cell_type": "code", "source": [ "# 步骤 5: 测试集数据处理\n", "print(\"\\n[步骤 5/6] 测试集数据处理\")\n", @@ -794,27 +855,27 @@ "[步骤 5/6] 测试集数据处理\n", "------------------------------------------------------------\n", " [1/3] 应用处理器: NullFiller\n", - " 处理前记录数: 771207\n", - " 处理后记录数: 771207\n", + " 处理前记录数: 282000\n", + " 处理后记录数: 282000\n", " [2/3] 应用处理器: Winsorizer\n", - " 处理前记录数: 771207\n", - " 处理后记录数: 771207\n", + " 处理前记录数: 282000\n", + " 处理后记录数: 282000\n", " [3/3] 应用处理器: StandardScaler\n", - " 处理前记录数: 771207\n", - " 处理后记录数: 771207\n" + " 处理前记录数: 282000\n", + " 处理后记录数: 282000\n" ] } ], - "execution_count": 28 + "execution_count": 10 }, { - "cell_type": "code", "metadata": { "ExecuteTime": { - "end_time": "2026-03-08T15:08:11.299483Z", - "start_time": "2026-03-08T15:08:10.141988Z" + "end_time": "2026-03-09T14:21:20.557802Z", + "start_time": "2026-03-09T14:21:20.083857Z" } }, + "cell_type": "code", "source": [ "# 步骤 6: 生成预测\n", "print(\"\\n[步骤 6/6] 生成预测\")\n", @@ -842,35 +903,33 @@ "\n", "[步骤 6/6] 生成预测\n", "------------------------------------------------------------\n", - " 测试样本数: 771207\n", + " 测试样本数: 282000\n", " 预测中...\n", " 预测完成!\n", "\n", " 预测结果统计:\n", - " 均值: 0.000634\n", - " 标准差: 0.008134\n", - " 最小值: -0.156166\n", - " 最大值: 0.131927\n" + " 均值: 0.003423\n", + " 标准差: 0.007422\n", + " 最小值: -0.117124\n", + " 最大值: 0.068818\n" ] } ], - "execution_count": 29 + "execution_count": 11 }, { - "cell_type": "markdown", "metadata": {}, - "source": [ - "### 4.3 训练指标曲线" - ] + "cell_type": "markdown", + "source": "### 4.3 训练指标曲线" }, { - "cell_type": "code", "metadata": { "ExecuteTime": { - "end_time": "2026-03-08T15:08:15.854279Z", - "start_time": "2026-03-08T15:08:11.304814Z" + "end_time": "2026-03-09T14:21:21.403754Z", + "start_time": "2026-03-09T14:21:20.562703Z" } }, + "cell_type": "code", "source": [ "print(\"\\n\" + \"=\" * 80)\n", "print(\"训练指标曲线\")\n", @@ -947,30 +1006,30 @@ "重新训练模型以收集训练指标...\n", "Training until validation scores don't improve for 100 rounds\n", "Early stopping, best iteration is:\n", - "[164]\ttrain's l1: 0.0424587\tval's l1: 0.0537962\n", + "[16]\ttrain's l1: 0.042162\tval's l1: 0.0636982\n", "训练完成,指标已收集\n", "\n", "评估指标: l1\n", "\n", "[早停信息]\n", " 配置的最大轮数: 1000\n", - " 实际训练轮数: 264\n", + " 实际训练轮数: 116\n", " 早停状态: 已触发(连续100轮验证指标未改善)\n", "\n", "最终指标:\n", - " 训练 l1: 0.042329\n", - " 验证 l1: 0.053824\n" + " 训练 l1: 0.041670\n", + " 验证 l1: 0.063778\n" ] } ], - "execution_count": 30 + "execution_count": 12 }, { "cell_type": "code", "metadata": { "ExecuteTime": { - "end_time": "2026-03-08T15:08:15.945008Z", - "start_time": "2026-03-08T15:08:15.859092Z" + "end_time": "2026-03-09T14:21:21.662005Z", + "start_time": "2026-03-09T14:21:21.419111Z" } }, "source": [ @@ -1018,7 +1077,7 @@ "text/plain": [ "
" ], - "image/png": "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ny+7du2SKlWqSFxcXKjuFgAAAAAAIKK43W7JyMiQBg0aSHx84fVQhFIhooGUngobAAAAAAAAIr/88os5CQ6hVDnTCinrCU9NTY2oCq99+/ZJ7dq1i0wvgWhBm0csot0jFkVbu8/MzZRRK0aZ+b9f8ndJcaWEe5fgMNHW5oFg0O6d68iRI6Zwx8pKCkOlVIhYXfY0kIq0UCozM9PsMx9eiAW0ecQi2j1iUbS1+6TcJEmsmGjm9ZgIpRDtbR4IBu3e+Yob3ohQCgAAAHC45IRkeXbws555AACiAaEUAAAAEAG/NNepVCfcuwEAQEhR1wkAAAAApdS3b19JTk6WypUrm7FT2rdvL2lpaSELIz///PMS3SYnJ0cmTpwo1atXlxo1asgNN9wgubm5pd5+zJgxkpSUZI7PmtatW+dZr9vruDHabbBhw4YyefJkyc7ONut27NjhczudXC6XDB482HP7zz77TM466yxz+xYtWsjf//73Amfwmjt3rjRr1kwqVaokp5xyinzyySclek4AOBehFAAAAOBwufm58tzm58yk83CWBx54QI4ePWoG9n3wwQdl5MiR8vPPP4dlX+6991756KOP5L///a98/fXX8uGHH8p9991X6Pb33HNPsdtfd9115visqVevXj7rtm7dao79iy++MJM+B6pJkyY+tzt48KBUq1ZNrrjiCrP+0KFDcuGFF8pVV10lv/32myxbtsyEXLo/ljvuuEPeeOMNeeedd8x9rFq1ytwvgOhAKAUAAAA4nAZRK7auMBOhlHNpZdOgQYNM8PLtt996lm/atEnOPfdcU4nUqlUrefrpp33WnXHGGaZSqFatWnLRRReZ5T169DCXvXv3NhVGRQVL3hYvXiwzZsyQ+vXrm0lDnWefPTkeWSDPPfdcibb317ZtW1PBZFU16SDr33//fcBtX331VTMw9dChQ831tWvXmiqzCRMmSEJCgvTs2dOse+aZZ8x6DbHmzZtn9lGfN31+mzZtavYTQHQglAIAAACAENDA5V//+pecOHFCOnfubJbt2bNH/vCHP8i1114r+/btM8HMrFmzZPXq1Wa9dp3TIEqrhnbu3ClTp041yzds2OAJbrRCaPr06eb6H//4R7n//vsDPr7ex6+//up5bKXz2o3u8OHDBbbX6qRgttcudRqoadfEhx9+2BynN90fDc7q1KljKqW02ikQ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" + "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAJOCAYAAABm7rQwAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAa1FJREFUeJzt3QecXFXZB+CzJZslhFACIYCELr036SJIKIK0IAhSP1SkY6FIRwUUEBQUsWCjmU9BkfYBAha6gAgCAoK0QOgJJWV35/u9B2ec2cxudpOdyW72efhd5s6dO/feuXt2MvPf95zbUCgUCgkAAAAA6qixnjsDAAAAgCCUAgAAAKDuhFIAAAAA1J1QCgAAAIC6E0oBAAAAUHdCKQAAAADqTigFAAAAQN0JpQAAAACoO6EUAAAAAHUnlAKAfuanP/1pamhoKE19Yemlly5t79RTT+2Tbc6t4vwUz1Wct/6ovH1Ee5ndtjMnXnMt2jkAMLAIpQCgU2jT0+n222937khnnXVWRbu49957uzwrBxxwQGm9lpaW9Oqrr86VZ3BuCZzKw7qYnn322Zk+5+abb05HHnlk2njjjdOwYcN6/fyuFAqFdP3116fPfOYz6cMf/nAaMWJEGjJkSFp00UXTVlttlc4+++w0YcKEWd4+AMwJzXNkrwBAl9Zff/30rW99q0/P0Fe/+tX09ttv5/n4skzfiZAgzm9HR0e+/4tf/CJtsMEGM6z3/vvvp1//+tel+zvssENaZJFF+n3bqZWBdKy9cdFFF6Xf/va3fbrN559/Pn36059Of/7zn2d4bOLEiekPf/hDnh577LGKyjkA6O+EUgDQKbQJb775ZvrGN75Ruv/xj388bbPNNhXnarnlluvy3E2aNClXMsyKVVddNU996eCDD+7T7fFfSyyxRG4fN910U75/5ZVXpvPOOy9XsZS7+uqr0+TJk0v3999//z4/jbVoO7UykI61N6Ii6kMf+lBab731Unt7e7r22mtna3uvvPJK2mKLLdIzzzxTWrbMMsuknXbaKVdJxXvV3XffXTWw6mvxeqZOnZorwACgL+i+BwD/CW2+9KUvlabOIU5UF5U/vvvuu6cxY8ZUdOX78Y9/nNZZZ500zzzzpM033zw/L75IHnXUUWmzzTZLSy65ZJp33nnT0KFDc5Cx4447Vv3C2l3Xp49+9KOl5RFqPPnkk2mvvfZKCy+8cGptbc37r1al0dWYUnHc5fv617/+lb73ve+lNdZYI29v1KhR6X/+53/yF9/O3nvvvXT88cfn8xDrRsBw8cUX59c8K90cY72DDjoov4bFFlssn6f48rv88svnbm9///vfZ3hOnIPifuLcRPelz372s6Xnr7zyyumHP/xh1f3F9j7xiU/k8DCmbbfdNj3wwANpVsTxFb322mvphhtumGGdqKAqivMalVIhqoV23nnn3CVroYUWymHWAgsskKutvv71r6d33323z7rNzcprjjAtqsGiTUQIEt0Ohw8fnlZZZZV02GGHVXRJi/nYb/n5COXHVGx/MzvWqCz79re/nTbZZJO04IIL5v3G/rfffvv0q1/9aob1Z6ct96XLL788VzbFedt1111ne3vx/lEeSB1yyCHpn//8Zzr//PPz7983v/nN9Mc//jE98cQTORzt6neju3NV/jPs/Lznnnsu//zj3EfbjHM6s9/vDTfcsPR45/fSv/3tb+nAAw/MoX68V0ZbWnvttfMfAXrT1gGYSxQAgBk888wzhfhnsjidcsop3T6+2WabVdxfc80183rXXnttxfJq02mnnVax7UsvvbTi8XJbbLFFafkaa6xRmG+++WbYXkNDQ+GWW26peN5SSy1V9bXcdtttFc/ddNNNqx7j5ptvXrG9adOmzfCai9OOO+5YcT/20RNf/OIXuz1PLS0thZtvvrniOfvtt1/p8WWXXbaw2GKLVX3uj3/844rn3XfffYXhw4fPsF5ra2thq622Kt2P89YTU6ZMKSywwAKl5+2+++4Vj0+YMKHQ1NRUevzoo48uPTZy5MhuX/fqq69emDx5csX2yh+P9tKTtjOrr3m33Xbr9vhGjBhRePjhh6v+XlSbiu2vu2ON87Xqqqt2u504runTp892W+5OHGv5c+P19Ubn19jb57/00kv597n4/LXWWqvQ3t7eo+eW/27E+0a5zueq/LjKn7fCCisURo8eXbHu1VdfXfG7/9nPfrZi20899VTF+nfeeWfpse9973uF5ubmLn+mq6yySv7ZAzB46L4HAH3gT3/6U1pqqaXSbrvtlqt7YpyX0NzcnNZaa63clSfGD4rqlKgG+Mtf/pJuu+22vM4ZZ5yRK4Sieqo3Hn744VxBcvTRR+eqkqgIiu41kVlE9U0Mftxb0QUonheVYddcc02pOikq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cmJcWTGOP/ZZPuZU/E7V82p0O+20Uw4NO4sA5pRTTilVvxUvNNC5yi+uFhhjeIW4WmPnsLCab3/723mQ+WLgE1e6u+GGG/I+4zxGt7iosIur4UVXy+J4Yeuvv35F8Bjjz0XoGd1KOw+gPqtifyeddFIOyaKralGM+9U5mPziF7+Y3xuiyu6pp55Kq622Wr6qX7yGCMpiIP477rgjV13FdgEYJAoAwAyeeeaZGISlNJ1yyindPn7bbbdVPYuf//znK9YrTltttVVhiSWWqLr9Sy+9tGLdcltssUVp+X777VfxWHfPW2qpparuK467/DnxunryvGnTphU222yzqq9tu+22q7h/xx13zLSFxfZWX331qtuL19nVuS5/LM5Nue5e2z333FOYd955Z9jXkCFDChtvvHHpfrz+3poyZUphoYUWmmHbX/ziF2dY909/+lOhubl5hnWHDx9e2HXXXbs8jvJ14+fekzYwK6/59ddfLyy++OI9+rmUn984B4sttljV5913330zPdYJEyYUVllllarPL0677bZbYfr06T36eXfXlrsT63V3DNV+Fzufl66m8p/bzDz77LOFjTbaqFfH8f777xdWWGGFquttv/32XZ6r7n6nqun8+x7Tww8/XHXdiy66qGp77zwBMHjovgcANfTd7343nX766WmppZbKlQNjxozJYwVFd6muBhAeCOK13HjjjenYY49NH/rQh3L1SFTVRFXHiSeeWLFutasSVtveH/7wh1xlFGMuxaDUUUlxySWXpFNPPbXPj79YMRLVWMOHD89TVOdEt8qPf/zjs7XtOPa99tprhuXx2jqLsXVuuummXEUUz4sucttvv30eHH/11VdPc/o1R/e4qIqKipao8ImrLEYFTnTZrPZ6iuK1RLXYNttsU6oM6o2oFotqoxhbLKrw4rzE70uMwxbVZjF2UVR4DeTfod6I94/42cX7RlRCRRVmdKOM1x/d3bbeeuvcJS+qyopaW1tztVl0/4vfwbgfFXNXX311n45X1rlL6rrrrttl2/3CF76QuyBG170Pf/jDadiwYfk1RLXUFltskauuysfhA2Du1xDJ1Jw+CABg4InBkyOk6Cy69UWYECL4iO6K1bo8AQAwuA2OPy8BADW5Mtiyyy6bNttss7TkkkumN998M1dPxRXaimKMJIEUAADVqJQCAGbJWmut1W1XmxgU+9e//nXuygUAAJ0ZUwoAmCWHHXZYGjt2bL7SWoxXE+FTjC+188475/F+4mpyAikAALqiUgoAAACAulMpBQAAAEDdCaUAAAAAqDtX3+sjHR0d6aWXXkrzzTdfamho6KvNAgAAAAwohUIhTZ48OS2++OKpsbHreiihVB+JQCouhw0AAABASs8//3y+EI5QqsaiQqp4wkeMGNFvq7leffXVtMgii3SbVDK4TWmbkva9et88//Ndfp5am1vn2LFos5V22GGHdO+996YhQ4bkisx4cz/uuOPSLrvsMtvnev75509/+tOf0hprrNHj50yfPj0df/zx6Ve/+lU+nj322COdeeaZqbm5eZbXv/7669M3vvGN9PTTT+f30q985SvpoIMOyo995jOfSffcc09677330oILLpj23Xff9OUvf7nirzHnnXde+ulPf5pee+21tNhii6VLLrkkrbfeevnxuBrc2WefnV588cX04Q9/OJ177rlp3XXXLT3/Zz/7WbrgggvSK6+8kp977LHHpnHjxvX6XGq3DDTaLAORdstAo80y2NrtpEmTcuFOMSvpikqpPlLsshdfovpzKDVlypR8fEIputLS1pKGDBuS56OtzOlQSpv9r6amphyqHHXUUTmAiQAnAqmPfvSjaamllprt8z18+PBevX+dcsopOSR77LHH8v3tttsuXXjhhenkk0+epfVvvPHG9KUvfSn98pe/TJtttln+hywCouIxfe1rX8th0tChQ9Nzzz2Xtt1227TiiiumffbZJz9+wgknpD/+8Y/p1ltvTcstt1xep6WlJT//L3/5Szr66KPT//3f/+WQ6kc/+lEOxZ566qkcyD344IPpi1/8Yrrpppvy+fzDH/6QQ8CNNtoorbLKKr06j9otA402y0Ck3TLQaLMM1nbbMJPhjZTLABWGNg1NP97px3mKefqneHOP0GSBBRZITzzxRGn5Aw88kLbccsu00EILpeWXXz798Ic/rHjsIx/5SP5HZeGFF0477rhjXr7BBhvk24033jgHU1Gp1BM/+clP0oknnpirimL66le/mn784x/P8vonnXRSDqgiFIoALqqhVlpppdLjq6++eg6kiq8//mF88skn8/033ngjV0nFPuJ1x+MR1MV+wm9/+9v0yU9+Mm244YZ525/73Ofya7366qvz488880xaeuml87mL52611Vb5Lzv/+Mc/evgTAQAAeksoBVSIL+Sj5h2VJ4P29++/WkTQ8v7776e11lorL3v55ZfTxz/+8XTIIYfkMttrrrkmVydF5VA47LDDchD11ltv5S5sxa5vUb0U7rzzzvTOO+/kiqPwiU98Ip111llV9//mm2+mF154obTvEPNRnfT222/3ev133303/fWvfy11rRs9enTuOjdhwoSK7XzhC19Iw4YNS2PGjMnHuv/+++fld999dw6srrjiijyYYgRM0f1u2rRppfMV1WXl4v7DDz+c58eOHZtLi2+++ea8blRMxXnadNNNZ+GnAwAA9IRQCmAAiTGZojpq3nnnTbvuumuuPBo1alR+7Be/+EXafPPNc7e0qAZabbXV0gEHHJAuv/zy/HiMRfXvf/87X5ghApxYtzu///3v85hV1UQgFOJYiorzcZWN3q4foVWERBGkRTAU3eriGItd84q+973v5W3dd999eUypqKYqVkpFd7+onPrnP/+Zu/HdcMMNubtj2H777XNVVHTji7GtLrroohyIxXNCBF2xr5122il3+Yvb888/P4djAABAbQilgAptHW3pJw/+JE8xT/8SA4NHBU9USEW3vRic+wc/+EF+7Nlnn83jTEXYU5y+853vlKqNomtb9AmPwb2jW1yM5zSroutbKK+KKs5XG8xwZusXHz/iiCNyt7u4f9ppp6XbbrstV1GVi257MS5UPC/GoCrffjwn5qOS6sgjj0zXXnttXv6xj30sh0wHH3xwDpoi1Np6663TyJEjS+fmnHPOyRVXUV0V1WMRyF133XWzfI4AAIDuCaWAChFEXf341XkSSvVvMXZSVABFRVOIMZBi4PMIrYpTVCFFUBVi8O+f//znuZtfDPQdgU50mQu97aoZFUpx9b+HHnqotCzm4xhi4PDerh8BWgRJ1XTudlcUFU/FMaXWXHPNmR7z//zP/+Qxol5//fU81lbMb7HFFvmxGOg8Bl6P7UToFbfbbLNNrrYCAABqQygFMEAVK6NiAPDwmc98Jl817te//nUObGKK4CeqgkIEUnE1uwigIgSK8CW6+YVFF100Pf30073af3QN/PrXv55DrphigPQIfmZ1/c9+9rPpu9/9bh5XKirBTj/99DzgeFQ+RbfDeF3RdS/GfIrxr6IKLMaCCssss0yufIrnvPfee7mLYmwrBjcPxXMRz41QKsbXiufEFfxCXGUvxpF69NFH8/24jftrr712L38qAABATwmlAAaQGLw7QpqYYhDuCGLiinVhiSWWyEFKdOeLq85F0HTooYeWxk265ZZbcgVQPDfCmm9961ulgcfPOOOM3HUuKpqKg5tH5VB3V+KLq+VFmLPyyivnaZNNNikNkh4+//nP56mn60d3uQih4hijgirCpRgnqyi630W1VQRqBx54YDr88MMrxry67LLLcpfAeN3rr79+Dqy+8pWvlEKpCMXiyoMxkHpbW1vu2le8tO3ee++dB1GPgeDj/EQFWuwjJgAAoDYaCl31i6BX4ktfdEGJL0Txpac/igqBiRMn5kGRi1/EoLMpbVPSuPHj8vz4ceNTa3PrHDtJ2iwDkXbLQKPNMhBptww02iyDrd1O6mFGIpkAAAAAoO6EUgAAAADUnVAKAAAAgLprrv8ugf5saNPQdNH2F5XmAQAAoBaEUkCFhoaGNGb+Mc4KAAAANaX7HsAA8dGPfjSdf/75ef72229PCyywQM33+cgjj6SxY8emhRdeOAeWb7311gzr/OMf/8jrzDfffGmhhRZKBx10UM2PCwAAGPhUSgEVprdPTz958CdpStuU9KnVPpUWnXfRHEYwawqFQnp3+rtp8tTJadLUSWnytMkzzJcvi/N+1EeOSisvsnLNT/n06dPTkCFDul0nHt9jjz3S4YcfnnbccccZHn/ppZfSxz72sfT1r389XXPNNflSsY8++mgNjxoAAJhbCKWA7K0pb6WfPfSz9J17vpP+9da/8rKjbjoqLbfgcunwDQ5P+621X1qgtfaVOf09sIsAKQdK/wmTup2fNjm9M+2d1FHomGFbLU0tacTQEWm+lvnyFPOLzbdYmn/o/Gnx+Rbv9jhef/31tN1226UpU6ak4cOH52U33HBD2myzzdItt9ySTjjhhPTPf/4zLbHEEunMM89MO+20U15n//33T01NTWny5MnpxhtvzEFShE3dWXHFFfP07LPPVn3829/+dg6lyquj1llnnR6dTwAAYHATSgHppqduSrv9arf03vT3Zjgb/3rzX+nom45OX/3DV9Ov9/h1Grv82Lmieilea1eVS1Xnp03OVUydNaSGNLxl+H8DpqHz5VDpwyM/XLGs83yEUrNq5MiROYTaeeedK7rTPfzww2ncuHHp17/+de7qd+edd6Yddtgh3XvvvTlYCldccUW6+uqr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Wppa0plbn+msAAAAUFPKIAAAAACoO6EUAAAAAHUnlAIqTGmbkvb+zd55inkAAACoBWNKATOYNHWSswIAAEBNqZQCAAAAoO6EUgAAAADUnVAKAAAAgLoTSgEAAABQd0IpAAAAAOrO1feACo0NjWmFhVYozQMAAEAtCKWACi1NLem8sec5KwAAANSUMggAAAAA6k4oBQAAAEDdCaWAClPbpqaDfntQnmIeAAAAasGYUkCFQiqkie9NLM0DAABALaiUAgAAAKDuhFIAAAAA1J1QCgAAAIC6E0oBAAAAUHdCKQAAAADqztX3gAoNqSEtOWLJ0jwAAADUglAKqDC0eWj63g7fc1YAAACoKd33AAAAAKg7oRQAAAAAdSeUAipMbZuavnDdF/IU8wAAAFALxpQCKhRSIT0/6fnSPAAAANSCSikAAAAA6k4oBQAAAEDdCaUAAAAAqLt+GUpddNFFaemll06tra1pww03TPfee2+3648fPz6ttNJKef3VV189XX/99RWP77///qmhoaFi2nbbbSvWif11Xuess86qyesDAAAAGOz6XSh11VVXpWOOOSadcsop6YEHHkhrrrlmGjt2bJo4cWLV9e+888601157pYMOOig9+OCDaeedd87TI488UrFehFATJkwoTVdcccUM2zr99NMr1jn88MNr9joBAAAABrN+F0qdd9556eCDD04HHHBAWmWVVdLFF1+chg0bln7yk59UXf+CCy7IgdOXv/zltPLKK6czzjgjrbPOOunCCy+sWG/o0KFp9OjRpWnBBRecYVvzzTdfxTrzzjtvzV4n9FcNqSGNGjYqTzEPAAAAtdCc+pFp06alv/71r+n4448vLWtsbExbb711uuuuu6o+J5ZHZVW5qKy65pprKpbdfvvtadSoUTmM+tjHPpa+9rWvpZEjR1asE931ItQaM2ZM+vSnP52OPvro1Nxc/RRNnTo1T0WTJk3Ktx0dHXnqj+K4CoVCvz0++ochjUPSD3f8Yen+nGwv2iwDkXbLQKPNMhBptww02iyDrd129PA5/SqUeu2111J7e3tadNFFK5bH/ccff7zqc15++eWq68fyoqik2nXXXdMyyyyTnn766XTCCSek7bbbLgdaTU1NeZ0jjjgiV1gttNBCuUtgBGPRhS8qt6o588wz02mnnTbD8ldffTVNmTIl9UfRKN5+++3cqCLsg/5Om2Ug0m4ZaLRZBiLtloFGm2WwtdvJkycPvFCqVvbcc8/SfAyEvsYaa6TlllsuV09ttdVWeXl5tVU83tLSkj73uc/l8Cm6/nUWoVX5c6JSaskll0yLLLJIGjFiROqvDSoGcI9jFEoxEGizDETaLQONNstApN0y0GizDLZ229raOvBCqYUXXjhXLr3yyisVy+N+jPFUTSzvzfph2WWXzft66qmnSqFUZ3HVv7a2tvTss8+mFVdccYbHI6iqFlbFD6o/Bz7RoPr7MTJnTWuflo675bg8f9bWZ6WWppY5ejzaLAORdstAo80yEGm3DDTaLIOp3Tb2cP1+lUxEddK6666bbr311opkLu5vtNFGVZ8Ty8vXDzfffHOX64cXXnghvf7662mxxRbrcp2HHnoon8QYhwoGk45CR3ryjSfzFPMAAABQC/2qUipEl7j99tsvrbfeemmDDTZI559/fnr33Xfz1fjCvvvum5ZYYoncrS4ceeSRaYsttkjnnntu2mGHHdKVV16Z7r///nTJJZfkx99555089tNuu+2Wq6diTKmvfOUrafnll88DoocYW+qee+5JW265Zb4CX9yPQc732WefqlfpAwAAAGAuC6U+9alP5cHCTz755DxY+VprrZVuvPHG0mDmzz33XEUZ2MYbb5wuv/zydOKJJ+YBzFdYYYV85b3VVlstPx7dAR9++OH0s5/9LL311ltp8cUXT9tss02+yl6x+13cRph16qmn5ivqxYDoEUp1vqofAAAAAHNpKBUOO+ywPFUTg5N3Nm7cuDxVM88886Sbbrqp2/3FVffuvvvuWTxaAAAAAHqrX40pBQAAAMDgIJQCAAAAoO76Zfc9YM4aMXSEHwEAAAA1JZQCKrQ2t6bLdr3MWQEAAKCmdN8DAAAAoO6EUgAAAADUnVAKqDCtfVo6/pbj8xTzAAAAUAvGlAIqdBQ60iOvPlKaBwAAgFpQKQUAAABA3QmlAAAAAKg7oRQAAAAAdSeUAgAAAKDuhFIAAAAA1J2r7wEzGNo01FkBAACgpoRSQIXW5tb0v3v8r7MCAABATem+BwAAAEDdqZQCAAAAutXe3p6mT5/uLA0iHR0d+Wc+ZcqU1NhYWdM0ZMiQ1NTUNNv7EEoBFaa1T0tn/unMPH/8ZsenlqYWZwgAAAapQqGQXn755fTWW2/N6UNhDvzsI5iaPHlyamhomOHxBRZYII0ePbrqYz0llAIqdBQ60v0T7i/NAwAAg1cxkBo1alQaNmzYbAUQDLxQqq2tLTU3N1f83GP5e++9lyZOnJjvL7bYYrO8D6EUAAAAULXLXjGQGjlypDM0yBS6CKXCPPPMk28jmIr2Matd+Qx0DgAAAMygOIZUVEhBZ8V2MTtjjQmlAAAAgC7psket2oVQCgAAAIC6E0oBAAAAdGPppZdO559//hzfxtxGKAUAAADMNV3KuptOPfXUWdrufffdlz772c/26bFecskl6aMf/WgaMWJEPrYYVH6wcfU9oEJrc2u6dq9rnRUAAGDAmTBhQmn+qquuSieffHJ64oknSsuGDx9ecXW5uMJgXF1uZhZZZJE+P9b33nsvbbvttnk6/vjj02CkUgoAAACYK4wePbo0zT///LkCqXj/8ccfT/PNN1+64YYb0rrrrpuGDh2a/vznP6enn346ffKTn0yLLrpoDq3WX3/9dMstt3Tb9S62+6Mf/Sjtsssu+Sp0K6ywQvrd737Xq2M96qij0nHHHZc+8pGPpMFKKAUAAAAMGhEEnXXWWemxxx5La6yxRnrnnXfS9ttvn2699db04IMP5sqlHXfcMT333HPdbue0005Le+yxR3r44Yfz8/fee+/0xhtv1O11zA103wMqTGufls6767w8f8xGx6SWphZnCAAAyNZbL6WXX67/yRg9OqX77++bbZ1++unp4x//eOn+QgstlNZcc83S/TPOOCNdffXVufLpsMMO63I7+++/f9prr73y/De+8Y30ne98J91777051KJnhFJAhY5CR/rL83/J80d95ChnBwAAKIlA6sUXB/YJWS+StTJRKRUDoF933XV5TKq2trb0/vvvz7RSKqqsiuadd948YPnEiRNrdtxzI6EUAAAA0OOKpYG+3wiQyn3pS19KN998czrnnHPS8ssvn+aZZ560++67p2nTpnW7nSFDhlTcj3GmOjo6+u5ABwGhFAAAANAjfdWFrj/5y1/+krvixaDlxcqpZ599dk4f1qAglAIAAAAGrbhy3m9+85s8uHlUO5100kl1qXh6+eWX8/TUU0/l+3//+9/z1QHHjBmTx7kaDFx9DwAAABi0zjvvvLTgggumjTfeOAdTY8eOTeuss07N93vxxRentddeOx188MH5/uabb57vxwDrg0VDoVAo1GrjjzzySHrggQfSvvvum+Z2kyZNSvPPP396++238+Bm/VEkvTHo2qhRo1JjozyS6qa0TUnjxo/L8+PHjU+tza1z7FRpswxE2i0DjTbLQKTdMtAM1DY7ZcqU9Mwzz6RlllkmtbbOue8FzBkRF8Wg783NzbmCrDfto6cZSU1/G37729+mAw44oJa7AAAAAGAAMqYUUGFo09BcIVWcBwAAgH4RSh144IE9Xvdvf/tbbzcPzGFRljknu+wBAAAwOPQ6lPrpT3+ahgwZklpaWma67vTp02f1uAAAAACYi/V6TKkll1wybb311mny5MkznU488cTaHDVQM9Pbp6fz7z4/TzEPAAAA/SKU2nDDDdO9997bo3Wrjc4O9G/thfZ06zO35inmAQAAoF+EUltuuWUaPnx4ev7552e67pprrpn23XffWT02AAAAAOZSvR5T6pBDDslTTwOsddZZZ1aOCwAAAIC5WK8rpXrj/PPPT2PGjKnlLgAAAAAYgGoaSoVCoVDrXQAAAAD0mY9+9KPpqKOOKt1feumlc+HNzMbVvuaaa2Z73w19tJ3unHrqqWmttdZKc30oBQAAAFAPO+64Y9p2222rPvanP/0pBz4PP/xwr7d73333pc9+9rOpHsHQhAkT0nbbbZfq6dFHH0277bZbDt/iHM0sgOsrQikAAABgrnDQQQelm2++Ob3wwgszPHbppZem9dZbL62xxhq93u4iiyyShg0bluph9OjRaejQoame3nvvvbTsssums846K++/XoRSQIWhTUPTL3f5ZZ5iHgAAYKD4xCc+kQOkn/70pxXL33nnnTR+/PgcWr3++utpr732SksssUQOmlZfffV0xRVXdLvdzt33nnzyybT55pun1tbWtMoqq+QgrLNjjz02ffjDH877iMDnpJNOStOnT8+PxfGddtpp6W9/+1uuTIqpeMydu+/9/e9/Tx/72MfSPPPMk0aOHJkrtuL1FO2///5p5513Tuecc05abLHF8jqHHnpoaV89sf7666dvfetbac8996xrINbrq+898MADPV73pZde6u3mgTks3gDnb51/Th8GAABArzU3N6d99903Bzxf/epX8/ebEIFUe3t7DqMi0Fl33XVzaDRixIh03XXXpc985jNpueWWSxtssMFM99HR0ZF23XXXtOiii6Z77rknvf322xXjTxXNN998+TgWX3zxHCwdfPDBedlXvvKV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mmuumcaOHZsmTpxYdf0777wz7bXXXjlEevDBB9POO++cp0ceeaRivQihJkyYUJquuOKKiscjkHr00UfTzTffnH7/+9+nP/7xj+mzn/1sTV8rAAAAwGDV70Kp8847Lx188MHpgAMOSKusskq6+OKL07Bhw9JPfvKTqutfcMEFOXD68pe/nFZeeeV0xhlnpHXWWSddeOGFFesNHTo0jR49ujQtuOCCpccee+yxdOONN6Yf/ehHuTJr0003Td/97nfTlVdemV566aWav2boT9o62tJ1/7wuTzEPAAAAc/2YUtOmTUt//etf0/HHH19a1tjYmLbeeut01113VX1OLI/KqnJRWXXNNddULLv99tvTqFGjchj1sY99LH3ta19LI0eOLG0juuytt956pfVjn7Hve+65J+2yyy4z7Hfq1Kl5Kpo0aVK+7ejoyFN/FMdVKBT67fHRP0xrm5a+f//38/yWS2+ZGpvnXHatzTIQabcMNNosA5F2y0CjzTLY2m1HD5/Tr0Kp1157LbW3t6dFF120Ynncf/zxx6s+5+WXX666fiwvikqqXXfdNS2zzDLp6aefTieccELabrvtchjV1NSU143Aqlxzc3NaaKGFKrZT7swzz0ynnXbaDMtfffXVNGXKlNQfRaN4++23c6OKwA2qmdI2JU2bOi3PR7fZ1ubWOXaitFkGIu2WgUabZSDSbhlotFkGW7udPHnywAulamXPPfcszcdA6GussUZabrnlcvXUVlttNUvbjGqu8gqtqJRacskl0yKLLJIHS++vDSoGeY9jFErRXSjVMvSDq+5FWDunQyltloFGu2Wg0WYZiLRbBhptlsHWbltbWwdeKLXwwgvnyqVXXnmlYnncj3GgqonlvVk/LLvssnlfTz31VA6lYt3OA6m3tbXlK/J1tZ0YoyqmzuIH1Z8Dn2hQ/f0YmbOibUQ7Kc7P6baizTIQabcMNNosA5F2y0CjzTKY2m1jD9fvV8lES0tLWnfdddOtt95akczF/Y022qjqc2J5+fohrqDX1frhhRdeSK+//npabLHFStt466238nhWRX/4wx/yvmPgcwAAAAD6Vr8KpUJ0ifvhD3+Yfvazn+Wr4h1yyCHp3XffzVfjC/vuu2/FQOhHHnlkvnLeueeem8edOvXUU9P999+fDjvssPz4O++8k6/Md/fdd6dnn302B1if/OQn0/LL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DkrvvPNOnV8Jg8kfu2m306dPT8cee2z+jDDvvPPmdfbdd9/00ksv1azdCqUGgauuuiodc8wxedT8Bx54IK255ppp7NixaeLEiXP60CC74447cuB09913p5tvvjm/GW6zzTbp3XffLZ2ho48+Ol177bVp/Pjxef14Y9x1112dQea4++67L/3gBz9Ia6yxRsVybZb+5M0330ybbLJJGjJkSLrhhhvSP/7xj3TuueemBRdcsLTON7/5zfSd73wnXXzxxemee+7JH0bj80IErDAnnH322en73/9+uvDCC9Njjz2W70c7/e53v6vd0i/EZ9X4bhUFANX05H01vtg/+uij+TPw73//+xwYfPazn63jq2Cwebebdvvee+/lzCD+IBC3v/nNb3KxwE477VSxXp+22wJzvQ022KBw6KGHlu63t7cXFl988cKZZ545R48LujJx4sT4E2jhjjvuyPffeuutwpAhQwrjx48vrfPYY4/lde666y4nkjlm8uTJhRVWWKFw8803F7bYYovCkUcemZdrs/Q3xx57bGHTTTft8vGOjo7C6NGjC9/61rdKy6IdDx06tHDFFVfU6Sih0g477FA48MADK5btuuuuhb333jvPa7f0J/G59Oqrry7d70n7/Mc//pGfd99995XWueGGGwoNDQ2FF198sc6vgMEodWq31dx77715vX//+981abcqpeZy06ZNS3/9619zqWhRY2Njvn/XXXfN0WODrrz99tv5dqGFFsq30Yajeqq8Ha+00kppzJgx2jFzVFT47bDDDhVtM2iz9De/+93v0nrrrZfGjRuXu0mvvfba6Yc//GHp8WeeeSa9/PLLFW15/vnnz13+fV5gTtl4443Trbfemv75z3/m+3/729/Sn//857Tddtvl+9ot/VlP2mfcRteneH8uivXj+1pUVkF/+W4W3fyirdai3Tb36dHS77z22mu5P/6iiy5asTzuP/7443PsuKArHR0deVye6Gay2mqr5WXxD3pLS0vpjbC8HcdjMCdceeWVuaw5uu91ps3S3/zrX//K3aCiO/8JJ5yQ2+0RRxyR31v322+/0ntptc8L3meZU4477rg0adKk/Ieopqam/Jn261//eu42ErRb+rOetM+4jT8UlGtubs5/mPXeS38QXU1jjKm99torjx9Vi3YrlAL6XeXJI488kv8SCv3V888/n4488sjcjz4uIAEDIfCPv2h+4xvfyPejUirea2OckwiloD/61a9+lS677LJ0+eWXp1VXXTU99NBD+Q9XMfCudgtQW9FTZY899sgD9scftmpF97253MILL5z/stT5KmVxf/To0XPsuKCaww47LA+Ud9ttt6UPfehDpeXRVqMr6ltvvVWxvnbMnBLd8+JiEeuss07+y1BMMQB/DGYa8/FXUG2W/iSu/LTKKqtULFt55ZXTc889l+eLnwl8XqA/+fKXv5yrpfbcc898JajPfOYz+SIScdXeoN3Sn/WkfcZt54tPtbW15Sub+a5Gfwik/v3vf+c/wharpGrRboVSc7koy1933XVzf/zyv5bG/Y022miOHhsURfoegdTVV1+d/vCHP+RLP5eLNhxXjCpvx3EViPgypR0zJ2y11Vbp73//e/6rfXGKKpToUlKc12bpT6JLdLxvlotxepZaaqk8H++78UGy/H02uk3F2BDeZ5lT4ipQMUZJufhja3yWDdot/VlP2mfcxh9d449dRfFZONp4jD0FczKQevLJJ9Mtt9ySRo4cWfF4X7db3fcGgRg/Ikqc40vSBhtskM4///x8GcgDDjhgTh8alLrsRWn+b3/72zTffPOV+iLHYJDzzDNPvj3ooINyW46+ypHUH3744fkN8SMf+YizSN1FOy2OeVYUl3mOf7SLy7VZ+pOoLolBo6P7XnzQvPfee9Mll1ySpxADmEa3qK997WtphRVWyF+m4nLQ0U1q5513ntOHzyC144475jGk4sIm0X3vwQcfTOedd1468MAD8+PaLXPaO++8k5566qmKwc3jj1PxeTXa7czeV6Niddttt00HH3xw7k4dYUD8oTaqA2M9qHe7jcrq3XffPY+bGj1YYiy/4nezeDyKXvq83c7CVQMZgL773e8WxowZU2hpaSlssMEGhbvvvntOHxKUxFtRtenSSy8trfP+++8XvvCFLxQWXHDBwrBhwwq77LJLYcKECc4i/cYWW2xROPLII0v3tVn6m2uvvbaw2mqr5cuRr7TSSoVLLrmk4vG4fPlJJ51UWHTRRfM6W221VeGJJ56YY8cLkyZNyu+r8Rm2tbW1sOyyyxa++tWvFqZOnVo6Odotc9Jtt91W9TPsfvvt1+P2+frrrxf22muvwvDhwwsjRowoHHDAAYXJkyfPoVfEYG+3zzzzTJffzeJ5tWi3DfG/vkzdAAAAAGBmjCkFAAAAQN0JpQAAAACoO6EUAAAAAHUnlAIAAACg7oRSAAAAANSdUAoAAACAuhNKAQAAAFB3QikAAAAA6k4oBQAwSN1+++2poaEh3wIA1JtQCgCgj/z0pz/NIc/999+f719//fXp1FNPnePn93vf+14+NgCA/kQoBQBQIxFKnXbaaf02lNp8883T+++/n28BAOpNKAUAMIAUCoUcJPWFxsbG1Nramm8BAOrNJxAAgBrYf//900UXXZTno0tfcSrq6OhI559/flp11VVzMLToooumz33uc+nNN9+s2M7SSy+dPvGJT6SbbroprbfeemmeeeZJP/jBD/Jjl156afrYxz6WRo0alYYOHZpWWWWV9P3vf3+G5z/66KPpjjvuKB3DRz/60W7HlBo/fnxad911874WXnjhtM8++6QXX3xxhtc3fPjwvHznnXfO84ssskj60pe+lNrb2/v4bAIAc6PmOX0AAABzowiYXnrppXTzzTenX/ziF1Ufjy51BxxwQDriiCPSM888ky688ML04IMPpr/85S9pyJAhpXWfeOKJtNdee+XnHHzwwWnFFVfMyyOAilBrp512Ss3Nzenaa69NX/jCF3Lgdeihh+Z1Ivg6/PDDc2j01a9+NS+LAKwrxWNaf/3105lnnpleeeWVdMEFF+RjimNbYIEFSutG+DR27Ni04YYbpnPOOSfdcsst6dxzz03LLbdcOuSQQ/r0fAIAc5+GQtSAAwAw24qBzn333Zermg477LBcLdX549af//zntNlmm6XLLrssffrTny4tj2qobbfdtmJ5VDr9+9//TjfeeGMOgMpFN76oZioXz3/yySfT008/XVq22mqr5YqnzhVRcX/LLbdMt912W66emj59evrQhz6UK6/iNUQFV7juuutytdbJJ59cGiMrKqV+9rOfpdNPPz2ddNJJpW2us846uTtgcbB3AICu6L4HAFBn0T1u/vnnTx//+MfTa6+9Vpqiy1xUNEVIVG6ZZZaZIZAK5YHU22+/nbexxRZbpH/961/5fm9FkDRx4sRcbVUMpMIOO+yQVlpppRxOdfb5z3++4n6EbbF/AICZ0X0PAKDOopIpQqOoSKomgqHOoVQ10aXulFNOSXfddVd67733Kh6L7Ufw1RtRkRWK3QPLRSgVFV7lIriKcaTKLbjggjOMiwUAUI1QCgCgzmLMpwikopteNZ2Dns5d9EJ0z9tqq61yWHTeeeelJZdcMrW0tKTrr78+ffvb3877qLWmpqaa7wMAmHsJpQAAaqT8anvlYiDwGBR8k002qRo49UQMaj516tT0u9/9Lo0ZM6a0vHPXv+6Oo7OlllqqNLB6XNWvXCwrPg4A0BeMKQUAUCPzzjtvvn3rrbcqlu+xxx75ynVnnHHGDM9pa2ubYf3uqpTKB1GPLnuXXnpp1ePoyTZjcPao4Lr44otz4FV0ww03pMceeyyPLQUA0FdUSgEA1EgMXB6OOOKIPFB5BEl77rlnHoz8c5/7XDrzzDPTQw89lLbZZps0ZMiQPNZUDIJ+wQUXpN13373bbcdzorvejjvumLf1zjvvpB/+8Ic5VJowYcIMx/H9738/fe1rX0vLL798XqdzJVSIYzj77LPzFQTjGPfaa6/0yiuv5OOJqwAeffTRfXyGAIDBTCgFAFAju+66azr88MPTlVdemX75y1/mqqYIpUJUI0VY9IMf/CCdcMIJqbm5OQc/++yzT+7WNzMxGPn//u//phNPPDF96UtfSqNHj06HHHJIHo/qwAMPrFj35JNPzoOYf/Ob30yTJ0/OgVO1UCrsv//+adiwYemss85Kxx57bK6y2mWXXXJYtcACC/TRmQEASKmhUF7zDQAAAAB1YEwpAAAAAOpOKAUAAABA3QmlAAAAAKg7oRQAAAAAdSeUAgAAAKDuhFIAAAAA1J1QCgAAAIC6E0oBAAAAUHdCKQAAAADqTigFAAAAQN0JpQAAAACoO6EUAAAAAHUnlAIAAAAg1dv/A5veoFSnjFAtAAAAAElFTkSuQmCC" }, "metadata": {}, "output_type": "display_data", @@ -1032,15 +1091,15 @@ "text": [ "\n", "[指标分析]\n", - " 最佳验证 l1: 0.053796\n", - " 最佳迭代轮数: 164\n", - " 早停建议: 如果验证指标连续10轮不下降,建议在第 164 轮停止训练\n", + " 最佳验证 l1: 0.063698\n", + " 最佳迭代轮数: 16\n", + " 早停建议: 如果验证指标连续10轮不下降,建议在第 16 轮停止训练\n", "\n", "[重要提醒] 验证集仅用于早停/调参,测试集完全独立于训练过程!\n" ] } ], - "execution_count": 31 + "execution_count": 13 }, { "cell_type": "markdown", @@ -1053,8 +1112,8 @@ "cell_type": "code", "metadata": { "ExecuteTime": { - "end_time": "2026-03-08T15:08:15.963026Z", - "start_time": "2026-03-08T15:08:15.951854Z" + "end_time": "2026-03-09T14:21:21.684871Z", + "start_time": "2026-03-09T14:21:21.668727Z" } }, "source": [ @@ -1093,51 +1152,48 @@ "训练结果\n", "================================================================================\n", "\n", - "结果数据形状: (771207, 33)\n", - "结果列: ['ts_code', 'trade_date', 'high', 'close', 'low', 'vol', 'turnover_rate', 'total_mv', 'ma_5', 'ma_20', 'ma_ratio_5_20', 'bias_10', 'high_low_ratio', 'bbi_ratio', 'return_5', 'return_10', 'return_20', 'return_diff_5_10', 'volatility_5', 'volatility_20', 'volatility_ratio', 'std_return_5', 'std_return_20', 'volume_ratio_5_20', 'volume_change_rate', 'turnover_rate_mean_5', 'turnover_rate_std_20', 'turnover_deviation', 'market_cap_rank', 'turnover_rank', 'return_5_rank', 'future_return_5', 'prediction']\n", + "结果数据形状: (282000, 42)\n", + "结果列: ['ts_code', 'trade_date', 'turnover_rate', 'open', 'vol', 'close', 'total_mv', 'f_ann_date', 'revenue', 'n_income', 'total_hldr_eqy_exc_min_int', 'total_cur_assets', 'total_liab', 'total_cur_liab', 'roe', 'ebitda', 'n_cashflow_act', 'ma_5', 'ma_20', 'ma_ratio_5_20', 'bias_10', 'bbi_ratio', 'return_5', 'return_20', 'momentum_accel', 'volatility_ratio', 'reversal_1', 'volume_ratio', 'turnover_rate_mean_5', 'turnover_deviation', 'net_profit_growth', 'revenue_growth', 'roe_delta', 'debt_to_equity', 'current_ratio', 'EP_rank', 'BP_rank', 'market_cap_rank', 'cashflow_act_rank', 'ebitda_rank', 'future_return_5', 'prediction']\n", "\n", "结果前10行预览:\n", - "shape: (10, 33)\n", - "┌───────────┬───────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬──────────┐\n", - "│ ts_code ┆ trade_dat ┆ high ┆ close ┆ … ┆ turnover_ ┆ return_5_ ┆ future_re ┆ predicti │\n", - "│ --- ┆ e ┆ --- ┆ --- ┆ ┆ rank ┆ rank ┆ turn_5 ┆ on │\n", - "│ str ┆ --- ┆ f64 ┆ f64 ┆ ┆ --- ┆ --- ┆ --- ┆ --- │\n", - "│ ┆ str ┆ ┆ ┆ ┆ f64 ┆ f64 ┆ f64 ┆ f64 │\n", - "╞═══════════╪═══════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪══════════╡\n", - "│ 605507.SH ┆ 20250102 ┆ -0.346007 ┆ -0.349849 ┆ … ┆ -0.578277 ┆ -0.191441 ┆ -0.058933 ┆ 0.006321 │\n", - "│ 600993.SH ┆ 20250102 ┆ 1.542811 ┆ 1.519556 ┆ … ┆ -0.74173 ┆ 0.436504 ┆ -0.024765 ┆ 0.002311 │\n", - "│ 600817.SH ┆ 20250102 ┆ -0.123715 ┆ -0.129313 ┆ … ┆ -1.001409 ┆ -0.217301 ┆ 0.007165 ┆ 0.011855 │\n", - "│ 603896.SH ┆ 20250102 ┆ -0.300539 ┆ -0.304751 ┆ … ┆ -0.571027 ┆ 0.002181 ┆ -0.044468 ┆ 0.013161 │\n", - "│ 600754.SH ┆ 20250102 ┆ 0.064776 ┆ 0.06195 ┆ … ┆ 0.113762 ┆ 1.146671 ┆ -0.062997 ┆ -0.00216 │\n", - "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 3 │\n", - "│ 603008.SH ┆ 20250102 ┆ -0.311449 ┆ -0.312278 ┆ … ┆ -0.192712 ┆ -0.166907 ┆ -0.018255 ┆ 0.008841 │\n", - "│ 603650.SH ┆ 20250102 ┆ -0.251099 ┆ -0.263256 ┆ … ┆ -0.405596 ┆ -1.310734 ┆ -0.005427 ┆ 0.008721 │\n", - "│ 002236.SZ ┆ 20250102 ┆ 4.21561 ┆ 4.130212 ┆ … ┆ 0.279852 ┆ -0.810765 ┆ -0.0513 ┆ 0.007152 │\n", - "│ 603855.SH ┆ 20250102 ┆ -0.315863 ┆ -0.321092 ┆ … ┆ -0.960546 ┆ 0.258796 ┆ -0.044197 ┆ 0.007929 │\n", - "│ 002513.SZ ┆ 20250102 ┆ -0.401879 ┆ -0.403117 ┆ … ┆ 1.141935 ┆ -1.044172 ┆ -0.020347 ┆ 0.02149 │\n", - "└───────────┴───────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴──────────┘\n", + "shape: (10, 42)\n", + "┌───────────┬───────────┬───────────┬──────────┬───┬───────────┬───────────┬───────────┬───────────┐\n", + "│ ts_code ┆ trade_dat ┆ turnover_ ┆ open ┆ … ┆ cashflow_ ┆ ebitda_ra ┆ future_re ┆ predictio │\n", + "│ --- ┆ e ┆ rate ┆ --- ┆ ┆ act_rank ┆ nk ┆ turn_5 ┆ n │\n", + "│ str ┆ --- ┆ --- ┆ f64 ┆ ┆ --- ┆ --- ┆ --- ┆ --- │\n", + "│ ┆ str ┆ f64 ┆ ┆ ┆ f64 ┆ f64 ┆ f64 ┆ f64 │\n", + "╞═══════════╪═══════════╪═══════════╪══════════╪═══╪═══════════╪═══════════╪═══════════╪═══════════╡\n", + "│ 000004.SZ ┆ 20250102 ┆ 1.881022 ┆ 2.213796 ┆ … ┆ -0.616292 ┆ null ┆ -0.066193 ┆ 0.008414 │\n", + "│ 000004.SZ ┆ 20250103 ┆ 1.972985 ┆ 2.34744 ┆ … ┆ -0.616573 ┆ null ┆ 0.00893 ┆ 0.004788 │\n", + "│ 000004.SZ ┆ 20250106 ┆ 1.11025 ┆ 1.835256 ┆ … ┆ -0.616011 ┆ null ┆ -0.0142 ┆ 0.011516 │\n", + "│ 000004.SZ ┆ 20250107 ┆ 1.13863 ┆ 1.906626 ┆ … ┆ -0.616854 ┆ null ┆ 0.013031 ┆ 0.01138 │\n", + "│ 000004.SZ ┆ 20250108 ┆ 1.440421 ┆ 2.01438 ┆ … ┆ -0.616854 ┆ null ┆ 0.00442 ┆ -0.000694 │\n", + "│ 000004.SZ ┆ 20250109 ┆ 1.067777 ┆ 2.10884 ┆ … ┆ -0.617135 ┆ null ┆ 0.024865 ┆ -0.004267 │\n", + "│ 000004.SZ ┆ 20250110 ┆ 1.048783 ┆ 2.080153 ┆ … ┆ -0.616854 ┆ null ┆ 0.073486 ┆ -0.005361 │\n", + "│ 000004.SZ ┆ 20250113 ┆ 0.783364 ┆ 1.832457 ┆ … ┆ -0.615668 ┆ null ┆ -0.04458 ┆ 0.001935 │\n", + "│ 000004.SZ ┆ 20250114 ┆ 0.971525 ┆ 1.87234 ┆ … ┆ -0.613797 ┆ null ┆ -0.152621 ┆ 0.003452 │\n", + "│ 000004.SZ ┆ 20250115 ┆ 1.829191 ┆ 2.168315 ┆ … ┆ -0.613797 ┆ null ┆ -0.152621 ┆ 0.007143 │\n", + "└───────────┴───────────┴───────────┴──────────┴───┴───────────┴───────────┴───────────┴───────────┘\n", "\n", "结果后5行预览:\n", - "shape: (5, 33)\n", - "┌───────────┬───────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬──────────┐\n", - "│ ts_code ┆ trade_dat ┆ high ┆ close ┆ … ┆ turnover_ ┆ return_5_ ┆ future_re ┆ predicti │\n", - "│ --- ┆ e ┆ --- ┆ --- ┆ ┆ rank ┆ rank ┆ turn_5 ┆ on │\n", - "│ str ┆ --- ┆ f64 ┆ f64 ┆ ┆ --- ┆ --- ┆ --- ┆ --- │\n", - "│ ┆ str ┆ ┆ ┆ ┆ f64 ┆ f64 ┆ f64 ┆ f64 │\n", - "╞═══════════╪═══════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪══════════╡\n", - "│ 603062.SH ┆ 20251231 ┆ -0.155813 ┆ -0.151122 ┆ … ┆ 0.341316 ┆ 0.721984 ┆ null ┆ 0.001931 │\n", - "│ 600543.SH ┆ 20251231 ┆ -0.404843 ┆ -0.404275 ┆ … ┆ 0.52152 ┆ -1.221834 ┆ null ┆ 0.000149 │\n", - "│ 601199.SH ┆ 20251231 ┆ -0.312584 ┆ -0.310026 ┆ … ┆ -1.386182 ┆ -0.708964 ┆ null ┆ -0.00138 │\n", - "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 7 │\n", - "│ 600597.SH ┆ 20251231 ┆ -0.351304 ┆ -0.349398 ┆ … ┆ -1.302562 ┆ -0.518432 ┆ null ┆ -0.00432 │\n", - "│ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ 7 │\n", - "│ 600365.SH ┆ 20251231 ┆ -0.433978 ┆ -0.433418 ┆ … ┆ -1.417944 ┆ -1.018578 ┆ null ┆ 0.002212 │\n", - "└───────────┴───────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴──────────┘\n", + "shape: (5, 42)\n", + "┌───────────┬───────────┬───────────┬──────────┬───┬───────────┬───────────┬───────────┬───────────┐\n", + "│ ts_code ┆ trade_dat ┆ turnover_ ┆ open ┆ … ┆ cashflow_ ┆ ebitda_ra ┆ future_re ┆ predictio │\n", + "│ --- ┆ e ┆ rate ┆ --- ┆ ┆ act_rank ┆ nk ┆ turn_5 ┆ n │\n", + "│ str ┆ --- ┆ --- ┆ f64 ┆ ┆ --- ┆ --- ┆ --- ┆ --- │\n", + "│ ┆ str ┆ f64 ┆ ┆ ┆ f64 ┆ f64 ┆ f64 ┆ f64 │\n", + "╞═══════════╪═══════════╪═══════════╪══════════╪═══╪═══════════╪═══════════╪═══════════╪═══════════╡\n", + "│ 605588.SH ┆ 20260302 ┆ 0.009947 ┆ 2.541258 ┆ … ┆ 1.00409 ┆ null ┆ null ┆ 0.00702 │\n", + "│ 605588.SH ┆ 20260303 ┆ 0.133214 ┆ 2.553853 ┆ … ┆ 1.372931 ┆ null ┆ null ┆ 0.021044 │\n", + "│ 605588.SH ┆ 20260304 ┆ 0.021087 ┆ 2.167616 ┆ … ┆ 1.004146 ┆ null ┆ null ┆ 0.01389 │\n", + "│ 605588.SH ┆ 20260305 ┆ -0.069317 ┆ 2.15852 ┆ … ┆ 1.003572 ┆ null ┆ null ┆ 0.010792 │\n", + "│ 605588.SH ┆ 20260306 ┆ -0.288642 ┆ 2.173913 ┆ … ┆ 1.002681 ┆ null ┆ null ┆ 0.009205 │\n", + "└───────────┴───────────┴───────────┴──────────┴───┴───────────┴───────────┴───────────┴───────────┘\n", "\n", "每日预测样本数统计:\n", - " 最小: 3147\n", - " 最大: 3186\n", - " 平均: 3173.69\n", + " 最小: 1000\n", + " 最大: 1000\n", + " 平均: 1000.00\n", "\n", "示例日期 20250102 的前10条预测:\n", "shape: (10, 4)\n", @@ -1146,21 +1202,21 @@ "│ --- ┆ --- ┆ --- ┆ --- │\n", "│ str ┆ str ┆ f64 ┆ f64 │\n", "╞═══════════╪════════════╪═════════════════╪════════════╡\n", - "│ 605507.SH ┆ 20250102 ┆ -0.058933 ┆ 0.006321 │\n", - "│ 600993.SH ┆ 20250102 ┆ -0.024765 ┆ 0.002311 │\n", - "│ 600817.SH ┆ 20250102 ┆ 0.007165 ┆ 0.011855 │\n", - "│ 603896.SH ┆ 20250102 ┆ -0.044468 ┆ 0.013161 │\n", - "│ 600754.SH ┆ 20250102 ┆ -0.062997 ┆ -0.002163 │\n", - "│ 603008.SH ┆ 20250102 ┆ -0.018255 ┆ 0.008841 │\n", - "│ 603650.SH ┆ 20250102 ┆ -0.005427 ┆ 0.008721 │\n", - "│ 002236.SZ ┆ 20250102 ┆ -0.0513 ┆ 0.007152 │\n", - "│ 603855.SH ┆ 20250102 ┆ -0.044197 ┆ 0.007929 │\n", - "│ 002513.SZ ┆ 20250102 ┆ -0.020347 ┆ 0.02149 │\n", + "│ 000004.SZ ┆ 20250102 ┆ -0.066193 ┆ 0.008414 │\n", + "│ 000007.SZ ┆ 20250102 ┆ 0.019858 ┆ -0.000127 │\n", + "│ 000010.SZ ┆ 20250102 ┆ 0.076274 ┆ -0.002403 │\n", + "│ 000014.SZ ┆ 20250102 ┆ -0.064651 ┆ -0.002853 │\n", + "│ 000040.SZ ┆ 20250102 ┆ -0.093583 ┆ -0.077776 │\n", + "│ 000042.SZ ┆ 20250102 ┆ -0.035958 ┆ 0.003656 │\n", + "│ 000056.SZ ┆ 20250102 ┆ -0.033205 ┆ 0.018378 │\n", + "│ 000068.SZ ┆ 20250102 ┆ -0.021277 ┆ 0.010857 │\n", + "│ 000153.SZ ┆ 20250102 ┆ -0.018193 ┆ 0.001929 │\n", + "│ 000159.SZ ┆ 20250102 ┆ -0.067833 ┆ 0.003916 │\n", "└───────────┴────────────┴─────────────────┴────────────┘\n" ] } ], - "execution_count": 32 + "execution_count": 14 }, { "cell_type": "markdown", @@ -1172,8 +1228,8 @@ { "metadata": { "ExecuteTime": { - "end_time": "2026-03-08T15:08:16.296512Z", - "start_time": "2026-03-08T15:08:15.970222Z" + "end_time": "2026-03-09T14:21:21.992341Z", + "start_time": "2026-03-09T14:21:21.689211Z" } }, "cell_type": "code", @@ -1236,7 +1292,7 @@ "\n", "[1/1] 保存每日 Top 5 股票...\n", " 保存路径: output\\regression_output.csv\n", - " 保存行数: 1215(243个交易日 × 每日top5)\n", + " 保存行数: 1410(282个交易日 × 每日top5)\n", "\n", " 预览(前15行):\n", "shape: (15, 3)\n", @@ -1245,22 +1301,22 @@ "│ --- ┆ --- ┆ --- │\n", "│ str ┆ f64 ┆ str │\n", "╞════════════╪══════════╪═══════════╡\n", - "│ 2025-01-02 ┆ 0.124602 ┆ 603007.SH │\n", - "│ 2025-01-02 ┆ 0.10774 ┆ 603559.SH │\n", - "│ 2025-01-02 ┆ 0.059728 ┆ 603959.SH │\n", - "│ 2025-01-02 ┆ 0.033194 ┆ 600804.SH │\n", - "│ 2025-01-02 ┆ 0.03074 ┆ 600421.SH │\n", + "│ 2025-01-02 ┆ 0.030035 ┆ 002427.SZ │\n", + "│ 2025-01-02 ┆ 0.02861 ┆ 002076.SZ │\n", + "│ 2025-01-02 ┆ 0.026407 ┆ 000518.SZ │\n", + "│ 2025-01-02 ┆ 0.026051 ┆ 603838.SH │\n", + "│ 2025-01-02 ┆ 0.025572 ┆ 002199.SZ │\n", "│ … ┆ … ┆ … │\n", - "│ 2025-01-06 ┆ 0.131927 ┆ 603007.SH │\n", - "│ 2025-01-06 ┆ 0.067151 ┆ 603959.SH │\n", - "│ 2025-01-06 ┆ 0.049428 ┆ 603386.SH │\n", - "│ 2025-01-06 ┆ 0.048319 ┆ 002046.SZ │\n", - "│ 2025-01-06 ┆ 0.048007 ┆ 002759.SZ │\n", + "│ 2025-01-06 ┆ 0.035263 ┆ 002427.SZ │\n", + "│ 2025-01-06 ┆ 0.032408 ┆ 600962.SH │\n", + "│ 2025-01-06 ┆ 0.03104 ┆ 605298.SH │\n", + "│ 2025-01-06 ┆ 0.030765 ┆ 301006.SZ │\n", + "│ 2025-01-06 ┆ 0.030541 ┆ 002522.SZ │\n", "└────────────┴──────────┴───────────┘\n" ] } ], - "execution_count": 33 + "execution_count": 15 }, { "cell_type": "markdown", @@ -1273,8 +1329,8 @@ "cell_type": "code", "metadata": { "ExecuteTime": { - "end_time": "2026-03-08T15:08:16.304039Z", - "start_time": "2026-03-08T15:08:16.300741Z" + "end_time": "2026-03-09T14:21:22.000983Z", + "start_time": "2026-03-09T14:21:21.996749Z" } }, "source": [ @@ -1294,29 +1350,30 @@ "text": [ "\n", "特征重要性:\n", - "return_5_rank 2332.348582\n", - "return_5 1950.969372\n", - "turnover_rank 1887.661314\n", - "return_10 1342.515739\n", - "turnover_rate_std_20 1311.361422\n", - "ma_ratio_5_20 1123.527241\n", - "bbi_ratio 1071.855236\n", - "high_low_ratio 994.522432\n", - "bias_10 742.095194\n", - "std_return_5 741.347398\n", - "volume_change_rate 739.034219\n", - "return_20 597.878394\n", - "volume_ratio_5_20 595.380527\n", - "std_return_20 515.137529\n", - "market_cap_rank 466.798819\n", - "ma_20 418.790501\n", - "volatility_ratio 390.093624\n", - "return_diff_5_10 354.139443\n", - "turnover_rate_mean_5 351.775202\n", - "turnover_deviation 177.305289\n", - "ma_5 150.850527\n", - "volatility_5 148.218010\n", - "volatility_20 147.523706\n", + "bias_10 883.242468\n", + "bbi_ratio 719.403482\n", + "reversal_1 616.343038\n", + "turnover_deviation 563.883571\n", + "turnover_rate_mean_5 553.710151\n", + "ma_ratio_5_20 493.930772\n", + "return_20 477.078960\n", + "return_5 465.129010\n", + "volume_ratio 438.578614\n", + "roe 386.244247\n", + "EP_rank 324.897361\n", + "ma_20 313.170879\n", + "momentum_accel 273.272078\n", + "net_profit_growth 227.346561\n", + "BP_rank 210.965235\n", + "volatility_ratio 200.314833\n", + "roe_delta 153.102754\n", + "cashflow_act_rank 136.542178\n", + "ma_5 116.355596\n", + "market_cap_rank 89.142452\n", + "debt_to_equity 68.378507\n", + "current_ratio 63.483876\n", + "revenue_growth 0.000000\n", + "ebitda_rank 0.000000\n", "dtype: float64\n", "\n", "================================================================================\n", @@ -1325,7 +1382,7 @@ ] } ], - "execution_count": 34 + "execution_count": 16 }, { "cell_type": "markdown", @@ -1342,8 +1399,8 @@ "cell_type": "code", "metadata": { "ExecuteTime": { - "end_time": "2026-03-08T15:08:16.315496Z", - "start_time": "2026-03-08T15:08:16.311483Z" + "end_time": "2026-03-09T14:21:22.011078Z", + "start_time": "2026-03-09T14:21:22.007446Z" } }, "source": [ @@ -1363,11 +1420,11 @@ "output_type": "stream", "text": [ "模型类型: \n", - "特征数量: 23\n" + "特征数量: 24\n" ] } ], - "execution_count": 35 + "execution_count": 17 }, { "cell_type": "markdown", @@ -1384,8 +1441,8 @@ { "metadata": { "ExecuteTime": { - "end_time": "2026-03-08T15:08:16.428810Z", - "start_time": "2026-03-08T15:08:16.321345Z" + "end_time": "2026-03-09T14:21:22.149719Z", + "start_time": "2026-03-09T14:21:22.016953Z" } }, "cell_type": "code", @@ -1394,7 +1451,7 @@ "\n", "fig, ax = plt.subplots(figsize=(10, 8))\n", "lgb.plot_importance(\n", - " booster, \n", + " booster,\n", " max_num_features=20,\n", " importance_type='gain',\n", " title='Feature Importance (Gain)',\n", @@ -1435,7 +1492,7 @@ "text/plain": [ "
" ], - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAMWCAYAAADs4eXxAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAA6LBJREFUeJzs3QmcTfX/x/EPY98je7KLLJEtUfalJEqoLElFJSXaFGWNIrSIdtFCv1QUkYS02EKhiCKySwg/y5j5P97ff+f+7ty5d8ww19yZeT0fj2vGveeec+bOmXvP5/v5fD8nQ2xsbKwBAAAAAIBklzH5VwkAAAAAAAi6AQAAAAAIIzLdAAAAAACECUE3AAAAAABhQtANAAAAAECYEHQDAAAAABAmBN0AAAAAAIQJQTcAAAAAAGFC0A0AAAAAQJgQdAMAAKSQ7du3W7Zs2ezbb789L9vr3r27lSpV6qye+9hjj1ndunWTfZ8AIK0j6AYApEmTJ0+2DBkyBL0peAiH7777zgYPHmwHDx60SH09Vq5caanVyy+/7H6OtGTo0KEukK1fv368x5YsWWIdO3a04sWLW5YsWSxv3rxuWT1nz549531f+/btaz/++KPNmjXrvG8bAFKzTCm9AwAAhJMClNKlS8e5r0qVKmELuocMGeKyifny5QvLNtIzBd0XXnihe33Tgn379tnbb7/tboGefPJJGzZsmJUpU8b9vPp6/Phx++GHH+y5555zz/ntt9+SvM3XXnvNYmJizmp/ixQpYm3btrUxY8bY9ddff1brAID0iKAbAJCmXXPNNVarVi1LzY4ePWo5c+a09OrYsWOWI0cOS2veeecdy5Qpk7Vp0ybO/dOnT3cBt7LcU6dOdVluf+PGjXO3s5E5c+Zz2mftU4cOHez33393AwEAgDOjvBwAkK59/vnndtVVV7mgNnfu3Na6dWtbv359nGV++uknX7ZR82+V8evRo4f99ddfvmVUVv7www+775VZ90rZt27d6m76PlhptO7Xc/3Xo/t+/vlnu/XWW+2CCy6wBg0axAnUatasadmzZ7f8+fPbzTff7OYFnw39TLly5bJt27bZdddd575XKfOECRPc42vXrrUmTZq416ZkyZL23nvvBS1Z//rrr61Xr15WoEABy5Mnj3Xr1s3+/vvvoJnqypUrW9asWa1YsWLWu3fveKX4jRo1cpUIyuheffXVLth+/PHH3Txk/V4WL17se221rBw4cMAeeughq1q1qvsZtA8abFEptL9Fixa5533wwQc2YsQIu+iii9zvs2nTprZ58+Z4+7ts2TK79tpr3e9Ar0G1atXs+eefj7PMhg0b7KabbnK/C61LAzyJLb/+5JNPXLm49jkwy62M/htvvBEv4BaVmfsfMzJz5kx37Op11etbtmxZF7ifPn06wTnd3rGp7PWrr77qnqfn165d21asWBFv282aNfNtDwCQOGS6AQBp2qFDh2z//v1x7lNAI8oi3nbbbdayZUt75plnXEZ14sSJLshdvXq1LziZP3++y+zdfvvtLuBW8KcARV+XLl3qgpYbb7zRfv31V3v//fddFtLbRsGCBV0ZcVIpm1i+fHl7+umnLTY21t2nQHHQoEEu23jnnXe69b744osuONX+nk1Ju4IyBahax7PPPmvvvvuu3XfffS7IfOKJJ6xz587uZ5s0aZILpuvVqxevXF/La9sKBDdu3Ohewz/++MMX5IoeU+m9grZ77rnHt5wCOzUR88/AajBD+6QBhS5duljhwoVdgN2nTx8XoGq/RPeLfjcKYPWaad803/mVV16xhg0busELBaL+Ro0aZRkzZnSBuo4P/dz6ORVke/Q710BE0aJF7YEHHnC/919++cU+++wz93/R719zsTVQoT4Bes0U0Ldr185mzJhhN9xwQ8jX/dSpU+5n12vhT8eQbvr9BgbjCdEAiJbv16+f+/rVV1+54P3w4cM2evToMz5fAyr//POPGzzR70yviX7vem39fzcK+BWY63f24IMPJnr/ACBdiwUAIA166623FKkGvck///wTmy9fvti77rorzvN2794dmzdv3jj3Hzt2LN7633//fbeur7/+2nff6NGj3X1btmyJs6z+r/u1T4F0/1NPPeX7v77Xfbfcckuc5bZu3RobFRUVO2LEiDj3r127NjZTpkzx7g/1eqxYscJ332233ebue/rpp333/f3337HZs2ePzZAhQ+y0adN892/YsCHevnrrrFmzZuzJkyd99z/77LPu/pkzZ7r/7927NzZLliyxLVq0iD19+rRvuZdeeskt9+abb/rua9iwobtv0qRJ8X6GypUru8cDHT9+PM56vdc8a9assUOHDvXdt3DhQrfuSpUqxZ44ccJ3//PPP+/u12sp0dHRsaVLl44tWbKk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8uTJ4x47ePBgvOf9+uuv1rZtW7vwwgvdcg0aNLCFCxcm+CprXcFuo0eP9i2zatUqa968ueXLl88KFChgPXv2tCNHjsRZz/333281a9a0rFmzWvXq1fnNAgAAIMWli6B78ODBnIADSbBixQp75ZVXrFq1anHuP3bsmLVq1coef/zxkM+97rrrLDo62r766iv74Ycf7LLLLnP37d69O+Rzdu3aFef25ptvuqC7ffv27vGdO3das2bNrFy5crZs2TKbO3eurV+/3rp37x5vXT169LBOnTrx+wYAAEBESBVBt07W+/TpY2XKlHEZrBIlSlibNm1swYIFlpYoiFCQUapUKRdwjB8/PqV3CemQssedO3e21157zS644II4jynr/dhjj9kVV1wR9Ln79++3TZs2uWUUsJcvX95lzBWsr1u3LuQ2ixQpEuc2c+ZMa9y4sfubl88++8wyZ85sEyZMsEsuucRq165tkyZNshkzZtjmzZt963nhhResd+/evucBAAAAKS2TRbitW7da/fr1XUmpSk2rVq1qp06dsnnz5rmT6w0bNlhaocBEwUKHDh3swQcfPKd11R25wKIz5Uy2fUPatnVUa9/3+rtq3bq1yywPHz48SetR2beC4ilTptjll1/uBsmUMS9UqJAr+06MPXv22OzZs+3tt9/23XfixAnLkiWLZcz4v3HC7Nmzu6/ffPONy4ADAAAAkSjiM9333nuvy/ouX77cZYErVKhglStXtn79+tnSpUvdMtu2bXNzSHPlyuXmkHbs2NGduIeiOan+81SlXbt2cUpVlW1WwNGtWze33pIlS9qsWbNs3759vm0pk7dy5UrfcyZPnuwGBzQgUKlSJbeMSnFVLpsYyt5pYOHmm292wQpwvk2bNs3NnR45cuRZPV9/q19++aWtXr3acufObdmyZbOxY8e6cvDArHkoCrb13Btv/L/27gRexrr///iXQ7Jv2fdddlkKZd/dQt2FJFKUrWS9dUuI+Fm7k3T/SpSI/Fu0oBAiZJctJUTW7MuxHeb/eH/rmt+cc2aOc3IuM2fO6/l4zOOcmeuaa66Z850587k+n+/nesh7W/369W3Fi94fV69eNadPn7bZdInv+wsAAAAIhpDOdJ86dcp+WR81apRJnz521lYB7o0bN7xB8IoVK+xcUmXqNKdz+fLlt/T4kyZNMq+++qp56aWX7O8d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" + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAMWCAYAAADs4eXxAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAA4spJREFUeJzs3QmcjeX///GPGbLvCUl2kSWylCVrIr6iBZUlaVGhJCVljwhFyZd2UdoXKiUp0jdrKHspouwJlawz/8f7+j/u8ztznDMGc5s5Z17Px+OYmXPf577vOXM79/25Pp/rujIlJiYmGgAAAAAASHVxqb9JAAAAAABA0A0AAAAAgI/IdAMAAAAA4BOCbgAAAAAAfELQDQAAAACATwi6AQAAAADwCUE3AAAAAAA+IegGAAAAAMAnBN0AAAAAAPiEoBsAACCNbN261bJly2b/+9//zsr+unbtaiVLljyt1z788MN22WWXpfoxAUCsI+gGAMSkKVOmWKZMmcI+FDz44dtvv7UhQ4bYvn37LL2+H8uWLbNo9d///tf9HrFk2LBhLpCtV6/eCcsWLFhg7du3t2LFitk555xjefPmdevqNTt37jzrx9q7d2/7/vvvbebMmWd93wAQzTKn9QEAAOAnBSilSpVK8lzlypV9C7qHDh3qson58uXzZR8ZmYLuc889172/sWD37t326quvukeoQYMG2WOPPWalS5d2v6++Hjp0yL777jt78skn3Wt+/vnnU97nCy+8YAkJCad1vEWKFLE2bdrY2LFj7ZprrjmtbQBARkTQDQCIaVdffbXVrFnTotk///xjOXPmtIzq4MGDliNHDos1r732mmXOnNlat26d5Pm33nrLBdzKck+bNs1luYONGzfOPU5HlixZzuiYdUzt2rWzX375xTUEAABOjvJyAECG9umnn9oVV1zhgtrcuXNbq1atbM2aNUnW+eGHHwLZRvW/VcavW7du9scffwTWUVn5gw8+6L5XZt0rZd+8ebN76PtwpdF6Xq8N3o6eW7t2rd18882WP39+q1+/fpJArUaNGpY9e3YrUKCA3Xjjja5f8OnQ75QrVy7bsmWL/ec//3Hfq5R54sSJbvmqVausSZMm7r0pUaKETZ8+PWzJ+tdff23du3e3ggULWp48eaxLly72559/hs1UV6pUybJmzWrnn3++9ejR44RS/EaNGrlK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r1/fvvrqq7Db++OPP+yCCy5wx79v374zek8AIFqkedC9Y8cO69Wrl5UuXdqyZs1qxYsXt9atW9vcuXMtlqxZs8auv/56K1mypLvQjB8//oR1Ro4cabVq1bLcuXPbeeedZ23btrUNGzakyfECAID0pVKlSrZ9+/bA45tvvkkScLdo0cKuuuoqW7JkiS1dutR69uxpcXH/d6vXuHFje/vtt929hQLnn3/+2W644YZk96n7FQXVM2fOtFWrVtl1111n7du3txUrVgTW+c9//mPHjh2zL7/80r777ju75JJL3HO6xwt12223WdWqVVPtPQGAaJA5LXe+efNmq1evnuXLl8/GjBljVapUsaNHj9rs2bOtR48etn79eosVBw8edA0L7dq1s/vvvz/sOvPnz3e/twJvXbweeeQRd/Fcu3ata10+FZeNnGvHMp/aa4D0Imt8oo2ubVZ5yGw7fDxTWh8OcMo4h5FaNo9qFfg+c+bMLuMcju4t7r33Xnv44YcDz1100UUnrOMpUaKEW1cN/Lr3ypIlS9jtKkD/73//a7Vr13Y/DxgwwMaNG+eC6+rVq9uePXvsp59+spdeeikQTI8aNcq9ZvXq1UmOd9KkSS67PWjQIPv0009P+z0BgGiTppnue+65x2V91SKrLHD58uVdK26fPn1s0aJFbp0tW7a4kqVcuXK5kiW1ru7cuTPiNhs1amS9e/dO8pwuKCqN8ijbPHz4cOvSpYvbri48asHdvXt3YF+6cCxbtizwmilTprjGATUIVKxY0a2jFmW1NKeEAmk1LNx4440uox/OZ5995o5T74FaibVP/f66sAEAgIxNwe3555/vGvE7duzo7hFk165dtnjxYlclV7duXStcuLA1bNgwSSY81N69e+31119360cKuL3A/d1333XrJyQk2JtvvmmHDh1y91tSsGBBt87UqVPtn3/+cUmD5557zh1LjRo1AttRAmHYsGFuveDsOwBkBGn2qacPbwWZyuyGy+IqwNWHu4Jgrass8Jw5c+yXX36xDh06nPH+1UqrLLvKo1q1auX6NSkI79Spky1fvtzKlCnjfk5MTEySrR47dqxNmzbNvv76a3ex69u3r/ll//797muBAgV82wcAAEj/LrvsMtcYr3snZYw3bdpkV1xxhf3111/u3sjr933HHXe4ddT3umnTpi5QD9avXz9336VgWfcx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utSee+45q1q1auC54sWL2/bt25M8hg4darly5bKrr77ardOhQ4cT1mnevLk1bNjQzjvvvIjvsQLuNWvW2Jw5c+zjjz+2r7/+2u68887A8r59+56w3YsvvtjatWsXWGfAgAHumCdMmGBr1661u+66y6699lpbsWIFf1sAQPQG3Tt27LBevXpZ6dKlLWvWrO6C3Lp1a5s7d67Fmn379lmPHj2saNGi7nctX768zZo1K60PCwCAVKUMs4LgF154wfLnzx94Pj4+3ooUKZLk8cEHH1j79u1d4C3Zs2dPslyv+fLLL13mOpJ169a5jPSLL75ol112mdWvX98Fzm+++aZt27bNraPtB293586dLrAO3u60adPskUcesZYtW7r7krvvvtt9/+STT3KGAADCymzpnMrM6tWr58rAxowZY1WqVHGlXbNnz3bB6fr16y1WHDlyxJo1a+Za6d99910rVqyY/frrr+53P1WXjZxrxzL/XzkcEE2yxifa6NpmlYfMtsPHM6X14QCnjHM4vM2jWgW+1zW8VatWduWVV9rw4cMjvpffffedrVy50iZOnBhxnalTp1qOHDnshhtuiLjOwoUL3fW0Zs2agee077i4OFu8eLHLVodSgK7G7yuuuCLw3OHDh11ZeTA1AnzzzTcR9w0AyNjSfab7nnvucf2plixZYtdff727+FWqVMn69OljixYtcuts2bLF2rRp41qo1U9LreFqnY6kUaNGgb5jnrZt21rXrl0DP5csWdLdBHTp0sVtt0SJEjZz5kzbvXt3YF8qh1u2bFngNepjpgu6GgQqVqzo1mnRooUrT0uJl19+2fU3+/DDD11Dg45BpXLqLwYAQKxQdnn58uU2cuTIk6770ksvuWtq3bp1k13n5ptvdsFvclVzoaXnmTNntgIFCrhloQ4dOmSvv/76CdlzlbE/9dRT9tNPP1lCQoIrVX///fdTfK0HAGQ86TrTrQBUpWAjRoxIMoiJRwGuLnheEDx//nw7duyYaz1Xf6958+ad0f7HjRtnjz/+uA0cONB937lzZ3fR79atm8u69+vXzwXl6h+mhgE5ePCgjR071pWfqfW8U6dOro+YLtwno6C+Tp067vhnzJhhhQoVcjcR2o9K58JRi7sengMHDrivWeMSLT4+8Yx+fyCt6PwN/gpEG87h8FSptnXrVrvvvvtc1yld2/RcYmKi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pKWMdA5vHtUqyc9///23C15feOEFGz58eJJl999/v91777328MMPB5676KKLTthm7ty5rUiRIik+Bi+bPm/evLDLFZDr4VEjvq61kyZNsrFjx7rnpk2bZm3btnVBt7dO//797YknnnD3G6d7PQYAIN1nuu+55x53oVOL+PXXX2/ly5e3SpUqWZ8+fWzRokVunS1btlibNm0sV65cLmht37697dy5M+I2VYIWWu6mC23Xrl2TlLfpZqFLly5uuyozmzlzpu3evTuwL7XgL1u2LEmmWo0DahCoWLGiW0cXebXSp5R+V91oeI/ChQuf4jsGAEDaUYDaqlUru/LKK5M8v2vXLlu8eLGdd955VrduXXd9a9iwoX3zzTcnbEPl5AULFrTq1au7Bvdjx46l+nHu37/fChQoEPj58OHDJ1SXqRT9t99+s19//TXV9w8AyDjSddC9d+9e++yzz9wFXH2/QinAVbmYgmCtO3/+fJszZ4798ssv1qFDhzPev8rKlGVfsWKFu4Ho3LmzC8I7depky5cvd33C9HNiYmKSEje1mqvF/Ouvv3YNAn379k3xPpUhUICvEnr9XiqDAwAgGrz55pvu+jhy5MgTluna7I2zcscdd7jr+6WXXmpNmza1n376KbCeMuHazldffWXdu3e3xx9/3B566KFUPc6NGzfahAkT3PY9zZs3t/fff991XdO9xY8//mhPPvmkW3YqjecAAERVebkuigpoK1SoEHEdXRxXrVplmzZtcoGqTJ061WXD1VesVq1ap73/li1bBi7IgwYNcmVo2l67du3cc/369bM6deq4rLpXBqfSd/UTU0Au6qumvmkpoRK7l19+2WXQ1QKv4F3ZAAXeF1xwQdjXqGVeD8+BAwfc16xxiRYf/3+NAUA00fkb/BWINhnpHNZ1T7Zu3Wr33XefzZo1y+Lj493zuoYrgNX33qBlt99+u2u8ltGjR9sXX3zhStFHjBjhngvuv62qMW1LVW+6lmpcl+R4GXHtzzuuUL///rurQlP1nCrcvPX0vQLt//znP+45Vc7pGv7YY48FfoeMxvudM+LvjtjBeQw/pfTzMV0H3cEZ5EjWrVvngm0v4JaLL77YZcG17EyC7uABYLwyb/UpD31OJXNe0K0RT72AW4oWLeqWp4QCeD08Crh1w6GBX3TRD0fZhKFDh57w/IDqCZYjx/EU7RdI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X4EyL3v27CHTjajPdEcKWID0jnMYsYDzGLGA8xhnI/ZSZVpyU3Ge1jzdKgfX/NYAAAAAACCV+3SrX7XKwVUOrVLw0EHQQgdqyQjUNzuSTz/91M23DQAAAADIWE4r6PYGS9Oo46HTZ+lr8HQkGYUGRYskuTlXAQAAAACx67SC7k2bNqX+kUQ5bwRyAAAAAADOKOhmADUAAAAAAHwKuqdOnZrsck3XBQAAAABARndaQfd99913wlD8mq/7nHPOcdOJEXQDAAAAAHCaU4b9+eefSR5///23bdiwwerXr29vvPEG7ysAAAAAAKcbdIdTrlw5GzVq1AlZcAAAAAAAMqpUC7olc+bMtm3bttTcJAAAAAAAGatP98yZM5P8rPm5t2/fbs8++6zVq1cvtY4NAAAAAICMF3S3bds2yc+ZMmWyQoUKWZMmTezJJ59MrWMDAAAAACDjBd0JCQmpfyQAAAAAAMSY0+rTPWzYMDdFWKh///3XLQMAAAAAAKcZdA8dOtRNExZKgbiWAQAAAACA0wy6NXCa+nGH+v77761AgQK8rwAAAAAAnGqf7vz587tgW4/y5csnCbyPHz/ust933XUXbywAAAAAAKcadI8fP95lubt16+bKyPPmzRtYds4551jJkiWtTp06vLEAAAAAAJxq0H3LLbe4r6VKlbK6detalixZeBMBAAAAAEjNKcMaNmwY+P7QoUN25MiRJMvz5MlzOpsFAAAAACCmnNZAahqlvGfPnnbeeedZzpw5XV/v4AcAAAAAADjNoPvBBx+0L7/80iZNmmRZs2a1F1980fXxPv/8823q1Km8rwAAd42oWrWqq37SQ2N+fPrpp+6d2bt3r/Xq1csuuugiy549u1144YV277332v79+8O+c3/88YddcMEFbgDPffv2Jfvu/vjjj9amTRs799xz3X7r169vX331VZJ15s6d67pJ5c6d24oUKWL9+vWzY8eOBZYPGTIkMHBo8EMNzQAAAL4H3R999JH997//teuvv94yZ85sV1xxhQ0YMMAef/xxe/311+1s0o1RtWrVzuo+AQAnpyB51KhR9t1339myZcusSZMmLhhes2aNbdu2zT3Gjh1rq1evtilTpthnn31mt912W9ht6XkF8Cnxn//8xwXQahzWvi+55BL33I4dOwLTW7Zs2dJatGhhK1assLfeestmzpxpDz/8cGAb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AAAAAABEM4Lus0h9syM9FixYcDYPBQAAAABwFqT7Pt2xRIOiRVKsWLGzeiwAAAAAAP8RdJ9FpzoCOQAAAAAgulFeDgAAAACATwi6AQAAAADwCUE3AAAAAAA+IegGAAAAAMAnBN0AAAAAAPiEoBsAAAAAAJ8QdAMAAAAA4BOCbgAAAAAAfELQDQAAAACATwi6AQAAAADwCUE3AAAAAAA+IegGAAAAAMAnBN0AAAAAAPiEoBsAAAAAAJ8QdAMAAAAA4BOCbgAAAAAAfELQDQAAAACATwi6ASCdGzlypNWqVcty585t5513nrVt29Y2bNgQWL5582bLlClT2Mc777zj1vnjjz+sRYsWdv7551vWrFmtePHi1rNnTztw4EDE/Wq7t912m5UqVcqyZ89uZcqUscGDB9uRI0cC6wwZMiTsfnPmzBlY54UXXrArrrjC8ufP7x5XXnmlLVmyxLf3CwAAID3JEEG3bgqrVauW1ocBAKdl/vz51qNHD1u0aJHNmTPHjh49aldddZX9888/brkC6O3btyd5DB061HLlymVXX321WycuLs7atGljM2fOtB9//NGmTJliX3zxhd11110R97t+/XpLSEiw5557ztasWWPjxo2zyZMn2yOPPBJYp2/fvifs++KLL7Z27doF1pk3b57ddNNN9tVXX9nChQvd8er4f//9d84IAAAQ8zJbFNixY4eNGDHCPvnkE3eTpkyPgujevXtb06ZNLVY0atTI3VyHatmypfvdAWRMn332WZKfFTDrc/C7776zBg0aWHx8vBUpUiTJOh988IG1b9/eBd6iDPPdd98dWF6iRAm75557bMyYMRH3q8y4Hp7SpUu7DPukSZNs7Nix7jlt39uHfP/997Z27VoXnHtef/31JNt98cUX7b333rO5c+daly5dTuMdAQAAiB7pPuhWeWO9evUsX7587uawSpUqLssze/Zsl/lRJiZWvP/++0nKNlUOeskllyTJGKXUZSPn2rHM/1feCUSTrPGJNrq2WeUhs+3w8UyWUW0e1Srs8/v373dfCxQoEHa5gvGVK1faxIkTI25727Zt7jOnYcOGp3RM2nek/XoBdfny5V05eSQHDx50n+PJbQcAACBWpPvycmVi1D9Q/f+uv/56dzNXqVIl69Onjyu1lC1btriySWVb8uTJ47I7O3fuTDajrCx5MPWR7Nq1a+Dn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SCV5uhFWgK2S744dO7p5rbVMWSmVXdasWTPsNjWHrsqtP/nkE5cxUl9IBelp7ciRI+738b7//fffXTmr+m17N/IqFb/66qvtwgsvtL/++stl3zRgnEZMB+CPk1WrKBhPaUXLt99+m+Lt6LNN04GdCjUCBM/EENwtJbWrbgAAABADQbfmrVYWSSOYP/DAAy5DrUy1yqoVdKt8WyWfvXr1sgYNGriySmWCNFBRcgMRqQRTZZyaQ1dzYqeHLPe2bduSlISqX6YeakDwRmJX/3Adt94HlbaqEUIBt/oEAgAAAACiT6ZE0iMxRf1PFbBrLmEGU0K0l5drMDL6wyIacQ4jFnAeIxZwHuNsxF4aBDtPnjwR14vz9SgAAAAAAMjACLpTifpmR3osWLAgtXYDAAAAAIgiadqnO5ZoULRIND0QAAAAACDjIehOJaFTCQEAAAAAQHk5AAAAAAA+IegGAAAAAMAnBN0AAAAAAPiEoBsAAAAAAJ8QdAMAAAAA4BOCbgAAAAAAfELQDQAAAACATwi6AQAAAADwCUE3AAAAAAA+IegGAAAAAMAnBN0AAAAAAPiEoBsAAAAAAJ8QdAMAAAAA4BOCbgAAAAAAfELQDQAAAACATwi6AQAAAADwCUE3gKg3cuRIq1WrluXOndvOO+88a9u2rW3YsCHJOs8//7w1atTI8uTJY5kyZbJ9+/adsJ29e/dax44d3Tr58uWz2267zf7+++9k9/3zzz/btddea4UKFXKva9++ve3cufOE9T755BO77LLLLHv27JY/f353jMF0TKGPN99887TfEwAAAKQPMRF0DxkyxKpVq5bWhwEgjcyfP9969OhhixYtsjlz5tjRo0ftqquusn/++SewzsGDB61Fixb2yCOPRNyOAu41a9a4bXz88cf29ddf25133hlxfW1f+1GA/OWXX9r//vc/O3LkiLVu3doSEhIC67333nvWuXNnu/XWW+3777936918880nbO+VV16x7du3Bx6hgTkAAACiT2ZLB3bs2GEjRoxwmaDff//dZaoURPfu3duaNm1qseKFF16wqVOn2urVq93PNWrUsMcff9xq164dWCcxMdEGDx7s1lUmrl69ejZp0iQrV65cGh45kL599tlnSX6eMmWK+xz57rvvrEGDBu45fZ7IvHnzwm5j3bp1bjtLly61mjVruucmTJhgLVu2tLFjx9r5559/wmsUPG/evNlWrFjhstzy6quvuky2gvArr7zSjh07Zvfdd5+NGTPGZc49F1988QnbU3a9SJEiZ/ReAAAAIH1J86BbN6wKLHWzqZvSKlWquCzV7NmzXeZq/fr1Fit0s3/TTTdZ3bp1LVu2bPbEE0+4LJkya8WKFXPrjB492p555hl3416qVCkbOHCgNW/e3NauXetek1KXjZxrxzLn9PG3AfyTNT7RRtc2qzxkth0+ninZdTePanXCc/v373dfCxQokOJ9Lly40H0OeQG3KGiOi4uzxYsXuxLyUIcPH3ZZ7qxZswae0/9Tveabb75xr1++fLlrTNRz1atXd42MalTU513lypWTbE+febfffruVLl3a7rrrLpcZ1/YBAAAQvdK8vPyee+5xN5VLliyx66+/3sqXL2+VKlWyPn36uFJR2bJli7Vp08Zy5cqVbJ9Jj/ptelktj8o0u3btGvi5ZMmSNnz4cOvSpYvbbokSJWzmzJm2e/fuwL6qVq1qy5YtS5I90025GgQqVqzo1lG5qspAU+L11193v69uuCtUqGAvvviiK0GdO3duIMs9fvx4GzBggDsG7V+Z8W3bttmHH354yu8tkBHp/5T+/6sxLzSoTY6CYWXHg2XOnNkF7loWzuWXX245c+a0fv36ufJ1lZv37dvXjh8/Hvhc+OWXXwLdYPR/W2XryoTrc0p9yD3Dhg2zt99+25W267NQnxXKtAMAACC6pWmmWzecKudUabluXEMpwNUNtBcEq9+mSjWVDerQoUPEMtGUGjdunCvvVjZZ36vPpbLQ3bp1c1ko3UgrKFcm2ss26cZapabTpk1zmatOnTq5m2wF1KdK21JW38vGbdq0yd3cKzvmyZs3rxt8SVm4G2+8MWymTQ/PgQMH3NescYkWH594Wu8LkNZ0/gZ/TY7+DwXr2bOn68Lx1VdfnbBM9BnivS54uQJlNXyFe42WhXten1FvvPGG9erVy1Wo6DNBn03KaHv7UB9vefjhh+2aa64JDOqmShYNlHbHHXcElnvUWKD/y/ocuvvuu0/6HiD98c6XcOcNEC04jxELOI/hp5Re59M06N64caO7yVXWNxJlgVetWuUC0uLFi7vnlP1VNlx9LzVi8elSX83u3bu77wcNGuT6Tmt77dq1c88p6K5Tp47Lqnv9LPXGTp482cqUKRO4wVeG6nRo++on6gXZXjatcOHCSdbTz5EybRq1eejQoSc8P6B6guXIcfy0jgtILx6r+X+DkUUya9aswPcKZlUKrsa0H374wT1C6fNEPv/8c9eY59m1a5erKgnenoLtP/74w5WHBz8f6qmnnnJBsoJubVNVNapU0WtUqSMaoyF4G8p2q2HA61oSStv67bffbMaMGZYlS5aTvg9In1S5AEQ7zmPEAs5j+EFJ1HQfdCvgPhkNbqRg2wu4vQGIlGHSsjMJunVT7PECXfUpD31ON+Ne0J0jR45AwC1FixZ1y0/VqFGjXJZL2fpT6asdqn///q4U36Mbf71Xw1fE2bEs8ae9XSAtKcOtgHvgsjg7nJB8n+bVQ5q7zxKVlK9cudKNOJ7cwINeVY3GU9DniEeZ52effdb9X7/00ksDF2htW/2rww2kFo4CafUpVwXMRRddZPXr13ddWQoWLOga+rzGO63TpEmTwHOhNMq5AnNV+iD66G+s86dZs2Y0miBqcR4jFnAew09elXG6Drp1Y6yy7dQeLE0ZotCAPlzqPzh75JWPh3sueOqf0IyT1klJ40Ewlacr6P7iiy+SBP5eYK/MuoJ5j36ONCWaBnAKHsTJo0Dl2EkGoALSO53HJxtITf8n1f95+vTpLius7hrKTnvdMzQvtqhaRA8N3ij63NG83hdeeKF7jf4vaowGlXOrmkWfGQrk1a1DYz6IMt6aUUHVNt6sA5rmS2M8aJ5udQPRSOX3339/oD+5gm0F7aqI0VgS2pbKxkXb1vF/9NFH7v+5+oirEU7BmgZaVOBOlju66e/H3xDRjvMYsYDzGH5I6TU+TQdS042uRuaeOHFikvl0PSrH1M3s1q1b3cOjkby1LNyUO6Kb3+DBzVQi6k3TldY0Ovljjz3m+rIHj5LsZdoUeHsDq3mtJyqXVZk7gPDUNUSZYw1OpgYr7/HWW28F1lEgrb7WXh9qTSWmnzWAokdjM6i7iwJrZaCVpVbJukeB+IYNG5KUEulnDdSozyoF1o8++qhrWAumIFsBtsaNUHXOr7/+6qYUUybb+8DW56D+n6uB7bnnnnMl65o+EAAAANEtzacM042mRhlW1kg3rMo2aaAjZXp0I60AWyXfHTt2dCN7a5myWg0bNjwhaPWoZFMl15r3W6XgunlVkJ7WlLlS33Fl5JTx8vppqw+oHsqaK7OmUlRVAXhThqmsVTf1p2Jx/6YuwwZEIwW36v+s0vGUtCCmpNpEo4frcbKGQP3/jET/b0P3paoVPZKj30GBeGgw7lGGXQ8AAADEnjSfMkzz0Woe28aNG9sDDzzgSjLVB07ZXgXdCkRVMqqMkDJTGnRMrwnOYIXS6OO33HKLG3lcwbnW1/bTmn4fjWR8ww03JMnGBd+IP/TQQ24k5DvvvNNlxP7++2+XFT+Tft8AAAAAgLSRKfFUOyQjXVM5uvqx7tmzh0w3oj7TrRJv+sMiGnEOIxZwHiMWcB7jbMRe6uaYJ0+e9JvpBgAAAAAgVhF0pyKvb3a4x4IFC1JzVwAAAACAKJDmA6nFEs0RHEmxYsXO6rEAAAAAANIeQXcqKlu2bGpuDgAAAAAQ5SgvBwAAAADAJwTdAAAAAAD4hKAbAAAAAACfEHQDAAAAAOATgm4AAAAAAHxC0A0AAAAAgE8IugEAAAAA8AlBNwAAAAAAPiHoBgAAAADAJwTdAAAAAAD4hKAbAAAAAACfEHQDAAAAAOATgm4AAAAAAHxC0A0AAAAAgE8IugEAAAAA8AlBNwAAAAAAPiHoBgAAAADAJwTdANK1kSNHWq1atSx37tx23nnnWdu2bW3Dhg1J1jl06JD16NHDChYsaLly5bLrr7/edu7cmWSdLVu2WKtWrSxHjhxuOw8++KAdO3Ys2X1fc801duGFF1q2bNmsaNGi1rlzZ9u2bVuS/Xbt2tWqVKlimTNndscWat68eZYpU6YTHjt27Djj9wYAAADpX4YIuocMGWLVqlVL68MAcBrmz5/vAupFixbZnDlz7OjRo3bVVVfZP//8E1jn/vvvt48++sjeeecdt74C4+uuuy6w/Pjx4y7gPnLkiH377bf26quv2pQpU2zQoEHJ7rtx48b29ttvuyD/vffes59//tluuOGGJNvNnj273XvvvXbllVcmuy1tY/v27YGHAn8AAADEvqgIupUR6tWrl5UuXdqyZs1qxYsXt9atW9vcuXMt1owfP94uuugidyOv31PBhLJpQEb12WefuWxypUqV7JJLLnHBsrLW3333nVu+f/9+e+mll+ypp56yJk2aWI0aNeyVV15xwbUCdfn8889t7dq19tprr7kGuKuvvtoee+wxmzhxogvEI9H/v8svv9xKlChhdevWtYcffthtU4G/5MyZ0yZNmmR33HGHFSlSJNnfQ0G21vEecXFR8fELAACAM5TZ0rnNmzdbvXr1LF++fDZmzBhXxqkb3tmzZ7vs1/r16y1WTJ8+3d3Uv/zyy+4G/8cff3TBhkpRFVCcistGzrVjmXP6dqyAn7LGJ9ro2uGXKciWAgUKuK8KvvWZEJxprlChgisLX7hwoQua9VWfHYULFw6s07x5c7v77rttzZo1Vr169ZMe0969e+311193/zezZMlyyr+Tgv3Dhw9b5cqVXfWNPtcAAAAQ+9J9quWee+5xQeeSJUtcP83y5cu7jFefPn0CWSxlvdq0aeP6cubJk8fat29/Qn/OYI0aNbLevXsneU59MRXgekqWLGnDhw+3Ll26uO0q0zVz5kzbvXt3YF9Vq1a1ZcuWBV6jDJwaB9QgULFiRbdOixYtXClpSigzpxvxm2++2e1fJbQ33XST+90BmCUkJLj/u/p/ouDVq4Q555xz3P+9YAqwvX7T+hoccHvLvWXJ6devn8toq7+4PmtmzJhxSn8K9QWfPHmyK0/XQxUs+gxavnw5f1IAAIAMIF1nupVZUmnpiBEj3E1vKN1k6ybcC4LVl1MDIykD3qFDBzeA0ZkYN26cPf744zZw4ED3vQZRUparW7duLuuum3EF5cqUqWFADh48aGPHjrVp06a58tFOnTpZ3759XYbsZLRtlb8qyK5du7b98ssvNmvWLLffSJQ508Nz4MAB9zVrXKLFxyee0e8PpBWdv+KVcXt69uxpq1evtq+++iqwzBsMLXTdxMRE1+daz+tzQj8HrxP8+tDXBlOQr//nCrjVEKf/jx9++GHg/7xH+9AjdFvqFqOHR4PCbdy40Z588knXUIfY5J0HyZ1bQHrHeYxYwHkMP6X0Op+ug27dmOpGWaWikahf96pVq2zTpk0ugyRTp0512fClS5e6G9zT1bJlS+vevbv7XgMuqe+mtteuXTv3nILuOnXquKy6159Tb7yyWmXKlAkECcOGDUvR/pTh3rNnj9WvX9/93goG7rrrLnvkkUeSHdl56NChJzw/oHqC5chx/LR+byC90MBpnueff94WL17sGsJ++OEH95Bff/3V9cvWgGdqfPPo+T///NM1XP3111/2008/ue89XjWMPmeCn0+OGtxuv/121wgX+rn022+/ucHdUrItZc1VFp/S/SI2zmEgWnEeIxZwHsMPSrhGfdCtwPNk1q1b54JtL+CWiy++2GXBtexMgm6Vj4eWoqpfaOhzu3btCgTdmo7IC7i90lItTwll5hVQ/Pe//7XLLrvMBQP33XefG/BJ2fZw+vfv70rtgzPdei+Gr4izY1niT/l3BtJLpvuxmgnWrFkzNxWXss0rV660r7/+2sqVK5dkXZWa6/+I1lNDmTdSuLqC3Hrrre7/kqpO3n33XatZs2Zg1PAXX3zRdUfRIGgaoDEllO0WDdbWsGHDJMtUOr5v377AMSRnwoQJLmhPybqITmqA1Q2ezuHTGQMASA84jxELOI/hJ6/KOKqDbt1cq4QztQdL0w14aEAfrjQg+EbJKyUN95xKSsO9xlsnJY0HosBapavKpHkBvjJnd955pz366KNhRztWsBAuYDickMmOHU9a/gpEG/1/UsOTBhlUX2oNnvbHH3+4ZXnz5nWj/J977rl222232UMPPeQCagXSmu1AVSiqGhEFt2qMU6Z69OjRrh/34MGDXVcULzuubh0qI1f1TLFixVxWXdUy2kb+/PnddGH6P6pGtSuuuCLwf12joivTroBbGXV1NxFvmkLNSFCqVClXfaOZCBTsqzxeI6oTjMU+/Y35OyPacR4jFnAeww8pvcan66BbN9gaYVjT+mge3NB+3brJ1YBlW7dudQ8v262bYC3TTXY4hQoVSjK4mfp9qp+o5uRN6/KE/9fefUBJUW1rHN/knKMgGZSsKOESBJWoXC8YUBQRxEwWVEQBUaI5gA8FXWIAUZ8oIMFLUIQrUYIkEQUuSJScFBjot77jqn494/QwwBQd+P/Wama6q6aquuf00Pvsfc5JGlhnyPBXtjq1gbtnUd/GroQViEXqBPNKrzWsQzT5WCgtC+ZNfqhyb713NNmi5jjQ3w1VjIS+j7766is3W7mCcf0t6dChQ6KhH3r/KUPudcCpamXixIkuOFfnl6pWNDFiv379EnV0KaBXKbvHmwnde88qIO/du7dt27bNHVMVNLNmzYr43xsAAABcGFEddIsCbpWPamIxfUDWB1aNdVbZnj6MK8BWRrhdu3Yuo6RtmvFcpZ8qJU2O1vJVSfbUqVNd1krLcSlIjzStPa5r0Yd2r7xcmTU97gXfwMUmNR1OWbNmdX8rdAtHKxCkNIZaQX3oufR3Zc6cOala1jAlysDrBgAAgItT1AfdmvVXS+toBnNli5ShVqZaYyoVdKt8W2WnKidt2LChy3YpG6Uxk+GoxHTlypWulFTjQB999NGoyDopg6bno6/Kiul5KuDWcwcAAAAAxJ50gbOtW0bUD+bXWFfNgk55OWK9vFyl24yHRSyiDSMe0I4RD2jHuBCx18GDB928QuH8fWYuAAAAAACQJgi6LyDNkhzuNm/evAt5KQAAAACACyDqx3THE60zHI6WKAIAAAAAxBeC7guofPnyF/J0AAAAAIAIo7wcAAAAAACfEHQDAAAAAOATgm4AAAAAAHxC0A0AAAAAgE8IugEAAAAA8AlBNwAAAAAAPiHoBgAAAADAJwTdAAAAAAD4hKAbAAAAAACfEHQDAAAAAOATgm4AAAAAAHxC0A0AAAAAgE8IugEAAAAA8AlBNwAAAAAAPiHoBgAAAADAJwTdAAAAAAD4hKAbAAAAAACfxHzQPXDgQLvyyisjfRlATPruu+/spptusmLFilm6dOnsyy+/TLS9Y8eO7vHQW4sWLRLt869//ctKlixpWbNmtUsuucTat29v27dvT/G8o0ePtmuvvdZy587tjnngwIG/7XP48GG755573D558+a1++67z44cORLcvn79ervuuuusSJEi7txly5a1fv362cmTJ8/7dQEAAADiJujeuXOndevWzX1gzpIli5UoUcIFAbNnz7Z4smbNGrv11lutdOnSLsh47bXXkt1v27Ztdvfdd1uBAgUsW7ZsVq1aNVu6dOkFv15cHI4ePWpXXHGFvfnmm2H3UZC9Y8eO4O3jjz9OtF2B76effuqC4M8//9x+/fVXu+2221I877Fjx9xxn3rqqbD7vPrqq7Z27VqbOXOmffXVV66D4MEHHwxuz5QpkwvK//3vf7tz6z01ZswYe+aZZ87qNQAAAAD8lNEiaPPmzVa/fn2XxXrxxRddgKks1ddff21dunSxn376yeKFggx1LLRp08YeffTRZPfZv3+/ez0UxEyfPt0KFSpkGzZssHz58p31+eoMm20JGXOkwZUj3mwe3jL4/Q033OBuKVFnWNGiRcNuD23PpUqVsieffNJat27t3ssKjJPTs2dP9/Xbb79Ndvu6dets2bJltmDBAqtTp457bMSIEXbjjTfaSy+95DLzej/pFnpuHW/evHkpPh8AAADgosl0d+7c2WV9Fy9e7LLAl112mVWpUsV69eplCxcudPts2bLFWrVqZTlz5nRlprfffrvt2rUr7DFVsup9oPcoAFCZrEfZ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8AlBNwAAAAAAPiHoBgAAAADAJwTdQIz77rvv7KabbrJixYpZunTp7Msvv0y0feDAgVaxYkXLkSOH5cuXz5o0aWKLFi3623GmTp1qderUsWzZsrn9WrduneJ5O3bs6M4XemvRokWy+x4/ftyuvPJKt8+KFSuCj3/77bfWqlUru+SSS9z1aZ9x48ad82sBAAAARJu4CLoVVOjDOnAxOnr0qF1xxRX25ptvJrv9sssus5EjR9qqVats/vz5Vrp0aWvWrJn9/vvvwX0+//xza9++vd177722cuVK+89//mN33XXXGc+tIHvHjh3B28cff5zsfk888YTrFEjq+++/t+rVq7vz//jjj+7899xzj+sAAAAAAOJBVATdO3futG7dulnZsmUtS5YsVqJECZe5mz17tsWTMWPG2DXXXOOyiF7GcfHixcHtJ0+etD59+li1atVc1k9BigKQ7du3R/S6Ed1uuOEGGzx4sN18883JblfwrLam91eVKlXslVdesUOHDrkgVxISEqxHjx724osv2sMPP+yC9MqVK9vtt99+xnPr/Vq0aNHgTe06qenTp9u///1ve+mll/627amnnrJBgwZZvXr1rFy5cu46FMgnzdYDAAAAsSpjpC9g8+bNVr9+fcubN6/70K+AU8Hn119/bV26dLGffvrJ4oVKae+8804XYGTNmtWef/55l3Fcs2aNFS9e3I4dO2bLli2z/v37u8zl/v37XRDyr3/9y5YuXXpW56ozbLYlZMzh23NBZG0e3vKcfu7EiRM2evRoy5Mnj2tjoja3bds2S58+vdWoUcN1gqlyRO/HqlWrnrFNFy5c2AXb119/vQv+CxQoENy+a9cue+CBB1wQnT179lRd48GDB+3yyy8/p+cHAAAARJuIZ7o7d+7sxnkq43vrrbe6LJuycb169bKFCxe6fbZs2eLGfebMmdNy587tMnD6MB/Otddeaz179kz0mManagyqRyW2ChCUSdZxS5UqZZMnT3Ylt965VPYaGuyOHTvWdQ6oQ6BSpUpuH6+8NjU0VlXPVwGNxti+8847dvr06WBGX4HQzJkz3fNT0PGPf/zDlQX/8MMP7jUAztVXX33l2qs6e1599VXXzgoWLOi2bdy4MThMo1+/fm5fBdF6H+3bty/sMdX2P/jgA9d+1YE0d+5cl3U/deqU2x4IBNx7TtnzmjVrpuo6P/30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" }, "metadata": {}, "output_type": "display_data", @@ -1449,36 +1506,39 @@ "text": [ "\n", "[特征重要性排名 - Gain]\n", - "return_5_rank 2332.348582\n", - "return_5 1950.969372\n", - "turnover_rank 1887.661314\n", - "return_10 1342.515739\n", - "turnover_rate_std_20 1311.361422\n", - "ma_ratio_5_20 1123.527241\n", - "bbi_ratio 1071.855236\n", - "high_low_ratio 994.522432\n", - "bias_10 742.095194\n", - "std_return_5 741.347398\n", - "volume_change_rate 739.034219\n", - "return_20 597.878394\n", - "volume_ratio_5_20 595.380527\n", - "std_return_20 515.137529\n", - "market_cap_rank 466.798819\n", - "ma_20 418.790501\n", - "volatility_ratio 390.093624\n", - "return_diff_5_10 354.139443\n", - "turnover_rate_mean_5 351.775202\n", - "turnover_deviation 177.305289\n", - "ma_5 150.850527\n", - "volatility_5 148.218010\n", - "volatility_20 147.523706\n", + "bias_10 883.242468\n", + "bbi_ratio 719.403482\n", + "reversal_1 616.343038\n", + "turnover_deviation 563.883571\n", + "turnover_rate_mean_5 553.710151\n", + "ma_ratio_5_20 493.930772\n", + "return_20 477.078960\n", + "return_5 465.129010\n", + "volume_ratio 438.578614\n", + "roe 386.244247\n", + "EP_rank 324.897361\n", + "ma_20 313.170879\n", + "momentum_accel 273.272078\n", + "net_profit_growth 227.346561\n", + "BP_rank 210.965235\n", + "volatility_ratio 200.314833\n", + "roe_delta 153.102754\n", + "cashflow_act_rank 136.542178\n", + "ma_5 116.355596\n", + "market_cap_rank 89.142452\n", + "debt_to_equity 68.378507\n", + "current_ratio 63.483876\n", + "revenue_growth 0.000000\n", + "ebitda_rank 0.000000\n", "dtype: float64\n", "\n", - "所有特征都有一定重要性\n" + "[低重要性特征] 以下2个特征重要性为0,可考虑删除:\n", + " - revenue_growth\n", + " - ebitda_rank\n" ] } ], - "execution_count": 36 + "execution_count": 18 } ], "metadata": { diff --git a/src/training/__init__.py b/src/training/__init__.py index 87eb845..843c546 100644 --- a/src/training/__init__.py +++ b/src/training/__init__.py @@ -17,11 +17,8 @@ from src.training.registry import ( # 数据划分器 from src.training.components.splitters import DateSplitter -# 股票池选择器配置 -from src.training.components.selectors import ( - MarketCapSelectorConfig, - StockFilterConfig, -) +# 股票池选择器配置(已迁移到 StockPoolManager,保留文件占位) +# from src.training.components.selectors import ... # 数据处理器 from src.training.components.processors import ( @@ -54,9 +51,9 @@ __all__ = [ "register_processor", # 数据划分器 "DateSplitter", - # 股票池选择器配置 - "StockFilterConfig", - "MarketCapSelectorConfig", + # 股票池选择器配置(已迁移,保留注释占位) + # "StockFilterConfig", # 已删除,使用 StockPoolManager + filter_func 替代 + # "MarketCapSelectorConfig", # 已删除,使用 StockPoolManager + required_factors 替代 # 数据处理器 "NullFiller", "StandardScaler", diff --git a/src/training/components/__init__.py b/src/training/components/__init__.py index 8879569..68045d7 100644 --- a/src/training/components/__init__.py +++ b/src/training/components/__init__.py @@ -9,11 +9,8 @@ from src.training.components.base import BaseModel, BaseProcessor # 数据划分器 from src.training.components.splitters import DateSplitter -# 股票池选择器配置 -from src.training.components.selectors import ( - MarketCapSelectorConfig, - StockFilterConfig, -) +# 股票池选择器配置(已迁移到 StockPoolManager) +# from src.training.components.selectors import ... # 已删除 # 数据处理器 from src.training.components.processors import ( @@ -29,8 +26,8 @@ __all__ = [ "BaseModel", "BaseProcessor", "DateSplitter", - "StockFilterConfig", - "MarketCapSelectorConfig", + # "StockFilterConfig", # 已删除 + # "MarketCapSelectorConfig", # 已删除 "StandardScaler", "CrossSectionalStandardScaler", "Winsorizer", diff --git a/src/training/components/selectors.py b/src/training/components/selectors.py index 911bf8b..f5dcec2 100644 --- a/src/training/components/selectors.py +++ b/src/training/components/selectors.py @@ -1,81 +1,20 @@ """股票池选择器配置 -提供股票过滤和市值选择的配置类。 +此模块目前为空,股票池筛选功能已迁移到 StockPoolManager。 +所有筛选逻辑通过传入自定义函数实现。 """ -from dataclasses import dataclass -from typing import List, Optional - - -@dataclass -class StockFilterConfig: - """股票过滤器配置 - - 用于过滤掉不需要的股票(如创业板、科创板等)。 - 基于股票代码进行过滤,不依赖外部数据。 - - Attributes: - exclude_cyb: 是否排除创业板(300xxx, 301xxx) - exclude_kcb: 是否排除科创板(688xxx) - exclude_bj: 是否排除北交所(.BJ 后缀) - exclude_st: 是否排除ST股票(需要外部数据支持) - """ - - exclude_cyb: bool = True - exclude_kcb: bool = True - exclude_bj: bool = True - exclude_st: bool = True - - def filter_codes(self, codes: List[str]) -> List[str]: - """应用过滤条件,返回过滤后的股票代码列表 - - Args: - codes: 原始股票代码列表 - - Returns: - 过滤后的股票代码列表 - - Note: - ST 股票过滤需要额外数据,在 StockPoolManager 中处理。 - 此方法仅基于代码前缀进行过滤。 - """ - result = [] - for code in codes: - # 排除创业板(300xxx, 301xxx) - if self.exclude_cyb and code.startswith(("300", "301")): - continue - # 排除科创板(688xxx) - if self.exclude_kcb and code.startswith("688"): - continue - # 排除北交所(.BJ 后缀) - if self.exclude_bj and code.endswith(".BJ"): - continue - result.append(code) - return result - - -@dataclass -class MarketCapSelectorConfig: - """市值选择器配置 - - 每日独立选择市值最大或最小的 n 只股票。 - 市值数据从 daily_basic 表独立获取,仅用于筛选。 - - Attributes: - enabled: 是否启用选择 - n: 选择前 n 只 - ascending: False=最大市值, True=最小市值 - market_cap_col: 市值列名(来自 daily_basic) - """ - - enabled: bool = True - n: int = 100 - ascending: bool = False - market_cap_col: str = "total_mv" - - def __post_init__(self): - """验证配置参数""" - if self.n <= 0: - raise ValueError(f"n 必须是正整数,得到: {self.n}") - if not self.market_cap_col: - raise ValueError("market_cap_col 不能为空") +# 旧配置类已删除: +# - StockFilterConfig (使用 filter_func 替代) +# - MarketCapSelectorConfig (使用 filter_func + required_factors 替代) +# +# 新的使用方式: +# from src.training import StockPoolManager +# +# def my_filter(df: pl.DataFrame) -> pl.Series: +# return df["total_mv"] > 1e9 +# +# pool_manager = StockPoolManager( +# filter_func=my_filter, +# required_columns=["total_mv"], +# ) diff --git a/src/training/config/__init__.py b/src/training/config/__init__.py index 2245022..3aea132 100644 --- a/src/training/config/__init__.py +++ b/src/training/config/__init__.py @@ -4,15 +4,13 @@ """ from src.training.config.config import ( - MarketCapSelectorConfig, ProcessorConfig, - StockFilterConfig, TrainingConfig, ) __all__ = [ "TrainingConfig", - "StockFilterConfig", - "MarketCapSelectorConfig", + # "StockFilterConfig", # 已删除 + # "MarketCapSelectorConfig", # 已删除 "ProcessorConfig", ] diff --git a/src/training/config/config.py b/src/training/config/config.py index 8b4368b..84de30e 100644 --- a/src/training/config/config.py +++ b/src/training/config/config.py @@ -10,26 +10,6 @@ from pydantic import Field, validator from pydantic_settings import BaseSettings -@dataclass -class StockFilterConfig: - """股票过滤器配置""" - - exclude_cyb: bool = True # 排除创业板 - exclude_kcb: bool = True # 排除科创板 - exclude_bj: bool = True # 排除北交所 - exclude_st: bool = True # 排除ST股票 - - -@dataclass -class MarketCapSelectorConfig: - """市值选择器配置""" - - enabled: bool = True # 是否启用 - n: int = 100 # 选择前 n 只 - ascending: bool = False # False=最大市值, True=最小市值 - market_cap_col: str = "total_mv" # 市值列名(来自 daily_basic) - - @dataclass class ProcessorConfig: """处理器配置""" @@ -56,25 +36,6 @@ class TrainingConfig(BaseSettings): test_start: str = Field(..., description="测试期开始 YYYYMMDD") test_end: str = Field(..., description="测试期结束 YYYYMMDD") - # === 股票池配置 === - stock_filter: StockFilterConfig = Field( - default_factory=lambda: StockFilterConfig( - exclude_cyb=True, - exclude_kcb=True, - exclude_bj=True, - exclude_st=True, - ) - ) - stock_selector: Optional[MarketCapSelectorConfig] = Field( - default_factory=lambda: MarketCapSelectorConfig( - enabled=True, - n=100, - ascending=False, - market_cap_col="total_mv", - ) - ) - # 注意:如果 stock_selector = None,则跳过市值选择 - # === 模型配置 === model_type: str = "lightgbm" model_params: Dict[str, Any] = Field(default_factory=dict) diff --git a/src/training/core/stock_pool_manager.py b/src/training/core/stock_pool_manager.py index 2f29b44..b129931 100644 --- a/src/training/core/stock_pool_manager.py +++ b/src/training/core/stock_pool_manager.py @@ -1,57 +1,63 @@ """股票池管理器 -每日独立筛选股票池,市值数据从 daily_basic 表独立获取。 +支持使用自定义函数和因子表达式进行每日股票池筛选。 +临时计算的因子仅在筛选阶段使用,绝不泄露到训练数据。 """ -from typing import TYPE_CHECKING, Dict, List, Optional +from typing import TYPE_CHECKING, Callable, Dict, List, Optional, Set, Tuple import polars as pl -from src.training.components.selectors import MarketCapSelectorConfig, StockFilterConfig - if TYPE_CHECKING: from src.factors.engine.data_router import DataRouter class StockPoolManager: - """股票池管理器 - 每日独立筛选 + """股票池管理器 - 支持自定义筛选函数和因子 - 重要约束: - 1. 市值数据仅从 daily_basic 表获取,仅用于筛选 - 2. 市值数据绝不混入特征矩阵 - 3. 每日独立筛选(市值是动态变化的) + 核心特性: + 1. 支持传入自定义筛选函数 + 2. 支持使用因子表达式进行筛选 + 3. 使用 FactorEngine 计算所需因子 + 4. 只删除本次新生成的临时因子,保留输入中已存在的所有列 - 处理流程(每日): - 当日所有股票 + 数据流: + 输入数据 (含原始列,可能包含一些因子) ↓ - 代码过滤(创业板、ST等) + [准备数据] + ├─ 获取缺失的基础列 (from data_router) + └─ 计算缺失的因子 (使用 FactorEngine,标记为"本次生成") ↓ - 查询 daily_basic 获取当日市值 + [每日筛选] + ├─ group_by("trade_date").apply(filter_func) + └─ 只保留 ts_code + trade_date (筛选结果标识) ↓ - 市值选择(前N只) - ↓ - 返回当日选中股票列表 + [返回结果] + └─ semi join 原始数据,保留所有原始列 """ def __init__( self, - filter_config: StockFilterConfig, - selector_config: Optional[MarketCapSelectorConfig], - data_router: "DataRouter", + filter_func: Callable[[pl.DataFrame], pl.Series], + required_columns: Optional[List[str]] = None, + required_factors: Optional[Dict[str, str]] = None, + data_router: Optional["DataRouter"] = None, code_col: str = "ts_code", date_col: str = "trade_date", ): """初始化股票池管理器 Args: - filter_config: 股票过滤器配置 - selector_config: 市值选择器配置,None 表示跳过市值选择 - data_router: 数据路由器,用于获取 daily_basic 数据 + filter_func: 筛选函数,接收 DataFrame 返回布尔 Series + required_columns: 除输入数据外还需获取的基础列 + required_factors: 筛选所需的因子表达式 {因子名: DSL表达式} + data_router: 数据路由器,用于获取缺失列 code_col: 股票代码列名 date_col: 日期列名 """ - self.filter_config = filter_config - self.selector_config = selector_config + self.filter_func = filter_func + self.required_columns = required_columns or [] + self.required_factors = required_factors or {} self.data_router = data_router self.code_col = code_col self.date_col = date_col @@ -59,113 +65,191 @@ class StockPoolManager: def filter_and_select_daily(self, data: pl.DataFrame) -> pl.DataFrame: """每日独立筛选股票池 + 流程: + 1. 记录输入数据的原始列 + 2. 收集筛选所需的完整数据(基础列 + 计算因子) + 3. 按日期分组应用筛选函数 + 4. 只返回 ts_code 和 trade_date(筛选结果标识) + 5. 用标识列从原始数据筛选(保留所有原始列) + + 关键:返回的数据包含输入数据的所有原始列,只移除本次新生成的临时因子 + Args: data: 因子计算后的全市场数据,必须包含 trade_date 和 ts_code 列 Returns: - 筛选后的数据,仅包含每日选中的股票 - - Note: - - 按日期分组处理 - - 市值数据从 daily_basic 独立获取 - - 保持市值数据与特征数据隔离 + 筛选后的数据,列与输入数据完全一致(临时因子已移除) """ - dates = data.select(self.date_col).unique().sort(self.date_col) + # 1. 记录原始列,用于最后验证 + original_columns = list(data.columns) - result_frames = [] - for date in dates.to_series(): - # 获取当日数据 - daily_data = data.filter(pl.col(self.date_col) == date) - daily_codes = daily_data.select(self.code_col).to_series().to_list() + # 2. 准备完整数据(用于筛选判断) + # 返回的 enriched 包含临时因子,但不修改原始 data + enriched = self._prepare_data(data) - # 1. 代码过滤 - filtered_codes = self.filter_config.filter_codes(daily_codes) - - # 2. 市值选择(如果启用) - if self.selector_config and self.selector_config.enabled: - # 从 daily_basic 获取当日市值 - market_caps = self._get_market_caps_for_date(filtered_codes, date) - selected_codes = self._select_by_market_cap(filtered_codes, market_caps) - else: - selected_codes = filtered_codes - - # 3. 保留当日选中的股票数据 - daily_selected = daily_data.filter( - pl.col(self.code_col).is_in(selected_codes) + # 3. 每日筛选,只保留标识列 + # 使用 group_by + map_groups 替代 apply(Polars 0.20+) + selected_ids = enriched.group_by(self.date_col).map_groups( + lambda df: df.filter(self.filter_func(df)).select( + [self.code_col, self.date_col] ) - result_frames.append(daily_selected) - - return pl.concat(result_frames) - - def _get_market_caps_for_date( - self, codes: List[str], date: str - ) -> Dict[str, float]: - """从 daily_basic 表获取指定日期的市值数据 - - Args: - codes: 股票代码列表 - date: 日期 "YYYYMMDD" - - Returns: - {股票代码: 市值} 的字典 - """ - if not codes: - return {} - - assert self.selector_config is not None, ( - "selector_config should not be None when calling _get_market_caps_for_date" ) + # 4. 用 semi join 从原始数据筛选,自动只保留原始列 + # semi join: 保留左侧(data)的所有列,只保留匹配的行 + result = data.join( + selected_ids, + on=[self.code_col, self.date_col], + how="semi", + ) + + # 5. 验证:确保结果列与原始列完全一致 + if list(result.columns) != original_columns: + raise RuntimeError( + f"列发生变化!\n原始: {original_columns}\n结果: {list(result.columns)}" + ) + + return result + + def _prepare_data(self, data: pl.DataFrame) -> pl.DataFrame: + """准备筛选所需的完整数据 + + 步骤: + 1. 获取缺失的基础列 + 2. 计算缺失的因子(输入中已存在的因子不再计算) + + Args: + data: 输入数据 + + Returns: + 包含所有所需列和因子的数据(含临时因子) + """ + result = data + + # 1. 获取缺失的基础列 + if self.required_columns and self.data_router is not None: + result = self._fetch_required_columns(result) + + # 2. 计算因子(只计算输入中不存在的) + if self.required_factors: + result = self._compute_factors(result) + + return result + + def _fetch_required_columns(self, data: pl.DataFrame) -> pl.DataFrame: + """从 data_router 获取缺失的基础列 + + Args: + data: 当前数据 + + Returns: + 补充了缺失列的数据 + """ + missing_cols = set(self.required_columns) - set(data.columns) + if not missing_cols: + return data + + if self.data_router is None: + raise ValueError(f"需要获取列 {missing_cols},但未提供 data_router") + + # 获取日期范围 + dates = data.select(self.date_col).unique().to_series().to_list() + if not dates: + return data + + start_date = min(dates) + end_date = max(dates) + + # 获取所有股票代码 + codes = data.select(self.code_col).unique().to_series().to_list() + try: - # 通过 data_router 查询 daily_basic 表 from src.factors.engine.data_spec import DataSpec + # 构建 DataSpec 列表 data_specs = [ - DataSpec("daily_basic", [self.selector_config.market_cap_col]) + DataSpec("daily", list(missing_cols)) # 假设从 daily 表获取 ] - df = self.data_router.fetch_data( + + # 从 data_router 获取数据 + extra_data = self.data_router.fetch_data( data_specs=data_specs, - start_date=date, - end_date=date, + start_date=start_date, + end_date=end_date, stock_codes=codes, ) - # 转换为字典 - market_caps = {} - for row in df.iter_rows(named=True): - code = row[self.code_col] - cap = row.get(self.selector_config.market_cap_col) - if cap is not None and code in codes: - market_caps[code] = float(cap) + # 合并到结果 + result = data.join( + extra_data, + on=[self.code_col, self.date_col], + how="left", + ) - return market_caps + return result except Exception as e: - print(f"[警告] 获取 {date} 市值数据失败: {e}") - return {} + print(f"[警告] 获取缺失列失败: {e}") + # 如果获取失败,继续使用现有数据(筛选可能不完全) + return data - def _select_by_market_cap( - self, codes: List[str], market_caps: Dict[str, float] - ) -> List[str]: - """根据市值选择股票 + def _compute_factors(self, data: pl.DataFrame) -> pl.DataFrame: + """使用 FactorEngine 计算筛选所需的因子 + + 只计算输入数据中不存在的因子,已存在的因子直接使用。 Args: - codes: 股票代码列表 - market_caps: 市值数据字典 + data: 当前数据 Returns: - 选中的股票代码列表 + 补充了缺失因子的数据(含临时因子) """ - if self.selector_config is None: - return codes + existing_cols = set(data.columns) - if not market_caps: - return codes[: self.selector_config.n] + # 确定需要计算的因子(输入中不存在的) + factors_to_compute = { + name: expr + for name, expr in self.required_factors.items() + if name not in existing_cols + } - # 按市值排序并选择前N只 - sorted_codes = sorted( - codes, - key=lambda c: market_caps.get(c, 0), - reverse=not self.selector_config.ascending, - ) - return sorted_codes[: self.selector_config.n] + if not factors_to_compute: + # 所有因子都已存在,无需计算 + return data + + try: + from src.factors import FactorEngine + + # 获取日期范围 + dates = data.select(self.date_col).unique().to_series().to_list() + if not dates: + return data + + start_date = min(dates) + end_date = max(dates) + + # 创建 FactorEngine 并注册因子 + engine = FactorEngine() + for name, expr in factors_to_compute.items(): + engine.add_factor(name, expr) + + # 计算因子 + factor_data = engine.compute( + factor_names=list(factors_to_compute.keys()), + start_date=start_date, + end_date=end_date, + ) + + # 合并到数据(左连接,保留所有原始行) + result = data.join( + factor_data, + on=[self.code_col, self.date_col], + how="left", + ) + + return result + + except Exception as e: + print(f"[警告] 计算因子失败: {e}") + # 如果计算失败,继续使用现有数据 + return data diff --git a/src/training/core/trainer.py b/src/training/core/trainer.py index 96e28f7..618cb8e 100644 --- a/src/training/core/trainer.py +++ b/src/training/core/trainer.py @@ -97,13 +97,14 @@ class Trainer: print("[筛选] 每日独立筛选股票池...") data = self.pool_manager.filter_and_select_daily(data) - # 2. 划分训练/测试集 + # 2. 划分训练/验证/测试集(三分法) if self.splitter: - print("[划分] 划分训练集和测试集...") - train_data, test_data = self.splitter.split(data) + print("[划分] 划分训练集、验证集和测试集...") + train_data, val_data, test_data = self.splitter.split(data) else: # 没有划分器,全部作为训练集 train_data = data + val_data = data test_data = data # 3. 训练集:processors fit_transform diff --git a/tests/training/test_selectors.py b/tests/training/test_selectors.py deleted file mode 100644 index faa9fb8..0000000 --- a/tests/training/test_selectors.py +++ /dev/null @@ -1,183 +0,0 @@ -"""测试股票池选择器配置 - -验证 StockFilterConfig 和 MarketCapSelectorConfig 功能。 -""" - -import pytest - -from src.training.components.selectors import ( - MarketCapSelectorConfig, - StockFilterConfig, -) - - -class TestStockFilterConfig: - """StockFilterConfig 测试类""" - - def test_default_values(self): - """测试默认值""" - config = StockFilterConfig() - assert config.exclude_cyb is True - assert config.exclude_kcb is True - assert config.exclude_bj is True - assert config.exclude_st is True - - def test_custom_values(self): - """测试自定义值""" - config = StockFilterConfig( - exclude_cyb=False, - exclude_kcb=False, - exclude_bj=False, - exclude_st=False, - ) - assert config.exclude_cyb is False - assert config.exclude_kcb is False - assert config.exclude_bj is False - assert config.exclude_st is False - - def test_filter_codes_exclude_all(self): - """测试排除所有类型""" - config = StockFilterConfig( - exclude_cyb=True, - exclude_kcb=True, - exclude_bj=True, - exclude_st=True, - ) - codes = [ - "000001.SZ", # 主板 - 保留 - "300001.SZ", # 创业板 - 排除 - "688001.SH", # 科创板 - 排除 - "830001.BJ", # 北交所(8开头)- 排除 - "430001.BJ", # 北交所(4开头)- 排除 - ] - result = config.filter_codes(codes) - assert result == ["000001.SZ"] - - def test_filter_codes_allow_cyb(self): - """测试允许创业板""" - config = StockFilterConfig( - exclude_cyb=False, - exclude_kcb=True, - exclude_bj=True, - exclude_st=True, - ) - codes = [ - "000001.SZ", - "300001.SZ", - "688001.SH", - ] - result = config.filter_codes(codes) - assert result == ["000001.SZ", "300001.SZ"] - - def test_filter_codes_allow_kcb(self): - """测试允许科创板""" - config = StockFilterConfig( - exclude_cyb=True, - exclude_kcb=False, - exclude_bj=True, - exclude_st=True, - ) - codes = [ - "000001.SZ", - "300001.SZ", - "688001.SH", - ] - result = config.filter_codes(codes) - assert result == ["000001.SZ", "688001.SH"] - - def test_filter_codes_allow_bj(self): - """测试允许北交所""" - config = StockFilterConfig( - exclude_cyb=True, - exclude_kcb=True, - exclude_bj=False, - exclude_st=True, - ) - codes = [ - "000001.SZ", - "300001.SZ", - "830001.BJ", - "430001.BJ", - ] - result = config.filter_codes(codes) - assert result == ["000001.SZ", "830001.BJ", "430001.BJ"] - - def test_filter_codes_allow_all(self): - """测试允许所有类型""" - config = StockFilterConfig( - exclude_cyb=False, - exclude_kcb=False, - exclude_bj=False, - exclude_st=False, - ) - codes = [ - "000001.SZ", - "300001.SZ", - "688001.SH", - "830001.BJ", - "430001.BJ", - ] - result = config.filter_codes(codes) - assert result == codes - - def test_filter_codes_empty_list(self): - """测试空列表""" - config = StockFilterConfig() - result = config.filter_codes([]) - assert result == [] - - def test_filter_codes_no_matching(self): - """测试全部排除""" - config = StockFilterConfig() - codes = ["300001.SZ", "688001.SH", "830001.BJ"] - result = config.filter_codes(codes) - assert result == [] - - -class TestMarketCapSelectorConfig: - """MarketCapSelectorConfig 测试类""" - - def test_default_values(self): - """测试默认值""" - config = MarketCapSelectorConfig() - assert config.enabled is True - assert config.n == 100 - assert config.ascending is False - assert config.market_cap_col == "total_mv" - - def test_custom_values(self): - """测试自定义值""" - config = MarketCapSelectorConfig( - enabled=False, - n=50, - ascending=True, - market_cap_col="circ_mv", - ) - assert config.enabled is False - assert config.n == 50 - assert config.ascending is True - assert config.market_cap_col == "circ_mv" - - def test_invalid_n_zero(self): - """测试无效的 n=0""" - with pytest.raises(ValueError, match="n 必须是正整数"): - MarketCapSelectorConfig(n=0) - - def test_invalid_n_negative(self): - """测试无效的负数 n""" - with pytest.raises(ValueError, match="n 必须是正整数"): - MarketCapSelectorConfig(n=-1) - - def test_invalid_empty_market_cap_col(self): - """测试空的市值列名""" - with pytest.raises(ValueError, match="market_cap_col 不能为空"): - MarketCapSelectorConfig(market_cap_col="") - - def test_large_n(self): - """测试大的 n 值""" - config = MarketCapSelectorConfig(n=5000) - assert config.n == 5000 - - -if __name__ == "__main__": - pytest.main([__file__, "-v"]) diff --git a/tests/training/test_stock_pool_manager.py b/tests/training/test_stock_pool_manager.py new file mode 100644 index 0000000..2bcde33 --- /dev/null +++ b/tests/training/test_stock_pool_manager.py @@ -0,0 +1,452 @@ +"""测试 StockPoolManager + +验证新的自定义函数和因子筛选功能。 +重点测试:临时因子隔离(只删除新生成的因子,保留原本存在的)。 +""" + +from unittest.mock import Mock, patch + +import polars as pl +import pytest + +from src.training.core.stock_pool_manager import StockPoolManager + + +class TestStockPoolManagerBasic: + """StockPoolManager 基础测试类""" + + def test_basic_filter_with_columns(self): + """测试使用基础列进行筛选""" + + def filter_func(df: pl.DataFrame) -> pl.Series: + return df["total_mv"] > 50 + + # 创建模拟 data_router + mock_router = Mock() + + manager = StockPoolManager( + filter_func=filter_func, + required_columns=["total_mv"], + data_router=mock_router, + ) + + # 创建测试数据 + data = pl.DataFrame( + { + "ts_code": ["000001.SZ", "000002.SZ", "000003.SZ", "000004.SZ"], + "trade_date": ["20240101"] * 4, + "close": [10.0, 20.0, 30.0, 40.0], + "total_mv": [100.0, 30.0, 80.0, 20.0], + } + ) + + # 执行筛选(无需 mock,因为 total_mv 已在数据中) + result = manager.filter_and_select_daily(data) + + # 验证返回数据列与输入一致 + assert result.columns == data.columns + # 验证筛选生效(保留市值 > 50 的股票) + assert len(result) == 2 + assert "000001.SZ" in result["ts_code"].to_list() + assert "000003.SZ" in result["ts_code"].to_list() + + def test_filter_without_required_columns(self): + """测试不使用额外列,仅使用输入数据中已有的列""" + + def filter_func(df: pl.DataFrame) -> pl.Series: + return df["close"] > 25 + + manager = StockPoolManager(filter_func=filter_func) + + data = pl.DataFrame( + { + "ts_code": ["000001.SZ", "000002.SZ", "000003.SZ"], + "trade_date": ["20240101"] * 3, + "close": [10.0, 30.0, 20.0], + } + ) + + result = manager.filter_and_select_daily(data) + + # 验证只保留 close > 25 的股票 + assert len(result) == 1 + assert result["ts_code"][0] == "000002.SZ" + assert result.columns == data.columns + + def test_empty_result(self): + """测试筛选结果为空的情况""" + + def filter_func(df: pl.DataFrame) -> pl.Series: + return df["close"] > 9999 # 不可能满足的条件 + + manager = StockPoolManager(filter_func=filter_func) + + data = pl.DataFrame( + { + "ts_code": ["000001.SZ", "000002.SZ"], + "trade_date": ["20240101"] * 2, + "close": [10.0, 20.0], + } + ) + + result = manager.filter_and_select_daily(data) + + assert len(result) == 0 + assert result.columns == data.columns # 即使为空,列结构保持一致 + + +class TestStockPoolManagerDailyIndependence: + """每日独立筛选测试类""" + + def test_daily_independence(self): + """测试每日独立进行筛选""" + + def filter_func(df: pl.DataFrame) -> pl.Series: + # 每日选收盘价前 50% + median = df["close"].median() + return df["close"] >= median + + manager = StockPoolManager(filter_func=filter_func) + + # 创建多日期数据 + data = pl.DataFrame( + { + "ts_code": [ + "000001.SZ", + "000002.SZ", + "000003.SZ", + "000004.SZ", + # 日期 2 + "000001.SZ", + "000002.SZ", + "000003.SZ", + "000004.SZ", + ], + "trade_date": [ + "20240101", + "20240101", + "20240101", + "20240101", + "20240102", + "20240102", + "20240102", + "20240102", + ], + "close": [ + 10.0, + 20.0, + 30.0, + 40.0, # 日期1:选 30, 40 + 5.0, + 15.0, + 25.0, + 35.0, # 日期2:选 25, 35 + ], + } + ) + + result = manager.filter_and_select_daily(data) + + # 验证每个日期独立筛选 + day1 = result.filter(pl.col("trade_date") == "20240101") + day2 = result.filter(pl.col("trade_date") == "20240102") + + # 日期1:收盘价 >= 25(中位数)- 30 和 40 + assert len(day1) == 2 + assert set(day1["ts_code"].to_list()) == {"000003.SZ", "000004.SZ"} + + # 日期2:收盘价 >= 20(中位数)- 25 和 35 + assert len(day2) == 2 + assert set(day2["ts_code"].to_list()) == {"000003.SZ", "000004.SZ"} + + def test_uneven_daily_distribution(self): + """测试每日股票数量不均的情况""" + + def filter_func(df: pl.DataFrame) -> pl.Series: + return df["close"] > 15 + + manager = StockPoolManager(filter_func=filter_func) + + data = pl.DataFrame( + { + "ts_code": [ + "000001.SZ", + "000002.SZ", # 日期1:2只股票 + "000001.SZ", + "000002.SZ", + "000003.SZ", + "000004.SZ", # 日期2:4只股票 + ], + "trade_date": [ + "20240101", + "20240101", + "20240102", + "20240102", + "20240102", + "20240102", + ], + "close": [10.0, 20.0, 5.0, 15.0, 25.0, 35.0], + } + ) + + result = manager.filter_and_select_daily(data) + + # 日期1:只有 000002.SZ (20 > 15) + day1 = result.filter(pl.col("trade_date") == "20240101") + assert len(day1) == 1 + + # 日期2:000003.SZ (25) 和 000004.SZ (35) + day2 = result.filter(pl.col("trade_date") == "20240102") + assert len(day2) == 2 + + +class TestStockPoolManagerFactorIsolation: + """因子隔离测试类 - 核心测试""" + + @patch.object(StockPoolManager, "_compute_factors") + def test_filter_with_factors(self, mock_compute): + """测试使用因子表达式进行筛选,验证临时因子被删除""" + + # 设置 mock 返回值(包含计算后的因子) + mock_compute.return_value = pl.DataFrame( + { + "ts_code": ["000001.SZ", "000002.SZ", "000003.SZ"], + "trade_date": ["20240101"] * 3, + "close": [11.0, 9.5, 10.8], + "momentum_20": [0.1, -0.05, 0.08], # 只有第一个 > 0.05 + } + ) + + # 创建 Manager + def filter_func(df: pl.DataFrame) -> pl.Series: + return df["momentum_20"] > 0.05 + + manager = StockPoolManager( + filter_func=filter_func, + required_factors={"momentum_20": "(close / ts_delay(close, 20)) - 1"}, + ) + + # 输入数据不含 momentum_20 + data = pl.DataFrame( + { + "ts_code": ["000001.SZ", "000002.SZ", "000003.SZ"], + "trade_date": ["20240101"] * 3, + "close": [11.0, 9.5, 10.8], + } + ) + + result = manager.filter_and_select_daily(data) + + # 验证返回数据列与输入一致(momentum_20 被删除) + assert result.columns == data.columns + assert "momentum_20" not in result.columns + + # 验证筛选生效 + # momentum_20 > 0.05: 000001.SZ (0.1), 000003.SZ (0.08) + assert len(result) == 2 + assert "000001.SZ" in result["ts_code"].to_list() + assert "000003.SZ" in result["ts_code"].to_list() + + # 验证 _compute_factors 被调用 + mock_compute.assert_called_once() + + @patch.object(StockPoolManager, "_compute_factors") + def test_preserve_existing_factors(self, mock_compute): + """测试输入中已存在的因子不会被删除(核心测试)""" + + # 设置 mock 返回值(包含 roe,但 momentum_20 已在输入中) + mock_compute.return_value = pl.DataFrame( + { + "ts_code": ["000001.SZ", "000002.SZ", "000003.SZ"], + "trade_date": ["20240101"] * 3, + "close": [11.0, 9.5, 10.8], + "momentum_20": [0.1, -0.05, 0.08], # 原本就存在 + "roe": [0.12, 0.08, 0.15], # 本次生成,第二个 < 0.1 + } + ) + + def filter_func(df: pl.DataFrame) -> pl.Series: + return (df["momentum_20"] > 0.05) & (df["roe"] > 0.1) + + manager = StockPoolManager( + filter_func=filter_func, + # 只声明 roe 为本次生成,momentum_20 已在输入中 + required_factors={"roe": "n_income / equity"}, + ) + + # 输入数据已包含 momentum_20 + data = pl.DataFrame( + { + "ts_code": ["000001.SZ", "000002.SZ", "000003.SZ"], + "trade_date": ["20240101"] * 3, + "close": [11.0, 9.5, 10.8], + "momentum_20": [0.1, -0.05, 0.08], # 原本就存在的因子 + } + ) + + result = manager.filter_and_select_daily(data) + + # 关键断言: + # 1. momentum_20 保留(原本存在) + assert "momentum_20" in result.columns + # 2. roe 删除(本次生成) + assert "roe" not in result.columns + # 3. 列与输入完全一致 + assert result.columns == data.columns + + # 验证筛选正确执行 + # momentum_20 > 0.05: 000001.SZ (0.1), 000003.SZ (0.08) + # roe > 0.1: 000001.SZ (0.12), 000003.SZ (0.15) + # 交集:000001.SZ, 000003.SZ + assert len(result) == 2 + + # 验证 _compute_factors 被调用(因为 roe 不存在) + mock_compute.assert_called_once() + + def test_no_factor_computation_when_all_exist(self): + """测试所有因子都已存在时,不调用 FactorEngine""" + + def filter_func(df: pl.DataFrame) -> pl.Series: + return (df["factor_a"] > 0.5) & (df["factor_b"] < 0.3) + + manager = StockPoolManager( + filter_func=filter_func, + required_factors={ + "factor_a": "some_expr_a", + "factor_b": "some_expr_b", + }, + ) + + # 输入数据已包含所有因子 + data = pl.DataFrame( + { + "ts_code": ["000001.SZ", "000002.SZ"], + "trade_date": ["20240101"] * 2, + "close": [10.0, 20.0], + "factor_a": [0.6, 0.4], # 原本存在 + "factor_b": [0.2, 0.5], # 原本存在 + } + ) + + with patch("src.factors.engine.factor_engine.FactorEngine") as mock_engine: + result = manager.filter_and_select_daily(data) + + # FactorEngine 不应被调用(所有因子都已存在) + mock_engine.assert_not_called() + + # 验证结果正确 + assert len(result) == 1 + assert result["ts_code"][0] == "000001.SZ" + assert result.columns == data.columns + + +class TestStockPoolManagerEdgeCases: + """边界情况测试类""" + + def test_single_date(self): + """测试单日数据""" + + def filter_func(df: pl.DataFrame) -> pl.Series: + return df["close"] > 15 + + manager = StockPoolManager(filter_func=filter_func) + + data = pl.DataFrame( + { + "ts_code": ["000001.SZ", "000002.SZ", "000003.SZ"], + "trade_date": ["20240101"] * 3, + "close": [10.0, 20.0, 30.0], + } + ) + + result = manager.filter_and_select_daily(data) + + assert len(result) == 2 + assert result.columns == data.columns + + def test_single_stock_per_day(self): + """测试每天只有一只股票""" + + def filter_func(df: pl.DataFrame) -> pl.Series: + return df["close"] > 0 # 都保留 + + manager = StockPoolManager(filter_func=filter_func) + + data = pl.DataFrame( + { + "ts_code": ["000001.SZ", "000002.SZ", "000003.SZ"], + "trade_date": ["20240101", "20240102", "20240103"], + "close": [10.0, 20.0, 30.0], + } + ) + + result = manager.filter_and_select_daily(data) + + assert len(result) == 3 + assert result.columns == data.columns + + def test_filter_all_out_one_day(self): + """测试某天全部过滤掉""" + + def filter_func(df: pl.DataFrame) -> pl.Series: + return df["close"] > 100 # 很高的阈值 + + manager = StockPoolManager(filter_func=filter_func) + + data = pl.DataFrame( + { + "ts_code": [ + "000001.SZ", + "000002.SZ", + "000001.SZ", + "000002.SZ", + ], + "trade_date": [ + "20240101", + "20240101", + "20240102", + "20240102", + ], + "close": [ + 10.0, + 20.0, # 日期1:都过滤掉 + 150.0, + 200.0, # 日期2:都保留 + ], + } + ) + + result = manager.filter_and_select_daily(data) + + # 只有日期2的数据 + assert len(result) == 2 + assert all(result["trade_date"] == "20240102") + + def test_column_order_preserved(self): + """测试列顺序保持不变""" + + def filter_func(df: pl.DataFrame) -> pl.Series: + return df["close"] > 15 + + manager = StockPoolManager(filter_func=filter_func) + + data = pl.DataFrame( + { + "ts_code": ["000001.SZ", "000002.SZ", "000003.SZ"], + "trade_date": ["20240101"] * 3, + "open": [9.0, 19.0, 29.0], + "high": [11.0, 21.0, 31.0], + "low": [8.0, 18.0, 28.0], + "close": [10.0, 20.0, 30.0], + "volume": [1000, 2000, 3000], + } + ) + + result = manager.filter_and_select_daily(data) + + # 验证列顺序完全一致 + assert list(result.columns) == list(data.columns) + + +if __name__ == "__main__": + pytest.main([__file__, "-v"])