我有一个数据集,每天都会查看我网站上的用户行为。我只记录查看的页面浏览量(为简单起见只有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)。