因子模型
multi-factor-model的Python项目详细描述
这个项目是用机器把α因子合并成一个因子 学习技巧。
依赖关系
- Python3.5
- 熊猫0.22.0
- 纽比1.14.3
- 泡菜
- sklearn 0.19.1
- 数据库
示例
预处理数据
首先创建一个包含原始因素和市场信息的数据库对象。 更多信息请参见项目databox
from databox import databox db=databox()\ .load_indestry(ind)\ .load_indexWeight(ind_weight)\ .load_suspend(sus)\ .load_adjPrice(price)\ .set_lag(freq='d',day_lag=1)for fac_name,fac_df in factors_dictionary.items(): db.add_factor(fac_name,fac_df) db.align_data()\ .factor_ind_neutral()\ .factor_size_neutral()
然后将您的数据保存起来,用于模型培训
sp=sample_pipeline()\ .set_fw_return_n(1)\ .set_sample_n(1)\ .factor_rank()\ .factor_zscore()\ .fw_return_ind_neutral()\ .fw_return_rank()\ .fw_return_I(thresh=2000)
请注意,为了更好地建模,所有返回都乘以100。
选项:
set_fw_return设置要向前计算的天数
return;
set_sample_n是设置在一个示例中使用的天数;
factor_rank是对每个样本中的所有因素进行排序;
factor_zscore用于规范化每个示例中的因子;
fw_return_ind_neutral将抵消行业的回报。如果
投资组合受到行业限制,这可能会改善
培训结果;
fw_return_rank将返回值转换为它们在每个示例中的排名;
fw_return_I将返回转换为0或1,指示
返回值大于或等于阈值;
现在将示例创建为
X_train,y_train=sp.train_set(db) X_test,y_test=sp.test_set(db)X_test_all=sp.test_X(db)
建模
分类方法
from sklearn.ensemble import RandomForestClassifier clf=RandomForestClassifier() tn,tt,ml=clf_model(clf,X_train,y_train,X_test,y_test)
其中y可以是0/1或float,结果是tn(train)和tt (测试)会因此而有所不同。如果clf是基于树的 模型ml将是特性重要性。如果clf是线性模型, ml将是coffient。
我们还可以通过组合几个模型来创建一个模型。
from sklearn.ensemble import RandomForestClassifier from sklearn.linear_model import LogisticRegression from sklearn.svm import SVC clf1=RandomForestClassifier()clf2=LogisticRegression()clf3=SVC() from multi_factor_model import combine_clf_models CLF=combine_clf_models()\ .add_clf('rf',clf1)\ .add_clf('lr',clf2)\ .add_clf('svc',clf3,weight=2)#default weight is 1 tn,tt,ml=clf_model(CLF,X_train,y_train,X_test,y_test)
回归方法与分类方法相同,使用reg_modelas 将clf_model和combine_reg_models替换为 combine_clf_models
综合系数
import pandas as pd value=CLF.predict_proba(X_test_all)factor=pd.Series(value[:,1],index=X_test_all.index)