怎么让电脑深度学习炒股

jijinwang
很多人,只用手机,家里没有电脑。
我是很难想象,依靠手机怎么做得好股票?
手机上做研究,看走势都是很不方便的,脑子里没有全景,如何看得懂市场。
说到底,做股票要靠自己。
对老年人,可能电脑不懂,但你既然来了股市,就不能把钱不当真。


之前看到过一篇文章,想测试一下如何用LSTM预测股票,在文中对比了LSTM神经网络和NAIve算法的结果,发现Naive的结果在准确率上完胜。这个Naive的算法就是使用前一个值作为下一个值的预测值。没忍住,还是用机器学习预测了一下股票

采用Naive的算法的效果图

采用LSTM的算法的效果图

文末的时候,说过LSTM预测股票是个笑话,那篇文章就是LSTM的教程而已。

今天,我来补一个坑:为什么我(们)的深度学习进行股票预测是个笑话

时间序列预测欺骗了你

做过分类算法的朋友们都知道,经常我们需要更换Metric来训练我们的模型。因为准确度(Accuracy)有时会有误导性,这种情况在异常诊断尤其突出,因为异常是极少数情况。


比如99.9%的样本都是正常的,我们的模型一个异常也没有识别出,但是我们也可以高声说:我们的模型准确率高达99.9%。

这就是笑话。

时间序列也是有这样的欺骗性,在股票上预测上尤为明显。当你告诉别人的模型准确率高达99.9%的时候,也是一个笑话。

因为股票每天波动都是极小的,也就是为什么使用前一个值作为下一个值的预测值会看起来有完美的预测。

比如我们文章采用的股票,波动率均值只有0.11

数据框统计描述


如何戳穿这个谎言

股票的预测,应该看的是涨跌。

所以经常会有人说我们要预测明天涨和跌,会有多少个点。其实这个才是衡量模型的更好的方式,也就是采用对“变化量”的预测

我们可以对预测的结果进行diff处理,求得变化量,然后对比真实值的变化量。

Naive方法预测“涨跌”的散点图

我们可以看Naive模型预测的变化量与实际变化量的对比,发现其实“什么都没有预测”,因为这个散点图告诉我们x轴和y轴没有任何相关性

这就是为什么Naive看起来很完美,然而其实没有什么用。

LSTM方法预测“涨跌”的散点图


同样的方式,比对LSTM模型预测效果。发现LSTM预测的涨跌结果是有一定的相关性,但是相关系数接近0。也就是不管真实值变化量如何,预测的结果偏向0变化量,也就是传说的以不变应万变。

如何填时间序列预测的坑

不止是股票预测,很多时间序列预测都有这个问题。尤其是时间序列的变化率比较低的时候,我们就不建议使用原始时间序列作为Target。

当然也不能简单的采用归一化来处理,因为归一化会导致变化量更小,造成的一个后果就是模型还没有怎么训练,就已经误差很小了,容易造成欠拟合。

比较好的办法就是采用上述方式,对时间序列做一个diff处理。然后将diff(变化量)作为Target。


这个在时序比赛时,有时被TOP选手作为一个Trick使用。一小段代码如下:

df_cn[use_cols_diff] = df_cn[use_cols].diff().fillna(method='bfill')train_raw = df_cn

我们可以对原始代码进行简单修正,关于模型的参数代码都可以先不用调整。从预测结果我们可以看到似乎Naive的预测结果依然完美。

Naive预测涨跌

LSTM预测涨跌

但是如果从误差角度来对比,我们发现LSTM表现更好。因为LSTM的误差为0.14,而Naive的误差为0.19。

三种方法预测涨跌结果对比

但是!但是,如果我们计算0变化量(预测未来股票值不会变化)和真实变化量值的误差时,发现只有0.127

单从这个预测结果展示,最好的策略就是“买了股票,忘了密码,持股不动,跑赢预测”。否则一顿预测猛如虎,不如回家种红薯。

总结

模型预测股票,依然是个笑话。但是时间序列预测“准确率”这个坑,希望大家不要闹笑话。不过发展60多年来,机器视觉作为AI技术的急先锋,经历了几轮起落,终于迎来技术上的爆发。但随着技术进入深水区,寻找合适的商业模式真正成为了机器视觉这门技术的最大难点。国家政策一直是鼓励并支持AI产业的发展的,相信未来它们一定能找到更好的出路,带领中国的计算机视觉乃至整个AI产业走在全球前列。

人工智能深度学习不仅仅需要需要实战项目基础,同时还需要很多理论作为指导,为了方便大家学习理解,整理了一份200G的AI资料:

①人工智能必看优质书籍电子书汇总
② 人工智能实战项目【含源码】
③ 人工智能行业报告
④国内外知名精华资源
⑤人工智能论文合集
⑥超详解人工智能学习路线图
⑦优质人工智能资源网站整理(找前辈、找代码、找论文都有)私信备注【05】添加领取