网站统计信息:按任意时间间隔计算/估算唯一身份访问者

时间:2010-09-05 16:07:35

标签: database algorithm math statistics google-analytics

我正在编写一个记录一些“基本”统计数据的应用程序 - 页面浏览量和唯一身份访问者。我不喜欢存储每个视图的想法,因此考虑过以小时/天分辨率存储总计。例如,像这样:

Tuesday    500 views   200 unique visitors
Wednesday  400 views   210 unique visitors
Thursday   800 views   420 unique visitors

现在,我希望能够在选定的时间段(即一周)内查询此数据集。计算视图很简单:只需添加即可。但是,添加唯一身份访问者将无法给出正确答案,因为访问者可能在多天内访问过。

所以我的问题是如何确定或估算任何时间段内的唯一身份访问者而不存储每个匹配。这甚至可能吗? Google Analytics(分析)会报告这些值 - 当然,它们不会存储每一次点击并查询每个时间段的数据集!?

我似乎无法在网上找到任何有用的信息。我最初的直觉是我需要存储2组具有不同分辨率的值(即白天和半天),并以某种方式为所有可能的时间范围插入这些值。我一直在玩数学,但无法得到任何工作。你认为我可能会做某事,或走错路吗?

谢谢, 布伦登。

4 个答案:

答案 0 :(得分:1)

您可以存储数据的随机子样本,例如,10%的访问者ID,然后在天数之间进行比较。

最简单的方法是存储每天的随机子样本以供将来比较,但是,对于当天,暂时存储所有ID并将它们与子采样历史数据进行比较并确定重复的分数。 (也就是说,您将子采样数据与给定日期的完整数据集进行比较,而不是比较两个子样本 - 可以比较两个子样本并获得总数的估计值,但数学会有点棘手。)< / p>

答案 1 :(得分:1)

如果你对近似值没问题,我认为tom10是关于某事的,但他的随机子样本概念不是正确的或者需要澄清。如果我有第1天和第2天来访问的访问者,但仅在第2天采样,则会在估计中引入偏差。我要做的是存储用户的随机子样本的完整信息(比方说,哈希(id)%100 == 1的所有用户)。然后你对采样数据进行全面计算并乘以100.是的tom10就是这样说的,但有两个不同之处:他说“例如”基于ID的样本,我说这是你应该采样的唯一方法,因为你对独特的访客感兴趣。如果您对唯一的IP或唯一的邮政编码感兴趣,或者您会相应地采样。如果样本足够大,可以使用二项式的正态近似来评估估计的质量。除此之外,您可以尝试使用用户忠诚度模型,就像您观察到超过2天,10%的访问者在两天内访问,超过三天11%的访问者访问两次,5%访问一次,依此类推最大天数。遗憾的是,这些数字可能取决于一周中的时间,季节,甚至模拟这些数字,随着时间的推移,随着用户群的成熟,组成和服务变化的变化,忠诚度的变化,因此任何模型都需要重新估算。我的猜测是,在99%的实际情况中,采样技术会更好地为您服务。

答案 2 :(得分:0)

您无需存储每个视图,只需每小时或每天存储一个唯一的会话ID,具体取决于您在统计信息中所需的分辨率。

您可以将包含会话ID的这些日志文件排序,以便通过合并多个小时/天来快速计算唯一身份访问者数。每小时一天一个文件,每行一个唯一的会话ID。

在* nix中,像这样的简单单行将完成这项任务:

$ sort -m sorted_sid_logs/2010-09-0[123]-??.log | uniq | wc -l

它计算了9月份前三天内唯一身份访问者的数量。

答案 3 :(得分:0)

您可以计算每天的唯一性因子(UF),并使用它来计算复合(按周示例)UF。

让我们说你算了:

  • 星期一有100次访问和75次唯一会话ID(您必须至少存储会话ID一天或您用作单位的时间段。)
  • 周二有200次访问和100个唯一会话ID。

如果你想估计Mon + Tue期间的UF,你可以这样做:

UV = UVmonday + UVtuesday = TVmonday*UFmonday + TVtuesday*UFtuesday

感:

UV = Unique Visitors
TV = Total Visits
UF = Uniqueness Factor

因此...

UV = (Sum(TVi*UFi))
UF = UV / TV
TV = Sum(TVi)

我希望它有所帮助...

此数学计算同一人的两次访问与两位唯一身份访问者。我认为如果您必须通过会话ID确定某人的唯一方法就可以了。