Scikit learn 时间序列回归-随机森林

Scikit learn 时间序列回归-随机森林,scikit-learn,time-series,regression,random-forest,Scikit Learn,Time Series,Regression,Random Forest,为这些愚蠢的问题道歉-这里的总数为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/

为这些愚蠢的问题道歉-这里的总数为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

现在我根本不把这当作一个时间序列问题——为了培训,我删除了
日期
站点
列,对
类别
地区
排名
列进行编码,使用它们和
排名
作为输入,并训练我的模型预测
会话
登录
。结果看起来不错,但我想知道:

  • 如何将其转换为适当的时间序列预测?我看到问题被重新定义为有监督的学习问题,但这不起作用,因为我有可能数百万行的训练数据。我可以按类别/区域设置/类型对培训数据进行分组,按日期排序,并在T天对特定类别/区域设置/类型组合进行测试,使用截至T-1天的数据进行培训,但这种方法成本非常高,因为可能有数千种此类类别/区域设置/类型组合

  • 我读过关于使用移动平均来提高性能的文章。在训练集中计算
    会话
    登录
    的移动平均值将是微不足道的,但由于这是一个因变量,我如何在测试集中捕获它

  • 对于这项任务,是否有比RF更好的工具


  • 我会在链接的博客文章中使用这种方法,如果使用像
    shift
    这样的向量化numpy操作,数据转换应该不会有问题


    顺便说一句,如果你忽略了日期,你只是在计算每个组的平均数,也就是说,你在使用一个随机林来构建一个非常奇特的数据透视表;-)

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


    顺便说一句,如果你忽略了日期,你只是在计算每个组的平均数,也就是说,你在使用一个随机林来构建一个非常奇特的数据透视表;-)

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