1126 lines
183 KiB
Plaintext
1126 lines
183 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "code",
|
||
"id": "79a7758178bafdd3",
|
||
"metadata": {
|
||
"jupyter": {
|
||
"source_hidden": true
|
||
},
|
||
"ExecuteTime": {
|
||
"end_time": "2025-02-21T15:14:44.093352Z",
|
||
"start_time": "2025-02-21T15:14:44.054242Z"
|
||
}
|
||
},
|
||
"source": [
|
||
"%load_ext autoreload\n",
|
||
"%autoreload 2\n",
|
||
"\n"
|
||
],
|
||
"outputs": [],
|
||
"execution_count": 1
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"id": "a79cafb06a7e0e43",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2025-02-21T15:15:27.929196Z",
|
||
"start_time": "2025-02-21T15:14:44.100246Z"
|
||
}
|
||
},
|
||
"source": [
|
||
"from 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: 8296325 entries, 0 to 8296324\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.2+ GB\n",
|
||
"None\n"
|
||
]
|
||
}
|
||
],
|
||
"execution_count": 2
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"id": "a4eec8c93f6a7cc3",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2025-02-21T15:15:34.291625Z",
|
||
"start_time": "2025-02-21T15:15:32.199591Z"
|
||
}
|
||
},
|
||
"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-02-21T15:15:34.921902Z",
|
||
"start_time": "2025-02-21T15:15:34.830089Z"
|
||
}
|
||
},
|
||
"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": "99776e73-f310-47c0-953e-2cf73ff13310",
|
||
"metadata": {
|
||
"jupyter": {
|
||
"source_hidden": true
|
||
},
|
||
"ExecuteTime": {
|
||
"end_time": "2025-02-21T15:15:35.064287Z",
|
||
"start_time": "2025-02-21T15:15:34.954902Z"
|
||
}
|
||
},
|
||
"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['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": 5
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"id": "c0ad4f64-a6c6-4e43-b7ba-3f2a36baaa64",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2025-02-21T15:15:38.325796Z",
|
||
"start_time": "2025-02-21T15:15:35.070272Z"
|
||
}
|
||
},
|
||
"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.reindex()\n",
|
||
" industry_data['trade_date'] = pd.to_datetime(df['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"
|
||
],
|
||
"outputs": [],
|
||
"execution_count": 6
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"id": "53f86ddc0677a6d7",
|
||
"metadata": {
|
||
"scrolled": true,
|
||
"ExecuteTime": {
|
||
"end_time": "2025-02-21T15:15:38.404286Z",
|
||
"start_time": "2025-02-21T15:15:38.358425Z"
|
||
}
|
||
},
|
||
"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": {
|
||
"ExecuteTime": {
|
||
"end_time": "2025-02-21T15:16:35.813375Z",
|
||
"start_time": "2025-02-21T15:15:38.437172Z"
|
||
}
|
||
},
|
||
"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": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"<class 'pandas.core.frame.DataFrame'>\n",
|
||
"Index: 5538535 entries, 1962 to 5538534\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": "f4f16d63ad18d1bc",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2025-02-21T15:16:36.157453Z",
|
||
"start_time": "2025-02-21T15:16:36.019648Z"
|
||
}
|
||
},
|
||
"source": [
|
||
"feature_columns = [col for col in df.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']\n"
|
||
]
|
||
}
|
||
],
|
||
"execution_count": 9
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"id": "0ebdfb92-d88b-4b5c-a715-675dab876fc0",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2025-02-21T15:16:36.234795Z",
|
||
"start_time": "2025-02-21T15:16:36.171454Z"
|
||
}
|
||
},
|
||
"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",
|
||
"\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(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": 10
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"id": "fbb968383f8cf2c7",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2025-02-21T15:23:09.675611Z",
|
||
"start_time": "2025-02-21T15:22:31.966842Z"
|
||
}
|
||
},
|
||
"source": [
|
||
"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",
|
||
"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(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",
|
||
"def get_label(df):\n",
|
||
" # labels = df['future_af13'] - df['act_factor1']\n",
|
||
" df['future_close'] = df.groupby('ts_code')['close'].shift(-4)\n",
|
||
" df['future_open'] = df.groupby('ts_code')['open'].shift(-1)\n",
|
||
" df['future_high'] = df.groupby('ts_code')['high'].shift(-1)\n",
|
||
" df['future_return'] = (df['future_close'] - df['close']) / df['close']\n",
|
||
" labels = df['future_return'] >= 0.03\n",
|
||
" # labels = df['future_af11']\n",
|
||
" # labels = df['ema_5'].shift(-1) - df['close']\n",
|
||
" # df['label'] = (df['future_af11'] - df['act_factor1']) / df['act_factor1']\n",
|
||
" # df['label'] = calculate_risk_adjusted_target(df, days=5)\n",
|
||
" # lower_percentile = df['label'].quantile(0.01) # 1%分位数\n",
|
||
" # upper_percentile = df['label'].quantile(0.99) # 99%分位数\n",
|
||
" # labels = df['label'].clip(lower=lower_percentile, upper=upper_percentile)\n",
|
||
" # labels = calculate_risk_adjusted_return(df, days=3, history_days=3, method='ratio')\n",
|
||
" return labels\n",
|
||
"\n",
|
||
"df['label'] = get_label(df)\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']\n",
|
||
"\n",
|
||
"# train_data = train_data.merge(industry_df, on=['cat_l2_code', 'trade_date'], how='left')\n",
|
||
"# train_data = train_data.rename(columns={'l2_code': 'cat_l2_code'})\n",
|
||
"# test_data = test_data.merge(industry_df, on=['cat_l2_code', 'trade_date'], how='left')\n",
|
||
"# test_data = test_data.rename(columns={'l2_code': 'cat_l2_code'})\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 = get_future_data(train_data)\n",
|
||
"\n",
|
||
"# df = df[['ts_code', 'trade_date', 'open', 'close']]\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"
|
||
],
|
||
"outputs": [],
|
||
"execution_count": 22
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"id": "de8c2f6c770d2439",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2025-02-21T15:23:09.967463Z",
|
||
"start_time": "2025-02-21T15:23:09.768435Z"
|
||
}
|
||
},
|
||
"source": [
|
||
"print(train_data.columns)"
|
||
],
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Index(['ts_code', 'trade_date', 'open', 'close', 'high', 'low', 'vol',\n",
|
||
" 'turnover_rate', 'pe_ttm', 'circ_mv', 'volume_ratio', 'is_st',\n",
|
||
" 'up_limit', 'down_limit', 'buy_sm_vol', 'sell_sm_vol', 'buy_lg_vol',\n",
|
||
" 'sell_lg_vol', 'buy_elg_vol', 'sell_elg_vol', 'net_mf_vol',\n",
|
||
" 'cat_l2_code', 'up', 'down', 'atr_14', 'atr_6', 'obv', 'maobv_6',\n",
|
||
" 'obv-maobv_6', 'rsi_3', 'rsi_6', 'rsi_9', 'return_5', 'return_10',\n",
|
||
" 'return_20', 'avg_close_5', 'std_return_5', 'std_return_15',\n",
|
||
" 'std_return_25', 'std_return_90', 'std_return_90_2',\n",
|
||
" 'std_return_5 / std_return_90', 'std_return_5 / std_return_25',\n",
|
||
" 'std_return_90 - std_return_90_2', 'ema_5', 'ema_13', 'ema_20',\n",
|
||
" 'ema_60', 'act_factor1', 'act_factor2', 'act_factor3', 'act_factor4',\n",
|
||
" 'cat_af1', 'cat_af2', 'cat_af3', 'cat_af4', 'act_factor5',\n",
|
||
" 'act_factor6', 'rank_act_factor1', 'rank_act_factor2',\n",
|
||
" 'rank_act_factor3', 'active_buy_volume_large', 'active_buy_volume_big',\n",
|
||
" 'active_buy_volume_small', 'buy_lg_vol_minus_sell_lg_vol',\n",
|
||
" 'buy_elg_vol_minus_sell_elg_vol', 'log(circ_mv)', 'alpha_022',\n",
|
||
" 'alpha_003', 'alpha_007', 'alpha_013', 'future_close', 'future_open',\n",
|
||
" 'future_high', 'future_return', 'label'],\n",
|
||
" dtype='object')\n"
|
||
]
|
||
}
|
||
],
|
||
"execution_count": 23
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"id": "20ffa7229c9d2f86",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2025-02-21T15:23:27.677186Z",
|
||
"start_time": "2025-02-21T15:23:10.008115Z"
|
||
}
|
||
},
|
||
"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: 149\n",
|
||
"feature_columns size: 149\n",
|
||
"1171702\n",
|
||
"最小日期: 2017-03-21\n",
|
||
"最大日期: 2022-12-30\n",
|
||
"402634\n",
|
||
"最小日期: 2023-01-03\n",
|
||
"最大日期: 2025-02-12\n"
|
||
]
|
||
}
|
||
],
|
||
"execution_count": 24
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"id": "35238cb4f45ce756",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2025-02-21T15:23:27.898697Z",
|
||
"start_time": "2025-02-21T15:23:27.709949Z"
|
||
}
|
||
},
|
||
"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": 25
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"id": "8f134d435f71e9e2",
|
||
"metadata": {
|
||
"jupyter": {
|
||
"source_hidden": true
|
||
},
|
||
"ExecuteTime": {
|
||
"end_time": "2025-02-21T15:23:28.055133Z",
|
||
"start_time": "2025-02-21T15:23:27.962370Z"
|
||
}
|
||
},
|
||
"source": [
|
||
"from catboost import Pool\n",
|
||
"import lightgbm as lgb\n",
|
||
"import numpy as np\n",
|
||
"import matplotlib.pyplot as plt\n",
|
||
"import optuna\n",
|
||
"from sklearn.model_selection import KFold\n",
|
||
"from sklearn.metrics import mean_absolute_error\n",
|
||
"import os\n",
|
||
"import json\n",
|
||
"import pickle\n",
|
||
"import hashlib\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",
|
||
" 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",
|
||
" categorical_feature = [i for i, col in enumerate(feature_columns) if col.startswith('cat')]\n",
|
||
" print(f'categorical_feature: {categorical_feature}')\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\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",
|
||
"\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",
|
||
"\n",
|
||
" model = CatBoostClassifier(**params)\n",
|
||
" model.fit(train_pool,\n",
|
||
" eval_set=val_pool, plot=plot)\n",
|
||
"\n",
|
||
" return model"
|
||
],
|
||
"outputs": [],
|
||
"execution_count": 26
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"id": "4a4542e1ed6afe7d",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2025-02-21T15:23:28.135106Z",
|
||
"start_time": "2025-02-21T15:23:28.060117Z"
|
||
}
|
||
},
|
||
"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.7,\n",
|
||
" 'bagging_fraction': 0.7,\n",
|
||
" 'bagging_freq': 5,\n",
|
||
" # 'lambda_l1': 80,\n",
|
||
" # 'lambda_l2': 65,\n",
|
||
" 'verbosity': -1,\n",
|
||
" 'num_threads' : 16\n",
|
||
"}"
|
||
],
|
||
"outputs": [],
|
||
"execution_count": 27
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"id": "beeb098799ecfa6a",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2025-02-21T15:24:42.785511Z",
|
||
"start_time": "2025-02-21T15:23:28.198166Z"
|
||
}
|
||
},
|
||
"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=1000, use_optuna=False,\n",
|
||
" print_feature_importance=True)"
|
||
],
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"train data size: 1171702\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",
|
||
"[89]\ttrain's average_precision: 0.473589\tvalid's average_precision: 0.284686\n",
|
||
"Evaluated only: average_precision\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"<Figure size 640x480 with 1 Axes>"
|
||
],
|
||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAAHFCAYAAAAaD0bAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAABtj0lEQVR4nO3deVzUdf4H8NfMwAw3KDfKpYLIoSJogHmHpmZmmaZ5lW65dnhsa7rZLzVLc1tFW7XcLdkuc1uvDksxEc88EPDA+wJhuJNTYI7v74+RgREGYQQGmNfz8ZiHzOf7me98vm+QefH5XiJBEAQQERERmRCxsQdARERE1NIYgIiIiMjkMAARERGRyWEAIiIiIpPDAEREREQmhwGIiIiITA4DEBEREZkcBiAiIiIyOQxAREREZHIYgIhamdjYWIhEIohEIhw8eLDWckEQ0K1bN4hEIgwePNig99i4cSNiY2Mb9ZqDBw/qHVNTaa73aImx65OamoqlS5fi1q1bzbL+pUuXQiQSGfRaY9aFyNgYgIhaKVtbW3z++ee12hMSEnD9+nXY2toavG5DAlCfPn1w/Phx9OnTx+D3NRZjjj01NRXLli1rtgA0a9YsHD9+3KDXtuXvKdGjYgAiaqUmTpyI7du3o6ioSKf9888/R2RkJLy8vFpkHAqFAkqlEnZ2doiIiICdnV2LvG9TaItjLysra1T/zp07IyIiwqD3akt1IWpqDEBErdSkSZMAAFu3btW2FRYWYvv27Xj55ZfrfE1lZSVWrFiBgIAAyGQyODs746WXXkJubq62j4+PDy5cuICEhATtrjYfHx8A1btEvvrqK/zlL39Bp06dIJPJcO3aNb27S06cOIExY8bA0dERFhYW6Nq1K+bNm/fQ7bt06RKefPJJWFlZwcnJCbNnz0ZxcXGtfj4+PpgxY0at9sGDB+vsAmzs2GfMmAEbGxtcu3YNo0aNgo2NDTw9PfGXv/wFFRUVOu91584djB8/Hra2tnBwcMCLL76IU6dOQSQS1TuTFhsbi+effx4AMGTIEG29q14zePBgBAcH49ChQ4iKioKVlZX2e7tt2zYMHz4c7u7usLS0RI8ePbBo0SKUlpbqvEddu8B8fHzw1FNP4ddff0WfPn1gaWmJgIAAfPHFFzr9jFUXotaAAYiolbKzs8P48eN1PrS2bt0KsViMiRMn1uqvVqsxduxYrFq1CpMnT8bPP/+MVatWIS4uDoMHD8a9e/cAADt37kSXLl0QGhqK48eP4/jx49i5c6fOuhYvXoy0tDR8+umn+PHHH+Hi4lLnGPfu3YsBAwYgLS0Na9aswS+//IIlS5YgOzu73m3Lzs7GoEGDcP78eWzcuBFfffUVSkpK8Prrrze2TLU0dOyAZobo6aefxrBhw7B79268/PLLWLt2LT766CNtn9LSUgwZMgTx8fH46KOP8N///heurq51fg8eNHr0aHz44YcAgA0bNmjrPXr0aG0fuVyOKVOmYPLkydizZw/mzJkDALh69SpGjRqFzz//HL/++ivmzZuH//73vxgzZkyD6pCSkoK//OUvmD9/Pnbv3o2ePXti5syZOHTo0ENf29x1IWoVBCJqVbZs2SIAEE6dOiXEx8cLAITz588LgiAIffv2FWbMmCEIgiAEBQUJgwYN0r5u69atAgBh+/btOus7deqUAEDYuHGjtu3B11aper+BAwfqXRYfH69t69q1q9C1a1fh3r17jdrGt99+WxCJREJycrJOe3R0dK338Pb2FqZPn15rHYMGDdLZhsaOffr06QIA4b///a9O31GjRgndu3fXPt+wYYMAQPjll190+r366qsCAGHLli31buv3339f671rbgMA4bfffqt3HWq1WlAoFEJCQoIAQEhJSdEue++994QHf5V7e3sLFhYWwu3bt7Vt9+7dEzp27Ci8+uqr2jZj1oXI2DgDRNSKDRo0CF27dsUXX3yBc+fO4dSpU3p3f/30009wcHDAmDFjoFQqtY/evXvDzc2tUWf6PPfccw/tc+XKFVy/fh0zZ86EhYVFg9cNAPHx8QgKCkKvXr102idPntyo9dSlIWOvIhKJas2o9OzZE7dv39Y+T0hIgK2tLZ588kmdflW7KB9Vhw4dMHTo0FrtN27cwOTJk+Hm5gaJRAJzc3MMGjQIAHDx4sWHrrd37946x4lZWFjA399fZ9v0aQ11IWpuZsYeABHpJxKJ8NJLL2H9+vUoLy+Hv78/BgwYUGff7Oxs3L17F1KptM7leXl5DX5fd3f3h/apOq6oc+fODV5vlfz8fPj6+tZqd3Nza/S6HtSQsVexsrKqFd5kMhnKy8u1z/Pz8+Hq6lrrtXW1GaKu8ZaUlGDAgAGwsLDAihUr4O/vDysrK6Snp+PZZ5/V7s6sj6OjY602mUzWoNe2hroQNTcGIKJWbsaMGfi///s/fPrpp/jggw/09nNycoKjoyN+/fXXOpc35rT5hlxXxtnZGYDmQNjGcnR0RFZWVq32utosLCxqHXwLaAKdk5NTrXZDr4mjj6OjI06ePFmrva6xGqKu8R44cACZmZk4ePCgdtYHAO7evdsk79kUmrsuRM2Nu8CIWrlOnTrhr3/9K8aMGYPp06fr7ffUU08hPz8fKpUK4eHhtR7du3fX9m3oTEB9/P39tbvn6goo9RkyZAguXLiAlJQUnfZvv/22Vl8fHx+cPXtWp+3KlSu4fPly4wdtgEGDBqG4uBi//PKLTvt3333XoNfLZDIAaFS9q0JR1WurfPbZZw1eR3N71LoQGRtngIjagFWrVj20zwsvvIBvvvkGo0aNwty5c9GvXz+Ym5vjzp07iI+Px9ixYzFu3DgAQEhICL777jts27YNXbp0gYWFBUJCQho9rg0bNmDMmDGIiIjA/Pnz4eXlhbS0NOzduxfffPON3tfNmzcPX3zxBUaPHo0VK1bA1dUV33zzDS5dulSr79SpUzFlyhTMmTMHzz33HG7fvo3Vq1drZ6Ca2/Tp07F27VpMmTIFK1asQLdu3fDLL79g7969AACxuP6/I4ODgwEAmzdvhq2tLSwsLODr61vnLqoqUVFR6NChA2bPno333nsP5ubm+Oabb2oFRmN61LoQGRt/QonaCYlEgh9++AF/+9vfsGPHDowbNw7PPPMMVq1aVSvgLFu2DIMGDcKf/vQn9OvXr8GnVj9oxIgROHToENzd3fHmm2/iySefxPLlyx96HIibmxsSEhIQGBiIP//5z5gyZQosLCzwz3/+s1bfyZMnY/Xq1di7dy+eeuopbNq0CZs2bYK/v79BY24sa2trHDhwAIMHD8bChQvx3HPPIS0tDRs3bgQAODg41Pt6X19fxMTEICUlBYMHD0bfvn3x448/1vsaR0dH/Pzzz7CyssKUKVPw8ssvw8bGBtu2bWuqzXpkj1oXImMTCYIgGHsQRERtzYcffoglS5YgLS3NoAPB2yvWhdoK7gIjInqIqpmpgIAAKBQKHDhwAOvXr8eUKVNM+kOedaG2jAGIiOghrKyssHbtWty6dQsVFRXw8vLC22+/jSVLlhh7aEbFulBbxl1gREREZHJ4EDQRERGZHAYgIiIiMjkMQERERGRyeBB0HdRqNTIzM2Fra9vkl9UnIiKi5iEIAoqLi+Hh4fHQi3EyANUhMzMTnp6exh4GERERGSA9Pf2hl2JgAKpD1U0jb968iY4dOxp5NK2PQqHAvn37MHz4cJibmxt7OK0Ka1M/1kc/1kY/1qZ+rE+1oqIieHp6NujmzwxAdaja7WVraws7Ozsjj6b1USgUsLKygp2dncn/Z3sQa1M/1kc/1kY/1qZ+rE9tDTl8hQdBExERkclhACIiIiKTwwBEREREJofHABEREbUglUoFhULRZOtTKBQwMzNDeXk5VCpVk623tZJKpQ89xb0hGICIiIhagCAIyMrKwt27d5t8vW5ubkhPTzeJa9eJxWL4+vpCKpU+0noYgIiIiFpAVfhxcXGBlZVVk4UVtVqNkpIS2NjYNMnMSGtWdaFiuVwOLy+vR6ohAxAREVEzU6lU2vDj6OjYpOtWq9WorKyEhYVFuw9AAODs7IzMzEwolcpHOu2//VeKiIjIyKqO+bGysjLySNq+ql1fj3q8EwMQERFRCzGFY3SaW1PVkAGIiIiITA4DEBEREbUIHx8fxMTEGHsYAHgQNBEREdVj8ODB6N27d5MEl1OnTsHa2vrRB9UEGICIiIjIYIIgQKVSwczs4ZHC2dm5BUbUMNwFRkRERHWaMWMGEhISsG7dOohEIohEIsTGxkIkEmHv3r0IDw+HTCbD4cOHcf36dYwdOxaurq6wsbFB3759sX//fp31PbgLTCQS4d///jfGjRsHKysr+Pn54YcffmiRbWMAIiIiMgJBEFBWqWySx71KVYP7CoLQ4DGuW7cOkZGR+NOf/gS5XA65XA5PT08AwMKFC7Fy5UpcvHgRPXv2RElJCUaNGoX9+/cjKSkJI0aMwJgxY5CWllbveyxbtgwTJkzA2bNnMWrUKLz44osoKCh4pNo2BHeBERERGcE9hQqB/7e3xd83dfkIWEkb9vFvb28PqVQKKysruLm5AQAuXboEAFi+fDmio6O1fR0dHdGrVy/t8xUrVmDnzp344Ycf8Prrr+t9jxkzZmDSpEkAgA8//BCffPIJTp48iSeffLLR29YYnAEiIiKiRgsPD9d5XlpaioULFyIwMBAODg6wsbHBpUuXHjoD1LNnT+3X1tbWsLW1RU5OTrOMuSbOABERERmBpbkEqctHPPJ61Go1iouKYWtn26BbYViaSx75PQHUOpvrr3/9K/bu3YuPP/4Y3bp1g6WlJcaPH4/Kysp61/Pg7SxEIhHUanWTjLE+DEBERERGIBKJGrwrqj5qtRpKqQRWUrNmuReYVCpt0G0nDh8+jBkzZmDcuHEAgJKSEty6davJx9NUuAuMiIiI9PLx8cGJEydw69Yt5OXl6Z2d6datG3bs2IHk5GSkpKRg8uTJLTKTYygGICIiItLrrbfegkQiQWBgIJydnfUe07N27Vp06NABUVFRGDNmDEaMGIE+ffq08GgbjrvAiIiISC9/f38cP35cp23GjBm1+vn4+ODAgQM6ba+99prO8wd3idV1Sv7du3cNGmdjcQaIiIiITA4DEBEREZkcBiAiIiIyOQxAREREZHIYgIiIiMjkMAARERGRyWEAIiIiIpPDAEREREQmhwGIiIiITA4DEBERETUbHx8fxMTEaJ+LRCLs2rVLb/9bt25BJBIhOTm5WcfFW2EQERFRi5HL5ejQoYOxh9E6ZoA2btwIX19fWFhYICwsDIcPH9bb9+DBgxCJRLUely5d0vaJjY2ts095eXlLbA4RERHp4ebmBplMZuxhGD8Abdu2DfPmzcM777yDpKQkDBgwACNHjtR7t9kqly9fhlwu1z78/Px0ltvZ2eksl8vlsLCwaM5NISIialc+++wzdOrUCWq1Wqf96aefxvTp03H9+nWMHTsWrq6usLGxQd++fbF///561/ngLrCTJ08iNDQUFhYWCA8PR1JSUnNsSi1GD0Br1qzBzJkzMWvWLPTo0QMxMTHw9PTEpk2b6n2di4sL3NzctA+JRKKzXCQS6Sx3c3Nrzs0gIiJqHEEAKkub5qEoa3jfOu7Ars/zzz+PvLw8xMfHa9v++OMP7N27Fy+++CJKSkowatQo7N+/H0lJSRgxYgTGjBnz0EmMKqWlpXjqqafQvXt3JCYmYunSpXjrrbcaXUpDGPUYoMrKSiQmJmLRokU67cOHD8exY8fqfW1oaCjKy8sRGBiIJUuWYMiQITrLS0pK4O3tDZVKhd69e+P9999HaGhoneuqqKhARUWF9nlRUREAQKFQQKFQGLJp7VpVTVib2lib+rE++rE2+rWH2igUCgiCALVaXT2bUlkK8arOj7xuMQCHRvRXL7oDSK0b1NfBwQEjRozAN998o/2c3bZtGzp27IghQ4ZAIpEgJCRE23/58uXYuXMndu/ejddee03bXrXt2jHcr8NXX30FlUqFf//737CyskKPHj2QlpaG1157TbdWNcevVkMQBCgUilqTH435GTFqAMrLy4NKpYKrq6tOu6urK7Kysup8jbu7OzZv3oywsDBUVFTgq6++wrBhw3Dw4EEMHDgQABAQEIDY2FiEhISgqKgI69atQ//+/ZGSklJrVxkArFy5EsuWLavVHh8fDysrqybY0vYpLi7O2ENotVib+rE++rE2+rXl2piZmcHNzQ0lJSWorKzUNCrKGhVcmkpRcTFgrmpw/3HjxmHevHlYuXIlZDIZvvrqK4wbNw6lpaUoLS3FRx99hH379kEul0OlUuHevXu4evWqdjJBrVajvLxc+xwA7t27h6KiIpw9exZBQUFQKpXa5VWBqrS0VOc1VSorK3Hv3j0cOnQISqVSZ1lZWVmDt6tVnAUmEol0nguCUKutSvfu3dG9e3ft88jISKSnp+Pjjz/WBqCIiAhERERo+/Tv3x99+vTBJ598gvXr19da5+LFi7FgwQLt86KiInh6emLIkCFwdHR8pG1rjxQKBeLi4hAdHQ1zc3NjD6dVYW3qx/rox9ro1x5qU15ejvT0dNjY2FQfjyrYamZjHpEgCCguKYGtjY3ez86a7MytgAb0qzJhwgTMnTsXhw8fRt++fXH8+HHExMTAzs4Oixcvxr59+7B69Wp069YNlpaWmDBhAkQiEezs7AAAYrEYFhYW2ucAYGlpCTs7O5ibm8PMzExnmY2NDQDA2tpap71KeXk5LC0tMXDgwFrH9tYVmPQxagBycnKCRCKpNduTk5NTa1aoPhEREfj666/1LheLxejbty+uXr1a53KZTFbnEenm5uZt9j9bS2B99GNt6sf66Mfa6NeWa6NSqSASiSAWiyEW1zj8VmL7yOtWq9VAhRoimY3uupuItbU1nn32WWzduhU3btyAv78/+vbtCwA4cuQIZsyYgeeeew6A5vCTW7duYfDgwTpjqdr2KlV1CAoKwtdff42KigpYWloC0BwUXbPPg8RiMUQiUZ0/D435+TDqQdBSqRRhYWG1pjXj4uIQFRXV4PUkJSXB3d1d73JBEJCcnFxvHyIiIqrbiy++iJ9//hlffPEFpkyZom3v1q0bduzYgeTkZKSkpGDy5Ml1Hrejz+TJkyEWizFz5kykpqZiz549+Pjjj5tjE2ox+i6wBQsWYOrUqQgPD0dkZCQ2b96MtLQ0zJ49G4Bm91RGRga+/PJLAEBMTAx8fHwQFBSEyspKfP3119i+fTu2b9+uXeeyZcsQEREBPz8/FBUVYf369UhOTsaGDRuMso1ERERt2dChQ9GxY0dcvnwZkydP1ravXbsWL7/8MqKiouDk5IS33367UbuhbGxs8OOPP2L27NkIDQ1FYGAgPvroI+2MUnMyegCaOHEi8vPzsXz5csjlcgQHB2PPnj3w9vYGoLliZM3T6SorK/HWW28hIyMDlpaWCAoKws8//4xRo0Zp+9y9exevvPIKsrKyYG9vj9DQUBw6dAj9+vVr8e0jIiJq6yQSCTIzM2u1+/j44MCBAzptNc/+AjS3tqhJeOA0/IiIiFq3vXiwT3MwegACgDlz5mDOnDl1LouNjdV5vnDhQixcuLDe9a1duxZr165tquERERFRO2P0CyESERERtTQGICIiIjI5DEBERERkchiAiIiIWkhLHNzb3jVVDRmAiIiImlnVBfoac6sGqlvVrUSq7gOWX1KBC5mFjV5PqzgLjIiIqD2TSCRwcHBATk4OAMDKyqpBt61oCLVajcrKSpSXlzfLlaBbE7VajdzcXJjLLPDTuSzsTpHj8NU8BLjZ4uc3BzRqXQxARERELcDNzQ0AtCGoqQiCgHv37sHS0rLJQlVrJAgCyhVq5JVW4r34XMiLq2+EKhaJUFze8DvBAwxARERELUIkEsHd3R0uLi5QKBr3YV0fhUKBQ4cOYeDAgW32Xmn6qNUCUu7cRfylHCRcyUXhPSXyylRQCoCvkzWe7uWBsb090MVZcwPVosp7DV43AxAREVELkkgk2uNXmmp9SqUSFhYW7SYAXcgsxK6kDPyYIkdWUbm23cVWhhn9vfB0bw+EdLJ/pBkvBiAiIiIyuvySCuxOzsT3iXdwUV59PzE7CzOMCnHH07098JivIyTiptnNxwBERERERpF59x72X8zGvgvZ+P1GPpRqzSnuUokYTwS64JnenTCouzNkZk03Y1aFAYiIiIhahCAIuJxdjLgL2diXmo1zGbqnr/fsbI/nwzpjTC8POFhJm3UsDEBERETUbFRqAadvFWBfajbiUrORVlB9LSSRCAjz6oDhQa6IDnSDr5N1i42LAYiIiIiajEot4HJWMc6k/YHE238g4UouCkortculZmIM6OaE4UGuGBrgCmdbmVHGyQBEREREj0ShUuPw1VxsP5OBhMu5KKlQ6iy3tzTHsAAXDA9yxQA/Z1jLjB8/jD8CIiIianNyiyuQeLsAx6/n4+dzcuSVVM/y2MjM0NvTAX28HBDR1RF9fTrCXNK6rlLNAERERET1UqsFXM8twalbf+D07QIk3v4Dt/N172vmZCPF07064ZlQDwR52DfZ6erNhQGIiIiIalGo1Dh2PR8/n81EXGo2/ijTvXq1SAR0d7VFmHcHDOvhggF+zq1ulqc+DEBEREQEAMi4ew+/X8/H8Rv5+O2ibuixMBejt6cDwr07ItynA0K9OsDesu1eeZoBiIiIyITd+aMM351Mx49nM2vt1nK0lmJkiBtGhbi3yuN4HgUDEBERkYkpV6hw8HIutp1Kw8EruRA0F2CGRCxCSCd7RHRxxAA/Jzzm2xFm7Sj01MQAREREZAJKKpSIv5SDX89nIf5yDsoqVdpl/bs5YlI/Lwzyd4atRdvdrdUYDEBERETt1N2ySuy/mINfz8tx6GoeKpVq7TIPews81csDk/p5tegVmFsLBiAiIqJ2JKe4HHGp2fj1fBaOX6++wSgA+DpZ48lgNzwZ5Iaene0hErXuU9WbEwMQERFRG1eiALaeSsfP57Jx8laB9pgeAAhws8WTwW4YGewOf1cbkw49NTEAERERtUHF5Qrsu5CNH5IzcPiaBOrTF7XLenk6YGSwG0YEtewNRtsSBiAiIqI2orhcgYQrufj5rBwHLuWgQntMjwhBHrYY27sTRvf0QCcHS6OOsy1gACIiImrFMu/ew/6L2YhLzcbvN/KhUFXv3+rqbI3RIW6wLbiMGc9FwtzcNM7gagoMQERERK2IIAhIlRchLlUTei5kFuks7+JsjeGBbhjTyx2B7nZQKpXYs+eykUbbdjEAERERGZlKLeD0rQLsvZCNfalZuPPHPe0ykQgI9+6AJ3q44olAV3R1tjHiSNsPBiAiIiIjKFeocPRaHvZeyML+izkoKK3ULrMwF2OgnzOiA10xNMAFjjYyI460fWIAIiIiaiFF5QrEX8rBvgvZOHg5B6U1rsZsb2mOYT1cMCLIDQP9nGEplRhxpO0fAxAREVEzyikqx77UbOxLzcbx63k6BzG721tgeKArRgS5oa9v+7rZaGvHAERERNTEcorK8dNZOX46m4mk9Ls6Fybs5mKDEUGa0BPSybSvxmxMDEBERERN4I/SSvx6IQs/JGfi95v5OqGnt6cDRgS5YXgQD2JuLRiAiIiIDFRSocT+1Gz8kJKJQ1dyde671cfLAWN6eWBksDvc7C2MOEqqS6vY2bhx40b4+vrCwsICYWFhOHz4sN6+Bw8ehEgkqvW4dOmSTr/t27cjMDAQMpkMgYGB2LlzZ3NvBhERmYByhQq/npfjtW/OIHxFHOZtS8aBSzlQqgX0cLfD208G4PDCIdgxpz9e6u/L8NNKGX0GaNu2bZg3bx42btyI/v3747PPPsPIkSORmpoKLy8vva+7fPky7OzstM+dnZ21Xx8/fhwTJ07E+++/j3HjxmHnzp2YMGECjhw5gscee6xZt4eIiNof7dlbqdk4eEn37C1fJ2uM6eWBp3u5o5uLrRFHSY1h9AC0Zs0azJw5E7NmzQIAxMTEYO/evdi0aRNWrlyp93UuLi5wcHCoc1lMTAyio6OxePFiAMDixYuRkJCAmJgYbN26tcm3gYiI2p8KpQrxl3Kx/cwdHLycU+vsLU3o8UCQhx0PZG6DjBqAKisrkZiYiEWLFum0Dx8+HMeOHav3taGhoSgvL0dgYCCWLFmCIUOGaJcdP34c8+fP1+k/YsQIxMTE1LmuiooKVFRUaJ8XFWkuO65QKKBQKBqzSSahqiasTW2sTf1YH/1YG/1asjaCICDlTiF2Jcvx87ks3L1X/Z5dnKwQ3cMV0YEuCPGwg1isCT1KpbLZx1Uf/uxUa0wNjBqA8vLyoFKp4OrqqtPu6uqKrKysOl/j7u6OzZs3IywsDBUVFfjqq68wbNgwHDx4EAMHDgQAZGVlNWqdK1euxLJly2q1x8fHw8rKypBNMwlxcXHGHkKrxdrUj/XRj7XRrzlrc7cCOJkrwqlcMXLKq2dz7M0FhDsLCHdWw8OqCFAWIePsVWScbbahGIw/O0BZWVmD+xp9FxiAWlOHgiDonU7s3r07unfvrn0eGRmJ9PR0fPzxx9oA1Nh1Ll68GAsWLNA+LyoqgqenJ4YMGQJHR8dGb097p1AoEBcXh+joaN55+AGsTf1YH/1YG/2aqzZqtYCj1/Px7cl0HLici6oTuCzMxRjewxXPhLojqosjJOLWvXuLPzvVqvbgNIRRA5CTkxMkEkmtmZmcnJxaMzj1iYiIwNdff6197ubm1qh1ymQyyGS177Nibm5u8j9M9WF99GNt6sf66Mfa6PeotVGq1LgoL0bynbtITruLEzfzdW462s+3I8aHdcaoEHfYyFrF/ECj8GcHjdp+o36HpVIpwsLCEBcXh3Hjxmnb4+LiMHbs2AavJykpCe7u7trnkZGRiIuL0zkOaN++fYiKimqagRMRUZtxPbcE/z2Vju1n7iCvpFJnma3MDM+FdcaLj3nBz5VncJkSo0fcBQsWYOrUqQgPD0dkZCQ2b96MtLQ0zJ49G4Bm91RGRga+/PJLAJozvHx8fBAUFITKykp8/fXX2L59O7Zv365d59y5czFw4EB89NFHGDt2LHbv3o39+/fjyJEjRtlGIiJqWfcqVdhzTo5tp9Jx8laBtt3Owgy9vTqgd2d79PJ0QGRXR1hJjf5RSEZg9O/6xIkTkZ+fj+XLl0MulyM4OBh79uyBt7c3AEAulyMtLU3bv7KyEm+99RYyMjJgaWmJoKAg/Pzzzxg1apS2T1RUFL777jssWbIE7777Lrp27Ypt27bxGkBERO2YIAg4e6cQ/0u8g13JGSgu15ydJRYBQwNcMLGvF4Z0d4YZbzhKaAUBCADmzJmDOXPm1LksNjZW5/nChQuxcOHCh65z/PjxGD9+fFMMj4iIWimFSo0TNwqwLzULcanZkBeWa5d5drTExHBPjA/z5NWYqZZWEYCIiIgaSq0WcPr2H/ghJQN7zmWhoLT6uB4rqQRDA1zwQl8vRHV11F6rh+hBDEBERNTqVaiA/RdzcOhaAeIv5SCrqHqmx9FaiuhAVwwPckVUVydYmEuMOFJqKxiAiIioVSouVyAuNRu7kzNw5KoEqpPJ2mW2MjOMCHbD0708ENXVkcf1UKMxABERUatxr1KF3y5l48eUTMRfzkWlUn1/iQieHSwxrIcrBnd3RkQXR8700CNhACIiIqOqUKpw6EoefkzJxP6L2Sircaf1rs7WGB3sBuuCy3jpucchlUqNOFJqTxiAiIioxSlVahy7no8fUzLx64Us7SnrgObsrTE9PfBUTw/0cLeFUqnEnj2Xecd1alIMQERE1CLUagEnbxXgx5RM/HJe9+wtVzsZnurpgTG9PNCrsz3DDjU7BiAiImo2KrWA07cKsOecHL+cz0JOcYV2maO1FCND3DCmpwf6+nTkKevUohiAiIioSanUAk7VCD25NUKPnYUZngx2w5heHojswrO3yHgYgIiIqElczirGtydu4+dzWcgr0Q090YFuGN3TDf27OUFmxrO3yPgYgIiIyGAKlRp7L2Thy+O3cfJm9U1H7S3NMTzQFaN6uqN/VydIzTjTQ60LAxARETXatZxi/Pf0Hew4cwd5JZqDmSViEaJ7uGJiP0+GHmr1GICIiKhB8koq8PNZOXYlZyAp7a623clGhkn9PDH5MS+421sab4BEjcAAREREehWXK7D3guZ2FMeu50OlFgBoZnuGdHfBxL6eGNzdGeY8mJnaGAYgIiLSUaFUIf5SDnYnZ+K3Szk1bkcB9Opsj6d7d8KYXu5wsbUw4iiJHg0DEBERAQCuZhdj26l07EjK0LlIYVdna4zt3QlP9/KAj5O1EUdI1HQYgIiITFhBaSV+PpuJHUm6x/W42snwTO9OeLq3BwLd7XhlZmp3GICIiExMuUKF/RezsSspAwcv50JZ47ieoQEueKGvJwb5O/MihdSuMQAREZkAlVrAiRv52JmUgV/OZ6Gkovrmo8Gd7DSzPb084GLH43rINDAAERG1YxflRdiVlIHdyZnIKirXtndysMQzoR54pncn+LnaGnGERMbBAERE1I6o1QJS7tzFvtRs7LuQheu5pdpldhZmGN3TA+NCOyHcuwNvPkomjQGIiKiNEwQByel38UNKJvackyO7qPo+XFKJGEMDXPBMaCcMCXDmfbiI7mMAIiJqg9RqAWczCrH3QhZ+PitHWkGZdpmNzAyDuztjeJAbBnd3hp2FuRFHStQ6MQAREbURgiAgKf0udiVlYN+FbJ1jeizNJYgOdMXTvTwwwJ93XCd6GAYgIqJWLruoHDvOZOB/iek6x/RYSyUYHOCCEUFueKKHC6yk/JVO1FD830JE1Arll1Tgl/NZ+DElEydvFUDQXKoHFuZijAp2x5heHojs6ggLc870EBmCAYiIqBUQBAGZZcBnh27i0LV8JN7+Q3vjUQDo69MB48M6Y1SIO2x5TA/RI2MAIiIyEkEQcC6jED+dlePns5nIuGsG4Kp2eUgne4zp5Y7RPT3QycHSeAMlaocYgIiIWtidP8rw/ek72JmUoXP2lrlIQJSfM57o4YrB3V3g2dHKiKMkat8YgIiIWkBZpRIHL+di26l0HLqaqz2mx9JcgqE9XDAy0AX3biTimTF9YG7OXVxEzY0BiIiomeQWV2D/xWzsT83GkWt5qFCqtcuiujpiYl9PRAe6wkpqBoVCgT23jThYIhNjcAD67bff8NtvvyEnJwdqtVpn2RdffPHIAyMiaovullVi74Us/Jgix7HreahxHDM6d7DEmF4emBjuCR8na+MNkogMC0DLli3D8uXLER4eDnd3d4hEvJ8MEZmukgol4lI1oefw1VwoVNWpJ6STPYYHuiI6yBXdXW35+5KolTAoAH366aeIjY3F1KlTm3o8RERtwp0/ypBwJRcHL+fi0JVcnd1bAW62GNPLA0/1dIe3I2d6iFojgwJQZWUloqKimnosREStVoVShZM3C5BwORcHr+TiWk6JzvIuTtYY08sDY3q5o5uLrZFGSUQNZVAAmjVrFr799lu8++67TT0eIqJWo7BMgbiL2fj1fBaOXsvDPYVKu0wiFqGPlwMG+TtjSIALAt3tuHuLqA0xKACVl5dj8+bN2L9/P3r27FnrlM01a9Y0an0bN27E3//+d8jlcgQFBSEmJgYDBgx46OuOHj2KQYMGITg4GMnJydr22NhYvPTSS7X637t3DxYWFo0aGxGZlvSCMhy8nIN9qdk4fj0fyhpHMbvYyjC4uzMG+bvg8W5OsLfi6epEbZVBAejs2bPo3bs3AOD8+fM6yxr7F9C2bdswb948bNy4Ef3798dnn32GkSNHIjU1FV5eXnpfV1hYiGnTpmHYsGHIzs6utdzOzg6XL1/WaWP4IaIHlStUOHGzAIeu5OLg5Rydm40CmuN5ngx2w/BAN/Rw50HMRO2FQQEoPj6+yQawZs0azJw5E7NmzQIAxMTEYO/evdi0aRNWrlyp93WvvvoqJk+eDIlEgl27dtVaLhKJ4Obm1mTjJKL2QRAEXM0pwaEruUi4kouTNwt0DmCWiEUI8+6AId1dMCLIFV2cbYw4WiJqLo98IcQ7d+5AJBKhU6dOjX5tZWUlEhMTsWjRIp324cOH49ixY3pft2XLFly/fh1ff/01VqxYUWefkpISeHt7Q6VSoXfv3nj//fcRGhra6DESUdt3t6wSR67l4dCVXBy+mgd5YbnOcjc7Cwz0d9Ls2vJzgr0ld20RtXcGBSC1Wo0VK1bgH//4B0pKNGdC2Nra4i9/+QveeecdiMXiBq0nLy8PKpUKrq6uOu2urq7Iysqq8zVXr17FokWLcPjwYZiZ1T38gIAAxMbGIiQkBEVFRVi3bh369++PlJQU+Pn51epfUVGBiooK7fOioiIAgEKhgEKhaNC2mJKqmrA2tbE29WvJ+qT/UYafzmbhwOVcnL1TqHNBQqmZGP18OmBAN0cM6OaEbi7WOru2jPH948+OfqxN/Vifao2pgUEB6J133sHnn3+OVatWoX///hAEAUePHsXSpUtRXl6ODz74oFHre3CfuiAIde5nV6lUmDx5MpYtWwZ/f3+964uIiEBERIT2ef/+/dGnTx988sknWL9+fa3+K1euxLJly2q1x8fHw8qKNyPUJy4uzthDaLVYm/o1V31KFcCZfBES88S4Waz7O8TNUkCAg+bR1VYJqSQbKMzG1cSa9183Pv7s6Mfa1I/1AcrKyh7e6T6RIAjCw7vp8vDwwKeffoqnn35ap3337t2YM2cOMjIyGrSeyspKWFlZ4fvvv8e4ceO07XPnzkVycjISEhJ0+t+9excdOnSARCLRtqnVagiCAIlEgn379mHo0KF1vtef/vQn3LlzB7/88kutZXXNAHl6ekIul8PR0bFB22JKFAoF4uLiEB0dzZs2PoC1qV9z1EehUuPQlTzsSM5E/OXqqzCLRECkb0eMCnHDQD8nuNu37pMg+LOjH2tTP9anWlFREZycnFBYWAg7O7t6+xo0A1RQUICAgIBa7QEBASgoKGjweqRSKcLCwhAXF6cTgOLi4jB27Nha/e3s7HDu3Dmdto0bN+LAgQP43//+B19f3zrfRxAEJCcnIyQkpM7lMpkMMpmsVru5ubnJ/zDVh/XRj7WpX1PU50JmIbYnZmB3cgbySyu17T3c7fBsaCeM6eUBt1YeeurCnx39WJv6sT5o1PYbFIB69eqFf/7zn7V2J/3zn/9Er169GrWuBQsWYOrUqQgPD0dkZCQ2b96MtLQ0zJ49GwCwePFiZGRk4Msvv4RYLEZwcLDO611cXGBhYaHTvmzZMkRERMDPzw9FRUVYv349kpOTsWHDBkM2l4haAUEQcCGzCPGXcvDzOTkuZRVrlznZSDG2dyc816czAj3q/6uPiAgwMACtXr0ao0ePxv79+xEZGQmRSIRjx44hPT0de/bsadS6Jk6ciPz8fCxfvhxyuRzBwcHYs2cPvL29AQByuRxpaWmNWufdu3fxyiuvICsrC/b29ggNDcWhQ4fQr1+/Rq2HiIyrtEKJI9fyEH8pB/GXc5BdVL2rWioR44lAFzzXpzMG+jvDXNKwky+IiAADA9CgQYNw5coVbNiwAZcuXYIgCHj22WcxZ84ceHh4NHp9c+bMwZw5c+pcFhsbW+9rly5diqVLl+q0rV27FmvXrm30OIjI+IrKFfgpRY5fzstx4kYBKlXV1+ixkkrQv5sThgW44MlgNzhYSY04UiJqywy+DpCHh0ejz/YiIqpLhVKFUzf/wPYzd/DLeTnKFdWhx6ujFYYGuGBogAse69IRMjNJPWsiImqYBgegs2fPIjg4GGKxGGfPnq23b8+ePR95YETUfqnVAhJvF+Dw1TycuFGAM2l/6FyN2c/FBs/26YzoQFd0dbbm7SeIqMk1OAD17t0bWVlZcHFxQe/evSESiVDXGfQikQgqlaqONRCRKatQqnDsWj7+e0OMDz4+hJziCp3lTjZSDA9yw/NhndHb04Ghh4iaVYMD0M2bN+Hs7Kz9moioPoIg4FZ+GQ5dycWhK7k4fiMfZZUqAGIAFbCVmWFQd2dEdHFERJeO6Opsw9BDRC2mwQGo6qysB78mIqpSVqnEkat5OHQ1F4eu5CGtQPeqrE42UvhZlWPWk+EY4O8KqRnP3CIi4zDoIOj//Oc/cHJywujRowEACxcuxObNmxEYGIitW7cyIBGZkLJKJeIv5WLPOTkOXMrBPUX1LnBziQjh3h0x0N8Zg/yd0c3JAr/88gsG+jnBnOGHiIzIoAD04YcfYtOmTQCA48eP45///CdiYmLw008/Yf78+dixY0eTDpKIWo+icgVO3CjA6VsFOH37D5y7U6hzqnrnDpYYGuCCgX7OiOzqCGtZ9a8Z3qyRiFoLgwJQeno6unXrBgDYtWsXxo8fj1deeQX9+/fH4MGDm3J8RNQK5JVUIC41G7+ez8Kx63na+21V8exoidEhHhgd4o7gTnY8loeIWj2DApCNjQ3y8/Ph5eWFffv2Yf78+QAACwsL3Lt3r0kHSETGoVILOHQlF9+eTMOBSzlQqatDj6+TNR7z7Yhwn44I9+4Ab0crhh4ialMMCkDR0dGYNWsWQkNDceXKFe2xQBcuXICPj09Tjo+IWti1nBL8kJKJ7Yl3kHG3+g+akE72eDLYDSOCXNHNxdaIIyQienQGBaANGzZgyZIlSE9Px/bt2+Ho6AgASExMxKRJk5p0gETU/DLv3sPu5Ez8kJKJi/Iibbu9pTme69MZkx/zZOghonbFoADk4OCAf/7zn7Xaly1b9sgDIqKWUa5QYe+FLPwv8Q6OXMtD1XVNzcQiDPR3xtO9PPBksBsszHnrCSJqf3grDCITIggCzqTdxf8S7+CnlEwUVyi1y/r5dsS40E54MsgNHax5k1Eiat+a7FYYVc95Kwyi1qfwngLfn07HtyfScCOvVNveycESz4V1xnN9OsHb0dqIIyQialm8FQZRO3Yluxj/OXYLO85kaC9QaGkuwcgQN4wP64wIX0eIxTx7i4hMD2+FQdTOpBeU4cezmfgxRa5zQHN3V1tMi/LG2N6dYCMz6PA/IqJ2w6DfgitXroSrqytefvllnfYvvvgCubm5ePvtt5tkcET0cNlF5ThxswAnb+bj5M0CXMku0S4zE4swrIcLZkT5IqJLR16rh4joPoMC0GeffYZvv/22VntQUBBeeOEFBiCiZqZQqbE/NRvfnkzD4at5OsvEIiCyqyPG9NScxeVgxQOaiYgeZFAAysrKgru7e612Z2dnyOXyRx4UEdWmVgtIvnMXv5yTY2dSJvJKKrTLgjvZoZ+PI/r5dkQ/347oyLO4iIjqZVAA8vT0xNGjR+Hr66vTfvToUXh4eDTJwIhIczuKxNt/YM85OX49n4WsonLtMmdbGSaEd8bEcC94OVoZcZRERG2PQQFo1qxZmDdvHhQKBYYOHQoA+O2337Bw4UL85S9/adIBEpkatVrAiZsF+PlcJn49n60z02MjM8OwHi4YFeKOoQEuMJeIjThSIqK2y6AAtHDhQhQUFGDOnDmorKwEoLkR6ttvv43Fixc36QCJTEV6QRm2n7mD7WfuIL2g+h5cdhZmiA50w8hgNzzu58QrMxMRNQGDApBIJMJHH32Ed999FxcvXoSlpSX8/Pwgk8maenxE7V5qZhHW/3YVv17I0rbZyMwwKsQNo0LcEdXVCVIzzvQQETWlR7oYSFZWFgoKCjBw4EDIZDLtlaCJqH6CIOBcRiE2xl/XBh+RCOjf1QnjwzpjRJAbLKWc6SEiai4GBaD8/HxMmDAB8fHxEIlEuHr1Krp06YJZs2bBwcEB//jHP5p6nERtXmmFEvGXc3DoSi4OXcnTHtAsEgFP9fTAm0O7wc+Vd1wnImoJBgWg+fPnw9zcHGlpaejRo4e2feLEiZg/fz4DEFENucUV+M+xW/jq99sovKfQtsvMxBgR5IY3GHyIiFqcQQFo37592Lt3Lzp37qzT7ufnh9u3bzfJwIjauguZhfjmRBr+l3gHlUo1AMCroxWGB7pioL8z+vl25AHNRERGYlAAKi0thZVV7euO5OXl8UBoMmmF9xQ4kiXC5k3HcSGzWNvey9MBfx7UBdGBbpDw5qNEREZnUAAaOHAgvvzyS7z//vsANGeFqdVq/P3vf8eQIUOadIBErV1OcTniUrPx6/ksHL+eD6VaAqAY5hIRhge5YWqENx7z5X24iIhaE4MC0N///ncMHjwYp0+fRmVlJRYuXIgLFy6goKAAR48ebeoxErUqSpUaKXfu4uDlXCRcycW5jEIIQvVyd0sBLw0OwPhwL96SgoiolTIoAAUGBuLs2bPYtGkTJBIJSktL8eyzz+K1116r8x5hRG1ddlE5Eq7kIuFyLg5fzUVRuVJneS9PB4wIcsUwfydcOpWAUVHeMDc3N9JoiYjoYRodgBQKBYYPH47PPvsMy5Yta44xERmdIAi4kFmE/Rezsf9iNs5nFOkst7c0xwA/Jwzyd8Ygf2e42FkA0Pz/uGSMARMRUaM0OgCZm5vj/PnzPJ6B2h1BEJCcfhc/n5Vjzzk5MgurbzwqEgE9OztoA09vTwcezExE1IYZtAts2rRp+Pzzz7Fq1aqmHg9Ri8spLse3J9Lw/ek7yLhbfQ8uS3MJBvo7YVgPVwwNcIGTDc9wJCJqLwwKQJWVlfj3v/+NuLg4hIeHw9raWmf5mjVrmmRwRM1FEASk3CnEf47dwk9nM6FQaY5itpJK8EQPV4zu6Y5B/s68Tg8RUTtlUAA6f/48+vTpAwC4cuWKzjLuGqPWTF54D7uSMrHjzB1czSnRtod5d8C0SG+MCHJj6CEiMgEGBaD4+PimHgdRsymtUOLX81nYkXQHx67na09Zl5qJMTrEHTOifNDL08GoYyQiopYlftQVpKen486dO4+0jo0bN8LX1xcWFhYICwvD4cOHG/S6o0ePwszMDL179661bPv27QgMDIRMJkNgYCB27tz5SGOktkWlFnD4ai7mb0tG+Ir9+Mv3KTh6TRN++vl0xKpnQ3DqnSewdmJvhh8iIhNkUABSKpV49913YW9vDx8fH3h7e8Pe3h5LliyBQqF4+Apq2LZtG+bNm4d33nkHSUlJGDBgAEaOHIm0tLR6X1dYWIhp06Zh2LBhtZYdP34cEydOxNSpU5GSkoKpU6diwoQJOHHiRKPGRm3P1exirNxzEVGrfsPUz09iZ1IG7ilU8HWyxoJofxxeOAT/nR2JF/p5wd6S1+khIjJVBu0Ce/3117Fz506sXr0akZGRADShY+nSpcjLy8Onn37a4HWtWbMGM2fOxKxZswAAMTEx2Lt3LzZt2oSVK1fqfd2rr76KyZMnQyKRYNeuXTrLYmJiEB0djcWLFwMAFi9ejISEBMTExGDr1q2N3Fpq7VRqAfsvZuM/x27h2PV8bbuDlTnG9PTAuD6dEOrpwOPTiIhIy6AAtHXrVnz33XcYOXKktq1nz57w8vLCCy+80OAAVFlZicTERCxatEinffjw4Th27Jje123ZsgXXr1/H119/jRUrVtRafvz4ccyfP1+nbcSIEYiJialzfRUVFaioqNA+LyrSXPROoVA0ekbLFFTVxJi1Uak1Z3H9dikHP5/LQsZdzTV7xCJgaHdnjAv1wCB/Z8jMNJOcSqWyvtU1mdZQm9aM9dGPtdGPtakf61OtMTUwKABZWFjAx8enVruPjw+k0obf+ygvLw8qlQqurq467a6ursjKyqrzNVevXsWiRYtw+PBhmJnVPfysrKxGrXPlypV1XtU6Pj6+zrvek0ZcXFyLvl+FCrhcKML5AhEu/CFCibJ6RsfKTECki4DH3dToKJNDeUuO32616PB0tHRt2hrWRz/WRj/Wpn6sD1BWVtbgvgYFoNdeew3vv/8+tmzZAplMc3G4iooKfPDBB3j99dcbvb4Hd00IglDn7gqVSoXJkydj2bJl8Pf3b5J1AppdZAsWLNA+LyoqgqenJ4YMGQJHR8eGbobJUCgUiIuLQ3R0dLPf76pcocLe1Bz8fE6OY9cLUKFUa5fZWphhkJ8ThgU444keLq3i9PWWrE1bxProx9rox9rUj/WpVrUHpyEMCkBJSUn47bff0LlzZ/Tq1QsAkJKSgsrKSgwbNgzPPvustu+OHTv0rsfJyQkSiaTWzExOTk6tGRwAKC4uxunTp5GUlKQNWmq1GoIgwMzMDPv27cPQoUPh5ubW4HUCgEwm0wa5mszNzU3+h6k+zVmf8xmF+O/pdOxKytC58ahnR0s80cMV0T1c0de3I8wlj3wiY7Pgz079WB/9WBv9WJv6sT5o1PYbFIAcHBzw3HPP6bR5eno2ej1SqRRhYWGIi4vDuHHjtO1xcXEYO3Zsrf52dnY4d+6cTtvGjRtx4MAB/O9//4Ovry8AIDIyEnFxcTrHAe3btw9RUVGNHiO1nMJ7CvyQnIHvTqXjQmZ1iu/kYInnwztjZLA7/F1teDAzERE9MoMC0JYtWxrU7+jRo6ioqKhzdqXKggULMHXqVISHhyMyMhKbN29GWloaZs+eDUCzeyojIwNffvklxGIxgoODdV7v4uICCwsLnfa5c+di4MCB+OijjzB27Fjs3r0b+/fvx5EjRwzYWmpOFUoVEi7n4sezcuy7kKXdxSWViDE8yBUT+3qif1cniHnjUSIiakIGBaCGGjlyJJKTk9GlSxe9fSZOnIj8/HwsX74ccrkcwcHB2LNnD7y9vQEAcrn8odcEelBUVBS+++47LFmyBO+++y66du2Kbdu24bHHHnuk7aGmIQgCktLvYuuJNPx6IQvFNXZxdXe1xcS+nhgX2gkdrBt+QD0REVFjNGsAEqruOfAQc+bMwZw5c+pcFhsbW+9rly5diqVLl9ZqHz9+PMaPH9+g96eWca9Shd3JGfjq99s6u7hc7WR4qqcHnu7lgZ6d7bmLi4iIml2zBiAiQRBw+vYf2J54Bz+dlaOkQjPbIzUTY0xPD0wI74y+Ph25i4uIiFoUAxA1ObVawNmMQuy7kIU95+S4lV99XQavjlaYEuGF58M8uYuLiIiMhgGImkxafhlij93CnnNyZBWVa9utpRKMCnHH+DDO9hARUevQrAGIx3KYhpT0u9h86AZ+OS+H+v5hX9ZSCQYHuGBEkBue6OECKymzNhERtR6t4iBoanuUauCHFDm2nrqD07f/0LYP9HfGtAhvPO7n1CquzExERFQXgwOQUqnEwYMHcf36dUyePBm2trbIzMyEnZ0dbGxsAGiu3EzthyAIuJRVjN1Jd/D1GQlKTmguSmkmFuHpXh7408Au6OFuZ+RREhERPZxBAej27dt48sknkZaWhoqKCkRHR8PW1harV69GeXl5g+8GT23D1exi/JCSiZ/PynEjr/R+qwiutjJMfswbk/p5wsXOwqhjJCIiagyDAtDcuXMRHh6OlJQUnZuFjhs3DrNmzWqywZHxFJRW4ofkDGw/k4FzGYXadqmZGAO7OcJTnYW/Th4AKwv9V/kmIiJqrQwKQEeOHMHRo0chleqexuzt7Y2MjIwmGRi1vEqlGvGXc7A98Q7iL+dAodIcw2UmFmFwdxeM6eWOoQEusJAAe/bsabU3IiUiInoYgwKQWq2GSqWq1X7nzh3Y2to+8qCoZd3KK8VXv9/GjjN38EeZQtse0skez/XphKd7d0LHGtfsUSgUda2GiIiozTAoAEVHRyMmJgabN28GoDndvaSkBO+99x5GjRrVpAOk5iEIAg5dzUPs0Zs4eCUXVSfsudjKMC60E54L6wx/V4ZZIiJqnwwKQGvXrsWQIUMQGBiI8vJyTJ48GVevXoWTkxO2bt3a1GOkJqRWC9iXmoX1v11Dqrz6flxDA1wwNdIbA7o5wYy7toiIqJ0zKAB5eHggOTkZW7duxZkzZ6BWqzFz5ky8+OKLsLS0bOoxUhNQqtTYcz4LGw5cw+VszeUJrKUSTOjriWmRPvB1sjbyCImIiFqOwdcBsrS0xMsvv4yXX365KcdDTaykQoltp9LxxZGbyLh7DwBgKzPDS/198FJ/X96Pi4iITJJBAeiHH36os10kEsHCwgLdunWDr6/vIw2MHk1WYTm2HLuJb0+kobhccwf2jtZSTI/0wYz+PrC3NDfyCImIiIzHoAD0zDPPQCQS1brVRVWbSCTC448/jl27dqFDhw5NMlBqmIvyIvzr8A38kJwJ5f0bc3VxssbMAb54rk9n3p6CiIgIgEFHu8bFxaFv376Ii4tDYWEhCgsLERcXh379+uGnn37CoUOHkJ+fj7feequpx0t6nLpVgJe2nMTIdYex40wGlGoB/Xw74t/TwrF/wSC8+Jg3ww8REdF9Bl8JevPmzYiKitK2DRs2DBYWFnjllVdw4cIFxMTE8PigZiYIAg5ezsXGg9dw6pbmhqRiETAyxB2vDOiCXp4Oxh0gERFRK2VQALp+/Trs7Grf9NLOzg43btwAAPj5+SEvL+/RRkd1UqkF/HxOjk0Hr+Pi/VPZpRIxngvrjFcHdoEPz+giIiKql0EBKCwsDH/961/x5ZdfwtnZGQCQm5uLhQsXom/fvgCAq1evonPnzk03UkKFUoUdZzLwWcJ13MovAwBYSSWYEuGNmY/7wpU3JCUiImoQgwLQ559/jrFjx6Jz587w9PSESCRCWloaunTpgt27dwMASkpK8O677zbpYE1VaYUSW0+m4V+HbyC7qAIA0MHKHDOifDE9yhsOVjyVnYiIqDEMCkDdu3fHxYsXsXfvXly5cgWCICAgIADR0dEQizXHVT/zzDNNOU6TJAgCdiZl4MM9l5BXogk+bnYW+NPALpjUzxNWUoMv40RERGTSDP4EFYlEePLJJ/Hkk0825XjovtTMIrz3w3ntwc3ejlaYM7grngntBJkZz+YiIiJ6FAYHoNLSUiQkJCAtLQ2VlZU6y958881HHpipkhfew/rfrmLbqXSoBcDSXII3hnXDzMd9GXyIiIiaiEEBKCkpCaNGjUJZWRlKS0vRsWNH5OXlwcrKCi4uLgxABrhbVolNB68j9tgtVCjVAIBRIW5YMjoQHg68vxoREVFTMigAzZ8/H2PGjMGmTZvg4OCA33//Hebm5pgyZQrmzp3b1GNs19ILyrDl6C1sO5WG0koVAKCvTwe8/WQAwn06Gnl0RERE7ZNBASg5ORmfffYZJBIJJBIJKioq0KVLF6xevRrTp0/Hs88+29TjbHdSM4uw8eA1/HI+C6r7t6zo4W6HhSO6Y3B3Z4hEIiOPkIiIqP0yKACZm5trP6BdXV2RlpaGHj16wN7eHmlpaU06wPbmanYx1u6/gj3nsrRtj3dzwp8GdsFAPycGHyIiohZgUAAKDQ3F6dOn4e/vjyFDhuD//u//kJeXh6+++gohISFNPcZ2IbuoHKt+uYRdyRkQBEAkAkaHuGPO4G4I9Kh9VW0iIiJqPgYFoA8//BDFxcUAgPfffx/Tp0/Hn//8Z3Tr1g1btmxp0gG2dSq1gC+P38I/9l1BSYUSADAiyBXzo/0R4MbgQ0REZAyNDkCCIMDZ2RlBQUEAAGdnZ+zZs6fJB9YepGYWYeH2FJzP0Nyvq5enA94fG4SenR2MOzAiIiITZ1AA8vPzw4ULF+Dn59ccY2oXzqT9gemfn0RxhRJ2FmZY+GQAJvXzgkTMY3yIiIiMrdEBSCwWw8/PD/n5+QxAetQMP/18O2LD5D5wtpUZe1hERER0n9iQF61evRp//etfcf78+aYeT5v3YPiJfakvww8REVErY9BB0FOmTEFZWRl69eoFqVQKS0vdKxUXFBQ0yeDamnN3CrXh5zHfjtjyUl/esJSIiKgVMujTOSYmpomH0fbdzCvFjC0MP0RERG2BQZ/Q06dPb9JBbNy4EX//+98hl8sRFBSEmJgYDBgwoM6+R44cwdtvv41Lly6hrKwM3t7eePXVVzF//nxtn9jYWLz00ku1Xnvv3j1YWFg06dgBIKeoHNO+OIH80kqEdLLH5zMYfoiIiFozgz+lr1+/ji1btuD69etYt24dXFxc8Ouvv8LT01N7inxDbNu2DfPmzcPGjRvRv39/fPbZZxg5ciRSU1Ph5eVVq7+1tTVef/119OzZE9bW1jhy5AheffVVWFtb45VXXtH2s7Ozw+XLl3Ve2xzhp6hcgelbTiG94B58HK2w5aW+sJEx/BAREbVmBh0EnZCQgJCQEJw4cQI7duxASUkJAODs2bN47733GrWuNWvWYObMmZg1axZ69OiBmJgYeHp6YtOmTXX2Dw0NxaRJkxAUFAQfHx9MmTIFI0aMwOHDh3X6iUQiuLm56Tyamkot4M9fJ+KivAhONjJ8+fJjcLLhAc9EREStnUFTFYsWLcKKFSuwYMEC2NraatuHDBmCdevWNXg9lZWVSExMxKJFi3Tahw8fjmPHjjVoHUlJSTh27BhWrFih015SUgJvb2+oVCr07t0b77//PkJDQ+tcR0VFBSoqKrTPi4o0Fy5UKBRQKBR633vjwRs4ei0fVlIJ/j01FO525vX2by+qttEUtrWxWJv6sT76sTb6sTb1Y32qNaYGBgWgc+fO4dtvv63V7uzsjPz8/AavJy8vDyqVCq6urjrtrq6uyMrK0vMqjc6dOyM3NxdKpRJLly7FrFmztMsCAgIQGxuLkJAQFBUVYd26dejfvz9SUlLqvHbRypUrsWzZslrt8fHxsLKyqvP9bxYD689LAIgwzrMSt5OP4Hbyw7e5PYmLizP2EFot1qZ+rI9+rI1+rE39WB+grKyswX0NCkAODg6Qy+Xw9fXVaU9KSkKnTp0avb4H74AuCMJD74p++PBhlJSU4Pfff8eiRYvQrVs3TJo0CQAQERGBiIgIbd/+/fujT58++OSTT7B+/fpa61q8eDEWLFigfV5UVARPT08MGTIEjo6OtfoXlyvw9w3HoUY5ngpxw3vPh5jUXdwVCgXi4uIQHR0Nc3NzYw+nVWFt6sf66Mfa6Mfa1I/1qVa1B6chDApAkydPxttvv43vv/8eIpEIarUaR48exVtvvYVp06Y1eD1OTk6QSCS1ZntycnJqzQo9qCp8hYSEIDs7G0uXLtUGoAeJxWL07dsXV69erXO5TCaDTFb72B1zc/NaP0yCIGDZz+dx5245OnewxIfP9YRUapo/cHXVhzRYm/qxPvqxNvqxNvVjfdCo7TfoIOgPPvgAXl5e6NSpE0pKShAYGIiBAwciKioKS5YsafB6pFIpwsLCak3bxcXFISoqqsHrEQRB5xieupYnJyfD3d29wevU55fzWdidnAmJWIR1L4TCzsK0f9iIiIjaIoNmgMzNzfHNN99g+fLlSEpKglqtRmhoqEH3BluwYAGmTp2K8PBwREZGYvPmzUhLS8Ps2bMBaHZPZWRk4MsvvwQAbNiwAV5eXggICACguS7Qxx9/jDfeeEO7zmXLliEiIgJ+fn4oKirC+vXrkZycjA0bNhiyuVqCIGBD/DUAwJ8HdUWYd4dHWh8REREZh0EBKCEhAYMGDULXrl3RtWvXRxrAxIkTkZ+fj+XLl0MulyM4OBh79uyBt7c3AEAulyMtLU3bX61WY/Hixbh58ybMzMzQtWtXrFq1Cq+++qq2z927d/HKK68gKysL9vb2CA0NxaFDh9CvX79HGuupW3/gQmYRZGZizHzc9+EvICIiolbJoAAUHR0NNzc3TJ48GVOmTEFwcPAjDWLOnDmYM2dOnctiY2N1nr/xxhs6sz11Wbt2LdauXftIY6rLF0duAgCe7dMZHaylTb5+IiIiahkGHQOUmZmJhQsX4vDhw+jZsyd69uyJ1atX486dO009vlYjvaAM+1I1B2u/3N/HuIMhIiKiR2JQAHJycsLrr7+Oo0eP4vr165g4cSK+/PJL+Pj4YOjQoU09xlYh9tgtqAVggJ8T/FxtH/4CIiIiarUMCkA1+fr6YtGiRVi1ahVCQkKQkJDQFONqVYrLFdh2Kh0AeOwPERFRO/BIAejo0aOYM2cO3N3dMXnyZAQFBeGnn35qqrG1Gv9LvIOSCiW6OltjoJ+zsYdDREREj8igg6D/9re/YevWrcjIyEB0dDRiYmLwzDPP6L1tRFumVguIPXYLAPBSf1+IxaZzxWciIqL2yqAAdPDgQbz11luYOHEinJycmnpMrUqqvAi388tgJZXg2T6Nv80HERERtT4GBaCqO7Wnpqbi9OnTqKys1Fn+9NNPP/rIWokj1/IAAJFdHGElNahcRERE1MoY9Il+8+ZNjBs3DmfPnoVIJIIgCACqb2qqUqmaboRGduSqJgD179a+Z7qIiIhMiUEHQb/55pvw8fFBdnY2rKyscOHCBRw6dAjh4eE4ePBgEw/ReMoVKpy8VQBAc/o7ERERtQ8GzQAdP34cBw4cgLOzM8RiMcRiMR5//HGsXLkSb775JpKSkpp6nEaRlF6ISqUarnYydHOxMfZwiIiIqIkYNAOkUqlgY6MJBE5OTsjMzAQAeHt74/Lly003OiP7/aZm9ufxbs7a3XtERETU9hk0AxQcHIyzZ8+iS5cueOyxx7B69WpIpVJs3rwZXbp0aeoxGs2JG9z9RURE1B4ZFICWLFmC0tJSAMCKFSvw1FNPYcCAAXB0dMS2bduadIDGdDm7BGKZFQ+AJiIiamcMCkAjRozQft2lSxekpqaioKAAHTp0aHe7igLcbOFsKzP2MIiIiKgJNdmFbTp27NhUq2pVuPuLiIio/Xnkm6G2d4/z3l9ERETtDgNQPcwlIvTzaZ8zW0RERKaMAageoZ4OsJRKjD0MIiIiamIMQPV4zJezP0RERO0RA1A9Bvs7GnsIRERE1AwYgOrRxZm3vyAiImqPGICIiIjI5DAAERERkclhACIiIiKTwwBEREREJocBiIiIiEwOAxARERGZHAYgIiIiMjkMQERERGRyGICIiIjI5DAAERERkclhACIiIiKTwwBEREREJocBiIiIiEwOAxARERGZHAYgIiIiMjkMQERERGRyWkUA2rhxI3x9fWFhYYGwsDAcPnxYb98jR46gf//+cHR0hKWlJQICArB27dpa/bZv347AwEDIZDIEBgZi586dzbkJRERE1IYYPQBt27YN8+bNwzvvvIOkpCQMGDAAI0eORFpaWp39ra2t8frrr+PQoUO4ePEilixZgiVLlmDz5s3aPsePH8fEiRMxdepUpKSkYOrUqZgwYQJOnDjRUptFRERErZjRA9CaNWswc+ZMzJo1Cz169EBMTAw8PT2xadOmOvuHhoZi0qRJCAoKgo+PD6ZMmYIRI0bozBrFxMQgOjoaixcvRkBAABYvXoxhw4YhJiamhbaKiIiIWjMzY755ZWUlEhMTsWjRIp324cOH49ixYw1aR1JSEo4dO4YVK1Zo244fP4758+fr9BsxYoTeAFRRUYGKigrt86KiIgCAQqGAQqFo0DhMSVVNWJvaWJv6sT76sTb6sTb1Y32qNaYGRg1AeXl5UKlUcHV11Wl3dXVFVlZWva/t3LkzcnNzoVQqsXTpUsyaNUu7LCsrq1HrXLlyJZYtW1arPT4+HlZWVg3dHJMTFxdn7CG0WqxN/Vgf/Vgb/Vib+rE+QFlZWYP7GjUAVRGJRDrPBUGo1fagw4cPo6SkBL///jsWLVqEbt26YdKkSQatc/HixViwYIH2eVFRETw9PTFkyBA4Ojo2dnPaPYVCgbi4OERHR8Pc3NzYw2lVWJv6sT76sTb6sTb1Y32qVe3BaQijBiAnJydIJJJaMzM5OTm1ZnAe5OvrCwAICQlBdnY2li5dqg1Abm5ujVqnTCaDTCar1W5ubm7yP0z1YX30Y23qx/rox9rox9rUj/VBo7bfqAdBS6VShIWF1Zq2i4uLQ1RUVIPXIwiCzjE8kZGRtda5b9++Rq2TiIiI2i+j7wJbsGABpk6divDwcERGRmLz5s1IS0vD7NmzAWh2T2VkZODLL78EAGzYsAFeXl4ICAgAoLku0Mcff4w33nhDu865c+di4MCB+OijjzB27Fjs3r0b+/fvx5EjR1p+A4mIiKjVMXoAmjhxIvLz87F8+XLI5XIEBwdjz5498Pb2BgDI5XKdawKp1WosXrwYN2/ehJmZGbp27YpVq1bh1Vdf1faJiorCd999hyVLluDdd99F165dsW3bNjz22GMtvn1ERETU+hg9AAHAnDlzMGfOnDqXxcbG6jx/4403dGZ79Bk/fjzGjx/fFMMjIiKidsboF0IkIiIiamkMQERERGRyGICIiIjI5DAAERERkclhACIiIiKTwwBEREREJqdVnAZPRNTmqdWAqhJQVQCKe0BlqeahKKvxbxmgVgKCGoCg+VdQA4IAsVKJLjnJEB+9DKgrAWUFIDYDJFJAYgaIxIBapXkI9/+tWpcgAGKxpo9IrHlt1XsqKzRtYgkgktT4V/zAc0ntfhJp9cOs6msZIDEHzGT6l4slgEhUPZ6aD0GtGbdaqamZmQyQWgPmloCZheZ1RC2AAYiIjEsQNMGhshSoLNENDtoPe3X1h76guv8hWvPfB4JBne33P3grS4DyQqCiSBNUtCGkOoxo11HzoVYAKoVmrMrK+2GnxkOtfKQySACEAEBGUxS1rRIB5laA1EoTiMRmgEgCM5EYQ0pKYZaxGpDcD2o1Q5s20D0Q6kTi6qBXM9zVbIeg+Z5DAATUeP7g0ETVY6zxT40v6ugjap4+OiFRBLFahaA7tyDef1yzjXX0ach6gBo/+9qQqqwO3jXbGtMHqP4e3f+e1hm8dZbd76t9SKr76LTd/9rCHoh8DY3BAERE1RTlQLEcKM4Cyu/W+MWmrBEklJqZjJIsoDgbKMnW/LKysANktpoPMNX9GYyqf5UVgKoCEsU9DMqVwyxtuWYdVaFHUBl7y5uY6P6sxv0Pc6lN9ddi8/sf1DVnSERQC0BGdh46eXWBWGatmU1Rq6oDliBUfwiIJNUfAFXrqgpvglrz2qr3N5Pdb38wJNYRLB8Mj6pKTeir+l5qv68KzUxXXWFQWVFHqFRXr7fmh5ZIDCjLNa8DAAiAolTz0K0m7ACg/E4Lfx/bBgmAbgCQa+SBGJOtBwMQUS1qlfYDGCpl9QxCzV/KNb9W3+8DkWaqX2yu+YCpmjkoL9LMTlTNBqiV2q/Figr4Z12G+Pcbmg8gM5nml3zNvzKBGn9xVv2lKdx/P6nmNWYyzXorSjTvW1GseVR9razQ/etX+9ft/V0MVf0rijUzF9paqDUfLpWlmgAiqKo/SAUAFYXN+q0QA3AAgHt6OphZauomtdJ8LTar+y/7unbXPPiXvb5dPjIbQGav+YtRalX9ulqhRFz9HhBpdkPV3OWjfdTcHWR+/3vY+F05KoUCZ/bsgduoURCb2h29VUrN/ynFvfv/3v/6fvBWKitx4vfjeKxvOMzEYv2zgTXDm87XQt3tavX9yRDR/e/Xg//ep/P/tI7ndfZBA/o0ZD36nle3qVQq3Lh+HV26doFELK6zT61Zrbr6AA2beWlQH0l1O1B7JlZfEK+5rOYfXTp/jNXxXGaLxmIAaovUKs1fTcr7xxqIJYC1i+YXfFskCPd3SRRXf5CYyTTbVlGkCRylOUDuFSDvMpB3VdNfZzdFja9Vyuq/KpXlj7xrojEkAHoAgHx7i71nkzOzAGzdAauOen7hSTR9bFwBW1fAxk3zuqrApSitcVyITHNMiJkmFCghwamUi+jbfxDMLO01MyNS6+pH1S9LMi0SM0Bip5lFrIOgUCDvQhGELkMAUwuHDaBWKJBavgc+Q0dBwvo0GANQayIImg/84qz7uyAKqwNAcSaQdw3IuwL8cav2LgOJDOjgDXTw0Xzw1PwLysoRsHHRhCQbV8DGWfOvtfP9KXILwNxC8299H0D37gJZZyHOTEGPzN8h/uUAUHn/Q0+lqE7kIlGN/bni6qCmLNcsN6s6UNIMKM0FijJrTXk3K52/8CW1/9rXzogI1cd9CGrNh7XF/ZkDc8saMwD3ZwbE5lCLJEhLT4eXhwvEVbsDtH9d1fjrEqj+C7PqX0Go3rVQdeCqzFbzkNrofm0m0zOLdX/mSmYLyOw0sx2Smr8QRTVCh5VmW6sORhXUgLUTYNmh2Q5EFRQK5NySQvCK4gcZERkVA5AxCAKQcxG4dRgouFH9KMwAlPr2DeghNr8/61GhCUd5Vx5tbGJz3UBU9agoAu7eBqCZ5fAHgOxHe6taJLL7xwLUmI41s9T8VWjZAXDsBjgHAM7dNR/UD4aYmrtFzCxqzD5YaGcgNKGs+c4yUSkUSNmzB51McTcGEVEbwgDUUhTlQGYScOUX4OKPmsCjj4W9ZobGsoPmr3gLO81sjWM3wMlP869lh+oZG5USKLqjmRn647ZmFsD8/lkUIjFQmqeZaSnJBkpyNI/SHE27okx3F5FaAVQqNDM7dXHwgto1BDcLlPAJ6AWJdUfNjIJEWj17AugeNGsm0wSZqvHUPGDSygmw89DscpFaVc+CKMurgwsREVETYwBqLioFcDMBuPYbkH4SyDpb40wHaGYmfAcALoFAxy5AR1/A3rM6CDSGxEyz66uDj4FjVd6/dkn5/WOLajyq2iTmgGswYNURKoUC5/fsgdfAZtjfLBLdn61h8CEioubDAPSoMs4A6SfuH6Nho9kdc22/ZpbnXoFuX2tnwHcg0GMM0O0Jg45abxYSM81Dam3skRAREbUIBqBHkXcNiH1K/wG8Vk5AwGjAuz/g2Rfo4MurnBIREbUCDECGUlYC22dqwo+TvybcVBRrjqlx7wUEPwt4P66ZWSEiIqJWhZ/OhopfAciTNQcjT90F2Hcy9oiIiIiogdrolfOM7Ho8cHSd5uunP2H4ISIiamMYgBqrNB/YOVvzddhLmgOaiYiIqE1hAGoMlQL4frrmJpBO/sCID409IiIiIjIAA1BDCQKw56+aqzdLbYDnYxt/vR4iIiJqFRiAGurkZiBxCwAR8Ny/AdcgY4+IiIiIDMQA1BDX9gO/LtJ8Hb0c6D7SuOMhIiKiR8IA9DBlBcD/XtbccLT3FCDqDWOPiIiIiB4RA9DDHP8nUF4IuAQBT63hlZyJiIjaAQag+pQVACc+03w95G+au5oTERFRm8cAVA/x6X8DlSWAW0/NPb2IiIioXWAAqof4zH80XwxezF1fRERE7QgDUD1EyjLAvTfP+iIiImpnGIAehrM/RERE7Q4DUD3UriGA/whjD4OIiIiaGANQPdRR8zj7Q0RE1A4xANVD6DLE2EMgIiKiZsAAVB/O/hAREbVLrSIAbdy4Eb6+vrCwsEBYWBgOHz6st++OHTsQHR0NZ2dn2NnZITIyEnv37tXpExsbC5FIVOtRXl7e3JtCREREbYDRA9C2bdswb948vPPOO0hKSsKAAQMwcuRIpKWl1dn/0KFDiI6Oxp49e5CYmIghQ4ZgzJgxSEpK0ulnZ2cHuVyu87CwsGiJTSIiIqJWzszYA1izZg1mzpyJWbNmAQBiYmKwd+9ebNq0CStXrqzVPyYmRuf5hx9+iN27d+PHH39EaGiotl0kEsHNza1Zx05ERERtk1EDUGVlJRITE7Fo0SKd9uHDh+PYsWMNWodarUZxcTE6duyo015SUgJvb2+oVCr07t0b77//vk5AqqmiogIVFRXa50VFRQAAhUIBhULRmE0yCVU1YW1qY23qx/rox9rox9rUj/Wp1pgaGDUA5eXlQaVSwdXVVafd1dUVWVlZDVrHP/7xD5SWlmLChAnatoCAAMTGxiIkJARFRUVYt24d+vfvj5SUFPj5+dVax8qVK7Fs2bJa7fHx8bCysmrkVpmOuLg4Yw+h1WJt6sf66Mfa6Mfa1I/1AcrKyhrc1+i7wADN7qqaBEGo1VaXrVu3YunSpdi9ezdcXFy07REREYiIiNA+79+/P/r06YNPPvkE69evr7WexYsXY8GCBdrnRUVF8PT0xJAhQ+Do6GjIJrVrCoUCcXFxiI6Ohrm5ubGH06qwNvVjffRjbfRjberH+lSr2oPTEEYNQE5OTpBIJLVme3JycmrNCj1o27ZtmDlzJr7//ns88cQT9fYVi8Xo27cvrl69WudymUwGmUxWq93c3Nzkf5jqw/rox9rUj/XRj7XRj7WpH+uDRm2/Uc8Ck0qlCAsLqzVtFxcXh6ioKL2v27p1K2bMmIFvv/0Wo0ePfuj7CIKA5ORkuLu7P/KYiYiIqO0z+i6wBQsWYOrUqQgPD0dkZCQ2b96MtLQ0zJ49G4Bm91RGRga+/PJLAJrwM23aNKxbtw4RERHa2SNLS0vY29sDAJYtW4aIiAj4+fmhqKgI69evR3JyMjZs2GCcjSQiIqJWxegBaOLEicjPz8fy5cshl8sRHByMPXv2wNvbGwAgl8t1rgn02WefQalU4rXXXsNrr72mbZ8+fTpiY2MBAHfv3sUrr7yCrKws2NvbIzQ0FIcOHUK/fv1adNuIiIiodTJ6AAKAOXPmYM6cOXUuqwo1VQ4ePPjQ9a1duxZr165tgpERERFRe2T0K0ETERERtTQGICIiIjI5DEBERERkchiAiIiIyOQwABEREZHJYQAiIiIik8MARERERCaHAYiIiIhMDgMQERERmRwGICIiIjI5DEBERERkchiAiIiIyOQwABEREZHJYQAiIiIik8MARERERCaHAYiIiIhMDgMQERERmRwGICIiIjI5DEBERERkchiAiIiIyOQwABEREZHJYQAiIiIik8MARERERCaHAYiIiIhMDgMQERERmRwGICIiIjI5DEBERERkchiAiIiIyOQwABEREZHJYQAiIiIik8MARERERCaHAYiIiIhMDgMQERERmRwGICIiIjI5DEBERERkchiAiIiIyOQwABEREZHJYQAiIiIik2Nm7AG0RoIgAACKi4thbm5u5NG0PgqFAmVlZSgqKmJ9HsDa1I/10Y+10Y+1qR/rU62oqAhA9ed4fRiA6pCfnw8A8PX1NfJIiIiIqLGKi4thb29fbx8GoDp07NgRAJCWlvbQApqioqIieHp6Ij09HXZ2dsYeTqvC2tSP9dGPtdGPtakf61NNEAQUFxfDw8PjoX0ZgOogFmsOjbK3tzf5H6b62NnZsT56sDb1Y330Y230Y23qx/poNHTiggdBExERkclhACIiIiKTwwBUB5lMhvfeew8ymczYQ2mVWB/9WJv6sT76sTb6sTb1Y30MIxIacq4YERERUTvCGSAiIiIyOQxAREREZHIYgIiIiMjkMAARERGRyWEAqsPGjRvh6+sLCwsLhIWF4fDhw8YeUotbuXIl+vbtC1tbW7i4uOCZZ57B5cuXdfoIgoClS5fCw8MDlpaWGDx4MC5cuGCkERvPypUrIRKJMG/ePG2bqdcmIyMDU6ZMgaOjI6ysrNC7d28kJiZql5tqfZRKJZYsWQJfX19YWlqiS5cuWL58OdRqtbaPKdXm0KFDGDNmDDw8PCASibBr1y6d5Q2pRUVFBd544w04OTnB2toaTz/9NO7cudOCW9E86quNQqHA22+/jZCQEFhbW8PDwwPTpk1DZmamzjraa22ajEA6vvvuO8Hc3Fz417/+JaSmpgpz584VrK2thdu3bxt7aC1qxIgRwpYtW4Tz588LycnJwujRowUvLy+hpKRE22fVqlWCra2tsH37duHcuXPCxIkTBXd3d6GoqMiII29ZJ0+eFHx8fISePXsKc+fO1babcm0KCgoEb29vYcaMGcKJEyeEmzdvCvv37xeu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"
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"<Figure size 640x480 with 1 Axes>"
|
||
],
|
||
"image/png": "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lStXlualjtnfZmhoCEdHR1y9elWtP3MLCwvY29vL2ho3boz09HQA6v//+e3bt3H48GGMHDlSalP3zB8SC0MiIiqRjo4OnJycEBMTI2uPiYlB27ZtK2hW75etrS3Mzc1lGXNycnD8+HEpo5OTE7S1tWV9MjIycOnSJamPq6srnj17hjNnzkh9Tp8+jWfPnlXIvhJCIDAwELt27cLRo0dha2sr266uuUsihEB2drZa5+7cuTOSk5ORlJQkPZydneHr64ukpCTUrVtXbbO/LTs7G6mpqbCwsFDrz7xdu3ZFbkPz3//+F9bW1gDU///z0NBQ1KxZE15eXlKbumf+oD7aMjdERPRJKrxdxaZNm8Tly5fFxIkThaGhobh161ZFT63cnj9/Li5cuCAuXLggAIgVK1aICxcuSLfcWLp0qVAqlWLXrl0iOTlZDBo0qNilzWvXri0OHz4szp8/Lzp16lTs0uZNmzYV8fHxIj4+Xjg6OlbY0ub/93//J5RKpTh27JhsWfeXL19KfdQxtxBCzJgxQ/zyyy/i5s2b4uLFi2LmzJlCS0tLHDp0SAihvrmL8+aqpEKob/YpU6aIY8eOiRs3boiEhATRq1cvYWxsLH2fUtfcZ86cEZUrVxaLFi0SV69eFdu3bxcGBgZi27ZtUh91zZ6fny/q1KkjgoKCimxT18wfGgtDIiIq07///W9hbW0tdHR0RMuWLaVbHnwqYmNjBYAij6FDhwohXi/pPnfuXGFubi50dXWFm5ubSE5Olo3xxx9/iMDAQFG9enWhr68vevXqJdLT02V9Hj9+LHx9fYWxsbEwNjYWvr6+4smTJx8ppVxxeQGI0NBQqY865hZCiOHDh0tfr6ampqJz585SUSiE+uYuztuFobpmL7xPnba2trC0tBT9+/cXKSkp0nZ1zS2EEPv27RMODg5CV1dXNGrUSHz//fey7eqaPTo6WgAQaWlpRbapa+YPTSGEEBVyqJKIiIiIiIj+FniNIRERERERkYZjYUhERERERKThWBgSERERERFpOBaGREREREREGo6FIRERERERkYZjYUhERERERKThWBgSERERERFpOBaGRERERGrKw8MDEydOrOhpENEngIUhERERaSR/f38oFIoij2vXrr2X8Tdv3oyqVau+l7H+rF27dmHBggUVOofSHDt2DAqFAk+fPq3oqRBpvMoVPQEi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b98+7Nq1C4cPHy51XGtraygUCvz888/o2bMn9PX1Ua1aNZiYmOD777+HhYUF0tPTMX369Hee84wZM+Do6IgxY8YgICAAOjo6iI2NxYABA1CjRg1MnToVkyZNQkFBAdq3bw+VSoW4uDgYGRlh6NChf2o/EX3KuCopERER0Vs8PT3x888/IyYmBq1atUKbNm2wYsUKWFtbAwCaN2+OFStW4KuvvoKDgwO2b9+OJUuWyMZo27YtAgIC4O3tDVNTU3z99dcAgOXLl8PKygpubm4YPHgwpk6dCgMDgzLnNHLkSGzcuBGbN2+Go6Mj3N3dsXnzZtja2r7/HfAWAwMDBAUFYfDgwXB1dYW+vj7Cw8Ol7f369cOqVauwbNkyNGnSBBs2bEBoaCg8PDxKHbdWrVqYN28epk+fDjMzMwQGBkJLSwvh4eFITEyEg4MDJk2ahGXLlr3znBs2bIhDhw7h119/hYuLC1xdXbFnzx5Urvz6uMiCBQvw5ZdfYsmSJWjcuDE8PT2xb9++j7I/if6OFOLtk9yJiIiIiP6/zZs3Y+LEiXj69GlFT4WIPiAeMSQiIiIiItJwLAyJiIiIiIg0HE8lJSIiIiIi0nA8YkhERERERKThWBgSERERERFpOBaGREREREREGo6FIRERERERkYZjYUhERERERKThWBgSERERERFpOBaGREREREREGo6FIRERERERkYZjYUhERERERKTh/h/0va8un88HFgAAAABJRU5ErkJggg=="
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"execution_count": 28
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"id": "445dff84-70b2-4fc9-a9b6-1251993324d6",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2025-02-21T15:24:43.079719Z",
|
||
"start_time": "2025-02-21T15:24:42.890225Z"
|
||
}
|
||
},
|
||
"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": 29
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"id": "751a6df9-d90b-4053-8769-c6c3b6654406",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2025-02-21T15:24:43.172411Z",
|
||
"start_time": "2025-02-21T15:24:43.084720Z"
|
||
}
|
||
},
|
||
"source": [
|
||
"from tqdm import tqdm\n",
|
||
"\n",
|
||
"\n",
|
||
"def incremental_training(test_data: pd.DataFrame, model: lgb.Booster, days: int, back_days: int, feature_columns: list, params: dict):\n",
|
||
" test_data = test_data.sort_values(by='trade_date')\n",
|
||
"\n",
|
||
" scores = []\n",
|
||
"\n",
|
||
" unique_trade_dates = sorted(test_data['trade_date'].unique())\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",
|
||
" X = window_data[feature_columns]\n",
|
||
"\n",
|
||
" window_scores = model.predict(X)\n",
|
||
" scores.extend(window_scores)\n",
|
||
"\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",
|
||
"\n",
|
||
" # Incrementally train the model with the current window data\n",
|
||
" X_train = window_data[feature_columns]\n",
|
||
" y_train = window_data['label'] # Assuming 'score' is what you're predicting\n",
|
||
" categorical_feature = [i for i, col in enumerate(feature_columns) if col.startswith('cat')]\n",
|
||
" # print(f'categorical_feature: {categorical_feature}')\n",
|
||
" train_data = lgb.Dataset(X_train, label=y_train, categorical_feature=categorical_feature)\n",
|
||
"\n",
|
||
" model = lgb.train(params,\n",
|
||
" train_set=train_data,\n",
|
||
" num_boost_round=100,\n",
|
||
" init_model=model,\n",
|
||
" keep_training_booster=True)\n",
|
||
"\n",
|
||
" # Add the scores as a new 'score' column to the test_data\n",
|
||
" test_data['score'] = scores\n",
|
||
"\n",
|
||
" return test_data\n"
|
||
],
|
||
"outputs": [],
|
||
"execution_count": 30
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"id": "660a24f74501f98f",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2025-02-21T15:27:32.990879Z",
|
||
"start_time": "2025-02-21T15:24:43.206812Z"
|
||
}
|
||
},
|
||
"source": [
|
||
"predictions_test = incremental_training(test_data, model, 5, 0, feature_columns_new, light_params)\n"
|
||
],
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"100%|██████████| 102/102 [02:47<00:00, 1.65s/it]\n"
|
||
]
|
||
}
|
||
],
|
||
"execution_count": 31
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"id": "36ccaa730ab46718",
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2025-02-21T15:27:35.475780Z",
|
||
"start_time": "2025-02-21T15:27:33.233682Z"
|
||
}
|
||
},
|
||
"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": 32
|
||
}
|
||
],
|
||
"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
|
||
}
|