Conversions user_id | tag | timestamp |--------- |-------- |---------------------| | 1 | click1 | 2016-11-01 01:20:39 | | 2 | click2 | 2016-11-01 09:48:10 | | 3 | click1 | 2016-11-04 14:27:22 | | 4 | click4 | 2016-11-05 17:50:14 |
User Sessions user_id | utm_campaign | session_start |--------- |--------------- |---------------------| | 1 | outbrain_2 | 2016-11-01 00:15:34 | | 1 | email | 2016-11-01 01:00:29 | | 2 | google_1 | 2016-11-01 08:24:39 | | 3 | google_4 | 2016-11-04 14:25:06 | | 4 | google_1 | 2016-11-05 17:43:02 |
根据上面的 2 个表格,我希望将每个转化事件映射到将特定用户带到网站的最近的广告系列(也称为最后一次触摸/最后一次点击归因)。
所需的输出是格式为的表格:
user_id | tag | timestamp | campaign |--------- |-------- |---------------------|----------- | 1 | click1 | 2016-11-01 01:20:39 | email | 2 | click2 | 2016-11-01 09:48:10 | google_1 | 3 | click1 | 2016-11-04 14:27:22 | google_4 | 4 | click4 | 2016-11-05 17:50:14 | google_1
请注意用户 1 如何通过 outbrain_2 营销事件访问该网站,然后通过电子邮件营销事件返回该网站。在用户第二次访问期间的某个时候,他们发生了转化,因此转化应归因于电子邮件而不是 outbrain_2。
有没有办法在 MySQL 或 Python 中做到这一点?
最佳答案
您可以使用 Pandas 在 Python 中执行此操作。我假设您可以将数据从 MySQL 表加载到 Pandas 数据帧 conversions
和 sessions
。首先,连接两个表:
all = pd.concat([conversions,sessions])
新框架中的一些元素将是 NA。创建一个新列来收集两个表中的时间戳:
all["ts"] = np.where(all["session_start"].isnull(),
all["timestamp"],
all["session_start"])
按此列排序,向前填充时间值,按用户 ID 分组,然后从每个组中选择最后(最近)行:
groups = all.sort_values("ts").ffill().groupby("user_id",as_index=False).last()
选择正确的列:
result = groups[["user_id", "tag", "timestamp", "utm_campaign"]]
我用您的示例数据尝试了此代码并得到了正确的答案。
关于python - MySQL 中的最后一次接触归因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40921913/