GBDT是有较好解释性的,我们可以通过模型获取到因子的重要程度。修改qlib/contrib/model/gbdt.py。
- 增加方法,按照因子重要程度进行排序
def importance(self, importance, columns):
df = pd.DataFrame({'feature': columns, 'importance': importance})
df.sort_values('importance',inplace=True,ascending=False)
df.reset_index(drop=True,inplace=True)
print (df)
print (df.values)
- predict环节增加重要程度输出
self.importance(self.model.feature_importance(), x_test.columns.values)
- 训练过程可参考添加。
输出结果如下:
feature importance
0 RESI5 54
1 STD30 54
2 RESI10 48
3 STD5 43
4 STD20 42
.. ... ...
153 VSUMD60 1
154 IMAX5 0
155 CNTP5 0
156 CNTN10 0
157 VWAP0 0