非负矩阵分解(NMF)本身是一个降维算法,在量化中可以用来识别市场驱动因素以及相应的个股。不过需要说明的一点是,本人目前还处于探索阶段,还没写出相应策略,因此也不敢肯定他的效果。有兴趣的可以讨论一下。 首先我们获取一个矩阵,行为时间,列为股票代码,值为相应的成交量,代码如下:
然后,将该矩阵分解,需要指定特征数量,这里用的是5
这样上述矩阵就分解为了 pw,pf两个矩阵。pw叫做权重矩阵,pf叫做特征矩阵。 pw可以看出驱动市场的主要因素是什么;pf可以看出哪只个股受该驱动因素影响最大 这是pw矩阵最后15行
可以看出从8月18日开始,第二个特征(即第二列)权重高于其他特征
通过pf矩阵第二行,可查到首次特征影响最大的个股。
返回值为 ['000826.SZ', '300002.SZ']。说明这两只个股走势具有一定相关性 这两个股票和沪深300在2016-8-18到2016-9-1走势如下:
可以看出在大盘下跌的趋势下,这两只股都保持了向上的趋势,说明是具有一定相关性的。
|