2017-10-20 167 views
0

道歉的愚蠢问题 - 总计n00b在这里。时间序列回归 - RandomForest

比方说,我有以下数据集。

date,site,category,locale,type,rank,sessions,logins 
01/01/2017,google.com,search,US,free,1,3393093,50000 
01/01/2017,google.com,overall,US,free,1,3393093,50000 
01/01/2017,yahoo.com,search,US,3,free,core,393093,40000 
01/01/2017,yahoo.com,news,US,9,free,393093,40000 
01/01/2017,yahoo.com,overall,US,23,free,393093,40000 
01/01/2017,wsj.com,news,US,21,free,200000,180000 
01/01/2017,wsj.com,news,US,21,subscription,200000,180000 
01/01/2017,wsj.com,overall,US,93,free,200000,180000 

其中rank是该网站的Alexa排名。有几种可能的类别(搜索,电子邮件,电子商务等),排名与该类别中的排名相对应。

我想要预测会话的数量和登录特定网站/区域设置/排名会在特定的一天,基本上将其降低到多元时间序列回归问题,我正在使用sklearn的RandomForestRegressor。

现在,我不认为这是一次时间序列问题都没有 - 进行训练,我删除datesite列,编码categorylocalerank列,使用它们,rank作为输入和训练我的模型预测sessionslogins。结果看起来不错,但我想知道:

  1. 这怎么可能被转换成一个合适的时间序列预测?我看到some examples by Jason Brownlee这个问题被重新定义为一个监督学习问题 - 但这不起作用,因为我有可能有数百万行训练数据。我可以按照类别/区域/类型对训练数据进行分组,根据日期进行分类,并在特定类别/场所/类型组合的T天进行测试,使用截至T-1日的数据进行训练 - 但这种方法会非常昂贵因为潜在数千种类别/区域/类型组合

  2. 我已阅读有关使用移动平均值来提高性能的信息。在训练集中计算sessionslogins的移动平均值将是微不足道的,但由于这是一个因变量,我将如何在测试集中捕获这个变量?

  3. 有没有比RF更好的工具来完成这项任务?

回答

0

我会使用的方法在链接的博客文章,如果你使用矢量numpy的操作,如shift数据转换不应该是一个问题。

通过,如果你不理会的日期,你只是calcuating数的平均值为每个组的方式,即你正在使用一个随机森林建立一个很花哨的枢轴表;-)

+0

谢谢,但'shift'方法涉及为每一行创建一列。看到有大约一百万行,这将导致一百万列 - 我不确定那里的效率 – Craig

+0

你不会为每一行做一列,你只需在窗口大小(在链接的博客文章他们只是使用每行的上一个时间步) – maxymoo