星期二, 二月 14, 2012

如何分析twitter中包含的投资者情绪


投资者情绪(investor sentiment)是反映投资者心理的重要因素,它是一种反映投资者的投资意愿或预期的市场人气指标,对证券市场的运行和发展有很大的影响。以往对投资者情绪指数的衡量主要通过两种方式,一个是通过问卷调查等方式直接测量,另一个是通过分析有关交易数据来间接测量。

随着社会化媒体的盛行,Twitter上的推文也可以被看作是一种情绪指标。英国伦敦基金公司Derwent Capital Markets就利用Twitter上发表的推文,统计大众情绪来预测股市走势,在2011年全球市场低迷之中,还能维持1.85%报酬率,领先S&P500指数。

本例完全借助Mining Twitter for Airing Consumer Sentiment这篇文章(该文获得了最近的R商业应用大赛第二名)的代码和思想来衡量投资者对S&P500的情绪。本例分析简单粗陋,并未考虑推文的时间因素,以及和股市的交互涟漪效应,Just for fun。
#首先载入twitterR包,再以sp500为关键词搜索1500条推文
library(twitteR)
sp500 <- searchTwitter('sp500',n=1500)
#再加载plyr包,利用其中的向量化操作函数将所有的推文文本提取出来。
library(plyr)
sp.text <- laply(sp500,function(t) t$getText())
#从这个地址将包含正面和负面情绪词汇的文本包下载到本地 http://www.cs.uic.edu/~liub/FBS/opinion-lexicon-English.rar
pos <- scan('d:/positive-words.txt',what='character',comment.char=';')
neg <- scan('d:/negative-words.txt',what='character',comment.char=';')
pos.words <- c(pos, 'up','bull')
neg.words <- c(neg, 'down','bear')
#最后利用score.sentiment函数将推文与情绪文本进行比对,结果存于result变量中,其中score保存着各推文出现代表不同情绪的词频数。score为正表示正面情绪,为负表示负面情绪。
result <- score.sentiment(sp.text,pos.words,neg.words)
data=result$score
table(factor(data))
-5  -3  -2  -1   0   1   2   3   4   5
4  13  38 113 813 120  34   2   3   1
从上面的结果可以看到,基本上对于sp500的情绪持中性,没有太大的正面或负面情绪。当然Derwent系统则更为精密强悍,它随机追踪Twitter上10%的推文,也就是每天统计1亿则推文,然后采取两套方法整理数据:1. 比较正面评价和负面评价,2. 利用Google程序确定六种情绪,冷静、警觉、相信、活跃、友善和高兴。系统开发者Johan Bollen教授能准确预测道琼指数走势,准确率高达87.6%。

想要利用“情绪指数”预测股市走势并不只有Derwent,彭博社和市场预测公司Wise Window也开始研究社群网站上的对话和股价的关系,不管是Twitter、Facebook、或是Blog全部都纳入研究,以“产业”为搜集信息的主题,例如搜集大家谈论“汽车”的观点,藉此预期福特或通用汽车的股市行情。WiseWindow执行长Sid Mohasseb表示,这项研究就是以“人”为主,当你能够抓住人们说:我想要这个、我不要那个的时候,就可以预期这些选择将会带来哪些公司的营收,我们做的就是加快分析。

3 条评论:

  1. 博主你好,看了你的东西很受启发,我照着做了一下,老出现Error in twInterfaceObj$doAPICall(cmd, params, "GET", ...) : OAuth authentication is required with Twitter's API v1.1,我尝试google该问题,但没有找到合理的解决办法,有劳博主帮帮忙在看一下,谢谢啦

    回复删除
    回复
    1. 这个错误应该是twitter的API需要授权,以前的老方法可能失效了,你需要去twitter的网站研究下相关文档了。

      删除
  2. 谢谢博主回复

    回复删除