1

这是一个很好的问题,我很喜欢仔细考虑...

假设您运行“Widget Rental”网站,并且在您的应用程序上,您希望允许潜在购买者根据价格对小部件进行分类。(从低到高或从高到低)。

每个小部件可以根据一年中的时间有不同的价格。当您获得“旺季”和“淡季”季节时,某些小部件将根据季节有数十种不同的价格。

然而,“小工具”的卖家特别调皮,他们意识到如果他们将小工具设置为一年中的某一天真的很贵,而且一年中的某一天也真的很便宜,那么他们很容易出现在低和高排序范围。

目前,我采用了一个非常天真的解决方案来计算 Widget 的“最低价格”,即lowest( N )从数据集中获取值。

我想要的是获得一个小部件的“最低价格”,它准确地描绘了它可以租用的价格......并删除较低/较高波段的异常值。

看看这张图表......带有值......

图表

X 轴 - 时间(每个重要间隔为一天)

Y 轴 - 价格

X轴是时间,Y轴是价格。现在,这包含一个正态分布,并且该数据集中没有任何真正的统计异常值。最低值和最高值之间的价格波动高达 200% 是很常见的。

但是,看看这第二张图表……它包含单日关税,只有 20 ēuros……

在此处输入图像描述

我玩过使用 Grubbs 测试,它似乎工作得很好。

重要的是我想得到一个“从价格”。也就是说,我希望能够说“你可以从 XXXX 租这个小部件”。因此,它应该反映整体的整体定价,并忽略明显的异常值。

如果您向我指出任何已经存在的方向,PHP 奖励积分。(但我很高兴自己用 PHP 编写代码)。

4

1 回答 1

1

一个问题是对于异常值的实际含义有多种定义。然而,为此目的,一个直接的解决方案似乎就足够了。

您可以通过将值的范围限制为与平均价格的+- 某个百分比或 +- 某个数量的标准偏差(可能是一到两个,但也可能非常)来消除异常值。可能您可能希望将两者结合使用,好像价格不是很多,那么折扣可能会被视为异常值,这可能合适也可能不合适。在任何情况下,您都可能需要做一些实验来确定它的敏感程度。您可能希望将其设置为异常值必须至少与平均值相差某个百分比,即使它只有 5-20%。以下是基于平均 500 美元的几个百分比限制。

  • 90%:50 到 950 美元
  • 75%:125 至 875 美元
  • 50%:250 至 750 美元
  • 30%:350 至 650 美元
  • 25%:375 至 650 美元

如果使用多遍,那么对价格进行排序会更容易,然后只要超出范围,就删除与平均值最远的价格(可能考虑最高价格和最低价格)。这最终是 O(N*D log D) 以获得连续单遍的结果,直到它们没有效果,而不是单遍的 O(N*D),其中 N 是要租用的项目数,D是考虑的天数。

在对如何定义 epsilon 的值进行一些试验后,您还可能会发现Ramer-Douglas-Peucker 算法对于查找兴趣点很有用。

于 2013-07-04T22:07:12.050 回答