如何编写一个数学公式,将连续变量非线性缩放到 0-100 跨度,其中 f(x)→100 其中 x→Inf

How do I write a mathematic formula that non-linearly scales a continuous variable to a 0-100 span where f(x)→100 where x→Inf

我正在建立一个用户质量指数,定义为代表用户的(通常)相关连续变量的总和-activity。该指数经过良好校准,符合我的分析目的,但很难与我的同事沟通,特别是因为异常活动导致极其顽固的用户在 activity 指数上得分非常高。

对于 97% 的用户,该指数在 0 到 100 之间接近正态分布,右尾有 3% 的超活跃用户的指数 > 100。指数值超过 200 的应该极为罕见但理论上是可行的。

我希望将尾部缩放回 0-100 跨度,但不是线性的,因为我希望 3% 尾部表示为 0-100 顶部范围内的小差异指数。我正在寻找一个非线性公式来缩放我的索引,如下所示:

因此未缩放索引的下层仍然接近缩放索引,但高索引值出现分歧,但随着我的索引趋向无穷大,缩放值永远不会达到 100,因此 x=0=f (x) 但当 x = 140 时,f(x) ≈ 99 或类似的东西

我将在 R、Python 和 BigQuery 中实现缩放。

有很多方法可以做到这一点:采用 any function with the right shape 并根据您的需要进行调整。

具有正确形状的一族函数是

f(x) = x/pow(1 + pow(x/100, n), 1/n)

您可以改变参数 n 来调整形状:增加 n 会使 f(100) 更接近 100。使用 n=5 您会得到看起来非常接近您的绘图的东西

f(x) = x/pow(1 + pow(x/100, 5), 0.2)

另一种选择是采用双曲正切函数 tanh,您当然可以用类似的方式对其进行调整:

f(x) = 100*pow(tanh(pow(x/100, n)), 1/n)

这是 n=2 的曲线: