一组指数数据分级的统计方法



我有一个PHP应用程序,允许用户指定国家列表和产品列表。它告诉他们哪个零售商最匹配。它使用类似于下面的公式:

(

(匹配的国家数/选择的国家数)*(国家匹配的重要性)

+

(匹配产品数量/选择产品数量)*(产品匹配重要性)

)*

(国家和解决方案匹配的重要性*(匹配项/可能匹配项的数量))

其中[国家匹配的重要性]为30%,[产品匹配的重要性]为10%,[国家和解决方案匹配的重要性]为2.5

所以简化为:(国家匹配+产品匹配)*乘数。

把它想象成他们在那个国家经营吗?他们卖那种产品吗?他们在那个国家卖那种产品吗?)

这为我们提供了每个零售商的匹配百分比,我用它来对搜索结果进行排名。

我的数据表看起来像这样:

<>之前Id | country | retailer_id | product_id========================================1 | fr | 1 | 12 | fr | 2 | 13 | fr | 3 | 14 | fr | 4 | 15 | fr | 5 | 1之前

到目前为止,它一直是相当简单的,因为它一直是一个二元决策。零售商要么在那个国家经营,要么卖那个产品,要么不在那个国家。

然而,我现在被要求给系统增加一些复杂性。我拿到了收入数据,显示了每个零售商在每个国家的销售额。数据表现在看起来像这样:

<>之前Id | country | retailer_id | product_id |收入===================================================1 | fr | 1 | 1 | 10002 | fr | 2 | 1 | 50003 | fr | 3 | 1 | 100004 | fr | 4 | 1 | 4000005 | fr | 5 | 1 | 900000之前

我的问题是我不希望零售商3的销售量是零售商1的十倍,从而使其作为搜索结果的质量提高十倍。同样,零售商5不应该比零售商1好9000倍。我研究了均值,众数和中位数。我试过用离均值的偏差。我被如何使大的跳跃不那么重要难住了。

我对统计学领域的无知正在显露出来。

帮助!

考虑使用log10()函数。这减少了结果的直接缩放,就像你描述的那样。如果你将收益log10(),那么拥有1000倍收益的人只会获得3倍的分数。

"抑制"价值大幅增长的经典方法是对数。如果你看一下维基百科上的文章,你会发现函数值最初增长得相当快,但后来就慢了很多。正如在另一个答案中提到的,以10为基数的对数意味着每次将输入值乘以10时,输出值增加 1 。同样,以2为底的对数每次将输入值乘以2时,将增长1。

如果你想削弱对数的影响,你可以考虑将它与线性函数结合起来,例如f(x) = log2 x + 0.0001 x…但是这个乘数需要非常仔细地调整,这样线性部分才不会很快掩盖对数部分。

提出这种加权本质上是棘手的,特别是当你不知道函数应该是什么样子的时候。然而,有一些程序可以做曲线拟合,也就是说,你可以给它一对函数输入/输出和一个模板函数,程序将为模板函数找到合适的参数来近似所需的曲线。理论上,你可以画出曲线,然后用程序求出好的公式。这也有点棘手,但我想你可能会感兴趣。其中一个这样的程序是开源工具QtiPlot。

最新更新