Files
ProStock/src/experiment/learn_to_rank.ipynb
liaozhaorun e6c3a918c7 feat(training): 添加 LightGBM LambdaRank 排序学习功能
新增基于 LambdaRank 的排序学习模型,用于股票排序预测任务:
- 实现 LightGBMLambdaRankModel 模型类,支持分位数标签转换
- 提供完整的训练流程和 NDCG 评估指标
- 添加实验 Notebook 演示排序学习全流程
2026-03-10 22:23:44 +08:00

1608 lines
190 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Learn-to-Rank 排序学习训练流程\n",
"\n",
"本 Notebook 实现基于 LightGBM LambdaRank 的排序学习训练,用于股票排序任务。\n",
"\n",
"## 核心特点\n",
"\n",
"1. **Label 转换**: 将 `future_return_5` 按每日进行 20 分位数划分qcut\n",
"2. **排序学习**: 使用 LambdaRank 目标函数,学习每日股票排序\n",
"3. **NDCG 评估**: 使用 NDCG@1/5/10/20 评估排序质量\n",
"4. **策略回测**: 基于排序分数构建 Top-k 选股策略"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1. 导入依赖"
]
},
{
"cell_type": "code",
"metadata": {
"jupyter": {
"is_executing": true
},
"ExecuteTime": {
"start_time": "2026-03-09T16:47:47.027059Z"
}
},
"source": [
"import os\n",
"from datetime import datetime\n",
"from typing import List, Tuple, Optional\n",
"\n",
"import numpy as np\n",
"import polars as pl\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"from sklearn.metrics import ndcg_score\n",
"\n",
"from src.factors import FactorEngine\n",
"from src.training import (\n",
" DateSplitter,\n",
" STFilter,\n",
" StockPoolManager,\n",
" Trainer,\n",
" Winsorizer,\n",
" NullFiller,\n",
" StandardScaler,\n",
")\n",
"from src.training.components.models import LightGBMLambdaRankModel\n",
"from src.training.config import TrainingConfig"
],
"outputs": [],
"execution_count": null
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 2. 辅助函数"
]
},
{
"cell_type": "code",
"metadata": {
"ExecuteTime": {
"end_time": "2026-03-09T16:28:20.005621Z",
"start_time": "2026-03-09T16:28:19.995941Z"
}
},
"source": [
"def create_factors_with_strings(engine: FactorEngine, factor_definitions: dict, label_factor: dict) -> List[str]:\n",
" \"\"\"使用字符串表达式注册因子\"\"\"\n",
" print(\"=\" * 80)\n",
" print(\"使用字符串表达式定义因子\")\n",
" print(\"=\" * 80)\n",
"\n",
" # 注册所有特征因子\n",
" print(\"\\n注册特征因子:\")\n",
" for name, expr in factor_definitions.items():\n",
" engine.add_factor(name, expr)\n",
" print(f\" - {name}: {expr}\")\n",
"\n",
" # 注册 label 因子\n",
" print(\"\\n注册 Label 因子:\")\n",
" for name, expr in label_factor.items():\n",
" engine.add_factor(name, expr)\n",
" print(f\" - {name}: {expr}\")\n",
"\n",
" # 从字典自动获取特征列\n",
" feature_cols = list(factor_definitions.keys())\n",
"\n",
" print(f\"\\n特征因子数: {len(feature_cols)}\")\n",
" print(f\"Label: {list(label_factor.keys())[0]}\")\n",
" print(f\"已注册因子总数: {len(engine.list_registered())}\")\n",
"\n",
" return feature_cols\n",
"\n",
"\n",
"def prepare_data(\n",
" engine: FactorEngine,\n",
" feature_cols: List[str],\n",
" start_date: str,\n",
" end_date: str,\n",
") -> pl.DataFrame:\n",
" \"\"\"准备数据\"\"\"\n",
" print(\"\\n\" + \"=\" * 80)\n",
" print(\"准备数据\")\n",
" print(\"=\" * 80)\n",
"\n",
" # 计算因子(全市场数据)\n",
" print(f\"\\n计算因子: {start_date} - {end_date}\")\n",
" factor_names = feature_cols + [LABEL_NAME] # 包含 label\n",
"\n",
" data = engine.compute(\n",
" factor_names=factor_names,\n",
" start_date=start_date,\n",
" end_date=end_date,\n",
" )\n",
"\n",
" print(f\"数据形状: {data.shape}\")\n",
" print(f\"数据列: {data.columns}\")\n",
" print(f\"\\n前5行预览:\")\n",
" print(data.head())\n",
"\n",
" return data\n",
"\n",
"\n",
"def prepare_ranking_data(\n",
" df: pl.DataFrame,\n",
" label_col: str = \"future_return_5\",\n",
" date_col: str = \"trade_date\",\n",
" n_quantiles: int = 20,\n",
") -> Tuple[pl.DataFrame, str]:\n",
" \"\"\"准备排序学习数据\n",
" \n",
" 将连续 label 转换为分位数标签,用于排序学习任务。\n",
" \n",
" Args:\n",
" df: 原始数据\n",
" label_col: 原始标签列名\n",
" date_col: 日期列名\n",
" n_quantiles: 分位数数量\n",
" \n",
" Returns:\n",
" (处理后的 DataFrame, 新的标签列名)\n",
" \"\"\"\n",
" print(\"\\n\" + \"=\" * 80)\n",
" print(f\"准备排序学习数据(将 {label_col} 转换为 {n_quantiles} 分位数标签)\")\n",
" print(\"=\" * 80)\n",
" \n",
" # 新的标签列名\n",
" rank_col = f\"{label_col}_rank\"\n",
" \n",
" # 按日期分组进行分位数划分\n",
" # 使用 rank 生成 0, 1, 2, ..., n_quantiles-1 的标签\n",
" # 方法: 计算每天内的排名,然后映射到 n_quantiles 个分位数组\n",
" df_ranked = df.with_columns(\n",
" # 计算每天内的排名 (1-based)\n",
" pl.col(label_col).rank(method=\"min\").over(date_col).alias(\"_rank\")\n",
" ).with_columns(\n",
" # 将排名转换为分位数标签 (0 to n_quantiles-1)\n",
" ((pl.col(\"_rank\") - 1) / pl.len().over(date_col) * n_quantiles)\n",
" .floor()\n",
" .cast(pl.Int64)\n",
" .clip(0, n_quantiles - 1)\n",
" .alias(rank_col)\n",
" ).drop(\"_rank\")\n",
" \n",
" # 检查转换结果\n",
" print(f\"\\n原始 {label_col} 统计:\")\n",
" print(df_ranked[label_col].describe())\n",
" \n",
" print(f\"\\n转换后 {rank_col} 统计:\")\n",
" print(df_ranked[rank_col].describe())\n",
" \n",
" # 检查每日样本分布\n",
" print(f\"\\n每日样本数统计:\")\n",
" daily_counts = df_ranked.group_by(date_col).agg(pl.count().alias(\"count\"))\n",
" print(daily_counts[\"count\"].describe())\n",
" \n",
" # 检查分位数分布(应该是均匀的)\n",
" print(f\"\\n分位数标签分布:\")\n",
" rank_dist = df_ranked[rank_col].value_counts().sort(rank_col)\n",
" print(rank_dist)\n",
" \n",
" return df_ranked, rank_col\n",
"\n",
"\n",
"def compute_group_array(df: pl.DataFrame, date_col: str = \"trade_date\") -> np.ndarray:\n",
" \"\"\"计算 group 数组用于 LambdaRank\n",
" \n",
" 每个日期作为一个 querygroup 数组表示每个 query 的样本数。\n",
" \n",
" Args:\n",
" df: 数据框\n",
" date_col: 日期列名\n",
" \n",
" Returns:\n",
" group 数组\n",
" \"\"\"\n",
" group_counts = df.group_by(date_col, maintain_order=True).agg(\n",
" pl.count().alias(\"count\")\n",
" )\n",
" return group_counts[\"count\"].to_numpy()\n",
"\n",
"\n",
"def evaluate_ndcg_at_k(\n",
" y_true: np.ndarray,\n",
" y_pred: np.ndarray,\n",
" group: np.ndarray,\n",
" k_list: List[int] = [1, 5, 10, 20],\n",
") -> dict:\n",
" \"\"\"计算 NDCG@k 指标\n",
" \n",
" Args:\n",
" y_true: 真实标签\n",
" y_pred: 预测分数\n",
" group: 分组数组\n",
" k_list: 要计算的 k 值列表\n",
" \n",
" Returns:\n",
" NDCG 指标字典\n",
" \"\"\"\n",
" results = {}\n",
" \n",
" # 按 group 拆分数据\n",
" start_idx = 0\n",
" y_true_groups = []\n",
" y_pred_groups = []\n",
" \n",
" for group_size in group:\n",
" end_idx = start_idx + group_size\n",
" y_true_groups.append(y_true[start_idx:end_idx])\n",
" y_pred_groups.append(y_pred[start_idx:end_idx])\n",
" start_idx = end_idx\n",
" \n",
" # 计算每个 k 值的平均 NDCG\n",
" for k in k_list:\n",
" ndcg_scores = []\n",
" for yt, yp in zip(y_true_groups, y_pred_groups):\n",
" if len(yt) > 1:\n",
" try:\n",
" score = ndcg_score([yt], [yp], k=k)\n",
" ndcg_scores.append(score)\n",
" except ValueError:\n",
" # 标签都相同,无法计算\n",
" pass\n",
" \n",
" results[f\"ndcg@{k}\"] = np.mean(ndcg_scores) if ndcg_scores else 0.0\n",
" \n",
" return results\n",
"\n",
"\n",
"def analyze_top_k_strategy(\n",
" df: pl.DataFrame,\n",
" prediction_col: str = \"prediction\",\n",
" return_col: str = \"future_return_5\",\n",
" date_col: str = \"trade_date\",\n",
" k_list: List[int] = [5, 10, 20],\n",
") -> dict:\n",
" \"\"\"分析 Top-k 选股策略表现\n",
" \n",
" Args:\n",
" df: 包含预测分数和真实收益的 DataFrame\n",
" prediction_col: 预测分数列名\n",
" return_col: 真实收益列名\n",
" date_col: 日期列名\n",
" k_list: 要分析的 k 值列表\n",
" \n",
" Returns:\n",
" 策略分析结果字典\n",
" \"\"\"\n",
" results = {}\n",
" \n",
" for k in k_list:\n",
" # 每日选择 Top-k 股票\n",
" daily_top_k = (\n",
" df.sort([date_col, prediction_col], descending=[False, True])\n",
" .group_by(date_col)\n",
" .head(k)\n",
" )\n",
" \n",
" # 计算每日平均收益\n",
" daily_returns = daily_top_k.group_by(date_col).agg(\n",
" pl.col(return_col).mean().alias(f\"top{k}_return\")\n",
" ).sort(date_col)\n",
" \n",
" # 计算累计收益\n",
" returns_array = daily_returns[f\"top{k}_return\"].to_numpy()\n",
" cumulative_returns = np.cumprod(1 + returns_array) - 1\n",
" \n",
" # 统计指标\n",
" results[f\"top{k}\"] = {\n",
" \"mean_daily_return\": np.mean(returns_array),\n",
" \"std_daily_return\": np.std(returns_array),\n",
" \"sharpe_ratio\": np.mean(returns_array) / (np.std(returns_array) + 1e-8) * np.sqrt(252),\n",
" \"total_return\": cumulative_returns[-1] if len(cumulative_returns) > 0 else 0,\n",
" \"cumulative_returns\": cumulative_returns,\n",
" \"dates\": daily_returns[date_col].to_list(),\n",
" }\n",
" \n",
" return results\n",
"\n",
"\n",
"def plot_strategy_performance(strategy_results: dict, save_path: Optional[str] = None):\n",
" \"\"\"绘制策略表现图\"\"\"\n",
" fig, axes = plt.subplots(2, 2, figsize=(14, 10))\n",
" \n",
" # 累计收益曲线\n",
" ax = axes[0, 0]\n",
" for name, result in strategy_results.items():\n",
" ax.plot(result[\"dates\"], result[\"cumulative_returns\"], label=name, linewidth=2)\n",
" ax.set_xlabel(\"Date\")\n",
" ax.set_ylabel(\"Cumulative Return\")\n",
" ax.set_title(\"Top-k Strategy Cumulative Returns\")\n",
" ax.legend()\n",
" ax.grid(True, alpha=0.3)\n",
" \n",
" # 日均收益对比\n",
" ax = axes[0, 1]\n",
" names = list(strategy_results.keys())\n",
" mean_returns = [strategy_results[n][\"mean_daily_return\"] for n in names]\n",
" ax.bar(names, mean_returns)\n",
" ax.set_ylabel(\"Mean Daily Return\")\n",
" ax.set_title(\"Mean Daily Return Comparison\")\n",
" ax.grid(True, alpha=0.3, axis=\"y\")\n",
" \n",
" # 夏普比率对比\n",
" ax = axes[1, 0]\n",
" sharpe_ratios = [strategy_results[n][\"sharpe_ratio\"] for n in names]\n",
" ax.bar(names, sharpe_ratios)\n",
" ax.set_ylabel(\"Sharpe Ratio\")\n",
" ax.set_title(\"Sharpe Ratio Comparison\")\n",
" ax.grid(True, alpha=0.3, axis=\"y\")\n",
" \n",
" # 总收益对比\n",
" ax = axes[1, 1]\n",
" total_returns = [strategy_results[n][\"total_return\"] for n in names]\n",
" ax.bar(names, total_returns)\n",
" ax.set_ylabel(\"Total Return\")\n",
" ax.set_title(\"Total Return Comparison\")\n",
" ax.grid(True, alpha=0.3, axis=\"y\")\n",
" \n",
" plt.tight_layout()\n",
" \n",
" if save_path:\n",
" plt.savefig(save_path, dpi=300, bbox_inches=\"tight\")\n",
" \n",
" plt.show()"
],
"outputs": [],
"execution_count": 2
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 3. 配置参数\n",
"\n",
"### 3.1 因子定义"
]
},
{
"cell_type": "code",
"metadata": {
"ExecuteTime": {
"end_time": "2026-03-09T16:28:20.017203Z",
"start_time": "2026-03-09T16:28:20.009432Z"
}
},
"source": [
"# 特征因子定义字典(复用 regression.ipynb 的因子定义)\n",
"LABEL_NAME = \"future_return_5_rank\"\n",
"\n",
"FACTOR_DEFINITIONS = {\n",
" # ================= 1. 价格、趋势与路径依赖 (Trend, Momentum & Path Dependency) =================\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\",\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) + 1e-8)) - 1\",\n",
" \"return_20\": \"(close / (ts_delay(close, 20) + 1e-8)) - 1\",\n",
" \"kaufman_ER_20\": \"abs(close - ts_delay(close, 20)) / (ts_sum(abs(close - ts_delay(close, 1)), 20) + 1e-8)\",\n",
" \"mom_acceleration_10_20\": \"(close / (ts_delay(close, 10) + 1e-8) - 1) - (ts_delay(close, 10) / (ts_delay(close, 20) + 1e-8) - 1)\",\n",
" \"drawdown_from_high_60\": \"close / (ts_max(high, 60) + 1e-8) - 1\",\n",
" \"up_days_ratio_20\": \"ts_sum(close > ts_delay(close, 1), 20) / 20\",\n",
"\n",
" # ================= 2. 波动率、风险调整与高阶矩 =================\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_20\": \"ts_std((close / (ts_delay(close, 1) + 1e-8)) - 1, 20)\",\n",
" \"sharpe_ratio_20\": \"ts_mean(close / (ts_delay(close, 1) + 1e-8) - 1, 20) / (ts_std(close / (ts_delay(close, 1) + 1e-8) - 1, 20) + 1e-8)\",\n",
" \"min_ret_20\": \"ts_min(close / (ts_delay(close, 1) + 1e-8) - 1, 20)\",\n",
" \"volatility_squeeze_5_60\": \"ts_std(close, 5) / (ts_std(close, 60) + 1e-8)\",\n",
"\n",
" # ================= 3. 日内微观结构与异象 =================\n",
" \"overnight_intraday_diff\": \"(open / (ts_delay(close, 1) + 1e-8) - 1) - (close / (open + 1e-8) - 1)\",\n",
" \"upper_shadow_ratio\": \"(high - ((open + close + abs(open - close)) / 2)) / (high - low + 1e-8)\",\n",
" \"capital_retention_20\": \"ts_sum(abs(close - open), 20) / (ts_sum(high - low, 20) + 1e-8)\",\n",
" \"max_ret_20\": \"ts_max(close / (ts_delay(close, 1) + 1e-8) - 1, 20)\",\n",
"\n",
" # ================= 4. 量能、流动性与量价背离 =================\n",
" \"volume_ratio_5_20\": \"ts_mean(vol, 5) / (ts_mean(vol, 20) + 1e-8)\",\n",
" \"turnover_rate_mean_5\": \"ts_mean(turnover_rate, 5)\",\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) + 1e-8) - 1) / (amount + 1e-8), 20)\",\n",
" \"turnover_cv_20\": \"ts_std(turnover_rate, 20) / (ts_mean(turnover_rate, 20) + 1e-8)\",\n",
" \"pv_corr_20\": \"ts_corr(close / (ts_delay(close, 1) + 1e-8) - 1, vol, 20)\",\n",
" \"close_vwap_deviation\": \"close / (amount / (vol * 100 + 1e-8) + 1e-8) - 1\",\n",
"\n",
" # ================= 5. 基本面财务特征 =================\n",
" \"roe\": \"n_income / (total_hldr_eqy_exc_min_int + 1e-8)\",\n",
" \"roa\": \"n_income / (total_assets + 1e-8)\",\n",
" \"profit_margin\": \"n_income / (revenue + 1e-8)\",\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",
" \"net_profit_yoy\": \"(n_income / (ts_delay(n_income, 252) + 1e-8)) - 1\",\n",
" \"revenue_yoy\": \"(revenue / (ts_delay(revenue, 252) + 1e-8)) - 1\",\n",
" \"healthy_expansion_velocity\": \"(total_assets / (ts_delay(total_assets, 252) + 1e-8) - 1) - (total_liab / (ts_delay(total_liab, 252) + 1e-8) - 1)\",\n",
"\n",
" # ================= 6. 基本面估值与截面动量共振 =================\n",
" \"EP\": \"n_income / (total_mv * 10000 + 1e-8)\",\n",
" \"BP\": \"total_hldr_eqy_exc_min_int / (total_mv * 10000 + 1e-8)\",\n",
" \"CP\": \"n_cashflow_act / (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) + 1e-8)) - 1)\",\n",
" \"EP_rank\": \"cs_rank(n_income / (total_mv + 1e-8))\",\n",
" \"pe_expansion_trend\": \"(total_mv / (n_income + 1e-8)) / (ts_delay(total_mv, 60) / (ts_delay(n_income, 60) + 1e-8) + 1e-8) - 1\",\n",
" \"value_price_divergence\": \"cs_rank((n_income - ts_delay(n_income, 252)) / (abs(ts_delay(n_income, 252)) + 1e-8)) - cs_rank(close / (ts_delay(close, 20) + 1e-8))\",\n",
" \"active_market_cap\": \"total_mv * ts_mean(turnover_rate, 20)\",\n",
" \"ebit_rank\": \"cs_rank(ebit)\",\n",
"}\n",
"\n",
"# Label 因子定义(不参与训练,用于计算目标)\n",
"LABEL_FACTOR = {\n",
" LABEL_NAME: \"(ts_delay(close, -5) / ts_delay(open, -1)) - 1\",\n",
"}"
],
"outputs": [],
"execution_count": 3
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 3.2 训练参数配置"
]
},
{
"cell_type": "code",
"metadata": {
"ExecuteTime": {
"end_time": "2026-03-09T16:28:20.025233Z",
"start_time": "2026-03-09T16:28:20.020941Z"
}
},
"source": [
"# 日期范围配置(正确的 train/val/test 三分法)\n",
"TRAIN_START = \"20200101\"\n",
"TRAIN_END = \"20231231\"\n",
"VAL_START = \"20240101\"\n",
"VAL_END = \"20241231\"\n",
"TEST_START = \"20250101\"\n",
"TEST_END = \"20261231\"\n",
"\n",
"# LambdaRank 模型参数配置\n",
"MODEL_PARAMS = {\n",
" \"objective\": \"lambdarank\",\n",
" \"metric\": \"ndcg\",\n",
" \"ndcg_at\": [1, 5, 10, 20], # 评估 NDCG@k\n",
" \"learning_rate\": 0.05,\n",
" \"num_leaves\": 31,\n",
" \"max_depth\": 6,\n",
" \"min_data_in_leaf\": 20,\n",
" \"n_estimators\": 1000,\n",
" \"early_stopping_rounds\": 50,\n",
" \"subsample\": 0.8,\n",
" \"colsample_bytree\": 0.8,\n",
" \"reg_alpha\": 0.1,\n",
" \"reg_lambda\": 1.0,\n",
" \"verbose\": -1,\n",
" \"random_state\": 42,\n",
"}\n",
"\n",
"# 分位数配置\n",
"N_QUANTILES = 20 # 将 label 分为 20 组\n",
"\n",
"# 特征列(用于数据处理器)\n",
"FEATURE_COLS = list(FACTOR_DEFINITIONS.keys())\n",
"\n",
"# 数据处理器配置\n",
"PROCESSORS = [\n",
" NullFiller(feature_cols=FEATURE_COLS, strategy=\"mean\"),\n",
" Winsorizer(feature_cols=FEATURE_COLS, lower=0.01, upper=0.99),\n",
" StandardScaler(feature_cols=FEATURE_COLS),\n",
"]\n",
"\n",
"# 股票池筛选函数\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",
" 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",
" 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",
" return df[\"ts_code\"].is_in(small_cap_codes)\n",
"\n",
"STOCK_FILTER_REQUIRED_COLUMNS = [\"total_mv\"]\n",
"\n",
"# 输出配置\n",
"OUTPUT_DIR = \"output\"\n",
"SAVE_PREDICTIONS = True\n",
"PERSIST_MODEL = False\n",
"\n",
"# Top N 配置:每日推荐股票数量\n",
"TOP_N = 5 # 可调整为 10, 20 等"
],
"outputs": [],
"execution_count": 4
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 4. 训练流程"
]
},
{
"cell_type": "code",
"metadata": {
"ExecuteTime": {
"end_time": "2026-03-09T16:28:43.241056Z",
"start_time": "2026-03-09T16:28:20.030078Z"
}
},
"source": [
"print(\"\\n\" + \"=\" * 80)\n",
"print(\"LightGBM LambdaRank 排序学习训练\")\n",
"print(\"=\" * 80)\n",
"\n",
"# 1. 创建 FactorEngine\n",
"print(\"\\n[1] 创建 FactorEngine\")\n",
"engine = FactorEngine()\n",
"\n",
"# 2. 使用字符串表达式定义因子\n",
"print(\"\\n[2] 定义因子(字符串表达式)\")\n",
"feature_cols = create_factors_with_strings(engine, FACTOR_DEFINITIONS, LABEL_FACTOR)\n",
"\n",
"# 3. 准备数据\n",
"print(\"\\n[3] 准备数据\")\n",
"data = prepare_data(\n",
" engine=engine,\n",
" feature_cols=feature_cols,\n",
" start_date=TRAIN_START,\n",
" end_date=TEST_END,\n",
")\n",
"\n",
"# 4. 转换为排序学习格式(分位数标签)\n",
"print(\"\\n[4] 转换为排序学习格式\")\n",
"data, target_col = prepare_ranking_data(\n",
" df=data,\n",
" label_col=LABEL_NAME,\n",
" n_quantiles=N_QUANTILES,\n",
")\n",
"\n",
"# 5. 打印配置信息\n",
"print(f\"\\n[配置] 训练期: {TRAIN_START} - {TRAIN_END}\")\n",
"print(f\"[配置] 验证期: {VAL_START} - {VAL_END}\")\n",
"print(f\"[配置] 测试期: {TEST_START} - {TEST_END}\")\n",
"print(f\"[配置] 特征数: {len(feature_cols)}\")\n",
"print(f\"[配置] 目标变量: {target_col}{N_QUANTILES}分位数)\")\n",
"\n",
"# 6. 创建排序学习模型\n",
"model = LightGBMLambdaRankModel(params=MODEL_PARAMS)\n",
"\n",
"# 7. 创建数据处理器\n",
"processors = PROCESSORS\n",
"\n",
"# 8. 创建数据划分器\n",
"splitter = DateSplitter(\n",
" train_start=TRAIN_START,\n",
" train_end=TRAIN_END,\n",
" val_start=VAL_START,\n",
" val_end=VAL_END,\n",
" test_start=TEST_START,\n",
" test_end=TEST_END,\n",
")\n",
"\n",
"# 9. 创建股票池管理器\n",
"pool_manager = StockPoolManager(\n",
" filter_func=stock_pool_filter,\n",
" required_columns=STOCK_FILTER_REQUIRED_COLUMNS,\n",
" data_router=engine.router,\n",
")\n",
"\n",
"# 10. 创建 ST 过滤器\n",
"st_filter = STFilter(data_router=engine.router)\n",
"\n",
"# 11. 创建训练器\n",
"trainer = Trainer(\n",
" model=model,\n",
" pool_manager=pool_manager,\n",
" processors=processors,\n",
" filters=[st_filter],\n",
" splitter=splitter,\n",
" target_col=target_col,\n",
" feature_cols=feature_cols,\n",
" persist_model=PERSIST_MODEL,\n",
")"
],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"================================================================================\n",
"LightGBM LambdaRank 排序学习训练\n",
"================================================================================\n",
"\n",
"[1] 创建 FactorEngine\n",
"\n",
"[2] 定义因子(字符串表达式)\n",
"================================================================================\n",
"使用字符串表达式定义因子\n",
"================================================================================\n",
"\n",
"注册特征因子:\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\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) + 1e-8)) - 1\n",
" - return_20: (close / (ts_delay(close, 20) + 1e-8)) - 1\n",
" - kaufman_ER_20: abs(close - ts_delay(close, 20)) / (ts_sum(abs(close - ts_delay(close, 1)), 20) + 1e-8)\n",
" - mom_acceleration_10_20: (close / (ts_delay(close, 10) + 1e-8) - 1) - (ts_delay(close, 10) / (ts_delay(close, 20) + 1e-8) - 1)\n",
" - drawdown_from_high_60: close / (ts_max(high, 60) + 1e-8) - 1\n",
" - up_days_ratio_20: ts_sum(close > ts_delay(close, 1), 20) / 20\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_20: ts_std((close / (ts_delay(close, 1) + 1e-8)) - 1, 20)\n",
" - sharpe_ratio_20: ts_mean(close / (ts_delay(close, 1) + 1e-8) - 1, 20) / (ts_std(close / (ts_delay(close, 1) + 1e-8) - 1, 20) + 1e-8)\n",
" - min_ret_20: ts_min(close / (ts_delay(close, 1) + 1e-8) - 1, 20)\n",
" - volatility_squeeze_5_60: ts_std(close, 5) / (ts_std(close, 60) + 1e-8)\n",
" - overnight_intraday_diff: (open / (ts_delay(close, 1) + 1e-8) - 1) - (close / (open + 1e-8) - 1)\n",
" - upper_shadow_ratio: (high - ((open + close + abs(open - close)) / 2)) / (high - low + 1e-8)\n",
" - capital_retention_20: ts_sum(abs(close - open), 20) / (ts_sum(high - low, 20) + 1e-8)\n",
" - max_ret_20: ts_max(close / (ts_delay(close, 1) + 1e-8) - 1, 20)\n",
" - volume_ratio_5_20: ts_mean(vol, 5) / (ts_mean(vol, 20) + 1e-8)\n",
" - turnover_rate_mean_5: ts_mean(turnover_rate, 5)\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) + 1e-8) - 1) / (amount + 1e-8), 20)\n",
" - turnover_cv_20: ts_std(turnover_rate, 20) / (ts_mean(turnover_rate, 20) + 1e-8)\n",
" - pv_corr_20: ts_corr(close / (ts_delay(close, 1) + 1e-8) - 1, vol, 20)\n",
" - close_vwap_deviation: close / (amount / (vol * 100 + 1e-8) + 1e-8) - 1\n",
" - roe: n_income / (total_hldr_eqy_exc_min_int + 1e-8)\n",
" - roa: n_income / (total_assets + 1e-8)\n",
" - profit_margin: n_income / (revenue + 1e-8)\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",
" - net_profit_yoy: (n_income / (ts_delay(n_income, 252) + 1e-8)) - 1\n",
" - revenue_yoy: (revenue / (ts_delay(revenue, 252) + 1e-8)) - 1\n",
" - healthy_expansion_velocity: (total_assets / (ts_delay(total_assets, 252) + 1e-8) - 1) - (total_liab / (ts_delay(total_liab, 252) + 1e-8) - 1)\n",
" - EP: n_income / (total_mv * 10000 + 1e-8)\n",
" - BP: total_hldr_eqy_exc_min_int / (total_mv * 10000 + 1e-8)\n",
" - CP: n_cashflow_act / (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) + 1e-8)) - 1)\n",
" - EP_rank: cs_rank(n_income / (total_mv + 1e-8))\n",
" - pe_expansion_trend: (total_mv / (n_income + 1e-8)) / (ts_delay(total_mv, 60) / (ts_delay(n_income, 60) + 1e-8) + 1e-8) - 1\n",
" - value_price_divergence: cs_rank((n_income - ts_delay(n_income, 252)) / (abs(ts_delay(n_income, 252)) + 1e-8)) - cs_rank(close / (ts_delay(close, 20) + 1e-8))\n",
" - active_market_cap: total_mv * ts_mean(turnover_rate, 20)\n",
" - ebit_rank: cs_rank(ebit)\n",
"\n",
"注册 Label 因子:\n",
" - future_return_5_rank: (ts_delay(close, -5) / ts_delay(open, -1)) - 1\n",
"\n",
"特征因子数: 49\n",
"Label: future_return_5_rank\n",
"已注册因子总数: 50\n",
"\n",
"[3] 准备数据\n",
"\n",
"================================================================================\n",
"准备数据\n",
"================================================================================\n",
"\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, 70)\n",
"数据列: ['ts_code', 'trade_date', 'low', 'open', 'high', 'turnover_rate', 'vol', 'close', 'amount', 'total_assets', 'total_mv', 'f_ann_date', 'total_liab', 'total_cur_liab', 'total_hldr_eqy_exc_min_int', 'total_cur_assets', 'n_income', 'revenue', 'n_cashflow_act', 'ebit', 'ma_5', 'ma_20', 'ma_ratio_5_20', 'bias_10', 'high_low_ratio', 'bbi_ratio', 'return_5', 'return_20', 'kaufman_ER_20', 'mom_acceleration_10_20', 'drawdown_from_high_60', 'up_days_ratio_20', 'volatility_5', 'volatility_20', 'volatility_ratio', 'std_return_20', 'sharpe_ratio_20', 'min_ret_20', 'volatility_squeeze_5_60', 'overnight_intraday_diff', 'upper_shadow_ratio', 'capital_retention_20', 'max_ret_20', 'volume_ratio_5_20', 'turnover_rate_mean_5', 'turnover_deviation', 'amihud_illiq_20', 'turnover_cv_20', 'pv_corr_20', 'close_vwap_deviation', 'roe', 'roa', 'profit_margin', 'debt_to_equity', 'current_ratio', 'net_profit_yoy', 'revenue_yoy', 'healthy_expansion_velocity', 'EP', 'BP', 'CP', 'market_cap_rank', 'turnover_rank', 'return_5_rank', 'EP_rank', 'pe_expansion_trend', 'value_price_divergence', 'active_market_cap', 'ebit_rank', 'future_return_5_rank']\n",
"\n",
"前5行预览:\n",
"shape: (5, 70)\n",
"┌───────────┬────────────┬─────────┬─────────┬───┬────────────┬────────────┬───────────┬───────────┐\n",
"│ ts_code ┆ trade_date ┆ low ┆ open ┆ … ┆ value_pric ┆ active_mar ┆ ebit_rank ┆ future_re │\n",
"│ --- ┆ --- ┆ --- ┆ --- ┆ ┆ e_divergen ┆ ket_cap ┆ --- ┆ turn_5_ra │\n",
"│ str ┆ str ┆ f64 ┆ f64 ┆ ┆ ce ┆ --- ┆ f64 ┆ nk │\n",
"│ ┆ ┆ ┆ ┆ ┆ --- ┆ f64 ┆ ┆ --- │\n",
"│ ┆ ┆ ┆ ┆ ┆ f64 ┆ ┆ ┆ f64 │\n",
"╞═══════════╪════════════╪═════════╪═════════╪═══╪════════════╪════════════╪═══════════╪═══════════╡\n",
"│ 000001.SZ ┆ 20200102 ┆ 1806.75 ┆ 1817.67 ┆ … ┆ null ┆ null ┆ null ┆ -0.008857 │\n",
"│ 000001.SZ ┆ 20200103 ┆ 1847.15 ┆ 1849.33 ┆ … ┆ null ┆ null ┆ null ┆ -0.01881 │\n",
"│ 000001.SZ ┆ 20200106 ┆ 1846.05 ┆ 1856.97 ┆ … ┆ null ┆ null ┆ null ┆ -0.008171 │\n",
"│ 000001.SZ ┆ 20200107 ┆ 1850.42 ┆ 1870.07 ┆ … ┆ null ┆ null ┆ null ┆ -0.014117 │\n",
"│ 000001.SZ ┆ 20200108 ┆ 1815.49 ┆ 1855.88 ┆ … ┆ null ┆ null ┆ null ┆ -0.017252 │\n",
"└───────────┴────────────┴─────────┴─────────┴───┴────────────┴────────────┴───────────┴───────────┘\n",
"\n",
"[4] 转换为排序学习格式\n",
"\n",
"================================================================================\n",
"准备排序学习数据(将 future_return_5_rank 转换为 20 分位数标签)\n",
"================================================================================\n",
"\n",
"原始 future_return_5_rank 统计:\n",
"shape: (9, 2)\n",
"┌────────────┬────────────┐\n",
"│ statistic ┆ value │\n",
"│ --- ┆ --- │\n",
"│ str ┆ f64 │\n",
"╞════════════╪════════════╡\n",
"│ count ┆ 7.227054e6 │\n",
"│ null_count ┆ 28459.0 │\n",
"│ mean ┆ 0.003978 │\n",
"│ std ┆ 0.073204 │\n",
"│ min ┆ -0.969459 │\n",
"│ 25% ┆ -0.032998 │\n",
"│ 50% ┆ -0.001278 │\n",
"│ 75% ┆ 0.032666 │\n",
"│ max ┆ 10.361925 │\n",
"└────────────┴────────────┘\n",
"\n",
"转换后 future_return_5_rank_rank 统计:\n",
"shape: (9, 2)\n",
"┌────────────┬────────────┐\n",
"│ statistic ┆ value │\n",
"│ --- ┆ --- │\n",
"│ str ┆ f64 │\n",
"╞════════════╪════════════╡\n",
"│ count ┆ 7.227054e6 │\n",
"│ null_count ┆ 28459.0 │\n",
"│ mean ┆ 9.493551 │\n",
"│ std ┆ 5.765628 │\n",
"│ min ┆ 0.0 │\n",
"│ 25% ┆ 4.0 │\n",
"│ 50% ┆ 9.0 │\n",
"│ 75% ┆ 14.0 │\n",
"│ max ┆ 19.0 │\n",
"└────────────┴────────────┘\n",
"\n",
"每日样本数统计:\n",
"shape: (9, 2)\n",
"┌────────────┬─────────────┐\n",
"│ statistic ┆ value │\n",
"│ --- ┆ --- │\n",
"│ str ┆ f64 │\n",
"╞════════════╪═════════════╡\n",
"│ count ┆ 1494.0 │\n",
"│ null_count ┆ 0.0 │\n",
"│ mean ┆ 4856.434404 │\n",
"│ std ┆ 564.521537 │\n",
"│ min ┆ 2885.0 │\n",
"│ 25% ┆ 4382.0 │\n",
"│ 50% ┆ 5069.0 │\n",
"│ 75% ┆ 5347.0 │\n",
"│ max ┆ 5476.0 │\n",
"└────────────┴─────────────┘\n",
"\n",
"分位数标签分布:\n",
"shape: (21, 2)\n",
"┌───────────────────────────┬────────┐\n",
"│ future_return_5_rank_rank ┆ count │\n",
"│ --- ┆ --- │\n",
"│ i64 ┆ u32 │\n",
"╞═══════════════════════════╪════════╡\n",
"│ null ┆ 28459 │\n",
"│ 0 ┆ 362270 │\n",
"│ 1 ┆ 361546 │\n",
"│ 2 ┆ 361599 │\n",
"│ 3 ┆ 361755 │\n",
"│ … ┆ … │\n",
"│ 15 ┆ 361289 │\n",
"│ 16 ┆ 361218 │\n",
"│ 17 ┆ 361227 │\n",
"│ 18 ┆ 361252 │\n",
"│ 19 ┆ 359483 │\n",
"└───────────────────────────┴────────┘\n",
"\n",
"[配置] 训练期: 20200101 - 20231231\n",
"[配置] 验证期: 20240101 - 20241231\n",
"[配置] 测试期: 20250101 - 20261231\n",
"[配置] 特征数: 49\n",
"[配置] 目标变量: future_return_5_rank_rank20分位数\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\liaozhaorun\\AppData\\Local\\Temp\\ipykernel_8380\\3149203115.py:108: DeprecationWarning: `pl.count()` is deprecated. Please use `pl.len()` instead.\n",
"(Deprecated in version 0.20.5)\n",
" daily_counts = df_ranked.group_by(date_col).agg(pl.count().alias(\"count\"))\n"
]
}
],
"execution_count": 5
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 4.1 股票池筛选"
]
},
{
"cell_type": "code",
"metadata": {
"ExecuteTime": {
"end_time": "2026-03-09T16:28:46.756857Z",
"start_time": "2026-03-09T16:28:43.247911Z"
}
},
"source": [
"print(\"\\n\" + \"=\" * 80)\n",
"print(\"股票池筛选\")\n",
"print(\"=\" * 80)\n",
"\n",
"if pool_manager:\n",
" print(\"\\n执行每日独立筛选股票池...\")\n",
" filtered_data = pool_manager.filter_and_select_daily(data)\n",
" print(f\" 筛选前数据规模: {data.shape}\")\n",
" print(f\" 筛选后数据规模: {filtered_data.shape}\")\n",
" print(f\" 筛选前股票数: {data['ts_code'].n_unique()}\")\n",
" print(f\" 筛选后股票数: {filtered_data['ts_code'].n_unique()}\")\n",
" print(f\" 删除记录数: {len(data) - len(filtered_data)}\")\n",
"else:\n",
" filtered_data = data\n",
" print(\" 未配置股票池管理器,跳过筛选\")"
],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"================================================================================\n",
"股票池筛选\n",
"================================================================================\n",
"\n",
"执行每日独立筛选股票池...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\liaozhaorun\\AppData\\Local\\Temp\\ipykernel_8380\\653304.py:63: 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, 71)\n",
" 筛选后数据规模: (1494000, 71)\n",
" 筛选前股票数: 5694\n",
" 筛选后股票数: 2252\n",
" 删除记录数: 5761513\n"
]
}
],
"execution_count": 6
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 4.2 数据划分"
]
},
{
"cell_type": "code",
"metadata": {
"ExecuteTime": {
"end_time": "2026-03-09T16:28:46.849944Z",
"start_time": "2026-03-09T16:28:46.764139Z"
}
},
"source": [
"print(\"\\n\" + \"=\" * 80)\n",
"print(\"数据划分\")\n",
"print(\"=\" * 80)\n",
"\n",
"if splitter:\n",
" train_data, val_data, test_data = splitter.split(filtered_data)\n",
" print(f\"\\n训练集数据规模: {train_data.shape}\")\n",
" print(f\"验证集数据规模: {val_data.shape}\")\n",
" print(f\"测试集数据规模: {test_data.shape}\")\n",
" \n",
" # 计算各集的 group 数组\n",
" train_group = compute_group_array(train_data)\n",
" val_group = compute_group_array(val_data)\n",
" test_group = compute_group_array(test_data)\n",
" \n",
" print(f\"\\n训练集 group 数量: {len(train_group)}\")\n",
" print(f\"验证集 group 数量: {len(val_group)}\")\n",
" print(f\"测试集 group 数量: {len(test_group)}\")\n",
" print(f\"训练集日均样本数: {np.mean(train_group):.1f}\")\n",
" print(f\"验证集日均样本数: {np.mean(val_group):.1f}\")\n",
" print(f\"测试集日均样本数: {np.mean(test_group):.1f}\")\n",
"else:\n",
" raise ValueError(\"必须配置数据划分器\")"
],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"================================================================================\n",
"数据划分\n",
"================================================================================\n",
"\n",
"训练集数据规模: (970000, 71)\n",
"验证集数据规模: (242000, 71)\n",
"测试集数据规模: (282000, 71)\n",
"\n",
"训练集 group 数量: 970\n",
"验证集 group 数量: 242\n",
"测试集 group 数量: 282\n",
"训练集日均样本数: 1000.0\n",
"验证集日均样本数: 1000.0\n",
"测试集日均样本数: 1000.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\liaozhaorun\\AppData\\Local\\Temp\\ipykernel_8380\\3149203115.py:132: DeprecationWarning: `pl.count()` is deprecated. Please use `pl.len()` instead.\n",
"(Deprecated in version 0.20.5)\n",
" pl.count().alias(\"count\")\n"
]
}
],
"execution_count": 7
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 4.3 数据预处理"
]
},
{
"cell_type": "code",
"metadata": {
"ExecuteTime": {
"end_time": "2026-03-09T16:28:47.385207Z",
"start_time": "2026-03-09T16:28:46.854611Z"
}
},
"source": [
"print(\"\\n\" + \"=\" * 80)\n",
"print(\"数据预处理\")\n",
"print(\"=\" * 80)\n",
"\n",
"fitted_processors = []\n",
"if processors:\n",
" print(\"\\n训练集处理...\")\n",
" for i, processor in enumerate(processors, 1):\n",
" print(f\" [{i}/{len(processors)}] {processor.__class__.__name__}\")\n",
" train_data = processor.fit_transform(train_data)\n",
" fitted_processors.append(processor)\n",
" \n",
" print(\"\\n验证集处理...\")\n",
" for processor in fitted_processors:\n",
" val_data = processor.transform(val_data)\n",
" \n",
" print(\"\\n测试集处理...\")\n",
" for processor in fitted_processors:\n",
" test_data = processor.transform(test_data)\n",
"\n",
"print(f\"\\n处理后训练集形状: {train_data.shape}\")\n",
"print(f\"处理后验证集形状: {val_data.shape}\")\n",
"print(f\"处理后测试集形状: {test_data.shape}\")"
],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"================================================================================\n",
"数据预处理\n",
"================================================================================\n",
"\n",
"训练集处理...\n",
" [1/3] NullFiller\n",
" [2/3] Winsorizer\n",
" [3/3] StandardScaler\n",
"\n",
"验证集处理...\n",
"\n",
"测试集处理...\n",
"\n",
"处理后训练集形状: (970000, 71)\n",
"处理后验证集形状: (242000, 71)\n",
"处理后测试集形状: (282000, 71)\n"
]
}
],
"execution_count": 8
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 4.4 训练 LambdaRank 模型"
]
},
{
"cell_type": "code",
"metadata": {
"ExecuteTime": {
"end_time": "2026-03-09T16:28:49.943341Z",
"start_time": "2026-03-09T16:28:47.393354Z"
}
},
"source": [
"print(\"\\n\" + \"=\" * 80)\n",
"print(\"训练 LambdaRank 模型\")\n",
"print(\"=\" * 80)\n",
"\n",
"# 准备数据\n",
"X_train = train_data.select(feature_cols)\n",
"y_train = train_data.select(target_col).to_series()\n",
"\n",
"X_val = val_data.select(feature_cols)\n",
"y_val = val_data.select(target_col).to_series()\n",
"\n",
"print(f\"\\n训练样本数: {len(X_train)}\")\n",
"print(f\"验证样本数: {len(X_val)}\")\n",
"print(f\"特征数: {len(feature_cols)}\")\n",
"print(f\"目标变量: {target_col}\")\n",
"\n",
"print(\"\\n目标变量统计训练集:\")\n",
"print(y_train.describe())\n",
"\n",
"print(\"\\n开始训练...\")\n",
"model.fit(\n",
" X=X_train,\n",
" y=y_train,\n",
" group=train_group,\n",
" eval_set=(X_val, y_val, val_group),\n",
")\n",
"print(\"训练完成!\")"
],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"================================================================================\n",
"训练 LambdaRank 模型\n",
"================================================================================\n",
"\n",
"训练样本数: 970000\n",
"验证样本数: 242000\n",
"特征数: 49\n",
"目标变量: future_return_5_rank_rank\n",
"\n",
"目标变量统计(训练集):\n",
"shape: (9, 2)\n",
"┌────────────┬──────────┐\n",
"│ statistic ┆ value │\n",
"│ --- ┆ --- │\n",
"│ str ┆ f64 │\n",
"╞════════════╪══════════╡\n",
"│ count ┆ 969536.0 │\n",
"│ null_count ┆ 464.0 │\n",
"│ mean ┆ 9.821 │\n",
"│ std ┆ 5.444634 │\n",
"│ min ┆ 0.0 │\n",
"│ 25% ┆ 5.0 │\n",
"│ 50% ┆ 10.0 │\n",
"│ 75% ┆ 14.0 │\n",
"│ max ┆ 19.0 │\n",
"└────────────┴──────────┘\n",
"\n",
"开始训练...\n",
"Training until validation scores don't improve for 50 rounds\n",
"Early stopping, best iteration is:\n",
"[48]\ttraining's ndcg@1: 0.516707\ttraining's ndcg@5: 0.393291\ttraining's ndcg@10: 0.328332\ttraining's ndcg@20: 0.274341\tvalid_1's ndcg@1: 0.401918\tvalid_1's ndcg@5: 0.342001\tvalid_1's ndcg@10: 0.310652\tvalid_1's ndcg@20: 0.268765\n",
"训练完成!\n"
]
}
],
"execution_count": 9
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 4.5 训练指标曲线"
]
},
{
"cell_type": "code",
"metadata": {},
"source": [
"print(\"\\n\" + \"=\" * 80)\n",
"print(\"训练指标曲线\")\n",
"print(\"=\" * 80)\n",
"\n",
"# 重新训练以收集指标(因为之前的训练没有保存评估结果)\n",
"print(\"\\n重新训练模型以收集训练指标...\")\n",
"\n",
"import lightgbm as lgb\n",
"\n",
"# 准备数据(使用 val 做验证test 不参与训练过程)\n",
"X_train_np = X_train.to_numpy()\n",
"y_train_np = y_train.to_numpy()\n",
"X_val_np = val_data.select(feature_cols).to_numpy()\n",
"y_val_np = val_data.select(target_col).to_series().to_numpy()\n",
"\n",
"# 创建数据集\n",
"train_dataset = lgb.Dataset(X_train_np, label=y_train_np, group=train_group)\n",
"val_dataset = lgb.Dataset(X_val_np, label=y_val_np, group=val_group, reference=train_dataset)\n",
"\n",
"# 用于存储评估结果\n",
"evals_result = {}\n",
"\n",
"# 使用与原模型相同的参数重新训练\n",
"# 正确的三分法train用于训练val用于验证test不参与训练过程\n",
"booster_with_eval = lgb.train(\n",
" MODEL_PARAMS,\n",
" train_dataset,\n",
" num_boost_round=MODEL_PARAMS.get(\"n_estimators\", 1000),\n",
" valid_sets=[train_dataset, val_dataset],\n",
" valid_names=[\"train\", \"val\"],\n",
" callbacks=[\n",
" lgb.record_evaluation(evals_result),\n",
" lgb.early_stopping(stopping_rounds=50, verbose=True),\n",
" ],\n",
")\n",
"\n",
"print(\"训练完成,指标已收集\")\n",
"\n",
"# 获取评估的 NDCG 指标\n",
"ndcg_metrics = [k for k in evals_result[\"train\"].keys() if \"ndcg\" in k]\n",
"print(f\"\\n评估的 NDCG 指标: {ndcg_metrics}\")\n",
"\n",
"# 显示早停信息\n",
"actual_rounds = len(list(evals_result[\"train\"].values())[0])\n",
"expected_rounds = MODEL_PARAMS.get(\"n_estimators\", 1000)\n",
"print(f\"\\n[早停信息]\")\n",
"print(f\" 配置的最大轮数: {expected_rounds}\")\n",
"print(f\" 实际训练轮数: {actual_rounds}\")\n",
"if actual_rounds < expected_rounds:\n",
" print(f\" 早停状态: 已触发连续50轮验证指标未改善\")\n",
"else:\n",
" print(f\" 早停状态: 未触发(达到最大轮数)\")\n",
"\n",
"# 显示各 NDCG 指标的最终值\n",
"print(f\"\\n最终 NDCG 指标:\")\n",
"for metric in ndcg_metrics:\n",
" train_ndcg = evals_result[\"train\"][metric][-1]\n",
" val_ndcg = evals_result[\"val\"][metric][-1]\n",
" print(f\" {metric}: 训练集={train_ndcg:.4f}, 验证集={val_ndcg:.4f}\")"
],
"outputs": [],
"execution_count": null
},
{
"cell_type": "code",
"metadata": {},
"source": [
"# 绘制 NDCG 训练指标曲线\n",
"import matplotlib.pyplot as plt\n",
"\n",
"fig, axes = plt.subplots(2, 2, figsize=(14, 10))\n",
"axes = axes.flatten()\n",
"\n",
"for idx, metric in enumerate(ndcg_metrics[:4]): # 最多显示4个NDCG指标\n",
" ax = axes[idx]\n",
" train_metric = evals_result[\"train\"][metric]\n",
" val_metric = evals_result[\"val\"][metric]\n",
" iterations = range(1, len(train_metric) + 1)\n",
" \n",
" ax.plot(iterations, train_metric, label=f\"Train {metric}\", linewidth=2, color=\"blue\")\n",
" ax.plot(iterations, val_metric, label=f\"Val {metric}\", linewidth=2, color=\"red\")\n",
" ax.set_xlabel(\"Iteration\", fontsize=10)\n",
" ax.set_ylabel(metric.upper(), fontsize=10)\n",
" ax.set_title(f\"Training and Validation {metric.upper()}\", fontsize=12, fontweight=\"bold\")\n",
" ax.legend(fontsize=9)\n",
" ax.grid(True, alpha=0.3)\n",
" \n",
" # 标记最佳验证指标点\n",
" best_iter = val_metric.index(max(val_metric))\n",
" best_metric = max(val_metric)\n",
" ax.axvline(x=best_iter + 1, color=\"green\", linestyle=\"--\", alpha=0.7)\n",
" ax.scatter([best_iter + 1], [best_metric], color=\"green\", s=80, zorder=5)\n",
" ax.annotate(\n",
" f\"Best: {best_metric:.4f}\",\n",
" xy=(best_iter + 1, best_metric),\n",
" xytext=(best_iter + 1 + len(iterations) * 0.05, best_metric),\n",
" fontsize=8,\n",
" arrowprops=dict(arrowstyle=\"->\", color=\"green\", alpha=0.7),\n",
" )\n",
"\n",
"plt.tight_layout()\n",
"plt.show()\n",
"\n",
"print(f\"\\n[指标分析]\")\n",
"print(f\" 各NDCG指标在验证集上的最佳值:\")\n",
"for metric in ndcg_metrics:\n",
" val_metric_list = evals_result[\"val\"][metric]\n",
" best_iter = val_metric_list.index(max(val_metric_list))\n",
" best_val = max(val_metric_list)\n",
" print(f\" {metric}: {best_val:.4f} (迭代 {best_iter + 1})\")\n",
"print(f\"\\n[重要提醒] 验证集仅用于早停/调参,测试集完全独立于训练过程!\")"
],
"outputs": [],
"execution_count": null
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 4.6 模型评估"
]
},
{
"cell_type": "code",
"metadata": {
"ExecuteTime": {
"end_time": "2026-03-09T16:28:50.036021Z",
"start_time": "2026-03-09T16:28:49.947604Z"
}
},
"source": [
"print(\"\\n\" + \"=\" * 80)\n",
"print(\"模型评估\")\n",
"print(\"=\" * 80)\n",
"\n",
"# 准备测试集\n",
"X_test = test_data.select(feature_cols)\n",
"y_test = test_data.select(target_col).to_series()\n",
"\n",
"# 预测\n",
"print(\"\\n生成预测...\")\n",
"predictions = model.predict(X_test)\n",
"\n",
"# 添加预测列\n",
"test_data = test_data.with_columns([pl.Series(\"prediction\", predictions)])\n",
"\n",
"# 计算 NDCG 指标\n",
"print(\"\\n计算 NDCG 指标...\")\n",
"ndcg_results = evaluate_ndcg_at_k(\n",
" y_true=y_test.to_numpy(),\n",
" y_pred=predictions,\n",
" group=test_group,\n",
" k_list=[1, 5, 10, 20],\n",
")\n",
"\n",
"print(\"\\nNDCG 评估结果:\")\n",
"print(\"-\" * 40)\n",
"for metric, value in ndcg_results.items():\n",
" print(f\" {metric}: {value:.4f}\")\n",
"\n",
"# 特征重要性\n",
"print(\"\\n特征重要性Top 20:\")\n",
"print(\"-\" * 40)\n",
"importance = model.feature_importance()\n",
"if importance is not None:\n",
" top_features = importance.sort_values(ascending=False).head(20)\n",
" for i, (feature, score) in enumerate(top_features.items(), 1):\n",
" print(f\" {i:2d}. {feature:30s} {score:10.2f}\")"
],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"================================================================================\n",
"模型评估\n",
"================================================================================\n",
"\n",
"生成预测...\n",
"\n",
"计算 NDCG 指标...\n",
"\n",
"NDCG 评估结果:\n",
"----------------------------------------\n",
" ndcg@1: 0.0000\n",
" ndcg@5: 0.0000\n",
" ndcg@10: 0.0000\n",
" ndcg@20: 0.0000\n",
"\n",
"特征重要性Top 20:\n",
"----------------------------------------\n",
" 1. max_ret_20 3634.79\n",
" 2. turnover_rank 2905.90\n",
" 3. drawdown_from_high_60 1816.20\n",
" 4. overnight_intraday_diff 1484.73\n",
" 5. std_return_20 791.58\n",
" 6. volume_ratio_5_20 757.43\n",
" 7. current_ratio 694.13\n",
" 8. revenue_yoy 605.02\n",
" 9. kaufman_ER_20 507.48\n",
" 10. close_vwap_deviation 372.14\n",
" 11. roa 281.62\n",
" 12. active_market_cap 280.69\n",
" 13. sharpe_ratio_20 278.22\n",
" 14. turnover_rate_mean_5 274.94\n",
" 15. healthy_expansion_velocity 266.26\n",
" 16. net_profit_yoy 263.69\n",
" 17. high_low_ratio 252.26\n",
" 18. volatility_squeeze_5_60 245.18\n",
" 19. return_5_rank 243.28\n",
" 20. volatility_20 228.92\n"
]
}
],
"execution_count": 10
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 4.7 Top-k 选股策略分析"
]
},
{
"cell_type": "code",
"metadata": {
"ExecuteTime": {
"end_time": "2026-03-09T16:28:50.725016Z",
"start_time": "2026-03-09T16:28:50.043768Z"
}
},
"source": [
"print(\"\\n\" + \"=\" * 80)\n",
"print(\"Top-k 选股策略分析\")\n",
"print(\"=\" * 80)\n",
"\n",
"# 分析策略表现\n",
"strategy_results = analyze_top_k_strategy(\n",
" df=test_data,\n",
" prediction_col=\"prediction\",\n",
" return_col=LABEL_NAME,\n",
" k_list=[5, 10, 20],\n",
")\n",
"\n",
"# 打印结果\n",
"print(\"\\n策略表现统计:\")\n",
"print(\"=\" * 60)\n",
"for name, result in strategy_results.items():\n",
" print(f\"\\n{name}:\")\n",
" print(f\" 日均收益: {result['mean_daily_return']:.4f}\")\n",
" print(f\" 日收益标准差: {result['std_daily_return']:.4f}\")\n",
" print(f\" 年化夏普比率: {result['sharpe_ratio']:.4f}\")\n",
" print(f\" 累计收益: {result['total_return']:.4f}\")\n",
"\n",
"# 绘制图表\n",
"print(\"\\n生成策略表现图...\")\n",
"plot_strategy_performance(strategy_results)"
],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"================================================================================\n",
"Top-k 选股策略分析\n",
"================================================================================\n",
"\n",
"策略表现统计:\n",
"============================================================\n",
"\n",
"top5:\n",
" 日均收益: nan\n",
" 日收益标准差: nan\n",
" 年化夏普比率: nan\n",
" 累计收益: nan\n",
"\n",
"top10:\n",
" 日均收益: nan\n",
" 日收益标准差: nan\n",
" 年化夏普比率: nan\n",
" 累计收益: nan\n",
"\n",
"top20:\n",
" 日均收益: nan\n",
" 日收益标准差: nan\n",
" 年化夏普比率: nan\n",
" 累计收益: nan\n",
"\n",
"生成策略表现图...\n"
]
},
{
"data": {
"text/plain": [
"<Figure size 1400x1000 with 4 Axes>"
],
"image/png": "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+qyJ61q3Rn0YQWXfvn1z8Bmzb6MWijFEyBkLEJfDvggXo2aLP1xHb9y4kiuC3+iZGq8VC8HG4sXxnGg7Fb1515QIZaNlViygFTVjnNOYATx79uzcxi1mjpbru6h5o9dvHHfUxlEDRnAdQWasb1DfosVEvNexxx6b3yPC2PhsTznllPx4hMTltRViIbpYtCy+Q1HvfhZnn312DtOjdo4Zs9GfOGrY6B0c4wnxO1Ace7Qhi0kc8XtdzPx++OGH8zhru5AxsJpKAPXgT3/6U+moo44qbbPNNqX11luv1L59+9JWW21VOuGEE0pz586tsm/8X8+oUaNWeI3NN9+8NGLEiIr77733XunII48sbbTRRvk1Bw8eXHrxxRdX2O+GG27Ir/nEE0+s8Jrjx4/Pjz3//POlQw89tNSxY8fSBhtsUDr++ONLH3300Qr733777aU99tijtO666+ZbHE+M9aWXXlrl8a9qDMuWLSv16dMn3z755JPS8uXLS+eff34+jg4dOpS++MUvlu6+++58TLGtskceeaTUv3//fD7j9eN4Kh9XZR9//HFpwoQJpS233LLUrl27Uq9evUrjxo0rLV68uFRb06dPL33jG98o9ezZM79GnKu99tqr9Itf/CIfR9miRYtKY8aMqdhv6623Ll100UX52D7ts541a1beHvtX9sADD+TtkydPrtg2aNCg0vbbb1968sknS7vuumtprbXWyufo8ssvr/Lc2p7Tlb135cfiswzvvPNOHnt8B+K70Llz59LAgQNLv/nNb1Z4bown9otz0b1799Kxxx6bv7+VlY+lupo+dwCgaYraoXqNVtu6KercL3/5y6W11147v0a53q1tTVyupeLf+qpbwyuvvFIaPnx4qUePHnn8m2yySemAAw4o3XbbbVWee+2115Z69+5datOmTZVxxGueeuqpefzrrLNOHv/LL79cp5q+PuqoOJ7rrruu9KUvfSnXdXEs8dw4tzNnzqyy74wZM/I443zHmL/61a/murw257Fcp7/99tsrjDVqyprq0okTJ+baPerYGN/TTz9d5blvvPFG6aCDDiqtv/76eexf//rXS3PmzKny+8Gq3rvyY2VTpkwpfe1rX8vfy/hdI/4dNmxY6W9/+1uV58XvcuXvX+zXt2/finq5pmOprvoYgdprFf+zuoEvQNH98Ic/zLMg4/KtNfnXfOpH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oECEtgAAAAAABSK0BQAAAAAoEKEtAAAAAECBCG0BAAAAAApEaAsAAAAAUCBCWwAAAACAAhHaAgAAAAAUiNAWAAAAAKBAhLYAAAAAAAUitAUAAAAAKBChLQAAAABAgQhtAQAAAAAKRGgLAAAAAFAgQlsAAAAAgAIR2gIAAAAAFIjQFgAAAACgQIS2AAAAAAAFIrQFAAAAACgQoS0AAAAAQIEIbQEAAAAACkRoCwAAAABQIEJbAAAAAIACEdoCAAAAABSI0BYAAAAAoECEtgAAAAAABSK0BQAAAAAoEKEtAAAAAECBCG0BAAAAAApEaAsAAAAAUCBCWwAAAACAAhHaAgAAAAAUiNAWAAAAAKBAmlxoe8UVV6QtttgirbXWWmngwIHp8ccfX+X+kydPTttss03ev2/fvumPf/xjxWMff/xxOvXUU/P2ddddN/Xs2TMNHz48zZkzZw0cCQAArJraFwCgZWpSoe2tt96axo4dm8aPH59mzJiRdtxxxzR48OA0b968Gvd/5JFH0rBhw9LIkSPTzJkz04EHHphvzz77bH78ww8/zK9z5pln5n9/+9vfppdeeikNHTp0DR8ZAABUpfYFAGi5WpVKpVJqImJm7c4775wuv/zyfH/58uWpV69e6YQTTkinnXbaCvsfdthh6YMPPkh33313xbZddtkl9evXL1111VU1vscTTzyRBgwYkP7xj3+kzTbbrFbjWrhwYercuXNasGBB6tSp02ofHwBAS6SWajq1r88KAOCzqW091WRm2i5dujRNnz497b333hXbWrdune9PmzatxufE9sr7h5iZu7L9Q5ywVq1apfXXX78eRw8AALWn9gUAaNnapibinXfeScuWLUvdu3evsj3uv/jiizU+56233qpx/9hek8WLF+cet9FSYVVJ95IlS/KtckJenv0QNwAAak/9VNzaV90LANA4tW+TCW0bWixK9p//+Z8pukX89Kc/XeW+F1xwQZowYcIK299+++1c/AIAUHuLFi1yugpa+6p7AQAap/ZtMqHtRhttlNq0aZPmzp1bZXvc79GjR43Pie212b9ctEYvr/vvv/9T+9KOGzcuL4hWeaZt9Bfr2rWrnrYAAHW01lprOWcFrX3VvQAAjVP7NpnQtn379ql///5pypQp6cADD6yYThz3jz/++Bqfs+uuu+bHTzrppIpt9913X95evWj9+9//nh544IG04YYbfupYOnTokG/VRY/duAEAUHvqp+LWvupeAIDGqX2bTGgbYnbriBEj0k477ZRXuZ00aVJeIffII4/Mjw8fPjxtsskm+TKuMHr06DRo0KA0ceLEtP/++6dbbrklPfnkk+maa66pKFoPPfTQNGPGjLzKbvQNK/f86tKlSy6WAQCgMah9AQBariYV2h522GG5b+xZZ52Vw9V+/fqle+65p2LBhdmzZ1dJq3fbbbd08803pzPOOCP94Ac/SFtvvXW688470w477JAff/PNN9Ndd92Vf47XqixmHnzlK19Zo8cHAABlal8AgJarVSlWH+AziZ62nTt3TgsWLNDTFgBALdVsqXsBANZMPaUBKwAAAABAgQhtAQAAAAAKRGgLAAAAAFAgQlsAAAAAgAIR2gIAAAAAFIjQFgAAAACgQIS2AAAAAAAFIrQFAAAAACgQoS0AAAAAQIEIbQEAAAAACkRoCwAAAABQIEJbAAAAAIACEdoCAAAAABSI0BYAAAAAoECEtgAAAAAABSK0BQAAAAAoEKEtAAAAAECBCG0BAAAAAApEaAsAAAAAUCBCWwAAAACAAhHaAgAAAAAUiNAWAAAAAKBAhLYAAAAAAAUitAUAAAAAKBChLQAAAABAgQhtAQAAAAAKRGgLAAAAAFAgbVfnSfPnz0/XX399euGFF/L97bffPh111FGpc+fO9T0+AAAAAIAWpc4zbZ988snUp0+fdMkll6R333033y6++OK8bcaMGQ0zSgAAAACAFqLOM23HjBmThg4dmq699trUtu3/Pf2TTz5J//Vf/5VOOumk9OCDDzbEOAEAAAAAWoS2qzPTtnJgm1+kbdt0yimnpJ122qm+xwcAAAAA0KLUObTt1KlTmj17dtpmm22qbH/99ddTx44d63NsAADQqD744IP03//932nKlClp3rx5afny5VUef/XVVxttbAAANF91Dm0PO+ywNHLkyPTjH/847bbbbnnbww8/nL7//e+nYcOGNcQYAQCgUUQLsKlTp6Zvf/vbaeONN06tWrXySQAAULzQNsLaKFaHDx+ee9mGdu3apWOPPTbPQgAAgObiT3/6U/rDH/6Qdt9998YeCgAALUidQ9v27dunn/zkJ+mCCy5Ir7zySt7Wp0+ftM466zTE+AAAoNFssMEGqUuXLj4BAADWqNar+8QIafv27ZtvAlsAAJqjc845J5111lnpww8/bOyhAADQgtRqpu3BBx+cfv7zn+dFyOLnVfntb39bX2MDAIBGNXHixHx1Wffu3dMWW2yR24JVNmPGjEYbGwAALTy07dy5c8WiCxHcWoABAICW4MADD2zsIQAA0ALVKrS94YYbKn6OGbcAANDcxaK7MVnhqKOOSptuumljDwcAgBakzj1t99xzzzR//vwVti9cuDA/BgAAzUHbtm3TRRddlMNbAAAodGj7l7/8JS1dunSF7YsXL04PPfRQfY0LAAAaXUxKmDp1amMPAwCAFqZW7RHCM888U/Hz888/n956662K+8uWLUv33HNP2mSTTep/hAAA0Ej222+/dNppp6W//vWvqX///mndddet8vjQoUN9NgAANF5o269fv9zTK241tUFYe+2102WXXVbf4wMAgEZz3HHH5X8vvvjiFR6LujgmLwAAQKOFtrNmzUqlUin17t07Pf7446lr164Vj7Vv3z5169YttWnTpt4HCAAAjWX58uVOPgAAxQ1tN9988/yvwhUAAAAAoAChbXXR13b27NkrLEqmrxcAAM3F2WefvcrHzzrrrDU2FgAAWo46h7avvvpqOuigg/JiDNHHK1omhPg56OsFAEBzcccdd1S5//HHH+e2YW3btk19+vQR2gIAUIzQdvTo0WnLLbdMU6ZMyf9Gf9t//etf6eSTT04//vGPG2aUAADQCGbOnLnCtoULF6YjjjgiT2QAAICG0LquT5g2bVq+TGyjjTZKrVu3zrc99tgjXXDBBenEE09skEECAEBRdOrUKU2YMCGdeeaZjT0UAACaqTqHttH+oGPHjvnnCG7nzJlTsVDZSy+9VP8jBACAglmwYEG+AQBAIdoj7LDDDunpp5/OrREGDhyYfvSjH6X27duna665JvXu3btBBgkAAI3h0ksvrXI/1nP45z//mX75y1+m/fbbz4cCAEAxQtszzjgjffDBB/nnaJNwwAEHpC996Utpww03TLfccktDjBEAABrFJZdcUuV+tAbr2rVrGjFiRBo3bpxPBQCAYoS2gwcPrvh5q622Si+++GJ699130wYbbJBatWpV3+MDAIBGM2vWLGcfAIDi97StSZcuXdJbb72Vjj/++Pp4OQAAKISjjjoqLVq0aIXtceVZPAYAAI0e2j733HPp8ssvz/1r58+fn7e988476aSTTsr9bB944IEGGSQAADSGX/ziF+mjjz5aYXtsu/HGGxtlTAAANH+1bo9w1113pUMPPTR98skn+X4sQHbttdem//zP/0z9+/dPd9xxR9p3330bcqwAALBGLFy4MC86FreYabvWWmtVPLZs2bL0xz/+MXXr1s2nAQBA44a25557bho1alQ655xz0nXXXZfGjh2bTjzxxFyw7rzzzg0zOgAAaATrr79+Xq8hbp/73OdWeDy2T5gwwWcDAECDaFWK6QO10Llz5zR9+vS8+FjMLujQoUO655570t57751aupiJEednwYIFqVOnTo09HACAJqWItdTUqVPzLNs999wz3X777XkNh7L27dunzTffPPXs2TO1NEX8rAAAmmM9VeuZtnFZWPmF2rRpk9Zee+3cxxYAAJqbQYMG5X9nzZqVNttsszyzFgAA1pRah7bh3nvvzUlwWL58eZoyZUp69tlnq+wzdOjQ+h0hAAA0kphR+9BDD6Wrr746vfrqq2ny5Mlpk002Sb/85S/TlltumfbYYw+fDQAAjRvajhgxosr973znO1XuxwyEaJ0AAADNQbRG+Pa3v52++c1vphkzZqQlS5bk7XE52/nnn5/XdwAAgPrWurY7xszaT7sJbAEAaE5iMd6rrroqXXvttaldu3YV23ffffcc4gIAQKOGtgAA0NK89NJL6ctf/vIK26Nl2Pz58xtlTAAANH9CWwAAWIkePXqkl19+eYXt//u//2tRXgAAGozQFgAAVuLoo49Oo0ePTo899lhev2HOnDnppptuSt/73vfSscce67wBAND4C5EBAEBLctppp+W1G/baa6/04Ycf5lYJHTp0yKHtCSec0NjDAwCgmWpyM22vuOKKtMUWW6S11lorDRw4MD3++OOr3H/y5Mlpm222yfv37dt3hRV+S6VSOuuss9LGG2+c1l577bT33nunv//97w18FAAANAUxu/b0009P7777bnr22WfTo48+mt5+++10zjnnpI8++qjB31/tCwDQMq1WaBuLLlx33XVp3LhxuYANsXrum2++mRrSrbfemsaOHZvGjx+f32/HHXdMgwcPTvPmzatx/0ceeSQNGzYsjRw5Ms2cOTMdeOCB+RYFd9mPfvSjdOmll+ZVgeOyt3XXXTe/5uLFixv0WAAAaDrat2+ftttuuzRgwIDUrl27dPHFF6ctt9yyQd9T7QsA0HK1KsVU0zp45pln8mzUWDH3tddeyyvq9u7dO51xxhlp9uzZ6cYbb2ywwcbM2p133jldfvnl+X5cqtarV698aVpculbdYYcdlj744IN09913V2zbZZddUr9+/XJIG4fes2fPdPLJJ+dL3MKCBQtS9+7d089//vN0+OGH12pcCxcuzOcjntupU6d6O14AgJagiLXUkiVL0g9/+MN033335cD2lFNOyX/8v+GGG/LM2zZt2qTjjz8+nXrqqS2q9i3iZwUA0JTUtp6qc0/bmOl6xBFH5BmqHTt2rNg+ZMiQ9I1vfCM1lKVLl6bp06fn2b1lrVu3zgHytGnTanxObI/xVhazaO+8887886xZs9Jbb72VX6MsTloUyPHclRWuUcTHrfLJLhfScQMAoPaKWD9F+6yrr74614lx9dbXv/71dOSRR+b2CDHLNu5HcNvca191LwBA49S+dQ5tn3jiiVzAVrfJJpvkIrChvPPOO2nZsmV5JkBlcf/FF1+s8Tkxnpr2L4+z/O+q9qnJBRdckCZMmLDC9uhvpq0CAEDdLFq0qHCnLNZFiCvIhg4dmltrfeELX0iffPJJevrpp3Of24ZWlNpX3QsA0Di1b51D21gttzyztLK//e1vqWvXrqkliBkPlWcxxPmIS9Xi+F0mBgBQN7FgbNG88cYbqX///vnnHXbYIdfAY8aMWSOBbZGoewEAGqf2rXNoG7MNzj777PSb3/wm34/CNXrZRj+vQw45JDWUjTbaKF+CNnfu3Crb436PHj1qfE5sX9X+5X9j28Ybb1xln+j9tTJRtMeturhkLW4AANReEeunmOUavWzL2rZtm9Zbb7019v5FqX3VvQAAjVP71rlCnjhxYnr//fdTt27d0kcffZQGDRqUttpqq9zf9rzzzksNJYrmmO0wZcqUKj0g4v6uu+5a43Nie+X9QywmUd4/VvyN4rXyPjFr9rHHHlvpawIA0PzFol2xjsPBBx+cb9EC67vf/W7F/fKtoah9AQBatjrPtI3FCiL4/N///d/0zDPP5AD33/7t36osaNBQoiXBiBEj0k477ZQGDBiQJk2alFfIjUUhwvDhw3Nv3ei9FUaPHp1D5Qia999//3TLLbekJ598Ml1zzTUVs4RPOumkdO6556att946h7hnnnlmXlU3VgcGAKBlipqzsm9961trfAxqXwCAlqvOoW3ZHnvskW9r0mGHHZYX+4rVfGOxhLiM65577qlYTCHaNFSeYrzbbrulm2++OZ1xxhnpBz/4QQ5mY/Xc6EtWdsopp+Tg95hjjknz58/PxxSvWcTeagAArBk33HBDo59qtS8AQMvVqhTXftVRtBO45JJL0gsvvJDvb7vttnnG6pqYbVtE0VIhZiAvWLDAQmQAAGqpZkvdCwCwZuqpOve0vfLKK9O+++6be9hG+4G4xRsMGTIkXXHFFZ9x2AAAAAAALVud2yOcf/75eZbt8ccfX7HtxBNPTLvvvnt+bNSoUfU9RgAAAACAFqPOM22j72vMtK1un332ydN6AQAAAABYg6Ht0KFD0x133LHC9t/97nfpgAMO+AxDAQAAAACgzu0Rtttuu3Teeeelv/zlL2nXXXfN2x599NH08MMPp5NPPjldeumlVdomAABAU3LXXXfVaUIDAADUt1alUqlUlydsueWWtXvhVq3Sq6++mloCq+gCADSfWqp169a1rneXLVuWWpKifVYAAM21nqrzTNtZs2Z91rEBAEBhLV++vLGHAABAC1ennrYff/xx6tOnT3rhhRcabkQAAAAAAC1YnWbatmvXLi1evLjhRgMAAAXzwQcfpKlTp6bZs2enpUuXVnnMGg4AADSEOrdHGDVqVLrwwgvTddddl9q2rfPTAQCgyZg5c2YaMmRI+vDDD3N426VLl/TOO++kddZZJ3Xr1k1oCwBAg6hz6vrEE0+kKVOmpD//+c+pb9++ad11163y+G9/+9v6HB8AADSaMWPGpP/4j/9IV111VV4w4tFHH81Xn33rW99Ko0eP9skAAFCM0Hb99ddPhxxySMOMBgAACuSpp55KV199dWrdunVq06ZNWrJkSerdu3f60Y9+lEaMGJEOPvjgxh4iAADNUJ1D2xtuuKFhRgIAAAUTs2ojsA3RDiH62m677bZ51u3rr7/e2MMDAKCZ0pQWAABW4otf/GJuD7b11lunQYMGpbPOOiv3tP3lL3+ZdthhB+cNAIDihLa33XZb+s1vflPjCrozZsyor7EBAECjOv/889OiRYvyz+edd14aPnx4OvbYY3OIe/311/t0AABoEP93rVcdXHrppenII49M3bt3z6vpDhgwIG244Ybp1VdfTfvtt1/DjBIAABrBTjvtlL761a9WtEe455570sKFC9P06dNTv379fCYAABQjtL3yyivTNddcky677LLUvn37dMopp6T77rsvnXjiiWnBggUNM0oAAGgEe+65Z5o/f/4K2yO4jccAAKAQoW20RNhtt93yz2uvvXbF5WLf/va3069//ev6HyEAADSSv/zlLyu0AwuLFy9ODz30UKOMCQCA5q/OPW179OiR3n333bT55punzTbbLD366KNpxx13TLNmzUqlUqlhRgkAAGvQM888U/Hz888/n956662K+8uWLcttEjbZZBOfCQAAxQht4zKwu+66K6+kG71tx4wZkxcme/LJJ9PBBx/cMKMEAIA1KPrVtmrVKt9qaoMQV5xFuzAAAChEaBv9bJcvX55/HjVqVF6E7JFHHklDhw5N3/nOdxpijAAAsEaVryLr3bt3evzxx1PXrl0rHot1HWJRsjZt2vhUAAAoRmjbunXrfCs7/PDD8w0AAJqLaAUWypMVAACg0KFtiBV0Y8bBvHnzVihkhw8fXl9jAwCARvfKK6+kSZMmpRdeeCHf32677dLo0aNTnz59GntoAAA0U3UObX//+9+nb37zm+n9999PnTp1yn2+yuJnoS0AAM3Fvffem9uARY/b3XffPW97+OGH0/bbb5/r4n//939v7CECANAMtSpFs646+NznPpeGDBmSzj///LTOOus03MiakIULF6bOnTunBQsW5CAbAIDmUUvF4ruDBw9O//3f/11l+2mnnZb+/Oc/pxkzZqSWpMifFQBAc6qn/n9z2lp6880304knniiwBQCg2YuWCCNHjlxh+1FHHZWef/75RhkTAADNX51D25hp8OSTTzbMaAAAoEC6du2annrqqRW2x7Zu3bo1ypgAAGj+atXT9q677qr4ef/990/f//7388yCvn37pnbt2lXZN3p+AQBAU3b22Wen733ve+noo49OxxxzTHr11VfTbrvtVtHT9sILL0xjx45t7GECANCSe9q2bl27CbmxENmyZctSS6O3FwBA86ql2rRpk/75z3/mmbaTJk1KEydOTHPmzMmP9ezZM09iiJZhlRflbQmK+FkBADTHeqpWM22XL19en2MDAIBCK89riFB2zJgx+bZo0aK8rWPHjo08OgAAmrtahbYAANDSVJ9FK6wFAKBwC5FNmzYt3X333VW23XjjjWnLLbfMizBEr68lS5Y0xBgBAGCN+9znPpe6dOmyyhsAADTqTNtYjOErX/lKOuCAA/L9v/71r2nk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ygAAAAAAUCBCWwAAAACAAhHaAjRzHTp0SOPHj8//AgBAc6b2BZoLPW0BAAAAAArETFsAAAAAgAIR2gIAAAAAFIjQFgAAAACgQIS2AAAAAAAFIrQFaEK+8pWvpJNOOqneX/eII45IrVq1qnLbd9996/19AACgttS+QEvWtrEHAEAxREh7ww03VNzv0KFDo44HAAAaitoXKDozbQGaiJgNO3Xq1PSTn/ykYjbsa6+9lrcNGDAgh6wbb7xxOu2009Inn3xSZYbC8ccfn2+dO3dOG220UTrzzDNTqVSq8vrx/B49elTcNthgg0Y4SgAAUPsCCG0BmogIa3fdddd09NFHp3/+85/51q5duzRkyJC08847p6effjr99Kc/Tddff30699xzqzz3F7/4RWrbtm16/PHH8+tcfPHF6brrrquyz1/+8pfUrVu39PnPfz4de+yx6V//+tcaPkIAAPg/al+gpWtVqj7VCoDCilmz/fr1S5MmTcr3Tz/99HT77benF154Ic+8DVdeeWU69dRT04IFC1Lr1q3zc+bNm5eee+65in1iNu5dd92Vnn/++Xz/lltuSeuss07acsst0yuvvJJ+8IMfpPXWWy9NmzYttWnTphGPGACAlkrtC7RketoCNGER1sbs23IYG3bffff0/vvvpzfeeCNtttlmedsuu+xSZZ94zsSJE9OyZctyKHv44YdXPNa3b9/0hS98IfXp0yfPvt1rr73W8FEBAMCK1L5AS6I9AgAr6N27d+59+/LLLzs7AAA0a2pfoIiEtgBNSPv27fPs2LJtt902tzCo3Onm4YcfTh07dkybbrppxbbHHnusyus8+uijaeutt15p64OYpRs9bWNhMwAAaAxqX6AlE9oCNCFbbLFFDmBfe+219M4776Tjjjsuvf766+mEE05IL774Yvrd736Xxo8fn8aOHZv72ZbNnj07b3vppZfSr3/963TZZZel0aNH58eilcL3v//9HOTG606ZMiV97WtfS1tttVUaPHhwIx4tAAAtmdoXaMksRAbQhPztb39LI0aMSE8//XT66KOP0qxZs9I//vGPHLrGti5duuTHzz333NS2bduKBRy23377tHz58nTzzTfn2bXHHnts3if63MbrHHjggWnmzJlp/vz5qWfPnmmfffZJ55xzTurevXtjHzIAAC2U2hdoyYS2AC1s1V0AAGiu1L5Ac6E9AgAAAABAgQhtAQAAAAAKRHsEAAAAAIACMdMWAAAAAKBAhLYAAAAAAAUitAUAAAAAKBChLQAAAABAgQhtAQAAAAAKRGgLAAAAAFAgQlsAAAAAgAIR2gIAAAAAFIjQFgAAAAAgFcf/AzB9kSLAAKmBAAAAAElFTkSuQmCC"
},
"metadata": {},
"output_type": "display_data",
"jetTransient": {
"display_id": null
}
}
],
"execution_count": 11
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 4.7 保存结果"
]
},
{
"cell_type": "code",
"metadata": {
"ExecuteTime": {
"end_time": "2026-03-09T16:28:50.888298Z",
"start_time": "2026-03-09T16:28:50.733200Z"
}
},
"source": [
"# 确保输出目录存在\n",
"os.makedirs(OUTPUT_DIR, exist_ok=True)\n",
"\n",
"# 生成时间戳\n",
"start_dt = datetime.strptime(TEST_START, \"%Y%m%d\")\n",
"end_dt = datetime.strptime(TEST_END, \"%Y%m%d\")\n",
"date_str = f\"{start_dt.strftime('%Y%m%d')}_{end_dt.strftime('%Y%m%d')}\"\n",
"\n",
"# 保存每日 Top N\n",
"print(f\"\\n[1/1] 保存每日 Top {TOP_N} 股票...\")\n",
"topn_output_path = os.path.join(OUTPUT_DIR, \"rank_output.csv\")\n",
"\n",
"# 按日期分组,取每日 top N\n",
"topn_by_date = []\n",
"unique_dates = test_data[\"trade_date\"].unique().sort()\n",
"for date in unique_dates:\n",
" day_data = test_data.filter(test_data[\"trade_date\"] == date)\n",
" # 按 prediction 降序排序,取前 N\n",
" topn = day_data.sort(\"prediction\", descending=True).head(TOP_N)\n",
" topn_by_date.append(topn)\n",
"\n",
"# 合并所有日期的 top N\n",
"topn_results = pl.concat(topn_by_date)\n",
"\n",
"# 格式化日期并调整列顺序:日期、分数、股票\n",
"topn_to_save = topn_results.select(\n",
" [\n",
" pl.col(\"trade_date\").str.slice(0, 4)\n",
" + \"-\"\n",
" + pl.col(\"trade_date\").str.slice(4, 2)\n",
" + \"-\"\n",
" + pl.col(\"trade_date\").str.slice(6, 2).alias(\"date\"),\n",
" pl.col(\"prediction\").alias(\"score\"),\n",
" pl.col(\"ts_code\"),\n",
" ]\n",
")\n",
"topn_to_save.write_csv(topn_output_path, include_header=True)\n",
"print(f\" 保存路径: {topn_output_path}\")\n",
"print(f\" 保存行数: {len(topn_to_save)}{len(unique_dates)}个交易日 x 每日top{TOP_N}\")\n",
"print(f\"\\n 预览前15行:\")\n",
"print(topn_to_save.head(15))\n",
"\n",
"print(\"\\n训练流程完成\")"
],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"预测结果已保存: output\\learn_to_rank_predictions.csv\n",
"特征重要性已保存: output\\feature_importance.csv\n",
"策略统计已保存: output\\strategy_statistics.csv\n",
"\n",
"训练流程完成!\n"
]
}
],
"execution_count": 12
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 5. 总结\n",
"\n",
"本 Notebook 实现了完整的 Learn-to-Rank 训练流程:\n",
"\n",
"### 核心步骤\n",
"\n",
"1. **数据准备**: 计算 49 个特征因子,将 `future_return_5` 转换为 20 分位数标签\n",
"2. **模型训练**: 使用 LightGBM LambdaRank 学习每日股票排序\n",
"3. **模型评估**: 使用 NDCG@1/5/10/20 评估排序质量\n",
"4. **策略分析**: 基于排序分数构建 Top-k 选股策略\n",
"\n",
"### 关键参数\n",
"\n",
"- **Objective**: lambdarank\n",
"- **Metric**: ndcg\n",
"- **Learning Rate**: 0.05\n",
"- **Num Leaves**: 31\n",
"- **N Quantiles**: 20\n",
"\n",
"### 输出结果\n",
"\n",
"- rank_output.csv: 每日Top-N推荐股票格式date, score, ts_code\n",
"- 特征重要性排名\n",
"- Top-k 策略统计和图表\n",
"- NDCG训练指标曲线\n",
"\n",
"### 后续优化方向\n",
"\n",
"1. **特征工程**: 尝试更多因子组合\n",
"2. **超参数调优**: 使用网格搜索优化 LambdaRank 参数\n",
"3. **模型集成**: 结合多个排序模型的预测\n",
"4. **更复杂的分组**: 考虑按行业分组排序"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.0"
}
},
"nbformat": 4,
"nbformat_minor": 4
}