关于平台默认的模块和接口几点疑问
由iquant创建,最终由iquant 被浏览 116 用户
问题
1.DataSource和DataFrame是什么关系,我看DataSource的write, read也是转换的DF,为啥要多一层包装呢? 2.Outputs的文档没有说明,outputs里的M.data, M.cached是啥关系? 3.general_feature_extractor / user_feature_extractor 的主要区别是什么? 4.transform应用了那些变换和算法?astype参数起什么作用,可以将字符串应用特征吗? 5.parse_general_features的作用是什么?以及怎么使用? 6.对于fast_auto_labeler的标注机制也不太明白?
问题1
DataFrame与DataSource 没有关系。 DataFrame是Pandas数据分析开源包的一个数据类型,在金融数据分析中经常使用。
在BigQuant平台上,DataSource提供了底层数据读写的封装,用户不用关心数据在底层是通过内存、本地文件还是分布式文件存储。DataSource用作模块间传递数据,并可以作为输入数据和最终输出输出。详情请参看: DataSource/数据源 19,通过帮助文档可以看出DataSource是一个对象,拥有若干方法。
问题2
Outputs没有专门的详细文档,它与M.cached的联系就是,缓存函数在返回的时候,需要返回一个Outputs对象。帮助文档 8。通常,M.data会是一个DataSource的具体实例,因此具有read_df方法,和Outputs没有什么关系。
问题3
平台因子库有许多已经计算好的因子,例如,rank_amount_0,该因子表示当天按交易额排序的排序因子值,如果你需要使用该因子做标注(监督式学习算法),那么你可以使用general_feature_extractor接口来快速实现标注。但是用户可能希望自己自定义因子,比如想通过turn_25因子来进行标注,该因子并不存在于目前的因子库中,这样的话,用户就需要使用user_feature_extractor接口,参看帮助文档 3
问题4
transform是将特征数值做一些变换,你可以使用T.get_stock_ranker_default_transforms()接口查看具体的变换:
注:具体变换通过lambda函数可以 看出。 astype='int32' 是保证转换后的数值为正整数,这是许多机器学习算法所要求的。
可以将字符串转化成分类特征,用数值表示,例如上市板这个特征:list_board_0,其中,主板:1,中小企业板:2,创业板:3。
问题5
parse_general_features 这个接口已经不需要再使用了,在最新版中丢弃了。
\
问题6
见帮助文档 2。
具体举例说明:
label_expr = [ # 将百分比收益乘以100 'return * 100', # where 将分数限定在[-20, 20]区间,+20将分数调整到 [0, 40] 区间 'where(label > {0}, {0}, where(label < -{0}, -{0}, label)) + {0}'.format(20) ] m = M.fast_auto_labeler.v6( instruments=['000001.SZA', '600519.SHA'], start_date='2017-01-01', end_date='2017-02-01', label_expr=label_expr, hold_days=5, benchmark='000300.SHA', sell_at='open', buy_at='open') 在这个例子中,按收益率进行标注,收益率*100更能很好的表示,比如收益0.01,就标注成了1. where语句是将收益率分数限制在一定的区间,如果传入20,则将分数限制在了[-20, 20]之间,(补充:大于20的就记为20,低于-20的就记为-20)。由于标注只能是正数,因此需要在基础上再加20,这样分数就调整到[0, 40]之间了。
你也可以不使用绝对收益率进行标注,比如你可以使用相对收益率,或者经波动率调整后的收益率。当然,你也可以自行标注,不使用M.fast_auto_labeler这个接口。
收益率到底是什么收益率呢?你可以通过M.fast_auto_labeler参数来控制,hold_days=5表示5日收益率,sell_at,buy_at是控制计算收益率的时候以什么价格计算。benchmark为计算相对收益率的时候需要传入的一个基准。