时间序列回归 - RandomForest

Posted

技术标签:

【中文标题】时间序列回归 - RandomForest【英文标题】:Time series regression - RandomForest 【发布时间】:2018-04-01 03:19:44 【问题描述】:

为愚蠢的问题道歉 - 这里总共 n00b。

假设我有以下数据集。

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。结果看起来不错,但我想知道:

    如何将其转换为正确的时间序列预测?我看到some examples by Jason Brownlee 将问题重新定义为监督学习问题 - 但这不起作用,因为我可能有数百万行训练数据。我可以按类别/区域设置/类型对训练数据进行分组,按日期排序并在 T 天对特定类别/区域设置/类型组合进行测试,使用 T-1 天之前的数据进行训练 - 但这种方法非常昂贵因为可能有数以千计的此类类别/区域设置/类型组合

    我读过关于使用移动平均线来提高性能的文章。计算训练集中sessionslogins 的移动平均值很简单,但由于这是一个因变量,我如何在测试集中捕获它?

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

【问题讨论】:

【参考方案1】:

我会使用链接博客文章中的方法,如果您使用像shift 这样的矢量化 numpy 操作,数据转换应该不是问题。

顺便说一句,如果您忽略日期,您只是在计算每个组的平均数字,即您正在使用随机森林来构建一个非常精美的数据透视表;-)

【讨论】:

谢谢,但是shift 方法涉及为每一行创建一个列。看到大约有一百万行,这将导致一百万多列 - 我不确定那里的效率 你不会为每一行做一列,你只需在一个窗口大小内做几个步骤(在链接的博客文章中,他们只是对每一行使用前一个时间步)

以上是关于时间序列回归 - RandomForest的主要内容,如果未能解决你的问题,请参考以下文章

R线性回归中的RandomForest尾部mtry

在 R 中更快地获得 randomForest 回归

R语言随机森林回归(randomforest)模型构建

R语言 | randomForest包的随机森林回归模型以及对重要变量的选择

R语言randomForest包做回归预测需要交叉验证么

预测(随机森林):概率或投票对回归没有意义