bangumi+ app利用机器学习预测新番评分.Part1

最近朋友在研究机器学习相关的项目,于是也推荐我试一下,想想手头上也只有几个app,所以就打算拿最近正在更新的番组计划+ app来试试。

由于手头上已有API,于是就打算把bangumi的数据先爬下来进行分析后制作成模型,然后转换给coreml用的模型装在app里,这样只要新番啥的将数据丢给模型计算之后就能得到番组的大致评分。

虽然可以说有助于新一季度番出来的时候进行选择性观看,不过到底还是实验性作品,所以估计结果准确性肯定没法说,只能纯当玩了。

当然,这是个开源项目。

 

不过我本人对机器学习了解不是特别深入,这里就只能找咱朋友帮忙了。所以本次研究是和xlfdll一起完成的。他负责收集数据、算法以及训练部分。我的话则是负责将训练好的模型导入app然后将新番的数据进行计算。目前还在前期部分也就是数据收集完了正准备训练,还没到我的部分。

 

STEP 1.

首先是从bangumi获取数据,这个的话基本上python写一个爬虫就好了,关于这个我虽然还在纠结是否开源不过已经被上传上去了所以想研究的可以自己去github上看。不过收集来的数据是不会公开的,主要除了版权问题之外更重要的是那个数据实时在变化,即便公开了数据过段时间也会过期,倒不如自己爬了之后自己训练生成模型还实时一些。app自带的模型我只能说尽可能每季度更新一次。

 

STEP 2.

然后是筛选数据,决定哪些数据是需要用的哪些是多余的。这里虽然API和爬虫已经公开了不过这里并不想一个个深入解说,只能大致说一下。根据bangumi的API来看,目前能用上的信息基本有以下几类

  • 总话数
  • 周几播放
  • 总评分人数
  • 想看在看和看过的人数构成的“对此番感兴趣的人数”
  • 搁置和抛弃的人数构成的“对此番不感兴趣的人数”
  • 声优名称
  • 制作人员名称
  • 评论的数量
  • 讨论版的数量

至于为啥采用这几个特定的类别,主要是因为通过这些类别的特征比较容易进行判断,比如总话数理论上可以看出人气高的有可能话数比较多比如12或者24话甚至更多。而周几播放可以大致推测出比如周末黄金时段可能质量高的动画比较多等等。当然这些都是我们假设的,具体情况得看学习过后的模型。

可能有人会问到有些还未播出的番可能出现评价两极分化的情况(比如著名的紫罗兰永恒花园,现时点暂未播出)可能会影响训练出来的模型所预测的结果。我们的对策则是为了排除这些干扰因素我们导入的训练数据并不包含未播出的番剧。也就是说我们只拿以前直到这个季度的数据进行训练,之所以用到最新一个季度的原因是基本上训练生成模型的时间都在每个季度的最后一个月底左右,这个时间当季的动画也基本固定下形态了所以可以判断为有效数据,正好为下一个季度作准备。

 

STEP 3.

将爬到的这一堆数据汇总生成一个dataframe(就类似数据表),然后进行预处理进行二进制转换,也就是转换成数字,再进行训练得到模型。最后拿新的数据也就是新一季刚开始播放的新番丢进去预测看结果是否符合预期。

详细来说至于算法,目前采用的是Regression类别里的….可能是Lasso,也可能是RidgeRegression,也有可能是SVR,目前正进行到这一段还正在测试结果还没出来最终结果所以还不是特别清楚。关于算法的分类具体可以看这里

 

最后说下我个人想达到的效果,倒不是说会在新一季度到来时给你推荐啥“你可能会喜欢的新番“。我是想作为一个辅助的功能做个预测给大家看看而已。目的当然还是为了提升app的使用率(

以上就是目前的进度,有新进展将会在本blog里更新新的文章,欢迎持续关注。另外对于以上有啥疑问或者建议也欢迎留言讨论。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*

:b1 :b2 :b3 :b4 :b5 :b6 more »

Note: Commenter is allowed to use '@User+blank' to automatically notify your reply to other commenter. e.g, if ABC is one of commenter of this post, then write '@ABC '(exclude ') will automatically send your comment to ABC. Using '@all ' to notify all previous commenters. Be sure that the value of User should exactly match with commenter's name (case sensitive).