2017-02-16 27 views
0

假设我们有以下Web访问日志。通过访问时间戳进行聚类

timestamp     page_visted 
====================================== 
2017-01-02 10:00:02   /xxx/a.html 
2017-01-02 10:00:06   /xxx/b.html 
2017-01-02 10:01:03   /xxx/c.html 
2017-01-02 10:02:02   /xxx/d.html 
2017-01-02 15:00:02   /xxx/a.html 
2017-01-02 15:01:10   /xxx/b.html 
2017-01-02 15:03:05   /xxx/c.html 

该用户访问我们的网站2次,并访问了7页。我的问题是“知道他访问我们的网站多少次而不是访问了多少页面的最佳方式是什么?”

因为用户可能会访问不同数量的页面并为每次访问花费不同的时间,因此很难设置固定数量或间隔来对这些记录进行分组。有没有算法根据它们的时间戳对这些记录进行分组(聚合)?谢谢。

+0

你访问日志还包含用户ID的我假设? – mtoto

+0

如果您有任何登录页面或提供身份验证的任何页面,那么您只能计算这些值。 – Knight71

+0

@ Knight71这是一个好主意,只要没有'记住我'选项 – ImDarrenG

回答

0

会话的开始/结束

一个简单的方法是随便挑一个数字,表示会议已经结束,我已经看到了20分钟闲置用来显示会话已经结束。

一个更健全的方法涉及将此视为probabilistic problem,因为没有固定的会话长度或会话之间的固定时间量。

你需要做的第一件事就是看数据。特别是到达时间。你有一个page_visited事件的列表。您需要绘制以秒为单位的到达间隔时间分布(页面访问间隔时间)。

一个公平的假设是,分布看起来Poisson-like,或者这将是泊松等,但是如果additional humps会话间的时间的确聚集。

如果数据显示一个很好的Poisson distribution,一个简单的方法是直接使用访问时间的分布。

通过根据您到达时间间隔分布中的用例适用percentile,您可以确定一个相当有用的阈值,高于该阈值时,到达时间间隔表明新会话已开始。

或者,如果它更有用,则可以使用分布来获得观察到达时间间隔的概率,并以低概率指示新会话的开始/结束。

更复杂的是,如果分布是双模式的,比如说,因为人们倾向于以相似的方式来分隔他们的会话。如果是这样,在到达时间间隔内,您可能会更简单地探索一个简单的聚类算法,如k-means,您可能期望一个群集进行会话内访问,一个群集进行会话间访问。

伯爵会议

一旦你在适当的方法到达,以确定不同的会议,这是一个简单的例子来分配一个唯一的密钥,按每个用户会话和计数的唯一钥匙。

+1

也许你可以用代码来说明你的方法,因为这就是你的方法。但是,除了第一段,列出的所有选项对于一个基本上简单的问题都是不必要的复杂。 – mtoto

+0

噢,好的。抱歉。我很兴奋。 – ImDarrenG

+0

使用会话标识符(如sessionId)应该是最简单的解决方案。不幸的是,我们没有这样的会话ID,很难生成一个。 我会检查你提到的算法。谢谢。 – Scott2000