Php 从价格数据集中去除异常值的算法

Php 从价格数据集中去除异常值的算法,php,algorithm,sorting,statistics,Php,Algorithm,Sorting,Statistics,这是一个很好的问题,我喜欢仔细思考 假设您运行一个“Widget Rental”网站,并且在您的应用程序上,您希望允许潜在购买者根据价格对Widget进行排序。(从低到高或从高到低) 根据一年中的时间,每个小部件可以有不同的价格。一些小部件会有几十种不同的价格,这取决于季节,因为你会得到“高”季节和“低”季节 然而,“widget”的卖家特别淘气,他们意识到,如果他们将自己的widget设置为一年中某一天非常昂贵,并且一年中某一天非常便宜,那么他们很容易出现在低和高排序范围内 目前,为了计算小部

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

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

根据一年中的时间,每个小部件可以有不同的价格。一些小部件会有几十种不同的价格,这取决于季节,因为你会得到“高”季节和“低”季节

然而,“widget”的卖家特别淘气,他们意识到,如果他们将自己的widget设置为一年中某一天非常昂贵,并且一年中某一天非常便宜,那么他们很容易出现在低和高排序范围内

目前,为了计算小部件的“最低价格”,我采用了一种非常简单的解决方案,即从数据集中获取
最低(N)

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

看看这个图表。。。有价值观

X轴-时间(每个有效间隔为一天)

Y轴-价格

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

然而,看看第二张图表。。。它包含一天的关税,只有20欧元

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

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


PHP奖励积分,如果你告诉我已经存在的任何东西的方向。(但我很乐意自己用PHP编写代码)。

一个问题是,有多个定义来定义一个实际是什么。然而,为此目的,一个简单的解决方案似乎就足够了

您可以通过将值的范围限制在平均价格的+-某个百分比或+-某个标准偏差(可能是一个或两个,但可以)来删除异常值。很可能您希望将两者结合使用,好像价格不是很高,那么折扣可能被视为异常值,这可能合适,也可能不合适。无论如何,你可能需要做一些实验来确定它的灵敏度。很有可能你会想要设置它,所以离群值必须至少偏离平均值一个百分比,即使它只有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的值进行了一些实验之后,您可能还会发现,在查找兴趣点时,epsilon的定义非常有用。

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

您可以通过将值的范围限制在平均价格的+-某个百分比或+-某个标准偏差(可能是一个或两个,但可以)来删除异常值。很可能您希望将两者结合使用,好像价格不是很高,那么折扣可能被视为异常值,这可能合适,也可能不合适。无论如何,你可能需要做一些实验来确定它的灵敏度。很有可能你会想要设置它,所以离群值必须至少偏离平均值一个百分比,即使它只有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的值进行了一点实验之后,您可能还会发现,在查找兴趣点时,该方法非常有用。

是的。关于“from[price]”应该是最低的价格,您基本上是正确的,但是实际上,当您查看一些Widget租赁价格时,您可以看到一些用户故意尝试通过恶意选择单个日期(或短区域)和选择非常小的价格来玩排序游戏。。。这些低价格异常值基本上不是真实的……在这种情况下,您可能正在考虑对价格进行排序,然后使用一些标准来限制值的范围。我最初避免朝这个方向走,因为标准可能相当武断。当你考虑打折,有时打折,价格尤其如此。我会改变我的答案来反映这一点。是的。你大部分是科瑞