开发者社区> 问答> 正文

一点心得、一份攻略、一段baseline code —— I'm PLUS

PLUS是队伍名字,不是哪个基准帖子的升级版哦。
去年发现有娃了之后,就给娃起了个小名叫加号,之后苹果发布了 6+,结果PLUS就烂大街了。

------------------------------------------------------------------------------我是方案简介分割线----------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
我的主要方法之前在zju和bupt分享的时候也已经提到了,详细的就不再说了,之后简单介绍下,并说明下初赛到决赛的方案的升级点。


方案简介:

1. ARIMA + LM 预测整月的数据
2. 对一些特征点进行调优 ( 中秋,调休,国庆前)


决赛相对之前的升级:
模型方面主要是增加了数据预处理 和 线性模型中的特征;
特殊时间点方面,主要是更好的刻画了月初、月末的特征

----------------------------------------------------------------------------我是 一点心得 分割线----------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
人力资源篇:
1. 人多力量大:一个人组队还是比较累的,而且会局限于自己的思路,通过改变方法模型来提升的概率较低。
2. 主要分工:一个人来做数据、特征和尝试非最优方法;一个人来优化最优方法;一个人来调特殊时间点;一个人组队都没怎么尝试其他方法
3. 如果团队的人力资源充足的话,最好有人手能够细致的对历史数据有足够的了解,就是在初期能够对模型得到的结果有一个优劣的判断;
  后期主要是微调了,变化太细微,人工check意义不大;


评测篇:
1. 如果评测机会比较充足,同时有些迷茫后续的优化方向在哪里;花费一天的代价,了解一下自己的purchase得分和redeem得分对后续方向的指导意义比较大。
  一般来说,purchase由于比较稳定,所以得分应该更高;而redeem会因为波动比较大,预测难一些
2. 发生了许多线下拟合8月份得分提高,实际效果下降的情况;这时一定不要迷信用八月份的数据做线下评测得到的效果,需要另辟蹊径找到评价指标;
  八月份数据略坑,及早从坑里爬出来
3. 一般而言,最后的评估函数不是线性的,越准确上分速度越快,加入一些小幅的噪声有可能能够提高成绩;
  运气不太差的话,如果有相同数量的点靠近和远离正确答案,那么会有一些分数提高;这条适合最后一天拼命用。


数据处理篇:
1. 进入御膳房的时候,大家手头应该已经有两份本地的数据了;算上御膳房中的数据,综合三份数据,能够比较好的判别一些特征是否是过拟合

2. 对于大额交易的处理是一个有效的提高得分的预处理方案,主要基于的思想是,
  申购的时候,即使是淘宝卖家的申购,每天的值也是不那么大额的,异常点较少;
  而赎回的时候,淘宝卖家的赎回基本都是大额的,异常点就多。


------------------------------------------------------------------------------我是 平台使用小记 分割线--------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
平台使用小记 (有些图我直接截在word中了,可以下载附件查看)
内部赛主要的功能毕竟是帮助大家趟雷,是不是还在觉得为毛还要限制平台,为毛还只能用R 语言,take it easy ,哥们也是R 渣;

下面我们跌跌撞撞开始在御膳房里头把我们的方法实现一下。

说明:
1. 虽然是R 渣,但是之前预赛,我是用windows 上的R 做的,毕竟10 行代码跑个arima 门槛真的很低
2.ODPS 是阿里的日常工具,这个内部员工都玩得比较666 ,不过这里用到的并不高深,很容易懂

整体流程

1. 需要对整体数据做一个处理,比如数据预处理、分解、汇总,这个正好使用ODPS ,语法同HIVE ,可以查HIVE 的语法手册
2. 汇总每日的申购、赎回数据分别放到表A 和 B 中,然后用PAI 平台的R 脚本读取这两张表,做时间序列分析,或者回归,分别输出到结果C 和 D 中;
3. 单点调优后,替换C 和 D 中的某些日期的数据,然后合并结果到输出表E 中


ODPS-SQL
如果大家不熟悉ODPS 的话,就当sql 使就行了,要是运气不好遇到语法问题,可以查阅hive 的语法手册,一模一样的哈。
使用SQL 的目标是,把原始数据预处理后,形成一份时间序列分析需要使用的数据。
在项目中的数据开发中,写ODPS-SQL ;算法平台用于做机器学习实验或者R 脚本编程


给一个汇总每日purchase 与 redeem 的样例




按照流程,假设purchase 的历史数据放在表A 中,redeem 放在B 中,我们进入下一步


PAI-R
到实验的页面下,新建一个实验,然后在画布上拖三个东西,一个是数据源,一个是R 脚本,一个是数据目标。依次用线进行连接。大概变成这样
PICTURE
数据源需要把表A 或者表B 的名字填进去,然后R 脚本自动会增加语句获取该表的输入;这是一个 dataframe 的数据结果,可以通过列名把数组形式的数据取出来。
获取到数据之后,一般先转为一个时间序列的对象,然后调用模型,如ARIMA ,decompose 对时序进行处理,然后预测9 月的数据。
预测得到的数据,需要构造为一个 dataframe 的对象,然后赋值给一个叫dataname 的变量,平台最终会自动把dataname 中的数据,放到输出目标表中

这里有个小窍门,PAI 上的R 编辑起来不是很友好,其实平台上的R 与本地的R 是没有差别的,只有数据输入输出的差别;所以如果程序能够在本地跑通,拷贝到平台上,然后改一下输入输出就可以了。
当然,要是用了平台没有的R 包,就比较麻烦了。
对于一个程序员来说,粗浅的了解一下R ,所花费的学习成本并不高,不过R 的资料毕竟没有其他热门语言那么多。
特别是,如果脚本跑失败了,是没有错误提示信息的,所以本地跑通显得尤为重要


PAI-机器学习
单点预测的话,能够挖掘出于当前点最相似的时间节点是比较有用的,可以用聚类方法来试一下。
主要分两步:
1. 构造特征,把特征放到数据表中
2. 拖拽算法模块进行聚类


具体流程可以参照官方文档。
成品大概如下:


------------------------------------------------------------------------------我是 baseline code 分割线--------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
用ARIMA中的XREG参数做 时间序列分析 + 线性回归


demo  code 见附件




平台使用小记: word 版
arimax baseline code:



展开
收起
dreamhunter 2015-06-29 16:24:57 20208 0
9 条回答
写回答
取消 提交回答
  • Re一点心得、一份攻略、一段baselinecode——ImPLUS
    请问基础的特征的数据是怎么提取出来的?
    2015-07-09 11:10:12
    赞同 展开评论 打赏
  • Re一点心得、一份攻略、一段baselinecode——ImPLUS
    按照你的word文档,arima运行出错。问题应该是出在如何导入数据?dataset2 <- pai.inputPort(2) # class: data.fram。如何对数据进行转换,然后进行训练
    2015-07-05 16:05:26
    赞同 展开评论 打赏
  • Re一点心得、一份攻略、一段baselinecode——ImPLUS
    我用chrome和firefox都不行。。。“所属用户组没有下载权限”
    2015-07-02 02:32:37
    赞同 展开评论 打赏
  • Re一点心得、一份攻略、一段baselinecode——ImPLUS
    用chrome也下不了 你所属的用户组没有下载附件的权限
    2015-07-01 10:59:35
    赞同 展开评论 打赏
  • 回5楼lingyi002的帖子
    你需要换浏览器。推荐谷歌
    2015-07-01 09:45:26
    赞同 展开评论 打赏
  • Re一点心得、一份攻略、一段baselinecode——ImPLUS
    下载不了啊??提示:“你探索了一个未知领域”
    2015-06-30 21:50:06
    赞同 展开评论 打赏
  • 回 1楼(ap7496f2e) 的帖子
    额,这个不是很清楚,我自己能点开下载,你看下别的帖子里头的附件你能下载么?

    -------------------------

    回 2楼(lemondy) 的帖子
    feature用于在时序分析的同时,考虑回归因子
    2015-06-30 12:31:45
    赞同 展开评论 打赏
  • Re一点心得、一份攻略、一段baselinecode——ImPLUS
    请问那个feature是什么意思?在arima预测时候用到了那个feature
    2015-06-30 10:12:23
    赞同 展开评论 打赏
  • Re一点心得、一份攻略、一段baselinecode——ImPLUS
    为啥下不了呀~
    2015-06-30 08:53:35
    赞同 展开评论 打赏
滑动查看更多
问答排行榜
最热
最新

相关电子书

更多
成功案例-Par...[幸运杰哥].1512720360.pdf 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载