打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
lightGBM多分类应用于选股全流程(notebook+数据下载)

原创文章第254篇,专注“个人成长与财富自由、世界运作的逻辑与投资"。

昨天看到群里大家的讨论,关于节奏、进度,强化学习还是因子挖掘。

到目前所止,我们把传统机器学习,还有强化学习在金融投资里的应用串了一轮,都有代码示例。——大家更希望看到切实有效,甚至可以直接实盘的策略。——有群友半开玩笑说,可以实盘的策略,那就不是这个价了。

金融投资有一个“悖论”。

大家常说,如果有真实可行的策略,那直接找一笔本金,还是辛苦出来给大家讲课嘛?——听起来很有道理,实则不完全对。

投资是概率游戏,就像2000年长期资本公司直接破产一样,发生了黑天鹅事件。在此之前,这家由N个经济学诺奖得主合伙创立的公司,他们的模型非常有效。策略没有永恒的圣杯,随着市场的变化,与趋势共舞罢了。

所以,建立自己的一套投资体系、投资方法论至关重要。因子、策略只是其中的一小部分罢了。

如果资金体量大一点,比如超过500万,那么,大类资产配置,足够让你进入初阶财务自由状态。——之前提前的8-12%的长期年化,根本不需要因子,也不需要策略,选择低相关的长期向上的的回报流,长期持有,定期再平衡即可。——安睡全天候组合。

做量化,甚至做AI量化,其实是要追求现高的收益率,当然也要冒相对更高的风险,这里需要在风险与收益之间做一个平衡。每个人的风险承受力是不同的,因而并没有放之四海皆准的策略。

强化学习的范式很适合投资组合管理,当然它是一个更大的黑箱, 我们要干预它更难。退一步,因子挖掘+监督学习倒是更为容易上手的方式

lightGBM多分类的代码:

import lightgbm as lgb
import numpy as np

# Set up decay learning rate
from sklearn.metrics import accuracy_score, f1_score


def learning_rate_power(current_round):
base_learning_rate = 0.19000424246380565
min_learning_rate = 0.0001
lr = base_learning_rate * np.power(0.995, current_round)
return max(lr, min_learning_rate)


class LGBModel:
def __init__(self):
pass

def train(self, df_train, df_val, feature_cols, label_col='label'):
lgb_clf = lgb.LGBMClassifier(n_jobs=4,
objective='multiclass',
random_state=100)
opt_params = {'n_estimators': 500,
'boosting_type': 'gbdt',
'objective': 'multiclass',
'num_leaves': 2452,
'min_child_samples': 212,
}

lgb_clf.set_params(**opt_params)

train = df_train[feature_cols]
# train = (train - train.mean())/train.std()
val = df_val[feature_cols]
# val = (val - val.mean())/val.std()

fit_params = {'early_stopping_rounds': 400,
'eval_metric': 'multiclass',
'eval_set': [(train, df_train[label_col]),
(val, df_val[label_col])],
'verbose': 20,
'callbacks': [lgb.reset_parameter(learning_rate=learning_rate_power)]}
lgb_clf.fit(train, df_train[label_col], **fit_params)

print('Training accuracy: ', accuracy_score(df_train[label_col], lgb_clf.predict(train)))
print('F1 accuracy : ', f1_score(df_val[label_col], lgb_clf.predict(val), average='micro'))
print('Validation accuracy: ', accuracy_score(df_val[label_col], lgb_clf.predict(val)))

分类问题是最直观和最好理解的。

class ModelMixin:
def train(self, model, split_date, feature_cols, label_col='label'):
df = self.df_data
df_train = df[df.index < split_date]
df_val = df[df.index >= split_date]

model.train(df_train, df_val, feature_cols, label_col)

随手写了几个因子测试了一下,只为验证流程,训练集不到30%,确实不高——意料之中,如果测试集超过50%,那就有商用价值的。下一步是如何挖出真实有效的因子

代码notebook在如下位置,请大家前往星球下载:

我的开源项目及知识星球

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
尚国栋:电信客户流失预测挑战赛baseline
机器学习特征提取,从另一角度来看文本分类
使用Python,pandas,seaborn和scikit-Learn进行探索性数据分析
FFM模型在点击率预估中的应用实践
保姆级教程,用PyTorch和BERT进行命名实体识别
如何使 PyTorch 模型训练加快
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服