2

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

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

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

4

6 回答 6

1

计算并跟踪一段时间的标准偏差。在你有一个体面的积压后,你可以通过查看离平均值有多少标准偏差来忽略异常值。更好的是,如果你有时间,你可以使用这些信息来做一些朴素的贝叶斯分类

于 2008-09-18T09:48:14.740 回答
1

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

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

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

  • 并且要发明一个相关的测试,我需要更多地了解这个主题。

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

  • 针对先前值(或先前 10 或 20 个值的平均值/模式)的简单测试将直接实施

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

请参阅http://en.wikipedia.org/wiki/Normal_distributionhttp://en.wikipedia.org/wiki/Gaussian_function这些页面有足够的链接来帮助编程,也取决于您使用的语言可能有功能和/或插件可以帮助解决这个问题

  • 一种更高级的方法可能是使用某种学习算法,该算法可以考虑其他参数(在最后的 x 值之上),例如,学习算法可以考虑产品类型或制造商。甚至监控一天中的时间或已输入数字的用户。这个选项似乎超出了您的需求,但是,它需要大量的工作来编写代码并训练学习算法。

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

于 2008-09-18T10:04:16.777 回答
0

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

这将取决于您的数据看起来如何给出更准确的答案......

于 2008-09-18T09:48:27.483 回答
0

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

于 2008-09-18T09:51:19.083 回答
0

从这里引用:

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

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

于 2008-09-18T09:51:44.903 回答
0

对于您的特定绘图问题,以及您在 150 次中平均每天出现 1-2 个错误的具体情况,最简单的方法可能是绘制修剪后的均值,或中间 95% 值的范围,或类似的东西. 这实际上取决于您想要从情节中获得什么价值。

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

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

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

于 2008-09-18T12:36:22.883 回答