对于LSTM输入,通过为每行创建“过去”块创建更多数据

时间:2018-03-12 12:14:59

标签: python pandas numpy lstm

我有一个数据集,每天都会查看我网站上的用户行为。我只记录查看的页面浏览量(为简单起见只有1个功能),并想预测该人是否会购买产品。

我决定使用和LSTM网络对此进行建模。

目标:对于 n = 3 (订购)天的每个块,输出转换是否发生在2个月内。简而言之,对于每一行,请应用以下内容:查看过去的n次访问。看看未来2个月,看看转换是否发生。

我有2个数据框:第一个包含用户以前的行为,第二个包含转换日。

df = pd.DataFrame(data={'user_id':[1,1,1,1,2,2], 'date':[20180311,20180310,20180210,20170505,20180312,20180311], 'page_views':[10,20,45,1,14,15],'conversion':[1,1,1,1,0,0]})
conversion_df = pd.DataFrame(data={'user_id':[1], 'conversion':[20180312]})

   conversion      date  page_views  user_id
0           1  20180311          10        1
1           1  20180310          20        1
2           1  20180210          45        1
3           1  20170505           1        1
4           0  20180312          14        2
5           0  20180311          15        2

   conversion  user_id
0    20180312        1

我想预测2个月内的所有转化。例如,让我们看一下用户1.给定2个月的前瞻窗口,n = 3个时间步长,我们在LSTM中有以下数据:

期望的输出:

X = [
[[10],[20],[45]], # looking at last 3 timesteps, recording pageviews
[[20],[45],[1]], 
[[45],[1],[0]],
[[1],[0],[0]], # done with user 1, next user
[[14],[15],[0]],
[[15],[0],[0]]
]

Y = [1,1,1,0,0,0] # 4th observation is not 1, because the conversion happened after 2 month look-forward window.

替代所需输出:使用date

set_index()添加到索引中
                     page_views    conversion
user_id       date 
1       | 20180311   10            1
        |            20            1
        |            45            1
----------------------------------------------
1       | 20180310   20            1
                     45            1
                     1             1
----------------------------------------------
1       | 20180210   45            1
                      1            1
                      0            1
----------------------------------------------
1       | 20170505    1            0
                      0            0
                      0            0
----------------------------------------------
2       | 20180312   14            0
                     15            0
                      0            0
.....

目前我正在使用pd.to_panel()获取3维输出,而我只使用df.group_by('user_id').head(n)获得最新的 n 天数。我目前的方法会给我2个数据点,严格限制下次访问网站时会发生转换。例如。对于user_id=1我们有 VVVVVC (5次访问导致第二天转换 - 20180312),我目前的模型将采用 VV- VVV -C 并预测下次访问日转换。

相反,新的方式将预测未来2个月的转换,我可以免费获得更多数据(也是更好的模型)。但作为一个额外的约束,我希望代码是<为O(n ^ 2)。

0 个答案:

没有答案