实战微博互动预测之一_问题分析
实战微博互动预测之一 _ 问题分析
#算法实战
1. 天池竞赛平台
微博互动预测是一个天池平台的竞赛,和其它平台相比,天池的数据量更大,赛题更接近实际场景。微博互动比赛算是其中比较小的,训练数据也有 300 多M,上百万条记录(虽然数据较多,但也是普通开发机可以处理的量级)。数据内容也比较丰富,和提供匿名纯特征拼算法的竞赛相比,它需要研究业务,发挥的空间也更大。
天池平台的大多数比赛分为线下赛和线上赛。第一阶段线下赛和 Kaggle,DC 差不多,就是在本地计算,然后上传预测结果,线上评分排名(每天两次),如果第一阶段排名靠前,可进入第二阶段线上赛,线上赛使用天池平台算力和工具,海量数据,支持分布计算,但也被线上工具所限。
2. 新浪微博互动预测
微博互动预测是前两年的赛题,现在仍开放线下赛,可以上传预测结果,计分并排名。它代表了现实中的一大类应用:数据量大,需要参赛者提取特征,数据有现实中的意义,无规律数据占多数,可多维度分析等等。赛题具体见:
https://tianchi.aliyun.com/getStart/introduction.htm?spm=5176.100066.0.0.6f2c778dQSMdqc&raceId=231574
3. 观察数据
微博互动预测的训练集是 123W条微博,预测测试集中数据转发,评论和赞的情况。
训练数据中,字段并不多,包括:用户标记,博文标记,发博时间,转发数,评论数,赞数,博文内容。
- 用户标记:大多数用户发文不止一条,可通过转发数,评论数,赞数预测该用户的粉丝,以及粉丝的习惯。
- 博文标记:是微博的 id,可看作索引。
- 发博时间:可分解出工作日,节假日,时间段等属性。
- 转发数,评论数,赞数:是预测的目标,也可用于计算用户的特征和分析其相关性。
- 博文内容:可解析出更多特征,如分词聚类,情绪分析,是否包含链接,是否包含表情,是否包含视频,是否自动生成,是否为广告(含:天猫,淘宝,超便宜),长度,是否@谁,是否为转发#,文章分类(新闻,技术,笑话,心情…)
4. 统计数据
(1) 统计转发,评论,点赞个数(后统称反馈)
我们既可以把它当成回归问题,也可以把它当成分类问题,如果是分类问题,则是非均衡分类,score 时需要考虑分布情况。
可见,如果把所有情况都预测成 0,也能拿到一定分数。
(2) 反馈个数做图
下面列出了转发,评论,点赞的分布图,横坐标是反馈个数(如转发数),纵坐标是该反馈出现的次数,如0次转发出现了上百万次(由于影响显示,做图截取掉了)。
(3) 反馈均数
平均每篇获得反馈个数是,转发:3.54,评论:1.26,赞:2.22。
可见,虽然大多数人没得到反馈,但被关注的少数人拉高了平均分。
(4) 统计用户
训练数据中共 37000 多个用户,人均发文 33 篇,首先用把每个用户得到的转发,评论,点赞的均值加在一起,可计算出关注度,即下图中的黑线,按关注度对用户排序,下图分别显示了关注度和各种反馈之间的关系,以及分布,从中也能看到在 30000 多人里只有几十个人平均每篇的反馈之和超过 100,且以转发为主。
截掉了图的左侧,其中显示有 15000 多人,从未得到过任何反馈,占了全体用户数的 0.412,所以说没人理也很正常。估计可能因为不太使用微信,只发广告,自动生成消息,或者好友太少。后面会做进一步分析。
(5) 单个用户分析
下面是对某个用户的转发分析,他共发文 733 篇,其中最多的一篇被转发 8949 次,也因为影响显示被截掉了,其中有 167 篇文是 0 次转发,大多数分布在0-100 次以内。从中还可以估计一下他的粉丝数,至少有 8949 人,方法是 max(f,l,c)。
可见,在粉丝多的情况下,反馈更多地取决于内容。
5. 问题分析
再来看看比赛的评分标准,下面公式中 f 代表转发,c 代表评论,l 代表赞,p 代表预测,r 代表真实值;deviation 是真实值与预测值的偏差,具体公式如下:
precision 是准确率,根据偏差算出:
sig 为符号函数,当 x>0 时 sig(x)=1,当 x<=0 时,sig(x) 为 0。Counti 为每篇的反馈总数,当 Counti>100 时,以按 100 计算。
也就是说,当计算的偏差和在正负 20% 以内,则将反馈总数计入成绩。有两点需要注意:
第一,反馈越多在评分中权重越大,比如反馈为 500 的文章,如果预测正确,贡献是反馈为 0 文章的 500 倍。
第二,反馈越多偏差越大,比如实际为 200 次转发,预测成了 500 次,偏差 deviation=(500-200)/(200+5)=1.63;实际为 2 次,预测成 5 次,deviation=(5-2)/(2+5)=0.43。
##6. 整体分析
从直觉上看,最强的特征应该是用户的被关注度,其次是内容,然后是时间。
试验了一下,计算出了每个用户转发,评论,赞的均值,对于训练集中出现过的用户,直接将均值四舍五入作为预测,对没出现过的用户预测为 0(整体均值)。线上得分 26.49%,排名 260 名左右。加入一些算法后成绩反而下降了,估计可能是由于少量有规律数据和大量无规律数据混在一起,规律被湮没了,当然也有算法的选择问题。
从不同角度看:直接可见的是文章,间接可见的是用户的特征。从已有数据可以提取到用户的发文数,各种反馈的均值,方差,关注度,估计粉丝数,以及他的粉丝对他各种文章的反馈。也可以根据不同反馈(不同的人,身边不同圈子)给用户做聚类。当某个用户个人信息不足时,取他所属类别的均值,这有点像股票分析也要先分析某支股票的股性,再分析其行为。
初步觉得这应该是一个聚类,分类和回归结合的问题,有点像树回归。我觉得在前期,相对于分析信息内容,分析用户行为可能带来更大的信息增益。