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

1407 lines
212 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": {
"jupyter": {
"source_hidden": true
},
"ExecuteTime": {
"end_time": "2025-03-01T10:01:24.391606Z",
"start_time": "2025-03-01T10:01:24.069449Z"
}
},
"source": [
"# %load_ext autoreload\n",
"# %autoreload 2\n",
"\n",
"import pandas as pd\n",
"\n",
"pd.set_option('display.max_columns', None)\n"
],
"outputs": [],
"execution_count": 1
},
{
"cell_type": "code",
"id": "a79cafb06a7e0e43",
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-01T10:02:01.510095Z",
"start_time": "2025-03-01T10:01:24.392790Z"
}
},
"source": [
"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: 8360947 entries, 0 to 8360946\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": "a4eec8c93f6a7cc3",
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-01T10:02:04.058688Z",
"start_time": "2025-03-01T10:02:01.684757Z"
}
},
"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": "c4e9e1d31da6dba6",
"metadata": {
"jupyter": {
"source_hidden": true
},
"ExecuteTime": {
"end_time": "2025-03-01T10:02:04.116043Z",
"start_time": "2025-03-01T10:02:04.067264Z"
}
},
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"\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",
"\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": "99776e73-f310-47c0-953e-2cf73ff13310",
"metadata": {
"jupyter": {
"source_hidden": true
},
"ExecuteTime": {
"end_time": "2025-03-01T10:02:04.160778Z",
"start_time": "2025-03-01T10:02:04.134780Z"
}
},
"source": [
"import numpy as np\n",
"import talib\n",
"\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['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),\n",
" 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),\n",
" 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(\n",
" 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": 5
},
{
"cell_type": "code",
"id": "c0ad4f64-a6c6-4e43-b7ba-3f2a36baaa64",
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-01T10:02:11.090680Z",
"start_time": "2025-03-01T10:02:04.160778Z"
}
},
"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(\n",
" lambda x: x - x.median())\n",
"\n",
" industry_data['return_5_percentile'] = industry_data.groupby('trade_date')['return_5'].transform(\n",
" lambda x: x.rank(pct=True))\n",
" industry_data = industry_data.drop(columns=['open', 'close', 'high', 'low', 'pe', 'pb', 'vol'])\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",
"\n",
"industry_df = read_industry_data('../../data/sw_daily.h5')\n"
],
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\liaozhaorun\\AppData\\Local\\Temp\\ipykernel_11956\\4080813444.py:11: DeprecationWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.\n",
" industry_data['obv'] = grouped.apply(\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n",
"E:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\numpy\\lib\\nanfunctions.py:1215: RuntimeWarning: Mean of empty slice\n",
" return np.nanmean(a, axis, out=out, keepdims=keepdims)\n"
]
}
],
"execution_count": 6
},
{
"cell_type": "code",
"id": "53f86ddc0677a6d7",
"metadata": {
"scrolled": true,
"ExecuteTime": {
"end_time": "2025-03-01T10:02:11.106136Z",
"start_time": "2025-03-01T10:02:11.102732Z"
}
},
"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"
],
"outputs": [],
"execution_count": 7
},
{
"cell_type": "code",
"id": "5f3d9aece75318cd",
"metadata": {
"scrolled": true,
"ExecuteTime": {
"end_time": "2025-03-01T10:03:15.010037Z",
"start_time": "2025-03-01T10:02:11.119055Z"
}
},
"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())"
],
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\liaozhaorun\\AppData\\Local\\Temp\\ipykernel_11956\\18893331.py:15: DeprecationWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.\n",
" df['atr_14'] = grouped.apply(\n",
"C:\\Users\\liaozhaorun\\AppData\\Local\\Temp\\ipykernel_11956\\18893331.py:19: DeprecationWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.\n",
" df['atr_6'] = grouped.apply(\n",
"C:\\Users\\liaozhaorun\\AppData\\Local\\Temp\\ipykernel_11956\\18893331.py:25: DeprecationWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.\n",
" df['obv'] = grouped.apply(\n",
"C:\\Users\\liaozhaorun\\AppData\\Local\\Temp\\ipykernel_11956\\18893331.py:28: DeprecationWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.\n",
" df['maobv_6'] = grouped.apply(\n",
"C:\\Users\\liaozhaorun\\AppData\\Local\\Temp\\ipykernel_11956\\18893331.py:34: DeprecationWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.\n",
" df['rsi_3'] = grouped.apply(\n",
"C:\\Users\\liaozhaorun\\AppData\\Local\\Temp\\ipykernel_11956\\18893331.py:37: DeprecationWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.\n",
" df['rsi_6'] = grouped.apply(\n",
"C:\\Users\\liaozhaorun\\AppData\\Local\\Temp\\ipykernel_11956\\18893331.py:40: DeprecationWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.\n",
" df['rsi_9'] = grouped.apply(\n",
"C:\\Users\\liaozhaorun\\AppData\\Local\\Temp\\ipykernel_11956\\18893331.py:146: DeprecationWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.\n",
" df['alpha_007'] = grouped.apply(lambda x: x['close'].rolling(5).corr(x['vol'])).reset_index(level=0, drop=True)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"Index: 5573859 entries, 1962 to 5573857\n",
"Data columns (total 71 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 up float64 \n",
" 23 down float64 \n",
" 24 atr_14 float64 \n",
" 25 atr_6 float64 \n",
" 26 obv float64 \n",
" 27 maobv_6 float64 \n",
" 28 obv-maobv_6 float64 \n",
" 29 rsi_3 float64 \n",
" 30 rsi_6 float64 \n",
" 31 rsi_9 float64 \n",
" 32 return_5 float64 \n",
" 33 return_10 float64 \n",
" 34 return_20 float64 \n",
" 35 avg_close_5 float64 \n",
" 36 std_return_5 float64 \n",
" 37 std_return_15 float64 \n",
" 38 std_return_25 float64 \n",
" 39 std_return_90 float64 \n",
" 40 std_return_90_2 float64 \n",
" 41 std_return_5 / std_return_90 float64 \n",
" 42 std_return_5 / std_return_25 float64 \n",
" 43 std_return_90 - std_return_90_2 float64 \n",
" 44 ema_5 float64 \n",
" 45 ema_13 float64 \n",
" 46 ema_20 float64 \n",
" 47 ema_60 float64 \n",
" 48 act_factor1 float64 \n",
" 49 act_factor2 float64 \n",
" 50 act_factor3 float64 \n",
" 51 act_factor4 float64 \n",
" 52 cat_af1 bool \n",
" 53 cat_af2 bool \n",
" 54 cat_af3 bool \n",
" 55 cat_af4 bool \n",
" 56 act_factor5 float64 \n",
" 57 act_factor6 float64 \n",
" 58 rank_act_factor1 float64 \n",
" 59 rank_act_factor2 float64 \n",
" 60 rank_act_factor3 float64 \n",
" 61 active_buy_volume_large float64 \n",
" 62 active_buy_volume_big float64 \n",
" 63 active_buy_volume_small float64 \n",
" 64 buy_lg_vol_minus_sell_lg_vol float64 \n",
" 65 buy_elg_vol_minus_sell_elg_vol float64 \n",
" 66 log(circ_mv) float64 \n",
" 67 alpha_022 float64 \n",
" 68 alpha_003 float64 \n",
" 69 alpha_007 float64 \n",
" 70 alpha_013 float64 \n",
"dtypes: bool(5), datetime64[ns](1), float64(63), object(2)\n",
"memory usage: 2.8+ GB\n",
"None\n"
]
}
],
"execution_count": 8
},
{
"cell_type": "code",
"id": "0ebdfb92-d88b-4b5c-a715-675dab876fc0",
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-01T10:03:15.119034Z",
"start_time": "2025-03-01T10:03:15.095810Z"
}
},
"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"
],
"outputs": [],
"execution_count": 9
},
{
"cell_type": "code",
"id": "fbb968383f8cf2c7",
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-01T10:03:33.404454Z",
"start_time": "2025-03-01T10:03:15.217954Z"
}
},
"source": [
"from sklearn.preprocessing import StandardScaler\n",
"\n",
"\n",
"def get_qcuts(series, quantiles):\n",
" q = pd.qcut(series, q=quantiles, labels=False, duplicates='drop')\n",
" return q[-1] # 返回窗口最后一个元素的分位数标签\n",
"\n",
"\n",
"window = 5\n",
"quantiles = 20\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",
"\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(\n",
" lambda x: x.nlargest(1000, 'return_20')\n",
")\n",
"test_data = test_data.groupby('trade_date', group_keys=False).apply(\n",
" lambda x: x.nlargest(1000, 'return_20')\n",
")\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)"
],
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\liaozhaorun\\AppData\\Local\\Temp\\ipykernel_11956\\1029324748.py:36: DeprecationWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.\n",
" train_data = train_data.groupby('trade_date', group_keys=False).apply(\n",
"C:\\Users\\liaozhaorun\\AppData\\Local\\Temp\\ipykernel_11956\\1029324748.py:39: DeprecationWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.\n",
" test_data = test_data.groupby('trade_date', group_keys=False).apply(\n"
]
}
],
"execution_count": 10
},
{
"cell_type": "code",
"id": "de8c2f6c770d2439",
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-01T10:03:33.451800Z",
"start_time": "2025-03-01T10:03:33.446956Z"
}
},
"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)"
],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['turnover_rate', 'pe_ttm', 'volume_ratio', 'cat_l2_code', '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"
]
}
],
"execution_count": 11
},
{
"cell_type": "code",
"id": "20ffa7229c9d2f86",
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-01T10:03:47.388358Z",
"start_time": "2025-03-01T10:03:33.451800Z"
}
},
"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",
"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')}\")"
],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"feature_columns size: 155\n",
"feature_columns size: 155\n",
"1166756\n",
"最小日期: 2017-04-06\n",
"最大日期: 2022-12-30\n",
"408601\n",
"最小日期: 2023-01-03\n",
"最大日期: 2025-02-26\n"
]
}
],
"execution_count": 12
},
{
"cell_type": "code",
"id": "35238cb4f45ce756",
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-01T10:03:47.536921Z",
"start_time": "2025-03-01T10:03:47.432730Z"
}
},
"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')"
],
"outputs": [],
"execution_count": 13
},
{
"cell_type": "code",
"id": "8f134d435f71e9e2",
"metadata": {
"jupyter": {
"source_hidden": true
},
"ExecuteTime": {
"end_time": "2025-03-01T10:03:48.200997Z",
"start_time": "2025-03-01T10:03:47.581003Z"
}
},
"source": [
"from catboost import Pool\n",
"import lightgbm as lgb\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"\n",
"def train_light_model(train_data_df, test_data_df, params, feature_columns, callbacks, evals,\n",
" print_feature_importance=True, num_boost_round=100,\n",
" use_optuna=False):\n",
" train_data_df, test_data_df = train_data_df.dropna(subset=['label']), test_data_df.dropna(subset=['label'])\n",
" categorical_feature = [i for i, col in enumerate(feature_columns) if col.startswith('cat')]\n",
" print(f'categorical_feature: {categorical_feature}')\n",
"\n",
" X_train = train_data_df[feature_columns]\n",
" y_train = train_data_df['label']\n",
"\n",
" X_val = test_data_df[feature_columns]\n",
" y_val = test_data_df['label']\n",
"\n",
" scaler = StandardScaler()\n",
" numeric_columns = X_train.select_dtypes(include=['float64', 'int64']).columns\n",
" X_train.loc[:, numeric_columns] = scaler.fit_transform(X_train[numeric_columns])\n",
" X_val.loc[:, numeric_columns] = scaler.transform(X_val[numeric_columns])\n",
"\n",
" train_data = lgb.Dataset(X_train, label=y_train, categorical_feature=categorical_feature)\n",
" val_data = lgb.Dataset(X_val, label=y_val, categorical_feature=categorical_feature)\n",
" model = lgb.train(\n",
" params, train_data, num_boost_round=num_boost_round,\n",
" valid_sets=[train_data, val_data], valid_names=['train', 'valid'],\n",
" callbacks=callbacks\n",
" )\n",
"\n",
" if print_feature_importance:\n",
" lgb.plot_metric(evals)\n",
" # lgb.plot_tree(model, figsize=(20, 8))\n",
" lgb.plot_importance(model, importance_type='split', max_num_features=20)\n",
" plt.show()\n",
" return model, scaler\n",
"\n",
"\n",
"from catboost import CatBoostClassifier\n",
"import pandas as pd\n",
"\n",
"\n",
"def train_catboost(train_data_df, test_data_df, feature_columns, params=None, plot=False):\n",
" train_data_df, test_data_df = train_data_df.dropna(subset=['label']), test_data_df.dropna(subset=['label'])\n",
" X_train = train_data_df[feature_columns]\n",
" y_train = train_data_df['label']\n",
"\n",
" X_val = test_data_df[feature_columns]\n",
" y_val = test_data_df['label']\n",
"\n",
" cat_features = [i for i, col in enumerate(feature_columns) if col.startswith('cat')]\n",
" print(f'cat_features: {cat_features}')\n",
" train_pool = Pool(data=X_train, label=y_train, cat_features=cat_features)\n",
" val_pool = Pool(data=X_val, label=y_val, cat_features=cat_features)\n",
"\n",
" model = CatBoostClassifier(**params)\n",
" model.fit(train_pool,\n",
" eval_set=val_pool, plot=plot)\n",
"\n",
" return model"
],
"outputs": [],
"execution_count": 14
},
{
"cell_type": "code",
"id": "4a4542e1ed6afe7d",
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-01T10:03:48.253523Z",
"start_time": "2025-03-01T10:03:48.248246Z"
}
},
"source": [
"light_params = {\n",
" 'objective': 'binary',\n",
" 'metric': 'average_precision',\n",
" 'learning_rate': 0.05,\n",
" 'is_unbalance': True,\n",
" 'num_leaves': 2048,\n",
" 'min_data_in_leaf': 1024,\n",
" 'max_depth': 32,\n",
" 'max_bin': 1024,\n",
" # 'feature_fraction': 0.5,\n",
" # 'bagging_fraction': 0.5,\n",
" # 'bagging_freq': 5,\n",
" # 'lambda_l1': 80,\n",
" # 'lambda_l2': 65,\n",
" 'verbosity': -1,\n",
" 'num_threads': 16\n",
"}"
],
"outputs": [],
"execution_count": 15
},
{
"cell_type": "code",
"id": "beeb098799ecfa6a",
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-01T10:05:12.645870Z",
"start_time": "2025-03-01T10:03:48.301057Z"
}
},
"source": [
"print('train data size: ', len(train_data))\n",
"\n",
"evals = {}\n",
"model, scaler = 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=1000, use_optuna=False,\n",
" print_feature_importance=True)"
],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"train data size: 1166756\n",
"categorical_feature: [3, 34, 35, 36, 37]\n",
"Training until validation scores don't improve for 50 rounds\n",
"Early stopping, best iteration is:\n",
"[92]\ttrain's average_precision: 0.816465\tvalid's average_precision: 0.50322\n",
"Evaluated only: average_precision\n"
]
},
{
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAj0AAAHHCAYAAABUcOnjAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAX21JREFUeJzt3Xl8E2X+B/BP7jRt05aetBTKJTcFyiGgIgoiKAquFyCXK65CV7CLCIqcK1VUrCIr6g/EdWVldRFdObRUDkEE5L5vaCm9S+/mnt8faUND0pKmadMyn/frFZs8mZk8+TY0H595ZkYiCIIAIiIiotuc1NsdICIiImoIDD1EREQkCgw9REREJAoMPURERCQKDD1EREQkCgw9REREJAoMPURERCQKDD1EREQkCgw9REREJAoMPUSENWvWQCKR4PLly/X2GgsWLIBEImky2/W2y5cvQyKRYM2aNW6tL5FIsGDBAo/2iaipY+ghakCV4UIikWDXrl0OzwuCgOjoaEgkEjz88MNuvcY//vEPt78oqXbWrl2LpKQkb3eDiFzE0EPkBWq1GmvXrnVo37FjB65evQqVSuX2tt0JPePHj0d5eTlatWrl9ut6y9y5c1FeXu6V167P0NOqVSuUl5dj/Pjxbq1fXl6OuXPnerhXRE0bQw+RF4wYMQLffPMNTCaTXfvatWsRFxeHiIiIBulHaWkpAEAmk0GtVjep3USVfZfL5VCr1V7uza3pdDpYLBaXl5dIJFCr1ZDJZG69nlqthlwud2tdotsVQw+RF4wZMwZ5eXlITk62tRkMBnz77bcYO3as03UsFguSkpLQpUsXqNVqhIeH4y9/+QuuX79uWyYmJgYnTpzAjh07bLvR7r33XgA3dq3t2LEDU6dORVhYGFq0aGH33M1zejZv3oxBgwbB398fWq0Wffr0cTpCdbNdu3ahT58+UKvVaNu2LT755BOHZWqas3LzfJTKeTsnT57E2LFjERQUhLvuusvuuZvXj4+Px4YNG9C1a1eoVCp06dIFW7ZscXit7du3o3fv3nZ9dWWe0L333ouNGzfiypUrtlrHxMTYtimRSPD1119j7ty5iIqKgkajQVFREfLz8zFz5kx069YNfn5+0Gq1GD58OI4cOXLL+kyaNAl+fn5IT0/HqFGj4Ofnh9DQUMycORNms9mlGp4/fx6TJk1CYGAgAgICMHnyZJSVldmtW15ejpdeegkhISHw9/fHI488gvT0dM4ToiaP/xtA5AUxMTHo378//v3vf2P48OEArAGjsLAQTz/9ND788EOHdf7yl79gzZo1mDx5Ml566SVcunQJH330EQ4dOoTdu3dDoVAgKSkJf/3rX+Hn54fXX38dABAeHm63nalTpyI0NBTz5s2zjZY4s2bNGjz77LPo0qUL5syZg8DAQBw6dAhbtmypNpgBwLFjx/DAAw8gNDQUCxYsgMlkwvz58x364Y4nnngC7du3x5IlSyAIQo3L7tq1C+vXr8fUqVPh7++PDz/8EH/605+QmpqK4OBgAMChQ4fw4IMPonnz5li4cCHMZjMWLVqE0NDQW/bl9ddfR2FhIa5evYr3338fAODn52e3zOLFi6FUKjFz5kzo9XoolUqcPHkSGzZswBNPPIHWrVsjKysLn3zyCQYNGoSTJ08iMjKyxtc1m80YNmwY+vXrh3fffRdbt27Fe++9h7Zt2+LFF1+8Zb+ffPJJtG7dGomJiTh48CD+7//+D2FhYXj77bdty0yaNAn/+c9/MH78eNx5553YsWMHHnrooVtum6jRE4iowXz++ecCAGH//v3CRx99JPj7+wtlZWWCIAjCE088IQwePFgQBEFo1aqV8NBDD9nW+/XXXwUAwldffWW3vS1btji0d+nSRRg0aFC1r33XXXcJJpPJ6XOXLl0SBEEQCgoKBH9/f6Ffv35CeXm53bIWi6XG9zhq1ChBrVYLV65csbWdPHlSkMlkQtU/OZcuXRIACJ9//rnDNgAI8+fPtz2eP3++AEAYM2aMw7KVz928vlKpFM6fP29rO3LkiABAWL58ua1t5MiRgkajEdLT021t586dE+RyucM2nXnooYeEVq1aObRv27ZNACC0adPG9vutpNPpBLPZbNd26dIlQaVSCYsWLbJru7k+EydOFADYLScIgtCzZ08hLi7OoQbOavjss8/aLTd69GghODjY9vjAgQMCAGHGjBl2y02aNMlhm0RNDXdvEXnJk08+ifLycvz4448oLi7Gjz/+WO0IyjfffIOAgAAMHToUubm5tltcXBz8/Pywbds2l193ypQpt5wnkpycjOLiYsyePdthvkxNu33MZjN++uknjBo1Ci1btrS1d+rUCcOGDXO5j9V54YUXXF52yJAhaNu2re1x9+7dodVqcfHiRVtf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dVwOPVUvL+HOpSaIiIiIvMmtMzInJiY6PWPy6tWr8fbbb9e5U0RERESe5lbo+eSTT9CxY0eH9i5dumDlypV17hQRERGRp7kVejIzM9G8eXOH9tDQUGRkZNS5U0RERESe5lboiY6Oxu7dux3ad+/ejcjIyDp3ioiIiMjT3Do54ZQpUzBjxgwYjUbcd999AICUlBTMmjULf/vb3zzaQSIiIiJPcCv0vPLKK8jLy8PUqVNhMBgAWC82+uqrr9pdMZ2IiIiosXAr9EgkErz99tt44403cOrUKfj4+KB9+/ZOr3FFRERE1Bi4NaenUmZmJvLz89G2bVuoVCqeMJCIiIgaLbdCT15eHu6//37ccccdGDFihO2IrT//+c+c00NERESNkluh5+WXX4ZCoUBqaio0Go2t/amnnsKWLVs81jkiIiIiT3FrTs/PP/+Mn376CS1atLBrb9++Pa5cueKRjhERERF5klsjPaWlpXYjPJXy8/M5mZmIiIgaJbdCz913341//vOftscSiQQWiwVLly7F4MGDPdY5IiIiIk9xa/fW0qVLcf/99+OPP/6AwWDArFmzcOLECeTn5zs9UzMRERGRt7k10tO1a1ecPXsWd911Fx599FGUlpbisccew6FDh9C2bVtP95GIiIiozmo90mM0GvHggw9i5cqVeP311+ujT0REREQeV+uRHoVCgaNHj9ZHX4iIiIjqjVu7t5555hmsWrXK030hIiIiqjduTWQ2mUxYvXo1tm7diri4OPj6+to9v2zZMo90joiIiMhT3Ao9x48fR69evQAAZ8+etXtOIpHUvVdEREREHuZW6Nm2bZun+0FERERUr+p0lXUASEtLQ1pamif6QkRERFRv3Ao9JpMJb7zxBgICAhATE4OYmBgEBARg7ty5MBqNnu4jERERUZ25tXvrr3/9K9avX4+lS5eif//+AIA9e/ZgwYIFyMvLw8cff+zRThIRERHVlVuhZ+3atfj6668xfPhwW1v37t0RHR2NMWPGMPQQERFRo+PW7i2VSoWYmBiH9tatW0OpVNa1T0REREQe51boiY+Px+LFi6HX621ter0eb775JuLj4z3WOSIiIiJPcWv31qFDh5CSkoIWLVogNjYWAHDkyBEYDAbcf//9eOyxx2zLrl+/3jM9JSIiIqoDt0JPYGAg/vSnP9m1RUdHe6RDRERERPXBrdDz+eefu7Tc7t27odfroVKp3HkZIiIiIo+p88kJazJ8+HCkp6fX50sQERERuaReQ48gCPW5eSIiIiKX1WvoISIiImosGHqIiIhIFBh6iIiISBTqNfRIJJL63DwRERGRyziRmYiIiETBrfP0AIDJZML27dtx4cIFjB07Fv7+/rh27Rq0Wi38/PwAAMXFxR7rKBEREVFduBV6rly5ggcffBCpqanQ6/UYOnQo/P398fbbb0Ov12PlypWe7icRERFRnbi1e2v69Ono3bs3rl+/Dh8fH1v76NGjkZKS4rHOEREREXmKWyM9v/76K3777TcolUq79piYGJ6BmYiIiBolt0Z6LBYLzGazQ/vVq1fh7+9f504REREReZpboeeBBx5AUlKS7bFEIkFJSQnmz5+PESNGeKpvRERERB7j1u6t9957D8OGDUPnzp2h0+kwduxYnDt3DiEhIfj3v//t6T4SERER1ZlboadFixY4cuQIvv76axw9ehQlJSX485//jHHjxtlNbCYiIiJqLNw+T49cLsczzzzjyb4QERER1Ru3Qs8PP/zgtF0ikUCtVqNdu3Zo3bp1nTpGRERE5EluhZ5Ro0ZBIpE4XGaisk0ikeCuu+7Chg0bEBQU5JGOEhEREdWFW0dvJScno0+fPkhOTkZhYSEKCwuRnJyMfv364ccff8TOnTuRl5eHmTNnerq/RERERG5xa6Rn+vTp+PTTTzFgwABb2/333w+1Wo3nn38eJ06cQFJSEp599lmPdZSIiIioLtwa6blw4QK0Wq1Du1arxcWLFwEA7du3R25ubt16R0REROQhboWeuLg4vPLKK8jJybG15eTkYNasWejTpw8A4Ny5c4iOjvZML4mIiIjqyK3dW6tWrcKjjz6KFi1a2IJNWloa2rRpg++//x4AUFJSgrlz53qup0RERER14Fbo6dChA06ePImff/4ZZ8+etbUNHToUUql18GjUqFEe6yQRERFRXbl9ckKpVIoHH3wQDz74oCf7Q0RERFQv3A49paWl2LFjB1JTU2EwGOyee+mll2q1rRUrVuCdd95BZmYmYmNjsXz5cvTt27fa5QsKCvD6669j/fr1yM/PR6tWrZCUlMSLnRIREVG13Ao9hw4dwogRI1BWVobS0lI0a9YMubm50Gg0CAsLq1XoWbduHRISErBy5Ur069cPSUlJGDZsGM6cOYOwsDCH5Q0GA4YOHYqwsDB8++23iIqKwpUrVxAYGOjOWyEiIiKRcOvorZdffhkjR47E9evX4ePjg99//x1XrlxBXFwc3n333Vpta9myZZgyZQomT56Mzp07Y+XKldBoNFi9erXT5VevXo38/Hxs2LABAwcORExMDAYNGoTY2Fh33goRERGJhFsjPYcPH8Ynn3wCqVQKmUwGvV6PNm3aYOnSpZg4cSIee+wxl7ZjMBhw4MABzJkzx9YmlUoxZMgQ7Nmzx+k6P/zwA/r3749p06bh+++/R2hoKMaOHYtXX30VMpnMYXm9Xg+9Xm97XFRUBAAwGo0wGo21edu3tcpasCb2WBfnWBfnWBfnWBfnWBdHNdXEE3VyK/QoFArbUVphYWFITU1Fp06dEBAQgLS0NJe3k5ubC7PZjPDwcLv28PBwnD592uk6Fy9exC+//IJx48Zh06ZNOH/+PKZOnQqj0Yj58+c7LJ+YmIiFCxc6tG/btg0ajcblvopFcnKyt7vQKLEuzrEuzrEuzrEuzrEujpzVpKysrM7bdSv09OzZE/v370f79u0xaNAgzJs3D7m5ufjyyy/RtWvXOneqJhaLBWFhYfj0008hk8kQFxeH9PR0vPPOO05Dz5w5c5CQkGB7XFRUhOjoaAwePBjBwcH12temxGg0Ijk5GUOHDoVCofB2dxoN1sU51sU51sU51sU51sVRTTWp3FNTF26FniVLlqC4uBgA8Oabb2LChAl48cUX0b59+2rn4jgTEhICmUyGrKwsu/asrCxEREQ4Xad58+ZQKBR2u7I6deqEzMxMGAwGKJVKu+VVKhVUKpXDdhQKBT9kTrAuzrEuzrEuzrEuzrEuzrEujpzVxBM1qvVEZkEQEBYWhv79+wOw7t7asmULioqKcODAgVpNKFYqlYiLi0NKSoqtzWKxICUlxbb9mw0cOBDnz5+HxWKxtZ09exbNmzd3CDxEREREldwKPe3atavV3J2aJCQk4LPPPsMXX3yBU6dO4cUXX0RpaSkmT54MAJgwYYLdROcXX3wR+fn5mD59Os6ePYuNGzdiyZIlmDZtmkf6Q0RERLenWu/ekkqlaN++PfLy8tC+ffs6d+Cpp55CTk4O5s2bh8zMTPTo0QNbtmyxTW5OTU21TZoGgOjoaPz00094+eWX0b17d0RFRWH69Ol49dVX69wXIiIiun25NafnrbfewiuvvIKPP/7YIxOX4+PjER8f7/S57du3O7T1798fv//+e51fl4iIiMTDrdAzYcIElJWVITY2FkqlEj4+PnbP5+fne6RzRERERJ7iVuhJSkrycDeIiIiI6pdboWfixIme7gcRERFRvXLr2lsAcOHCBcydOxdjxoxBdnY2AGDz5s04ceKExzpHRERE5CluhZ4dO3agW7du2Lt3L9avX4+SkhIAwJEjR5yeFZmIiIjI29wKPbNnz8bf//53JCcn250Q8L777uNRVURERNQouRV6jh07htGjRzu0h4WFITc3t86dIiIiIvI0t0JPYGAgMjIyHNoPHTqEqKioOneKiIiIyNPcCj1PP/00Xn31VWRmZkIikcBisWD37t2YOXMmJkyY4Ok+EhEREdWZW6FnyZIl6NixI6Kjo1FSUoLOnTvjnnvuwYABAzB37lxP95GIiIioztw6T49SqcRnn32GN954A8ePH0dJSQl69uzpkWtxEREREdUHt0LPrl27cNddd6Fly5Zo2bKlp/tERERE5HFu7d6677770Lp1a7z22ms4efKkp/tERERE5HFuhZ5r167hb3/7G3bs2IGuXbuiR48eeOedd3D16lVP94+IiIjII9wKPSEhIYiPj8fu3btx4cIFPPHEE/jiiy8QExOD++67z9N9JCIiIqozt6+9Val169aYPXs23nrrLXTr1g07duzwRL+IiIiIPKpOoWf37t2YOnUqmjdvjrFjx6Jr167YuHGjp/pGRERE5DFuHb01Z84cfP3110hPT8cDDzyADz74AI8++ig0Go2n+0dERETkEW6Fnp07d+KVV17Bk08+iZCQEE/3iYiIiMjj3Ao9u3fvBgCcPHkSf/zxBwwGg93zjzzySN17RkRERORBboWeS5cuYfTo0Th69CgkEgkEQQAASCQSAIDZbPZcD4mIiIg8wK2JzC+99BJiYmKQnZ0NjUaDEydOYOfOnejduze2b9/u4S4SERER1Z1bIz179uzBL7/8gpCQEEilUkilUtx1111ITEzESy+9hEOHDnm6n0RERER14tZIj9lshr+/PwDriQqvXbsGAGjVqhXOnDnjud4REREReYhbIz1du3bFkSNH0Lp1a/Tr1w9Lly6FUqnEp59+ijZt2ni6j0RERER15lbomTt3LkpLSwEAixYtwsMPP4y7774bwcHBWLdunUc7SEREROQJboWe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L79ETEwMAgIC8PTTT6O4uNi2zLfffotu3brBx8cHwcHBGDJkCEpLS+upmkRUVww9RFRvPvjgA/Tv3x9TpkxBRkYGMjIyEB0djYKCAtx3333o2bMn/vjjD2zZsgVZWVl48skn7db/4osvoFQqsXv3bqxcuRIAIJVK8eGHH+LEiRP44osv8Msvv2DWrFkAgAEDBiApKQlardb2ejNnznTol8ViwaOPPor8/Hzs2LEDycnJuHjxIp566im75S5cuIANGzbgxx9/xI8//ogdO3bgrbfeAgBkZGRgzJgxePbZZ3Hq1Cls374djz32GHg5Q6LGi7u3iKjeBAQEQKlUQqPRICIiwtb+0UcfoWfPnliyZImtbfXq1YiOjsbZs2dxxx13AADat2+PpUuX2m2z6vygmJgY/P3vf8cLL7yAf/zjH1AqlQgICIBEIrF7vZulpKTg2LFjuHTpEqKjowEA//znP9GlSxfs378fffr0AWANR2vWrIG/vz8AYPz48UhJScGbb76JjIwMmEwmPPbYY2jVqhUAoFu3bnWoFhHVN470EFGDO3LkCLZt2wY/Pz/brWPHjgCsoyuV4uLiHNbdunUr7r//fkRFRcHf3x/jx49HXl4eysrKXH79U6dOITo62hZ4AKBz584IDAzEqVOnbG0xMTG2wAMAzZs3R3Z2NgAgNjYW999/P7p164YnnngCn332Ga5fv+56EYiowTH0EFGDKykpwciRI3H48GG727lz53DPPffYlvP19bVb7/Lly3j44YfRvXt3/Pe//8WBAwewYsUKANaJzp6mUCjsHkskElgsFgCATCZDcnIyNm/ejM6dO2P58uXo0KEDLl265PF+EJFnMPQQUb1SKpUwm812bb169cKJEycQExODdu3a2d1uDjpVHThwABaLBe+99x7uvPNO3HHHHbh27dotX+9mnTp1QlpaGtLS0mxtJ0+eREFBATp37uzye5NIJBg4cCAWLlyIQ4cOQalU4rvvvnN5fSJqWAw9RFSvYmJisHfvXly+fBm5ubmwWCyYNm0a8vPzMWbMGOzfvx8XLlzATz/9hMmTJ9cYWNq1awej0Yjly5fj4sWL+PLLL20TnKu+XklJCVJSUpCbm+t0t9eQIUPQrVs3jBs3DgcPHsS+ffswYcIEDBo0CL1793bpfe3duxdLlizBH3/8gdTUVKxfvx45OTno1KlT7QpERA2GoYeI6tXMmTMhk8nQuXNnhIaGIjU1FZGRkdi9ezfMZjMeeOABdOvWDTNmzEBgYCCk0ur/LMXGxmLZsmV4++230bVrV3z11VdITEy0W2bAgAF44YUX8NRTTyE0NNRhIjRgHaH5/vvvERQUhHvuuQdDhgxBmzZtsG7dOpffl1arxc6dOzFixAjccccdmDt3Lt577z0MHz7c9eIQUYOSCDy+koiIiESAIz1EREQkCgw9REREJAoMPURERCQKDD1EREQkCgw9REREJAoMPURERCQKDD1EREQkCgw9REREJAoMPURERCQKDD1EREQkCgw9REREJAoMPURERCQK/w/308Bopd8mNQAAAABJRU5ErkJggg=="
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "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"
},
"metadata": {},
"output_type": "display_data"
}
],
"execution_count": 16
},
{
"cell_type": "code",
"id": "445dff84-70b2-4fc9-a9b6-1251993324d6",
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-01T10:05:12.793641Z",
"start_time": "2025-03-01T10:05:12.787565Z"
}
},
"source": [
"# catboost_params = {\n",
"# 'loss_function': 'CrossEntropy', # 适用于二分类\n",
"# 'eval_metric': 'AUC', # 评估指标\n",
"# 'iterations': 1000,\n",
"# 'learning_rate': 0.01,\n",
"# 'depth': , # 控制模型复杂度\n",
"# # 'l2_leaf_reg': 3, # L2 正则化\n",
"# 'verbose': 500,\n",
"# 'early_stopping_rounds': 100,\n",
"# # 'one_hot_max_size': 50,\n",
"# # 'class_weights': [0.6, 1.2]\n",
"# # 'task_type': 'GPU'\n",
"# }\n",
"\n",
"# model = train_catboost(train_data, test_data, feature_columns_new, catboost_params, plot=True)"
],
"outputs": [],
"execution_count": 17
},
{
"cell_type": "code",
"id": "7bc246ddd6b2cdd1",
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-01T10:05:12.823810Z",
"start_time": "2025-03-01T10:05:12.801658Z"
}
},
"source": [
"from tqdm import tqdm\n",
"\n",
"\n",
"def incremental_training(test_data: pd.DataFrame,\n",
" model,\n",
" scaler,\n",
" days: int,\n",
" back_days: int,\n",
" feature_columns: list,\n",
" params: dict,\n",
" model_type: str = 'lightgbm',\n",
" ):\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))):\n",
" # Get the current window of trade dates\n",
" current_dates = [unique_trade_dates[i]]\n",
" window_data = test_data[test_data['trade_date'].isin(current_dates)]\n",
" X = window_data[feature_columns]\n",
" numeric_columns = X.select_dtypes(include=['float64', 'int64']).columns\n",
" X.loc[:, numeric_columns] = scaler.transform(X[numeric_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",
" current_dates = unique_trade_dates[max(0, i - days):i + 1]\n",
" window_data = test_data[test_data['trade_date'].isin(current_dates)]\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",
" numeric_columns = X.select_dtypes(include=['float64', 'int64']).columns\n",
" X_train.loc[:, numeric_columns] = scaler.transform(X_train[numeric_columns])\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",
" # print(f\"Number of trees: {model.num_trees()}\")\n",
" elif model_type == 'catboost':\n",
" from catboost import Pool\n",
" train_data = Pool(data=X_train, label=y_train,\n",
" 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"
],
"outputs": [],
"execution_count": 18
},
{
"cell_type": "code",
"id": "34698ca4f5fb933",
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-01T10:09:12.009268Z",
"start_time": "2025-03-01T10:05:12.875190Z"
}
},
"source": [
"predictions_test = incremental_training(test_data, model, scaler, 5, 0, feature_columns_new, light_params,\n",
" model_type='lightgbm')\n"
],
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 517/517 [03:58<00:00, 2.17it/s]\n"
]
}
],
"execution_count": 19
},
{
"cell_type": "code",
"id": "36ccaa730ab46718",
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-01T10:09:12.265271Z",
"start_time": "2025-03-01T10:09:12.167363Z"
}
},
"source": [
"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"
],
"outputs": [],
"execution_count": 20
}
],
"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
}