我们有一个应用程序,用户可以全天输入价格。这些价格记录在带有时间戳的表中,然后用于生成价格变动的图表......用户有时会错误地输入价格(例如输入零到很多或很少),这在某种程度上破坏了图表(你会得到很大的峰值)。如果价格变动超过 20%,我们甚至会添加额外的确认对话,但这并不能阻止他们输入错误的值...

在绘制图表之前,我可以使用什么统计方法来分析这些值,以排除与其他值有很大不同的任何值?

编辑: 给骨头加点肉。假设价格是股价(它们不是,但它们的行为方式相同)。您可能会看到价格在白天大幅上涨或下跌。平均每天我们会记录大约 150 个价格,有时其中一两个价格是错误的。其他时候他们都很好...

有帮助吗?

解决方案

计算并跟踪 标准差 一阵子。当您有足够的积压后,您可以通过查看异常值与平均值的标准差来忽略它们。更好的是,如果您有时间,您可以利用这些信息做一些事情 朴素贝叶斯分类.

其他提示

这是一个很好的问题,但可能会引发相当多的讨论,因为答案可能多种多样。这取决于

  • 你愿意为此付出多少努力?

  • 有些答案是否真的有 +/-20% 的差异或者您发明的任何测试?那么总是需要一些人为干预吗?

  • 为了发明一个相关的测试,我需要对这个主题有更多的了解。

话虽如此,以下是可能的替代方案。

  • 对先前值(或先前 10 个或 20 个值的平均值/众数)进行简单测试将很容易实现

  • 下一级别的复杂性将涉及对所有值(或之前的 x 值,或最近 3 个月的值)进行某种统计测量,正态分布或高斯分布将使您能够确定每个值是否是一个错误与准确的。这种确定性程度通常用百分比来表示。

http://en.wikipedia.org/wiki/Normal_distributionhttp://en.wikipedia.org/wiki/Gaussian_function 这些页面中有足够的链接来帮助进行编程,还取决于您使用的语言,可能有可用的函数和/或插件来帮助实现此目的

  • 更先进的方法可能是采用某种学习算法,该算法可以考虑其他参数(除了最后的 x 值),例如,学习算法可以考虑产品类型或制造商。或者甚至监视一天中的时间或输入数字的用户。这个选项似乎超出了您的需要,但是,需要大量的工作来对其进行编码并训练学习算法。

我认为第二个选项适合您。使用标准差(很多语言都包含一个函数)可能是一个更简单的选择,这只是衡量该值与 x 先前值的平均值的偏差程度,我将标准差选项放在两者之间选项 1 和 2

您可以测量现有总体中的标准差,并排除那些与平均值大于 1 或 2 个标准差的群体吗?

这将取决于您的数据是什么样子才能给出更准确的答案......

或者绘制价格的移动平均值而不是实际价格。

引用自 这里:

统计学家设计了几种检测异常值的方法。所有方法首先量化异常值与其他值的距离。这可以是异常值与所有点的平均值之间的差、异常值与剩余值的平均值之间的差、或者异常值与下一个最接近值之间的差。接下来,通过除以某种散布度量(例如所有值的 SD、剩余值的 SD 或数据范围)来标准化该值。最后,计算回答该问题的 P 值:如果所有值确实都是从高斯总体中采样的,那么随机获得与其他值相距甚远的异常值的机会有多大?如果 P 值很小,则可以得出结论:离群值与其他值的偏差具有统计显着性。

你知道,谷歌是你的朋友。;)

对于您的具体问题 绘图, ,并且您的具体情况是每天 150 个错误中平均有 1-2 个错误,最简单的事情可能是绘制 修剪手段, ,或者中间 95% 的值的范围,或者类似的东西。这实际上取决于你想从情节中获得什么价值。

如果您确实关心一天价格的真实最大值和真实值,那么您必须将异常值作为异常值处理,并正确排除它们,可能使用之前提出的异常值测试之一(数据点比下一个多 x%)点,或最后 n 个点,或距每日平均值超过 5 个标准差)。另一种方法是查看异常值之后发生的情况。如果是异常值,那么它将急剧上升,然后急剧下降。

然而,如果您关心总体趋势,则绘制每日修剪平均值、中位数、5% 和 95% 百分位数将很好地描绘历史。

选择您的显示方法以及需要进行多少异常值检测 基于分析问题. 。如果您关心中位数或百分位数,它们可能无关紧要。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top