按访问时间戳聚类

clustering by access timestamp

假设我们有以下网络访问日志。

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个页面。我的问题是"What is the best way to know how many times he visited our web site instead of how many pages he visited?"

由于用户访问的页面数量可能不同,每次访问花费的时间也不同,因此很难设置固定的数量或间隔来对这些记录进行分组。是否有任何算法可以根据时间戳对这些记录进行分组(聚类)?谢谢

届会start/end

一个简单的方法就是选择一个数字来表示会话已经结束,我见过 20 分钟的不活动用来表示会话已经结束。

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

您需要做的第一件事是查看数据。特别是 inter-arrival 次。您有一个 page_visited 事件列表。您需要以秒为单位绘制 inter-arrival 次的分布(页面访问之间经过的时间)。

一个合理的假设是,如果 inter-session 次确实聚类,则分布看起来 Poisson-like, or it will be Poisson-like but additional humps

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

通过从 inter-arrival 次的分布中选取适合您的 use-case 的 percentile,您可以确定一个非常有用的阈值,超过该阈值 inter-arrival 次提示新会话已开始。

或者,如果它更有用,您可以使用分布来获得观察inter-arrival时间的概率,低概率表示新会话的start/end。

更复杂的是如果分布是 bi-modal,比如说,因为人们倾向于 space 他们的会话相似。如果是这样,探索一个简单的聚类算法可能会更简单,例如 k-means,在 inter-arrival 次,您会期望一个集群用于 in-session 次访问,一个集群用于 inter-session 次访问。

计算会话数

一旦找到识别不同会话的适当方法,为每个会话分配唯一​​键、按用户分组并计算唯一键就很简单了。