1

我想存储用户偶尔生成的一些数据的平均值,然后在我的应用程序中使用它来预测未来的数据。现在我遇到的问题是,这些数据在白天可能会发生很大变化 - 例如,晚上进来的用户可能会产生比早上进来的用户低得多的值,所以仅仅保持一个简单的平均值不会给我一个合理的预测准确度。

有些我需要存储某种基于时间的平均值——例如,一个简单的解决方案是存储一天中每个小时的平均值——所以我保留了 24 个平均值,一个用于在 12AM 到 1AM 之间生成数据的所有用户,第二个用于在凌晨 1 点到 2 点之间生成数据的所有用户,依此类推。

我对这种方法只有几个问题: 1. 要正确预测数据,我仍然需要查阅一些我可能没有资源去做的值(比如说,提前 2 小时和 2 小时后) . 如果它不会对我的准确性造成太大影响,我宁愿参考一个值。2.我还希望仅记住最近的数据-如果几年前生成的值非常低,但自上个月以来每个人都生成了很高的值,那么我需要预测不久的将来的数据能够做出更好的反应,然后我创建的所有数据的平均值可以给我。为了争论的缘故,让我们说所有早于 90 天的东西都不是真正相关的。3. 我想使用平均值而不只是保留用户生成的所有数据的原因是我期望有很多数据 - 我需要为 100K 到 10M 数据点中的每一个存储这些数据,数百万来自用户的每周数据条目 - 至少。我可能还想为每个数据点进一步拆分数据 - 可能基于某些用户分类。

如果有人能给我一些关于如何最好地计算我的平均数据而不需要庞大的数据存储设施的提示,我将不胜感激:-)

[提示 - 是的,它用于 GIS 应用程序]

4

5 回答 5

1

使用视图来计算您的期望值。这样,您就可以动态构建您的方法,并且查询起来很简单。

于 2009-10-20T19:54:07.403 回答
1

听起来您的数据集中有两个重要的信息。数据存在多少天,以及它是一天中的什么时间。

未来时间的预测值可以计算为数据集的加权平均值,权重随着年龄的增长而降低,并且随着预测值与小时的距离而降低。

编辑:如果最重要的事情不是挂在数据上:

按照您的建议设置垃圾箱(天真的解决方案)似乎是最合理的方法。随着新数据的出现并与分箱数据“平均”,新数据可以被赋予更大的权重,以帮助最近的变化克服所有历史数据的“惯性”。

于 2009-10-20T20:12:19.683 回答
0

你看过计算移动平均线的公式吗?wikipedia 上定义了许多方法。

于 2009-10-20T19:52:37.437 回答
0

我认为循环数据库(例如,rrdtool)非常适合您的目的。无论您最喜欢的语言是什么,都肯定有一个编程 API。

http://oss.oetiker.ch/rrdtool/

最好的问候,诺亚

于 2009-10-20T19:52:54.333 回答
0

为什么不只存储所有用户生成的值,然后在需要时准确计算出你想要的值呢?当您不再需要旧数据时,您始终可以设置归档脚本来清除旧数据。

通过这种方式,您不会通过使用计算值进行计算而引入不准确性。

于 2009-10-20T19:54:05.523 回答