通过useragent,ip,session_id聚集唯一身份访问者


15

在满足session_id, ip, user_agent以下条件的情况下,给定形式为的网站访问数据,以及可选的时间戳记,请按照以下条件进行操作,如何最好地将会话归类为唯一身份访问者?

session_id:是给每个新访客的ID。它不会过期,但是如果用户不接受cookie /清除cookie /更改浏览器/更改设备,则将不再识别他

IP 可以在不同的用户之间共享(想像一个免费的Wi-Fi咖啡馆,或者您的ISP重新分配IP),他们通常会至少拥有2个家庭和工作场所。

User_agent是浏览器+操作系统版本,可区分设备。例如,用户可能同时使用手机和笔记本电脑,但不太可能使用Windows + Apple笔记本电脑。同一会话ID不可能有多个用户代理。

数据可能看起来像这里的小提琴:http ://sqlfiddle.com/#!2/ c4de40/1

当然,我们在谈论假设,但这是在尽可能接近现实。例如,如果我们在有限的时间内遇到具有不同session_id的相同ip和useragent,则可以合理地假设它是同一用户,但有一些例外情况。

编辑:解决问题的语言是反讽的,它主要是关于逻辑而不是实现。伪代码很好。

编辑:由于小提琴的缓慢性质,您可以选择读取/运行mysql:

select session_id, floor(rand()*256*256*256*256) as ip_num , floor(rand()*1000) as user_agent_id
from 
    (select 1+a.nr+10*b.nr as session_id, ceil(rand()*3) as nr
    from
        (select 1 as nr union all select 2 union all select 3   union all select 4 union all select 5
        union all select 6 union all select 7 union all select 8 union all select 9 union all select 0)a
    join
        (select 1 as nr union all select 2 union all select 3   union all select 4 union all select 5
        union all select 6 union all select 7 union all select 8 union all select 9 union all select 0)b
        order by 1
    )d
inner join
    (select 1 as nr union all select 2 union all select 3   union all select 4 union all select 5
    union all select 6 union all select 7 union all select 8 union all select 9 )e
    on d.nr>=e.nr

Answers:


9

这里的一种可能(这实际上是Sean Owen发表的内容的扩展)是定义“稳定用户”。

对于给定的信息,您可以想象制作一个user_id,它是ip的哈希值和一些用户代理信息(伪代码):

uid = MD5Hash(ip + UA.device + UA.model)

然后,根据您为用户观察到的使用启发式,将这些ID标记为“稳定”或“不稳定”。在给定的时间范围内,这可以是访问次数的阈值,它们的cookie持续的时间长度,您网站上的某些结束操作(我知道这没有在您的原始日志中指出)等。

这里的想法是将不会删除Cookie的用户与不会删除Cookie的用户区分开。

在这里,您可以将session_ids归因于日志中的稳定uid。然后,您将获得相对不确定的不稳定用户的“剩余” session_id。您可能会计算会话的次数过多或不足,如果只有一个,则将行为归于多个人,等等。但是,这至少限于您现在“不太确定”的用户。

然后,您可以对稳定组执行分析,并将其投影到不稳定组。以一个用户计数为例,您知道会话总数,但是不能确定有多少用户生成了这些会话。您可以找到#个会话/唯一稳定用户,并使用它来预测不稳定组中“估计”数量的唯一用户,因为您知道归因于该组的会话数量。

projected_num_unstable_users = num_sess_unstable / num_sess_per_stable_uid

这对不稳定用户的每个用户级别的调查无济于事,但您至少可以从一组持续一段时间的稳定用户中获得一些收益。您可以通过各种方法来预测项目行为并将其计入不稳定组。上面是您可能想知道的简单示例。总体思路是再次定义一组您有信心的用户,测量您要测量的内容,并使用某些基本事实(搜索次数,访问次数,点击次数等)来投影到未知的用户空间中并进行估算为他们计数。

对于不需要登录的服务,这是唯一的用户计数,日志记录等长期存在的问题。


一个很好的答案!对于那些阅读者,我想补充一点,在第三方cookie的情况下,许多safari移动版本默认情况下不会使用这些版本,其他浏览器的管线也相同。请记住这些,并分开对待。
AdrianBR 2014年

1
对于不需要登录的服务来说,Cookie流失是一个很大的问题。尽管许多用户根本不了解Cookie,所以您很可能会花大量的时间来关注。
cwharland 2014年

6

仅凭此数据您就无能为力,但是您所能做的很少不依赖于机器学习。

是的,来自同一IP但不同用户代理的会话几乎可以肯定是不同的用户。具有相同IP和User-Agent的会话通常是同一用户,但代理/ Wi-Fi接入点除外。您可以通过查看每个IP的会话计数的分布来识别那些,以识别可能的“聚合” IP。来自同一IP /用户代理的会话在时间上的重叠几乎肯定是不同的。

为了进一步区分用户,您需要更多信息。例如,用户连接到的站点或IP地址将成为区分会话的非常坚实的基础。然后,您可以进入更复杂的学习中来确定会话是相同还是不同的用户。


该上下文可以通过iframe在具有第三方Cookie的单个站点内进行信息跟踪。该网站将是电子商务。我发现Google Analytics(分析)主要关注IP,有时关注的是Useragent,通过在特定时间范围内查看IP,我可以获得非常相似的数字。但是,根据具体情况,已知Google Analytics(分析)会过度报告30%ish
AdrianBR 2014年

查看所访问的产品页面也无济于事,因为商店的结构会引导用户沿着预定的路径
前进

1
另外,我知道ML不适用于此问题。而是,大多数跟踪解决方案都使用硬编码算法,以提供合理的结果。使用ML可以达到的最后几个准确度意义不大,因为该信息用于观察趋势。
AdrianBR 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.