Files
NewStock/main/train/Transformer.ipynb
2025-04-28 11:02:52 +08:00

1363 lines
196 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": "code",
"id": "79a7758178bafdd3",
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-01T04:00:54.782179Z",
"start_time": "2025-03-01T04:00:54.471051Z"
}
},
"source": [
"%load_ext autoreload\n",
"# %autoreload 2\n",
"\n",
"import pandas as pd\n",
" \n",
"\n",
" \n",
"pd.set_option('display.max_columns', None)\n"
],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The autoreload module is not an IPython extension.\n"
]
}
],
"execution_count": 1
},
{
"cell_type": "code",
"id": "a79cafb06a7e0e43",
"metadata": {
"jupyter": {
"source_hidden": true
},
"ExecuteTime": {
"end_time": "2025-03-01T04:01:45.158165Z",
"start_time": "2025-03-01T04:00:54.784691Z"
}
},
"source": [
"\n",
"from code.utils.utils import read_and_merge_h5_data\n",
"\n",
"print('daily data')\n",
"df = read_and_merge_h5_data('../../data/daily_data.h5', key='daily_data',\n",
" columns=['ts_code', 'trade_date', 'open', 'close', 'high', 'low', 'vol'],\n",
" df=None)\n",
"\n",
"print('daily basic')\n",
"df = read_and_merge_h5_data('../../data/daily_basic.h5', key='daily_basic',\n",
" columns=['ts_code', 'trade_date', 'turnover_rate', 'pe_ttm', 'circ_mv', 'volume_ratio',\n",
" 'is_st'], df=df, join='inner')\n",
"\n",
"print('stk limit')\n",
"df = read_and_merge_h5_data('../../data/stk_limit.h5', key='stk_limit',\n",
" columns=['ts_code', 'trade_date', 'pre_close', 'up_limit', 'down_limit'],\n",
" df=df)\n",
"print('money flow')\n",
"df = read_and_merge_h5_data('../../data/money_flow.h5', key='money_flow',\n",
" columns=['ts_code', 'trade_date', 'buy_sm_vol', 'sell_sm_vol', 'buy_lg_vol', 'sell_lg_vol',\n",
" 'buy_elg_vol', 'sell_elg_vol', 'net_mf_vol'],\n",
" df=df)\n",
"print(df.info())"
],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"daily data\n",
"daily basic\n",
"inner merge on ['ts_code', 'trade_date']\n",
"stk limit\n",
"left merge on ['ts_code', 'trade_date']\n",
"money flow\n",
"left merge on ['ts_code', 'trade_date']\n",
"<class 'pandas.core.frame.DataFrame'>\n",
"RangeIndex: 8350183 entries, 0 to 8350182\n",
"Data columns (total 21 columns):\n",
" # Column Dtype \n",
"--- ------ ----- \n",
" 0 ts_code object \n",
" 1 trade_date datetime64[ns]\n",
" 2 open float64 \n",
" 3 close float64 \n",
" 4 high float64 \n",
" 5 low float64 \n",
" 6 vol float64 \n",
" 7 turnover_rate float64 \n",
" 8 pe_ttm float64 \n",
" 9 circ_mv float64 \n",
" 10 volume_ratio float64 \n",
" 11 is_st bool \n",
" 12 up_limit float64 \n",
" 13 down_limit float64 \n",
" 14 buy_sm_vol float64 \n",
" 15 sell_sm_vol float64 \n",
" 16 buy_lg_vol float64 \n",
" 17 sell_lg_vol float64 \n",
" 18 buy_elg_vol float64 \n",
" 19 sell_elg_vol float64 \n",
" 20 net_mf_vol float64 \n",
"dtypes: bool(1), datetime64[ns](1), float64(18), object(1)\n",
"memory usage: 1.3+ GB\n",
"None\n"
]
}
],
"execution_count": 2
},
{
"cell_type": "code",
"id": "f7a55c19-b7dc-4d2f-a478-cffab11690df",
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-01T04:01:49.907736Z",
"start_time": "2025-03-01T04:01:45.533679Z"
}
},
"source": [
"print('industry')\n",
"df = read_and_merge_h5_data('../../data/industry_data.h5', key='industry_data',\n",
" columns=['ts_code', 'l2_code'],\n",
" df=df, on=['ts_code'], join='left')\n"
],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"industry\n",
"left merge on ['ts_code']\n"
]
}
],
"execution_count": 3
},
{
"cell_type": "code",
"id": "4077d4449d406c86",
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-01T04:01:50.070194Z",
"start_time": "2025-03-01T04:01:49.936309Z"
}
},
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"\n",
"def calculate_indicators(df):\n",
" \"\"\"\n",
" 计算四个指标当日涨跌幅、5日移动平均、RSI、MACD。\n",
" \"\"\"\n",
" df['daily_return'] = (df['close'] - df['pre_close']) / df['pre_close'] * 100\n",
" # df['5_day_ma'] = df['close'].rolling(window=5).mean()\n",
" delta = df['close'].diff()\n",
" gain = delta.where(delta > 0, 0)\n",
" loss = -delta.where(delta < 0, 0)\n",
" avg_gain = gain.rolling(window=14).mean()\n",
" avg_loss = loss.rolling(window=14).mean()\n",
" rs = avg_gain / avg_loss\n",
" df['RSI'] = 100 - (100 / (1 + rs))\n",
"\n",
" # 计算MACD\n",
" ema12 = df['close'].ewm(span=12, adjust=False).mean()\n",
" ema26 = df['close'].ewm(span=26, adjust=False).mean()\n",
" df['MACD'] = ema12 - ema26\n",
" df['Signal_line'] = df['MACD'].ewm(span=9, adjust=False).mean()\n",
" df['MACD_hist'] = df['MACD'] - df['Signal_line']\n",
"\n",
" return df\n",
"\n",
"def generate_index_indicators(h5_filename):\n",
" df = pd.read_hdf(h5_filename, key='index_data')\n",
" df['trade_date'] = pd.to_datetime(df['trade_date'], format='%Y%m%d')\n",
" df = df.sort_values('trade_date')\n",
"\n",
" # 计算每个ts_code的相关指标\n",
" df_indicators = []\n",
" for ts_code in df['ts_code'].unique():\n",
" df_index = df[df['ts_code'] == ts_code].copy()\n",
" df_index = calculate_indicators(df_index)\n",
" df_indicators.append(df_index)\n",
"\n",
" # 合并所有指数的结果\n",
" df_all_indicators = pd.concat(df_indicators, ignore_index=True)\n",
"\n",
" # 保留trade_date列并将同一天的数据按ts_code合并成一行\n",
" df_final = df_all_indicators.pivot_table(\n",
" index='trade_date',\n",
" columns='ts_code',\n",
" values=['daily_return', 'RSI', 'MACD', 'Signal_line', 'MACD_hist'],\n",
" aggfunc='last'\n",
" )\n",
"\n",
" df_final.columns = [f\"{col[1]}_{col[0]}\" for col in df_final.columns]\n",
" df_final = df_final.reset_index()\n",
"\n",
" return df_final\n",
"\n",
"\n",
"# 使用函数\n",
"h5_filename = '../../data/index_data.h5'\n",
"index_data = generate_index_indicators(h5_filename)\n",
"index_data = index_data.dropna()\n"
],
"outputs": [],
"execution_count": 4
},
{
"cell_type": "code",
"id": "c4e9e1d31da6dba6",
"metadata": {
"jupyter": {
"source_hidden": true
},
"ExecuteTime": {
"end_time": "2025-03-01T04:12:27.210806Z",
"start_time": "2025-03-01T04:12:26.858559Z"
}
},
"source": [
"import numpy as np\n",
"import talib\n",
"\n",
"def get_technical_factor(df):\n",
" # 按股票和日期排序\n",
" df = df.sort_values(by=['ts_code', 'trade_date'])\n",
" grouped = df.groupby('ts_code', group_keys=False)\n",
"\n",
" # 计算 up 和 down\n",
" df['log_close'] = np.log(df['close'])\n",
"\n",
" df['up'] = (df['high'] - df[['close', 'open']].max(axis=1)) / df['close']\n",
" df['down'] = (df[['close', 'open']].min(axis=1) - df['low']) / df['close']\n",
"\n",
" # 计算 ATR\n",
" df['atr_14'] = grouped.apply(\n",
" lambda x: pd.Series(talib.ATR(x['high'].values, x['low'].values, x['close'].values, timeperiod=14), index=x.index)\n",
" )\n",
" df['atr_6'] = grouped.apply(\n",
" lambda x: pd.Series(talib.ATR(x['high'].values, x['low'].values, x['close'].values, timeperiod=6), index=x.index)\n",
" )\n",
"\n",
" # 计算 OBV 及其均线\n",
" df['obv'] = grouped.apply(\n",
" lambda x: pd.Series(talib.OBV(x['close'].values, x['vol'].values), index=x.index)\n",
" )\n",
" df['maobv_6'] = grouped.apply(\n",
" lambda x: pd.Series(talib.SMA(x['obv'].values, timeperiod=6), index=x.index)\n",
" )\n",
" df['obv-maobv_6'] = df['obv'] - df['maobv_6']\n",
"\n",
" # 计算 RSI\n",
" df['rsi_3'] = grouped.apply(\n",
" lambda x: pd.Series(talib.RSI(x['close'].values, timeperiod=3), index=x.index)\n",
" )\n",
" df['rsi_6'] = grouped.apply(\n",
" lambda x: pd.Series(talib.RSI(x['close'].values, timeperiod=6), index=x.index)\n",
" )\n",
" df['rsi_9'] = grouped.apply(\n",
" lambda x: pd.Series(talib.RSI(x['close'].values, timeperiod=9), index=x.index)\n",
" )\n",
"\n",
" # 计算 return_10 和 return_20\n",
" df['return_5'] = grouped['close'].apply(lambda x: x / x.shift(5) - 1)\n",
" df['return_10'] = grouped['close'].apply(lambda x: x / x.shift(10) - 1)\n",
" df['return_20'] = grouped['close'].apply(lambda x: x / x.shift(20) - 1)\n",
"\n",
" # 计算 avg_close_5\n",
" df['avg_close_5'] = grouped['close'].apply(lambda x: x.rolling(window=5).mean() / x)\n",
"\n",
" # 计算标准差指标\n",
" df['std_return_5'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=5).std())\n",
" df['std_return_15'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=15).std())\n",
" df['std_return_25'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=25).std())\n",
" df['std_return_90'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=90).std())\n",
" df['std_return_90_2'] = grouped['close'].apply(lambda x: x.shift(10).pct_change().rolling(window=90).std())\n",
"\n",
" # 计算比值指标\n",
" df['std_return_5 / std_return_90'] = df['std_return_5'] / df['std_return_90']\n",
" df['std_return_5 / std_return_25'] = df['std_return_5'] / df['std_return_25']\n",
"\n",
" # 计算标准差差值\n",
" df['std_return_90 - std_return_90_2'] = df['std_return_90'] - df['std_return_90_2']\n",
"\n",
" return df\n",
"\n",
"\n",
"def get_act_factor(df, cat=True):\n",
" # 按股票和日期排序\n",
" df = df.sort_values(by=['ts_code', 'trade_date'])\n",
" grouped = df.groupby('ts_code', group_keys=False)\n",
" # 计算 EMA 指标\n",
" df['ema_5'] = grouped['close'].apply(\n",
" lambda x: pd.Series(talib.EMA(x.values, timeperiod=5), index=x.index)\n",
" )\n",
" df['ema_13'] = grouped['close'].apply(\n",
" lambda x: pd.Series(talib.EMA(x.values, timeperiod=13), index=x.index)\n",
" )\n",
" df['ema_20'] = grouped['close'].apply(\n",
" lambda x: pd.Series(talib.EMA(x.values, timeperiod=20), index=x.index)\n",
" )\n",
" df['ema_60'] = grouped['close'].apply(\n",
" lambda x: pd.Series(talib.EMA(x.values, timeperiod=60), index=x.index)\n",
" )\n",
"\n",
" # 计算 act_factor1, act_factor2, act_factor3, act_factor4\n",
" df['act_factor1'] = grouped['ema_5'].apply(\n",
" lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 50\n",
" )\n",
" df['act_factor2'] = grouped['ema_13'].apply(\n",
" lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 40\n",
" )\n",
" df['act_factor3'] = grouped['ema_20'].apply(\n",
" lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 21\n",
" )\n",
" df['act_factor4'] = grouped['ema_60'].apply(\n",
" lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 10\n",
" )\n",
"\n",
" if cat:\n",
" df['cat_af1'] = df['act_factor1'] > 0\n",
" df['cat_af2'] = df['act_factor2'] > df['act_factor1']\n",
" df['cat_af3'] = df['act_factor3'] > df['act_factor2']\n",
" df['cat_af4'] = df['act_factor4'] > df['act_factor3']\n",
"\n",
" # 计算 act_factor5 和 act_factor6\n",
" df['act_factor5'] = df['act_factor1'] + df['act_factor2'] + df['act_factor3'] + df['act_factor4']\n",
" df['act_factor6'] = (df['act_factor1'] - df['act_factor2']) / np.sqrt(df['act_factor1']**2 + df['act_factor2']**2)\n",
"\n",
" # 根据 trade_date 截面计算排名\n",
" df['rank_act_factor1'] = df.groupby('trade_date', group_keys=False)['act_factor1'].rank(ascending=False, pct=True)\n",
" df['rank_act_factor2'] = df.groupby('trade_date', group_keys=False)['act_factor2'].rank(ascending=False, pct=True)\n",
" df['rank_act_factor3'] = df.groupby('trade_date', group_keys=False)['act_factor3'].rank(ascending=False, pct=True)\n",
"\n",
" return df\n",
"\n",
"\n",
"def get_money_flow_factor(df):\n",
" # 计算资金流相关因子(字段名称见 tushare 数据说明)\n",
" df['active_buy_volume_large'] = df['buy_lg_vol'] / df['net_mf_vol']\n",
" df['active_buy_volume_big'] = df['buy_elg_vol'] / df['net_mf_vol']\n",
" df['active_buy_volume_small'] = df['buy_sm_vol'] / df['net_mf_vol']\n",
"\n",
" df['buy_lg_vol_minus_sell_lg_vol'] = (df['buy_lg_vol'] - df['sell_lg_vol']) / df['net_mf_vol']\n",
" df['buy_elg_vol_minus_sell_elg_vol'] = (df['buy_elg_vol'] - df['sell_elg_vol']) / df['net_mf_vol']\n",
"\n",
" df['log(circ_mv)'] = np.log(df['circ_mv'])\n",
" return df\n",
"\n",
"\n",
"def get_alpha_factor(df):\n",
" df = df.sort_values(by=['ts_code', 'trade_date'])\n",
" grouped = df.groupby('ts_code')\n",
"\n",
" # alpha_022: 当前 close 与 5 日前 close 差值\n",
" df['alpha_022'] = grouped['close'].transform(lambda x: x - x.shift(5))\n",
"\n",
" # alpha_003: (close - open) / (high - low)\n",
" df['alpha_003'] = np.where(df['high'] != df['low'],\n",
" (df['close'] - df['open']) / (df['high'] - df['low']),\n",
" 0)\n",
"\n",
" # alpha_007: 计算过去5日 close 与 vol 的相关性,并按 trade_date 排名\n",
" df['alpha_007'] = grouped.apply(lambda x: x['close'].rolling(5).corr(x['vol'])).reset_index(level=0, drop=True)\n",
" df['alpha_007'] = df.groupby('trade_date', group_keys=False)['alpha_007'].rank(ascending=True, pct=True)\n",
"\n",
" # alpha_013: 计算过去5日 close 之和 - 20日 close 之和,并按 trade_date 排名\n",
" df['alpha_013'] = grouped['close'].transform(lambda x: x.rolling(5).sum() - x.rolling(20).sum())\n",
" df['alpha_013'] = df.groupby('trade_date', group_keys=False)['alpha_013'].rank(ascending=True, pct=True)\n",
"\n",
" return df\n",
"\n"
],
"outputs": [],
"execution_count": 2
},
{
"cell_type": "code",
"execution_count": 6,
"id": "a735bc02ceb4d872",
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-01T04:00:27.633429700Z",
"start_time": "2025-02-27T16:36:47.161749Z"
}
},
"outputs": [],
"source": [
"def read_industry_data(h5_filename):\n",
" # 读取 H5 文件中所有的行业数据\n",
" industry_data = pd.read_hdf(h5_filename, key='sw_daily', columns=[\n",
" 'ts_code', 'trade_date', 'open', 'close', 'high', 'low', 'pe', 'pb', 'vol'\n",
" ]) # 假设 H5 文件的键是 'industry_data'\n",
" industry_data = industry_data.sort_values(by=['ts_code', 'trade_date'])\n",
" industry_data = industry_data.reindex()\n",
" industry_data['trade_date'] = pd.to_datetime(industry_data['trade_date'], format='%Y%m%d')\n",
"\n",
" grouped = industry_data.groupby('ts_code', group_keys=False)\n",
" industry_data['obv'] = grouped.apply(\n",
" lambda x: pd.Series(talib.OBV(x['close'].values, x['vol'].values), index=x.index)\n",
" )\n",
" industry_data['return_5'] = grouped['close'].apply(lambda x: x / x.shift(5) - 1)\n",
" industry_data['return_20'] = grouped['close'].apply(lambda x: x / x.shift(20) - 1)\n",
"\n",
" industry_data = get_act_factor(industry_data, cat=False)\n",
" # industry_data = industry_data.sort_values(by=['trade_date', 'ts_code'])\n",
"\n",
" # 计算每天每个 ts_code 的因子和当天所有 ts_code 的中位数的偏差\n",
" factor_columns = ['obv', 'return_5', 'return_20', 'act_factor1', 'act_factor2', 'act_factor3', 'act_factor4'] # 因子列\n",
"\n",
" for factor in factor_columns:\n",
" if factor in industry_data.columns:\n",
" # 计算每天每个 ts_code 的因子值与当天所有 ts_code 的中位数的偏差\n",
" industry_data[f'{factor}_deviation'] = industry_data.groupby('trade_date')[factor].transform(lambda x: x - x.median())\n",
"\n",
" industry_data['return_5_percentile'] = industry_data.groupby('trade_date')['return_5'].transform(lambda x: x.rank(pct=True))\n",
" industry_data = industry_data.drop(columns=['open', 'close', 'high', 'low', 'pe', 'pb', 'vol'])\n",
"\n",
"\n",
" industry_data = industry_data.rename(\n",
" columns={col: f'industry_{col}' for col in industry_data.columns if col not in ['ts_code', 'trade_date']})\n",
"\n",
" industry_data = industry_data.rename(columns={'ts_code': 'cat_l2_code'})\n",
" return industry_data\n",
"\n",
"industry_df = read_industry_data('../../data/sw_daily.h5')\n"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "53f86ddc0677a6d7",
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-01T04:00:27.633429700Z",
"start_time": "2025-02-27T16:36:56.276375Z"
},
"scrolled": true
},
"outputs": [],
"source": [
"origin_columns = df.columns.tolist()\n",
"origin_columns = [col for col in origin_columns if col not in ['turnover_rate', 'pe_ttm', 'volume_ratio', 'l2_code']]\n",
"origin_columns = [col for col in origin_columns if col not in index_data.columns]\n"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "dbe2fd8021b9417f",
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-01T04:00:27.633429700Z",
"start_time": "2025-02-27T16:36:56.417914Z"
},
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"Index: 5567976 entries, 1962 to 5567975\n",
"Data columns (total 72 columns):\n",
" # Column Dtype \n",
"--- ------ ----- \n",
" 0 ts_code object \n",
" 1 trade_date datetime64[ns]\n",
" 2 open float64 \n",
" 3 close float64 \n",
" 4 high float64 \n",
" 5 low float64 \n",
" 6 vol float64 \n",
" 7 turnover_rate float64 \n",
" 8 pe_ttm float64 \n",
" 9 circ_mv float64 \n",
" 10 volume_ratio float64 \n",
" 11 is_st bool \n",
" 12 up_limit float64 \n",
" 13 down_limit float64 \n",
" 14 buy_sm_vol float64 \n",
" 15 sell_sm_vol float64 \n",
" 16 buy_lg_vol float64 \n",
" 17 sell_lg_vol float64 \n",
" 18 buy_elg_vol float64 \n",
" 19 sell_elg_vol float64 \n",
" 20 net_mf_vol float64 \n",
" 21 cat_l2_code object \n",
" 22 log_close float64 \n",
" 23 up float64 \n",
" 24 down float64 \n",
" 25 atr_14 float64 \n",
" 26 atr_6 float64 \n",
" 27 obv float64 \n",
" 28 maobv_6 float64 \n",
" 29 obv-maobv_6 float64 \n",
" 30 rsi_3 float64 \n",
" 31 rsi_6 float64 \n",
" 32 rsi_9 float64 \n",
" 33 return_5 float64 \n",
" 34 return_10 float64 \n",
" 35 return_20 float64 \n",
" 36 avg_close_5 float64 \n",
" 37 std_return_5 float64 \n",
" 38 std_return_15 float64 \n",
" 39 std_return_25 float64 \n",
" 40 std_return_90 float64 \n",
" 41 std_return_90_2 float64 \n",
" 42 std_return_5 / std_return_90 float64 \n",
" 43 std_return_5 / std_return_25 float64 \n",
" 44 std_return_90 - std_return_90_2 float64 \n",
" 45 ema_5 float64 \n",
" 46 ema_13 float64 \n",
" 47 ema_20 float64 \n",
" 48 ema_60 float64 \n",
" 49 act_factor1 float64 \n",
" 50 act_factor2 float64 \n",
" 51 act_factor3 float64 \n",
" 52 act_factor4 float64 \n",
" 53 cat_af1 bool \n",
" 54 cat_af2 bool \n",
" 55 cat_af3 bool \n",
" 56 cat_af4 bool \n",
" 57 act_factor5 float64 \n",
" 58 act_factor6 float64 \n",
" 59 rank_act_factor1 float64 \n",
" 60 rank_act_factor2 float64 \n",
" 61 rank_act_factor3 float64 \n",
" 62 active_buy_volume_large float64 \n",
" 63 active_buy_volume_big float64 \n",
" 64 active_buy_volume_small float64 \n",
" 65 buy_lg_vol_minus_sell_lg_vol float64 \n",
" 66 buy_elg_vol_minus_sell_elg_vol float64 \n",
" 67 log(circ_mv) float64 \n",
" 68 alpha_022 float64 \n",
" 69 alpha_003 float64 \n",
" 70 alpha_007 float64 \n",
" 71 alpha_013 float64 \n",
"dtypes: bool(5), datetime64[ns](1), float64(64), object(2)\n",
"memory usage: 2.8+ GB\n",
"None\n"
]
}
],
"source": [
"def filter_data(df):\n",
" # df = df.groupby('trade_date').apply(lambda x: x.nlargest(1000, 'act_factor1'))\n",
" df = df[~df['is_st']]\n",
" df = df[~df['ts_code'].str.endswith('BJ')]\n",
" df = df[~df['ts_code'].str.startswith('30')]\n",
" df = df[~df['ts_code'].str.startswith('68')]\n",
" df = df[~df['ts_code'].str.startswith('8')]\n",
" df = df.reset_index(drop=True)\n",
" return df\n",
"\n",
"\n",
"df = filter_data(df)\n",
"df = get_technical_factor(df)\n",
"df = get_act_factor(df)\n",
"df = get_money_flow_factor(df)\n",
"df = get_alpha_factor(df)\n",
"# df = df.merge(industry_df, on=['l2_code', 'trade_date'], how='left')\n",
"df = df.rename(columns={'l2_code': 'cat_l2_code'})\n",
"# df = df.merge(index_data, on='trade_date', how='left')\n",
"\n",
"print(df.info())"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "d345bcc43b15579e",
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-01T04:00:27.648343Z",
"start_time": "2025-02-27T16:38:24.536432Z"
}
},
"outputs": [],
"source": [
"def create_deviation_within_dates(df, feature_columns):\n",
" groupby_col = 'cat_l2_code' # 使用 trade_date 进行分组\n",
" new_columns = {}\n",
" ret_feature_columns = feature_columns[:]\n",
"\n",
" # 自动选择所有数值型特征\n",
" num_features = [col for col in feature_columns if 'cat' not in col and 'index' not in col]\n",
" num_features = [col for col in feature_columns if 'cat' not in col and 'industry' not in col]\n",
"\n",
" # 遍历所有数值型特征\n",
" for feature in num_features:\n",
" if feature == 'trade_date': # 不需要对 'trade_date' 计算偏差\n",
" continue\n",
"\n",
" # grouped_median = df.groupby(['trade_date', groupby_col])[feature].transform('median')\n",
" # deviation_col_name = f'deviation_median_{feature}'\n",
" # new_columns[deviation_col_name] = df[feature] - grouped_median\n",
" # ret_feature_columns.append(deviation_col_name)\n",
"\n",
" grouped_mean = df.groupby(['trade_date', groupby_col])[feature].transform('mean')\n",
" deviation_col_name = f'deviation_mean_{feature}'\n",
" new_columns[deviation_col_name] = df[feature] - grouped_mean\n",
" ret_feature_columns.append(deviation_col_name)\n",
"\n",
" # 将新计算的偏差特征与原始 DataFrame 合并\n",
" df = pd.concat([df, pd.DataFrame(new_columns)], axis=1)\n",
"\n",
" # for feature in ['obv', 'return_20', 'act_factor1', 'act_factor2', 'act_factor3', 'act_factor4']:\n",
" # df[f'deviation_industry_{feature}'] = df[feature] - df[f'industry_{feature}']\n",
"\n",
" return df, ret_feature_columns\n"
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "5f3d9aece75318cd",
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-01T04:00:27.648343Z",
"start_time": "2025-02-27T16:38:24.876179Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Removed 124442 outliers.\n"
]
}
],
"source": [
"def get_qcuts(series, quantiles):\n",
" q = pd.qcut(series, q=quantiles, labels=False, duplicates='drop')\n",
" return q[-1] # 返回窗口最后一个元素的分位数标签\n",
"\n",
"\n",
"import pandas as pd\n",
"\n",
"\n",
"def remove_outliers_label_percentile(label: pd.Series, lower_percentile: float = 0.01, upper_percentile: float = 0.99):\n",
" if not (0 <= lower_percentile < upper_percentile <= 1):\n",
" raise ValueError(\"Percentile values must satisfy 0 <= lower_percentile < upper_percentile <= 1.\")\n",
"\n",
" # Calculate lower and upper bounds based on percentiles\n",
" lower_bound = label.quantile(lower_percentile)\n",
" upper_bound = label.quantile(upper_percentile)\n",
"\n",
" # Filter out values outside the bounds\n",
" filtered_label = label[(label >= lower_bound) & (label <= upper_bound)]\n",
"\n",
" # Print the number of removed outliers\n",
" print(f\"Removed {len(label) - len(filtered_label)} outliers.\")\n",
" return filtered_label\n",
"\n",
"\n",
"def calculate_risk_adjusted_target(df, days=5):\n",
" df = df.sort_values(by=['ts_code', 'trade_date'])\n",
"\n",
" df['future_close'] = df.groupby('ts_code')['close'].shift(-days)\n",
" df['future_return'] = (df['future_close'] - df['close']) / df['close']\n",
"\n",
" df['future_volatility'] = df.groupby('ts_code')['future_return'].rolling(days, min_periods=1).std().reset_index(\n",
" level=0, drop=True)\n",
" df['sharpe_ratio'] = df['future_return'] * df['future_volatility']\n",
" df['sharpe_ratio'].replace([np.inf, -np.inf], np.nan, inplace=True)\n",
"\n",
" return df['sharpe_ratio']\n",
"\n",
"\n",
"future_close = df.groupby('ts_code')['close'].shift(-4)\n",
"future_return = (future_close - df['close']) / df['close']\n",
"df['label'] = future_return\n",
"df['label'] = remove_outliers_label_percentile(df['label'])\n",
"\n",
"# df = df.apply(lambda x: x.astype('float32') if x.dtype in ['float64', 'float32'] else x)\n",
"df = df.sort_values(by=['trade_date', 'ts_code'])\n",
"train_data = df[(df['trade_date'] <= '2023-01-01') & (df['trade_date'] >= '2016-01-01')]\n",
"test_data = df[(df['trade_date'] >= '2023-01-01') & (df['trade_date'] <= '2025-02-26')]\n",
"\n",
"train_data = train_data.groupby('trade_date', group_keys=False).apply(lambda x: x.nlargest(1000, 'return_20'))\n",
"test_data = test_data.groupby('trade_date', group_keys=False).apply(lambda x: x.nlargest(1000, 'return_20'))\n",
"\n",
"train_data = train_data.merge(industry_df, on=['cat_l2_code', 'trade_date'], how='left')\n",
"train_data = train_data.merge(index_data, on='trade_date', how='left')\n",
"test_data = test_data.merge(industry_df, on=['cat_l2_code', 'trade_date'], how='left')\n",
"test_data = test_data.merge(index_data, on='trade_date', how='left')\n",
"\n",
"train_data, test_data = train_data.replace([np.inf, -np.inf], np.nan), test_data.replace([np.inf, -np.inf], np.nan)\n"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "93d47ef451968346",
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-01T04:00:27.648343Z",
"start_time": "2025-02-27T16:38:53.216704Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['turnover_rate', 'pe_ttm', 'volume_ratio', 'cat_l2_code', 'log_close', 'up', 'down', 'atr_14', 'atr_6', 'obv', 'maobv_6', 'obv-maobv_6', 'rsi_3', 'rsi_6', 'rsi_9', 'return_5', 'return_10', 'return_20', 'avg_close_5', 'std_return_5', 'std_return_15', 'std_return_25', 'std_return_90', 'std_return_90_2', 'std_return_5 / std_return_90', 'std_return_5 / std_return_25', 'std_return_90 - std_return_90_2', 'ema_5', 'ema_13', 'ema_20', 'ema_60', 'act_factor1', 'act_factor2', 'act_factor3', 'act_factor4', 'cat_af1', 'cat_af2', 'cat_af3', 'cat_af4', 'act_factor5', 'act_factor6', 'rank_act_factor1', 'rank_act_factor2', 'rank_act_factor3', 'active_buy_volume_large', 'active_buy_volume_big', 'active_buy_volume_small', 'buy_lg_vol_minus_sell_lg_vol', 'buy_elg_vol_minus_sell_elg_vol', 'log(circ_mv)', 'alpha_022', 'alpha_003', 'alpha_007', 'alpha_013', 'industry_obv', 'industry_return_5', 'industry_return_20', 'industry_ema_5', 'industry_ema_13', 'industry_ema_20', 'industry_ema_60', 'industry_act_factor1', 'industry_act_factor2', 'industry_act_factor3', 'industry_act_factor4', 'industry_act_factor5', 'industry_act_factor6', 'industry_rank_act_factor1', 'industry_rank_act_factor2', 'industry_rank_act_factor3', 'industry_obv_deviation', 'industry_return_5_deviation', 'industry_return_20_deviation', 'industry_act_factor1_deviation', 'industry_act_factor2_deviation', 'industry_act_factor3_deviation', 'industry_act_factor4_deviation', 'industry_return_5_percentile', '000852.SH_MACD', '000905.SH_MACD', '399006.SZ_MACD', '000852.SH_MACD_hist', '000905.SH_MACD_hist', '399006.SZ_MACD_hist', '000852.SH_RSI', '000905.SH_RSI', '399006.SZ_RSI', '000852.SH_Signal_line', '000905.SH_Signal_line', '399006.SZ_Signal_line', '000852.SH_daily_return', '000905.SH_daily_return', '399006.SZ_daily_return']\n"
]
}
],
"source": [
"feature_columns = [col for col in train_data.columns if col not in ['trade_date',\n",
" 'ts_code',\n",
" 'label']]\n",
"feature_columns = [col for col in feature_columns if 'future' not in col]\n",
"feature_columns = [col for col in feature_columns if 'score' not in col]\n",
"feature_columns = [col for col in feature_columns if col not in origin_columns]\n",
"feature_columns = [col for col in feature_columns if not col.startswith('_')]\n",
"print(feature_columns)"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "572576eea818c865",
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-01T04:00:27.648343Z",
"start_time": "2025-02-27T16:38:53.484283Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"feature_columns size: 221\n",
"feature_columns size: 221\n",
"1136428\n",
"最小日期: 2017-04-06\n",
"最大日期: 2022-12-30\n",
"408601\n",
"最小日期: 2023-01-03\n",
"最大日期: 2025-02-26\n"
]
}
],
"source": [
"feature_columns_new = feature_columns[:]\n",
"train_data, feature_columns_new = create_deviation_within_dates(train_data, feature_columns)\n",
"print(f'feature_columns size: {len(feature_columns_new)}')\n",
"test_data, feature_columns_new = create_deviation_within_dates(test_data, feature_columns)\n",
"print(f'feature_columns size: {len(feature_columns_new)}')\n",
"\n",
"train_data = train_data.dropna(subset=feature_columns_new)\n",
"train_data = train_data.dropna(subset=['label'])\n",
"train_data = train_data.reset_index(drop=True)\n",
"\n",
"# print(test_data.tail())\n",
"test_data = test_data.dropna(subset=feature_columns_new)\n",
"# test_data = test_data.dropna(subset=['label'])\n",
"test_data = test_data.reset_index(drop=True)\n",
"\n",
"print(len(train_data))\n",
"print(f\"最小日期: {train_data['trade_date'].min().strftime('%Y-%m-%d')}\")\n",
"print(f\"最大日期: {train_data['trade_date'].max().strftime('%Y-%m-%d')}\")\n",
"print(len(test_data))\n",
"print(f\"最小日期: {test_data['trade_date'].min().strftime('%Y-%m-%d')}\")\n",
"print(f\"最大日期: {test_data['trade_date'].max().strftime('%Y-%m-%d')}\")"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "2d7e37432f551aea",
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-01T04:00:27.648343Z",
"start_time": "2025-02-27T16:39:44.144179Z"
}
},
"outputs": [],
"source": [
"cat_columns = [col for col in df.columns if col.startswith('cat')]\n",
"for col in cat_columns:\n",
" train_data[col] = train_data[col].astype('category')\n",
" test_data[col] = test_data[col].astype('category')"
]
},
{
"metadata": {},
"cell_type": "code",
"outputs": [],
"execution_count": null,
"source": [
"import torch\n",
"import torch.nn as nn\n",
"\n",
"class MultiTaskNNTransformerModel(nn.Module):\n",
" def __init__(self, input_dim, hidden_dim_nn, hidden_dim_transformer, num_heads, num_layers,\n",
" output_dim, task_type=\"regression\", num_classes=None):\n",
" super(MultiTaskNNTransformerModel, self).__init__()\n",
"\n",
" # 参数检查\n",
" if task_type not in [\"regression\", \"classification\", \"ranking\"]:\n",
" raise ValueError(\"task_type must be 'regression', 'classification', or 'ranking'\")\n",
" if task_type == \"classification\" and num_classes is None:\n",
" raise ValueError(\"num_classes must be specified for classification tasks\")\n",
"\n",
" # 3层全连接神经网络\n",
" self.fc1 = nn.Linear(input_dim, hidden_dim_nn)\n",
" self.fc2 = nn.Linear(hidden_dim_nn, hidden_dim_nn)\n",
" self.fc3 = nn.Linear(hidden_dim_nn, hidden_dim_transformer)\n",
" self.relu = nn.ReLU()\n",
"\n",
" # Transformer层\n",
" self.transformer = nn.Transformer(\n",
" d_model=hidden_dim_transformer, # Transformer的输入维度\n",
" nhead=num_heads, # 多头注意力机制的头数\n",
" num_encoder_layers=num_layers, # 编码器层数\n",
" num_decoder_layers=num_layers, # 解码器层数\n",
" dim_feedforward=hidden_dim_transformer * 2 # 前馈网络的隐藏层维度\n",
" )\n",
"\n",
" # 输出层\n",
" if task_type == \"classification\":\n",
" self.output_layer = nn.Linear(hidden_dim_transformer, num_classes) # 分类任务\n",
" else:\n",
" self.output_layer = nn.Linear(hidden_dim_transformer, output_dim) # 回归或排序任务\n",
"\n",
" # 激活函数用于分类任务的softmax或排序任务的sigmoid\n",
" self.task_type = task_type\n",
" if task_type == \"classification\":\n",
" self.activation = nn.Softmax(dim=1) # 分类任务使用Softmax\n",
" elif task_type == \"ranking\":\n",
" self.activation = nn.Sigmoid() # 排序任务使用Sigmoid\n",
" else:\n",
" self.activation = None # 回归任务不需要激活函数\n",
"\n",
" def forward(self, x):\n",
" \"\"\"\n",
" 前向传播函数。\n",
"\n",
" :param x: 输入数据 (batch_size, input_dim)\n",
" :return: 模型的输出 (batch_size, output_dim)\n",
" \"\"\"\n",
" # Step 1: 通过3层全连接神经网络提取特征\n",
" x = self.relu(self.fc1(x)) # 第一层\n",
" x = self.relu(self.fc2(x)) # 第二层\n",
" x = self.relu(self.fc3(x)) # 第三层\n",
"\n",
" # Step 2: 添加序列维度 (batch_size, seq_len=1, hidden_dim_transformer)\n",
" x = x.unsqueeze(1)\n",
"\n",
" # Step 3: 通过Transformer处理\n",
" transformer_output = self.transformer(x, x).squeeze(1) # 移除序列维度\n",
"\n",
" # Step 4: 通过输出层得到最终预测\n",
" output = self.output_layer(transformer_output)\n",
"\n",
" # Step 5: 根据任务类型应用激活函数\n",
" if self.activation is not None:\n",
" output = self.activation(output)\n",
"\n",
" return output"
],
"id": "d8a5eba1e446b79a"
},
{
"cell_type": "code",
"execution_count": 25,
"id": "8f134d435f71e9e2",
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-01T04:00:27.668543Z",
"start_time": "2025-02-27T16:39:44.618725Z"
},
"jupyter": {
"source_hidden": true
}
},
"outputs": [],
"source": [
"from sklearn.preprocessing import StandardScaler\n",
"\n",
"\n",
"# 自定义Dataset类\n",
"class TradeDateDataset(Dataset):\n",
" def __init__(self, data_df, feature_columns, label_column, scaler=None, one_hot_encoder=None):\n",
" self.data = []\n",
"\n",
" # 按trade_date分组\n",
" grouped = data_df.groupby('trade_date')\n",
" for trade_date, group in grouped:\n",
" X = group[feature_columns].values\n",
" y = group[label_column].values\n",
"\n",
" # 标准化数值型特征\n",
" if scaler is not None:\n",
" numeric_columns = group[feature_columns].select_dtypes(include=['float64', 'int64']).columns\n",
" X[:, [feature_columns.index(col) for col in numeric_columns]] = scaler.transform(\n",
" group[numeric_columns]\n",
" )\n",
"\n",
" # 对类别型特征进行One-Hot编码\n",
" if one_hot_encoder is not None:\n",
" categorical_columns = group[feature_columns].select_dtypes(include=['object', 'category']).columns\n",
" X_categorical = one_hot_encoder.transform(group[categorical_columns]).toarray()\n",
" X = np.hstack([X, X_categorical]) # 将One-Hot编码与数值型特征拼接\n",
"\n",
" self.data.append((X, y))\n",
"\n",
" def __len__(self):\n",
" return len(self.data)\n",
"\n",
" def __getitem__(self, idx):\n",
" return self.data[idx]\n",
"\n",
"def train_transformer_model(train_data_df, test_data_df, feature_columns, label_column,\n",
" output_dim=1, task='regression',\n",
" hidden_dim=64, num_heads=4, num_layers=2,\n",
" dropout=0.1, learning_rate=0.001, num_epochs=10, batch_size=32):\n",
" # 数据预处理\n",
" train_data_df = train_data_df.dropna(subset=[label_column])\n",
" test_data_df = test_data_df.dropna(subset=[label_column])\n",
"\n",
" # 标准化数值型特征\n",
" scaler = StandardScaler()\n",
" numeric_columns = train_data_df[feature_columns].select_dtypes(include=['float64', 'int64']).columns\n",
" scaler.fit(train_data_df[numeric_columns])\n",
"\n",
" # 对类别型特征进行One-Hot编码\n",
" one_hot_encoder = OneHotEncoder(sparse=False, handle_unknown='ignore')\n",
" categorical_columns = train_data_df[feature_columns].select_dtypes(include=['object', 'category']).columns\n",
" one_hot_encoder.fit(train_data_df[categorical_columns])\n",
"\n",
" # 创建Dataset\n",
" train_dataset = TradeDateDataset(train_data_df, feature_columns, label_column, scaler, one_hot_encoder)\n",
" test_dataset = TradeDateDataset(test_data_df, feature_columns, label_column, scaler, one_hot_encoder)\n",
"\n",
" # 创建DataLoader\n",
" train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)\n",
" test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False)\n",
"\n",
" # 初始化模型、损失函数和优化器\n",
" input_dim = len(numeric_columns) + len(one_hot_encoder.get_feature_names_out())\n",
" model = TransformerModel(input_dim, hidden_dim, output_dim, num_heads, num_layers, dropout)\n",
"\n",
" if task == 'classification':\n",
" criterion = nn.CrossEntropyLoss()\n",
" elif task == 'regression':\n",
" criterion = nn.MSELoss()\n",
" else:\n",
" raise ValueError(\"Unsupported task type. Choose 'classification' or 'regression'.\")\n",
"\n",
" optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)\n",
"\n",
" # 训练循环\n",
" train_losses, val_losses = [], []\n",
" for epoch in range(num_epochs):\n",
" model.train()\n",
" running_loss = 0.0\n",
"\n",
" for X_batch, y_batch in train_loader:\n",
" X_batch = torch.tensor(X_batch, dtype=torch.float32)\n",
" if task == 'classification':\n",
" y_batch = torch.tensor(y_batch, dtype=torch.long)\n",
" elif task == 'regression':\n",
" y_batch = torch.tensor(y_batch, dtype=torch.float32).unsqueeze(1)\n",
"\n",
" # 前向传播\n",
" output = model(X_batch)\n",
"\n",
" # 计算损失\n",
" loss = criterion(output, y_batch)\n",
"\n",
" # 反向传播\n",
" optimizer.zero_grad()\n",
" loss.backward()\n",
" optimizer.step()\n",
"\n",
" running_loss += loss.item()\n",
"\n",
" train_losses.append(running_loss / len(train_loader))\n",
" print(f\"Epoch {epoch+1}/{num_epochs}, Loss: {train_losses[-1]:.4f}\")\n",
"\n",
" # 测试阶段\n",
" model.eval()\n",
" val_loss = 0.0\n",
" with torch.no_grad():\n",
" for X_batch, y_batch in test_loader:\n",
" X_batch = torch.tensor(X_batch, dtype=torch.float32)\n",
" if task == 'classification':\n",
" y_batch = torch.tensor(y_batch, dtype=torch.long)\n",
" elif task == 'regression':\n",
" y_batch = torch.tensor(y_batch, dtype=torch.float32).unsqueeze(1)\n",
"\n",
" output = model(X_batch)\n",
" loss = criterion(output, y_batch)\n",
" val_loss += loss.item()\n",
"\n",
" val_losses.append(val_loss / len(test_loader))\n",
" print(f\"Validation Loss: {val_losses[-1]:.4f}\")\n",
"\n",
" # 可视化损失曲线\n",
" plt.plot(train_losses, label=\"Training Loss\")\n",
" plt.plot(val_losses, label=\"Validation Loss\")\n",
" plt.legend()\n",
" plt.show()\n",
"\n",
" return model, scaler, one_hot_encoder"
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "4a4542e1ed6afe7d",
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-01T04:00:27.668543Z",
"start_time": "2025-02-27T16:39:44.838044Z"
}
},
"outputs": [],
"source": [
"light_params = {\n",
" # 'objective': 'regression',\n",
" # 'metric': 'l2',\n",
" 'objective': 'quantile', # 分位回归\n",
" 'metric': 'quantile', # 使用 quantile 作为评估指标\n",
" 'alpha': 0.75, # 90% 分位数\n",
" 'learning_rate': 0.05,\n",
" 'is_unbalance': True,\n",
" 'num_leaves': 1024,\n",
" 'min_data_in_leaf': 128,\n",
" 'max_depth': 32,\n",
" 'max_bin': 1024,\n",
" 'feature_fraction': 0.7,\n",
" 'bagging_fraction': 0.7,\n",
" 'bagging_freq': 5,\n",
" 'lambda_l1': 1,\n",
" 'lambda_l2': 1,\n",
" # 'boosting_type': 'dart',\n",
" 'verbosity': -1,\n",
" 'seed': 17\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "beeb098799ecfa6a",
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-01T04:00:27.668543Z",
"start_time": "2025-02-27T16:39:45.091206Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"train data size: 1136428\n",
"categorical_feature: [3, 35, 36, 37, 38]\n",
"Training until validation scores don't improve for 50 rounds\n",
"Early stopping, best iteration is:\n",
"[31]\ttrain's quantile: 0.014632\tvalid's quantile: 0.0152371\n",
"Evaluated only: quantile\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAksAAAHFCAYAAADi7703AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAABvFElEQVR4nO3deVxU9f7H8dcwbLJvyqIgIO67oLlkaKam5W0xWy2t7HfNuqW2d5f2tJuVdUttcWnPulbXSlNMRStXFHNfUVxABERAFAY4vz9GRhEkQHRY3s/H4zxgznzPOZ/PDDAfvud7vsdkGIaBiIiIiJTLwd4BiIiIiNRmKpZEREREKqBiSURERKQCKpZEREREKqBiSURERKQCKpZEREREKqBiSURERKQCKpZEREREKqBiSURERKQCKpZE6qA5c+ZgMpkwmUwsX768zPOGYRAVFYXJZKJfv37VOsa0adOYM2dOlbZZvnz5BWOqKZfqGJcj9gvZtm0bzz//PPv3778k+3/++ecxmUzV2taer4tIbaFiSaQO8/T0ZObMmWXWx8fHs3fvXjw9Pau97+oUS926dWPVqlV069at2se1F3vGvm3bNl544YVLViyNGTOGVatWVWvbuvyeitQUFUsiddhtt93GvHnzyM7OLrV+5syZ9OrVi7CwsMsSh8ViobCwEC8vL3r27ImXl9dlOW5NqIux5+XlVal9s2bN6NmzZ7WOVZdeF5FLRcWSSB12xx13APDll1/a1p04cYJ58+Zx3333lbtNQUEBL7/8Mm3atMHFxYXGjRtz7733cuzYMVub8PBwtm7dSnx8vO10X3h4OHD2tMynn37KY489RtOmTXFxcWHPnj0XPGWzZs0ahg0bhr+/P66urrRo0YLx48f/aX47duzg2muvxc3NjYCAAMaOHUtOTk6ZduHh4YwePbrM+n79+pU6DVnV2EePHo2Hhwd79uxh6NCheHh4EBoaymOPPUZ+fn6pYx06dIhbbrkFT09PfHx8uOuuu1i3bh0mk6nCHro5c+YwYsQIAPr37297vUu26devHx06dGDFihX07t0bNzc323s7d+5cBg0aRHBwMI0aNaJt27Y8/fTTnDx5stQxyjsNFx4ezvXXX8/PP/9Mt27daNSoEW3atGHWrFml2tnrdRGpTVQsidRhXl5e3HLLLaU+4L788kscHBy47bbbyrQvLi7mhhtuYPLkydx555389NNPTJ48mbi4OPr168epU6cA+O6774iMjKRr166sWrWKVatW8d1335Xa1zPPPENycjIzZszghx9+oEmTJuXGuGjRIvr27UtycjJvvvkmCxcu5B//+AdHjx6tMLejR48SGxvLli1bmDZtGp9++im5ubk8/PDDVX2Zyqhs7GDtefrLX/7CgAED+N///sd9993HW2+9xWuvvWZrc/LkSfr378+yZct47bXX+PrrrwkMDCz3PTjfddddx6uvvgrAe++9Z3u9r7vuOlublJQURo4cyZ133smCBQsYN24cALt372bo0KHMnDmTn3/+mfHjx/P1118zbNiwSr0OmzZt4rHHHmPChAn873//o1OnTtx///2sWLHiT7e91K+LSK1iiEidM3v2bAMw1q1bZyxbtswAjC1bthiGYRjdu3c3Ro8ebRiGYbRv396IjY21bffll18agDFv3rxS+1u3bp0BGNOmTbOtO3/bEiXHu+qqqy743LJly2zrWrRoYbRo0cI4depUlXJ86qmnDJPJZCQmJpZaP3DgwDLHaN68uTFq1Kgy+4iNjS2VQ1VjHzVqlAEYX3/9dam2Q4cONVq3bm17/N577xmAsXDhwlLt/vrXvxqAMXv27Apz/eabb8oc+9wcAOOXX36pcB/FxcWGxWIx4uPjDcDYtGmT7bnnnnvOOP/PffPmzQ1XV1fjwIEDtnWnTp0y/Pz8jL/+9a+2dfZ8XURqC/UsidRxsbGxtGjRglmzZrF582bWrVt3wVNwP/74Iz4+PgwbNozCwkLb0qVLF4KCgqp0xdPw4cP/tM2uXbvYu3cv999/P66urpXeN8CyZcto3749nTt3LrX+zjvvrNJ+ylOZ2EuYTKYyPTWdOnXiwIEDtsfx8fF4enpy7bXXlmpXcpr0Yvn6+nL11VeXWb9v3z7uvPNOgoKCMJvNODk5ERsbC8D27dv/dL9dunQpNa7N1dWVVq1alcrtQmrD6yJyuTjaOwARuTgmk4l7772Xd955h9OnT9OqVSv69u1bbtujR4+SlZWFs7Nzuc+np6dX+rjBwcF/2qZkHFSzZs0qvd8SGRkZRERElFkfFBRU5X2drzKxl3BzcytT6Lm4uHD69Gnb44yMDAIDA8tsW9666igv3tzcXPr27Yurqysvv/wyrVq1ws3NjYMHD3LzzTfbTqlWxN/fv8w6FxeXSm1bG14XkctFxZJIPTB69Gj+9a9/MWPGDF555ZULtgsICMDf35+ff/653OerMtVAZebtady4MWAd5FtV/v7+pKamlllf3jpXV9cyA4vBWvwFBASUWV/dOYcuxN/fn7Vr15ZZX16s1VFevEuXLuXIkSMsX77c1psEkJWVVSPHrAmX+nURuVx0Gk6kHmjatClPPPEEw4YNY9SoURdsd/3115ORkUFRURExMTFlltatW9vaVraHoSKtWrWynSIsr5ipSP/+/dm6dSubNm0qtf6LL74o0zY8PJw//vij1Lpdu3axc+fOqgddDbGxseTk5LBw4cJS67/66qtKbe/i4gJQpde7pIAq2bbE+++/X+l9XGoX+7qI1BbqWRKpJyZPnvynbW6//XY+//xzhg4dyqOPPkqPHj1wcnLi0KFDLFu2jBtuuIGbbroJgI4dO/LVV18xd+5cIiMjcXV1pWPHjlWO67333mPYsGH07NmTCRMmEBYWRnJyMosWLeLzzz+/4Hbjx49n1qxZXHfddbz88ssEBgby+eefs2PHjjJt7777bkaOHMm4ceMYPnw4Bw4c4N///retZ+tSGzVqFG+99RYjR47k5ZdfJioqioULF7Jo0SIAHBwq/r+0Q4cOAHzwwQd4enri6upKREREuafJSvTu3RtfX1/Gjh3Lc889h5OTE59//nmZ4tKeLvZ1Eakt9JMq0oCYzWbmz5/Ps88+y7fffstNN93EjTfeyOTJk8sUQy+88AKxsbE88MAD9OjRo9KXo59v8ODBrFixguDgYB555BGuvfZaXnzxxT8dtxIUFER8fDzt2rXjwQcfZOTIkbi6uvLuu++WaXvnnXfy73//m0WLFnH99dczffp0pk+fTqtWraoVc1W5u7uzdOlS+vXrx5NPPsnw4cNJTk5m2rRpAPj4+FS4fUREBFOnTmXTpk3069eP7t2788MPP1S4jb+/Pz/99BNubm6MHDmS++67Dw8PD+bOnVtTaV20i31dRGoLk2EYhr2DEBGpj1599VX+8Y9/kJycXK1B7vWVXhepa3QaTkSkBpT0eLVp0waLxcLSpUt55513GDlyZIMuCPS6SH2gYklEpAa4ubnx1ltvsX//fvLz8wkLC+Opp57iH//4h71Dsyu9LlIf6DSciIiISAU0wFtERESkAiqWRERERCqgYklERESkAhrgXU3F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UCNXz13+6+9ERERELgN3p5rZj4olERERkQqoWBIRERGpgIolERERkQqoWBIRERGpgIolERERkQqoWBIRERGpgIolERERkQqoWBIRERGpgIolERERkQqoWBIRERGpgIolERERkQqoWBIRERGpgIolERERkQqoWBIRERGpgIolERERkQqoWBIRERGpgIolERERkQqoWBIRERGpgIolERERkQqoWBIRERGpgIolERERkQqoWBIRERGpgIolERERkQqoWBIRERGpgIolERERkQqoWBIRERGpgIolERERkQqoWBIRERGpgIolERERkQqoWBIRERGpgIolERERkQqoWBIRERGpgN2LpWnTphEREYGrqyvR0dGsXLmywvbx8fFER0fj6upKZGQkM2bMKPX81q1bGT58OOHh4ZhMJqZOnVpmH9OnT6dTp054eXnh5eVFr169WLhwYU2mJSIiIvWEXYuluXPnMn78eP7+97+zceNG+vbty5AhQ0hOTi63fVJSEkOHDqVv375s3LiRZ599lkceeYR58+bZ2uTl5REZGcnkyZMJCgoqdz/NmjVj8uTJrF+/nvXr13P11Vdzww03sHXr1kuSp4iIiNRddi2W3nzzTe6//37GjBlD27ZtmTp1KqGhoUyfPr3c9jNmzCAsLIypU6fStm1bxowZw3333ceUKVNsbbp3787rr7/O7bffjouLS7n7GTZsGEOHDqVVq1a0atWKV155BQ8PD1avXn1J8hQREZG6y9FeBy4oKCAhIYGnn3661PpBgwbx+++/l7vNqlWrGDRoUKl1gwcPZubMmVgsFpycnKocR1FREd988w0nT56kV69eF2yXn59Pfn6+7XF2djYAFosFi8VS5ePWRSV5NpR8SzTEvJVzw9AQc4aGmbdyLru+KuxWLKWnp1NUVERgYGCp9YGBgaSmppa7TWpqarntCwsLSU9PJzg4uNLH37x5M7169eL06dN4eHjw3Xff0a5duwu2nzRpEi+88EKZ9cuWLcPNza3Sx60P4uLi7B2CXTTEvJVzw9AQc4aGmbdytg7XqSq7FUslTCZTqceGYZRZ92fty1v/Z1q3bk1iYiJZWVnMmzePUaNGER8ff8GC6ZlnnmHixIm2x9nZ2YSGhtK/f3/8/f2rdOy6ymKxEBcXx8CBA6vVi1dXNcS8lbNyrs8aYt7K+WzOJWeGqsJuxVJA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kPOLpfqYd8m8Mk5OTkZISIhx8803G1u3brU9Xx9zNgzD+OGHH4wOHToYLi4uRps2bYwPPvig1PP1Me9FixYZgLFz584yz9XHfLOzs41HH33UCAsLM1xdXY3IyEjj73//u5Gfn29rUxN5mwzDMKrb/SUiIiJS32nMkoiIiEgFVCyJiIiIVEDFkoiIiEgFVCyJiIiIVEDFkoiIiEgFVCyJiIiIVEDFkoiIiEgFVCyJiFRSeHg4U6dOtXcYInKZqVgSkVpp9OjR3HjjjQD069eP8ePHX7Zjz5kzBx8fnzLr161bx//93/9dtjhEpHZwtHcAIiKXS0FBAc7OztXevnHjxjUYjYjUFepZEpFabfTo0cTHx/P2229jMpkwmUzs378fgG3btjF06FA8PDwIDAzk7rvvJj093bZtv379ePjhh5k4cSIBAQEMHDgQgDfffJOOHTvi7u5OaGgo48aNIzc3F4Dly5dz7733cuLECdvxnn/+eaDsabjk5GRuuOEGPDw88PLy4tZbb+Xo0aO2559//nm6dOnCp59+Snh4ON7e3tx+++3k5OTY2vz3v/+lY8eONGrUCH9/f6655hpOnjx5iV5NEakOFUsiUqu9/fbb9OrViwceeICUlBRSUlIIDQ0lJSWF2NhYunTpwvr16/n55585evQot956a6ntP/74YxwdHfntt994//33AXBwcOCdd95hy5YtfPzxxyxdupQnn3wSgN69ezN16lS8vLxsx3v88cfLxGUYBjfeeCOZmZnEx8cTFxfH3r17ue2220q127t3L99//z0//vgjP/74I/Hx8UyePBmAlJQU7rjjDu677z62b9/O8uXLufnmm9EtO0VqF52GE5FazdvbG2dnZ9zc3AgKCrKtnz59Ot26dePVV1+1rZs1axahoaHs2rWLVq1aARAVFcW///3vUvs8d/xTREQEL730Eg8++CDTpk3D2dkZb29vTCZTqeOdb8mSJfzxxx8kJSURGhoKwKeffkr79u1Zt24d3bt3B6C4uJg5c+bg6ekJwN13380vv/zCK6+8QkpKCoWFhdx88800b94cgI4dO17EqyUil4J6lkSkTkpISGDZsmV4eHjYljZt2gDW3pwSMTExZbZdtmwZAwcOpGnTpnh6enLPPfeQkZFRpdNf27dvJzQ01FYoAbRr1w4fHx+2b99uWxceHm4rlACCg4NJS0sDoHPnzgwYMICOHTsyYsQIPvzwQ44fP175F0FELgsVSyJSJxUXFzNs2DASExNLLbt37+aqq66ytXN3dy+13YEDBxg6dCgdOnRg3rx5JCQk8N577wFgsVgqfXzDMDCZTH+63snJqdTzJpOJ4uJiAMxmM3FxcSxcuJB27drxn//8h9atW5OUlFTpOETk0lOxJCK1nrOzM0VFRaXWdevWja1btxIeHk5UVFSp5fwC6Vzr16+nsLCQN954g549e9KqVSuOHDnyp8c7X7t27UhOTubgwYO2ddu2bePEiRO0bdu20rmZTCb69OnDCy+8wMaNG3F2dua7776r9PYicumpWBKRWi88PJw1a9awf/9+0tPTKS4u5qGHHiIzM5M77riDtWvXsm/fPhYvXsx9991XYaHTokULCgsL+c9//sO+ffv49NNPmTFjRpnj5ebm8ssvv5Cenk5eXl6Z/VxzzTV06tSJu+66iw0bNrB27VruueceYmNjyz31V541a9bw6quvsn79epKTk/n22285duxYlYotEbn0VCyJSK33+OOPYzabadeuHY0bNyY5OZmQkBB+++03ioqKGDx4MB06dODRRx/F29sbB4cL/2nr0qULb775Jq+99hodOnTg888/Z9KkSaXa9O7dm7Fjx3LbbbfRuHHjMgPEwdoj9P333+Pr68tVV13FNddcQ2RkJHPnzq10Xl5eXqxYsYKhQ4fSqlUr/vGPf/DGG28wZMiQyr84InLJmQxdoyoiIiJyQepZEhEREamAiiURERGRCqhYEhEREamAiiURERGRCqhYEhEREamAiiURERGRCqhYEhEREamAiiURERGRCqhYEhEREamAiiURERGRCqhYEhEREamAiiURERGRCvw/j4nwo2mmCrYAAAAASUVORK5CYII=",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"print('train data size: ', len(train_data))\n",
"\n",
"evals = {}\n",
"model = train_light_model(train_data, test_data, light_params, feature_columns_new,\n",
" [lgb.log_evaluation(period=500),\n",
" lgb.callback.record_evaluation(evals),\n",
" lgb.early_stopping(50, first_metric_only=True)\n",
" ], evals,\n",
" num_boost_round=500, use_optuna=False,\n",
" print_feature_importance=True)"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "63235069-dc59-48fb-961a-e80373e41a61",
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-01T04:00:27.668543Z",
"start_time": "2025-02-27T16:41:14.573661Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"train data size: 1136428\n"
]
}
],
"source": [
"print('train data size: ', len(train_data))\n",
"\n",
"catboost_params = {\n",
" 'loss_function': 'MAE', # 90% 分位回归\n",
" 'iterations': 5000, # 训练轮数\n",
" 'learning_rate': 0.05, # 学习率,较低以防止过拟合\n",
" 'depth': 10, # 树的深度,防止过拟合\n",
" # 'l1_leaf_reg': 10.0, # l1 正则化,提高泛化能力\n",
" # 'bagging_temperature': 1, # 降低过拟合\n",
" # 'subsample': 0.8, # 每轮随机 80% 的样本,减少过拟合\n",
" 'colsample_bylevel': 0.8, # 每层 80% 特征子集,防止过拟合\n",
" 'random_seed': 42, # 固定随机种子,保证可复现\n",
" 'verbose': 500, # 每 100 轮打印一次信息\n",
" 'early_stopping_rounds': 100, # 早停,防止过拟合\n",
" # 'task_type': 'GPU'\n",
"}\n",
"\n",
"# model = train_catboost(train_data, test_data, feature_columns_new, catboost_params)"
]
},
{
"cell_type": "code",
"execution_count": 29,
"id": "465944b1d463e4b1",
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-01T04:00:27.668543Z",
"start_time": "2025-02-27T16:41:14.863552Z"
}
},
"outputs": [],
"source": [
"from tqdm import tqdm\n",
"\n",
"def incremental_training(test_data: pd.DataFrame,\n",
" model,\n",
" days: int,\n",
" back_days: int,\n",
" feature_columns: list,\n",
" params: dict,\n",
" model_type: str = 'lightgbm'):\n",
" if model_type not in ['lightgbm', 'catboost']:\n",
" raise ValueError(\"model_type must be either 'lightgbm' or 'catboost'\")\n",
"\n",
" test_data = test_data.sort_values(by='trade_date')\n",
" scores = []\n",
" unique_trade_dates = sorted(test_data['trade_date'].unique())\n",
"\n",
" new_model = None\n",
" for i in tqdm(range(0, len(unique_trade_dates), days)):\n",
" # Get the current window of trade dates\n",
" current_dates = unique_trade_dates[i:i + days]\n",
" window_data = test_data[test_data['trade_date'].isin(current_dates)]\n",
" window_data = window_data.sort_values(by=['ts_code', 'trade_date'])\n",
" X = window_data[feature_columns]\n",
"\n",
" if new_model is not None:\n",
" window_scores = new_model.predict(X, prediction_type='RawFormulaVal')\n",
" else:\n",
" window_scores = model.predict(X, prediction_type='RawFormulaVal')\n",
" scores.extend(window_scores)\n",
"\n",
" # # Prepare data for incremental training\n",
" # current_dates = unique_trade_dates[max(0, i - back_days):i + days]\n",
" # window_data = test_data[test_data['trade_date'].isin(current_dates)]\n",
" # X_train = window_data[feature_columns]\n",
" window_data = window_data.dropna(subset=['label'])\n",
" X_train = window_data[feature_columns]\n",
" y_train = window_data['label'] # Assuming 'label' is what you're predicting\n",
" # Incrementally train the model\n",
" if len(y_train.unique()) > 1:\n",
" if model_type == 'lightgbm':\n",
" categorical_feature = [i for i, col in enumerate(feature_columns) if col.startswith('cat')]\n",
" train_data = lgb.Dataset(X_train, label=y_train, categorical_feature=categorical_feature)\n",
" new_model = lgb.train(params,\n",
" train_set=train_data,\n",
" num_boost_round=100,\n",
" init_model=model,\n",
" keep_training_booster=True)\n",
" elif model_type == 'catboost':\n",
" from catboost import Pool\n",
" train_data = Pool(data=X_train, label=y_train, cat_features=[col for col in feature_columns if col.startswith('cat')])\n",
" # model.set_params(**params)\n",
" model.fit(train_data, init_model=model)\n",
" else:\n",
" print(current_dates)\n",
"\n",
" # Add the scores as a new 'score' column to the test_data\n",
" test_data['score'] = scores\n",
" return test_data"
]
},
{
"cell_type": "code",
"execution_count": 32,
"id": "e3ac761d8f0b5d31",
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-01T04:00:27.672656900Z",
"start_time": "2025-02-27T16:41:15.107891Z"
}
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|████████████████████████████████████████████████████████████████████████████████| 104/104 [00:51<00:00, 2.03it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[Timestamp('2025-02-25 00:00:00'), Timestamp('2025-02-26 00:00:00')]\n"
]
}
],
"source": [
"\n",
"predictions_test = incremental_training(test_data, model, 5, 0, feature_columns_new, light_params, model_type='lightgbm')\n",
"predictions_test = predictions_test.loc[predictions_test.groupby('trade_date')['score'].idxmax()]\n",
"predictions_test[['trade_date', 'score', 'ts_code']].to_csv('predictions_test.tsv', index=False)\n"
]
},
{
"cell_type": "code",
"execution_count": 31,
"id": "b427ce41-9739-4e9e-bea8-5f2551fec5d7",
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-01T04:00:27.672656900Z",
"start_time": "2025-02-27T16:42:45.229233Z"
},
"jupyter": {
"source_hidden": true
}
},
"outputs": [],
"source": [
"import joblib\n",
"import lightgbm as lgb\n",
"import pandas as pd\n",
"\n",
"# 假设你已经训练好了一个 LightGBM 模型\n",
"# model = lgb.train(params, train_data, ...)\n",
"\n",
"def save_model_with_info(model, params, feature_columns, train_data, info, save_path):\n",
" \"\"\"\n",
" 保存 LightGBM 模型及其相关信息。\n",
" \n",
" 参数:\n",
" model: 训练好的 LightGBM 模型 (lgb.Booster)。\n",
" params: 模型的参数 (dict)。\n",
" feature_columns: 特征列名列表 (list)。\n",
" train_data: 训练数据 (pd.DataFrame),包含 'trade_date' 列。\n",
" info: 额外信息 (str 或 dict)。\n",
" save_path: 保存路径 (str)。\n",
" \"\"\"\n",
" # 提取训练数据的 trade_date 的最大值和最小值\n",
" if 'trade_date' not in train_data.columns:\n",
" raise ValueError(\"训练数据中必须包含 'trade_date' 列。\")\n",
" \n",
" trade_date_min = train_data['trade_date'].min()\n",
" trade_date_max = train_data['trade_date'].max()\n",
" \n",
" # 构建保存的信息字典\n",
" model_info = {\n",
" 'model': model, # 保存模型本身\n",
" 'params': params, # 模型参数\n",
" 'feature_columns': feature_columns, # 特征列名\n",
" 'trade_date_range': {\n",
" 'min': trade_date_min,\n",
" 'max': trade_date_max\n",
" }, # trade_date 的范围\n",
" 'info': info # 额外信息\n",
" }\n",
" \n",
" # 使用 joblib 保存模型及相关信息\n",
" joblib.dump(model_info, save_path)\n",
" print(f\"模型及相关信息已成功保存到 {save_path}\")\n",
"\n",
" \n",
"\n",
"# info = \"Update Regression + 滚动new model + 5days\"\n",
" \n",
"# # 保存模型及相关信息\n",
"# save_path = \"../model/lightgbm_model_UpdateRegression_2025-2-25.pkl\"\n",
"# save_model_with_info(model, light_params, feature_columns, train_data, info, save_path)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "8f9a2b7b-11fe-4eb5-aa11-c4066fe418a1",
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-01T04:00:27.672656900Z",
"start_time": "2025-02-27T16:42:45.450227Z"
}
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.8.19"
}
},
"nbformat": 4,
"nbformat_minor": 5
}