这个Project 运用了机器学习和NLP技术。首先是从谷歌将大公司的股票保表存下来。然后用机器学习训练模型。然后训练语义模型,对Twitter的公司实时关键词做出分析看评论的正负面性。 当语义分析准确度和机器学习预测一致的时候代表股票很大程度是这个走势。
首先用python的爬虫去wikipedia得到SP500公司名单存放进List。
对于每一个公司,去谷歌抓他对应的股票走势。有一个python function可以这么做:
web.DataReader(..start, end); 返回的是一个DataFrame,然后我们所有数据的保存都是以csv的形式。【我本来想抓yahoo的,但是yahoo最近好像停止了这方面服务】
我们有了这么多公司的单独股票之后,要把他们join起来。就想SQL Table一样,这样方便分析。于是我做了一个Join,保留了一个join好的 DataFrame.
之后进入Machine Learning 阶段。 我们只需要判断这个股票在未来1周内涨或跌或不变。这种classifications可以用SVM来做。选定了模型以后,还需要选择features和label。这个是最难的部分。
模型就想function, features像x, 结果是y 也就是 label。
首先我们假设 一个公司的涨幅与其他499公司的报表是有关的。 也就是说如果我要看这个公司的涨幅,这个是结果。
features x 就是其他公司的报表涨幅。
我把股票2周内上涨幅度 大于1% 当做上涨, 低于1%当做跌。
之后拿75%的数据去训练,25%拿来验证。
之后是NLP识别的部分:
首先我用的数据集是电影院的正面评价, 负面评价的两个文件。 res是一个list [rise, down, down, rise...]是机器学习模型判断的会张会跌。然后我们会根据Twitter语义分析的结果来调整。
NLP 处理后的Training Data: 【{"apple": True, "shabi": False, "baby":True}, positive】
[{"banana": False, "jiji": True, "baby": False}, negative]
...我Twitter NLP的部分写错了。。。
正确的Trainig data应该是:
先把训练文件:movie reviews里出现的Top 5000 动词/形容词/adv 挑选出来。
然后扫描movie review datasets:
for w in word_features:
features[w] = (w in words)
所以feature里面一定是5000 dimensional, 然后就是这个词出现 在这篇文章or not。
比如说所有词汇为: 打,你,妈,的
feature=[打:, 你: , 妈:, 的]
看到一篇positive文章:
feature=[打:true,你:false, 妈:false, 的:true] , positive.