【问题标题】:Algorithm for Removing Outliers from a dataset of prices从价格数据集中去除异常值的算法
【发布时间】:2013-07-02 21:39:02
【问题描述】:

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

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

每个小部件可以根据一年中的时间有不同的价格。有些小部件会根据季节有几十种不同的价格,因为您有“旺季”和“淡季”季节。

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

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

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

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

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

Y 轴 - 价格

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

不过,看看这第二张图表...它包含单日关税,只有 20 ēuros...

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

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

如果您向我指出任何已经存在的东西的方向,PHP 加分。 (但我很乐意自己用 PHP 编写代码)。

【问题讨论】:

    标签: php algorithm sorting statistics


    【解决方案1】:

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

    您可以通过将值范围限制为与平均价格的 +- 某个百分比或 +- 某个数量的标准偏差(可能是一到两个,但它可以very)来消除异常值。可能您可能希望将两者结合使用,好像价格不是很多,那么折扣可能会被视为异常值,这可能合适也可能不合适。无论如何,您可能需要做一些实验来确定它的敏感程度。您可能希望将其设置为异常值必须至少与平均值相差某个百分比,即使它只有 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 algorithm 对查找兴趣点很有用。

    【讨论】:

    • 是的。您对“从 [价格]”应该是最低价格的看法基本正确,但实际上,当您查看一些 Widget 租赁价格时,您可以看到一些用户故意尝试通过恶意挑选单个日期来玩排序游戏(或短区域)并选择非常小的价格......这些低价异常值基本上不是真的......
    • 在这种情况下,您可能正在考虑对价格进行排序,然后使用一些标准来限制值的范围。我最初避免朝这个方向发展,因为标准可能相当随意。当您考虑打折的,有时是大幅打折的价格时,尤其如此。我会更改我的答案以反映这一点。
    猜你喜欢
    • 2011-06-07
    • 2021-10-24
    • 2018-01-18
    • 1970-01-01
    • 2021-05-03
    • 2019-12-25
    • 2015-12-24
    • 2011-04-16
    • 2011-06-14
    相关资源
    最近更新 更多