我正在尝试确定排名的波动性。
更具体地说,秩可以在 X 个数据点上从 1 到 16(数据点的数量变化,最大为 30)。
我希望能够测量这种波动性,然后以某种方式将其映射到一个百分比。
我不是数学极客,所以请不要对我吐出复杂的公式:)
我只想以最简单的方式对此进行编码。
我正在尝试确定排名的波动性。
更具体地说,秩可以在 X 个数据点上从 1 到 16(数据点的数量变化,最大为 30)。
我希望能够测量这种波动性,然后以某种方式将其映射到一个百分比。
我不是数学极客,所以请不要对我吐出复杂的公式:)
我只想以最简单的方式对此进行编码。
我认为最简单的第一步是 X 数据点上的标准偏差。
我认为标准偏差是您正在寻找的。有一些公式需要处理,但计算起来并不难。
鉴于您有一个小样本集(您说最多 30 个数据点)并且标准偏差很容易受到异常值的影响,我建议使用四分位距作为波动率的度量。这是一个微不足道的计算,可以对分布在您的小样本集中的数据进行有意义的表示。
如果您想要一些非常简单的东西,您可以将连续排名之间的绝对差异的平均值作为波动率。这具有递归的额外好处。使用它进行初始化:
double sum=0;
for (int i=1; i<N; i++)
{
sum += abs(ranks[i]-ranks[i-1]);
}
double volatility = sum/N;
然后,如果在时间 N+1 有新排名可用,则为了更新波动率,您引入参数 K,其中 K 确定波动率测量适应波动率变化的速度。较高的 K 意味着较慢的适应,因此 K 可以看作是“衰减时间”或类似的:
double K=14 //higher = slower change in volatility over time.
double newvolatility;
newvolatility = (oldvolatility * (K-1) + abs(rank[N+1] - rank[N]))/K;
这也称为移动平均线(在这种情况下是等级的绝对差异)。