如何选择与优化因子权重?

新手专区
标签: #<Tag:0x00007f20b29b2a60>

(matrixreloaded) #1

我想请教大神们有关因子优化问题:

  1. 在labeler做标签训练以后会产生权重,那么这些权重是什么意思?

  2. 这些权重是指神经网络里面的权重,还是指多元回归中的权重,还是随机森林里面的gini系统还是信息增益呢?

  3. 能不能说如果一个给定的因子集和的权重之和比另一个因子集和的所有权重之和更高就是说这些因子就会相对来说更好一些?

  4. 另外,对于多因子来说,要考虑到多重共线性的问题,据我所知,即使是利用非线性的优化算法如神经网络或者SVM之类,如果在因子之前做过PCA或者ICA之类的解耦工作,最后线性耦合度高的因子被去掉了以后,实际效果并不差,而且鲁棒性更好。那么现在bigquant上面是不是有这种因子PCA分析工作已经做了?如果没做的话,是不是能够提供有相应的接口可以提前供用户对feature即对多因子进行数据的定制化处理。也就是说是不是有从可以从父类继承的抽象类作为接口,这样派生的子类如果实现了抽象类接口,数据就可以被定制化处理了。

我的问题是:
1) 现在在preprocessing阶段,多重共线性有否进行特殊处理?是不是已经做了
2) 能否提供定制性接口让用户自行处理?
3) 是否有相应的因子构造与筛选搭配方法可以写入文档?
4) 现在量宽中主要用到的是何种方法,是基于多元线性回归还是深度学习?里面的优化参数部分是否可以有函数可以微调和自动优化?

万分感谢!


(神龙斗士) #2
  1. 权重,代表的是因子对最终模型的贡献度。权重越大,表示这个因子越重要。

  2. StockRanker我们的一个专有算法,属于排序学习算法,效果远超通用算法,模型结构你可以看看GBDT。

  3. 现在在preprocessing阶段,多重共线性有否进行特殊处理?是不是已经做了
    StockRanker算法是不需要因子独立性的。

  4. 能否提供定制性接口让用户自行处理?
    用户可以对数据做任何处理(read_df > 对dataframe做处理 > 生成DataSource,建议用 M.cached 来缓存,避免每次运行都重新计算和数据文件),参考如下代码。我将提供更多原生数据处理支持和教程。

    # 分析一下不同的list_days_0在模型上的得分
    def dig_list_days_0(model_id):
        list_days_0 = list(range(0, 100, 1)) + list(range(100, 1000, 10)) + list(range(1000, 10000, 100)) + list(range(10000, 100000, 1000))
        features_df = pd.DataFrame({'list_days_0': list_days_0})
        features_df['instrument'] = features_df['list_days_0'].apply(str) # instrument,以 list_days_0 来命名
        features_df['date'] = pd.to_datetime('2017-01-01') # 日期,随便指定一天
        ds = DataSource.write_df(features_df)
    
        m = M.stock_ranker_predict.v2(model_id=model_id, data=ds)
        return m
    
    outputs = M.cached.v2(run=dig_list_days_0, kwargs={'model_id': m6.model_id})
    df = outputs.predictions.read_df()
    df['instrument'] = df['instrument'].astype(int)
    df = df.set_index('instrument').sort_index()
    T.plot(df[['score']], title='上市日期天数 vs. 模型预测得分')
    T.plot(df[['score']][:200], title='上市日期天数 vs. 模型预测得分 (zoomed)')
  5. 是否有相应的因子构造与筛选搭配方法可以写入文档?
    很好的建议,我们将提供。

  6. 现在量宽中主要用到的是何种方法,是基于多元线性回归还是深度学习?里面的优化参数部分是否可以有函数可以微调和自动优化?
    StockRanker参考前面的2,更多参数如下。我们将面向量化投资研发更多的算法。

    M.stock_ranker_train.v2(training_ds, features, test_ds=None,
        number_of_leaves=30,  # 每棵树上最多有多少个叶节点,值越大,模型越复杂,可以训练的更精细,泛化性越可能变差
        minimum_docs_per_leaf=1000, # 每个叶节点至少要有多少个样本,值越大,泛化性越好
        number_of_trees=20, # 树的数量,值越大,迭代学习的次数越多,如上是最重要第三个模型参数,用户可以根据数据量和数据情况做选择,一般选择到一个稳定的值上(建议不要每次都过度调节)
        learning_rate=0.1, max_bins=1023, feature_fraction=1)

(matrixreloaded) #3

非常感谢~:+1: