调整价格后如何重新分配权重以维持预期值(EX)不变
权重调整解决方案
核心思路
要让调整价格后的预期值(EX)与初始值一致,需遵循两个约束:
- 所有权重之和为1
- 价格与对应权重的乘积之和等于初始EX
另外参考迭代数据的规律,部分权重保持固定,且特定权重间的比例不变。
步骤1:计算初始EX值
初始EX是原始价格与权重的乘积总和,精确计算如下:
double[] originalPrice = {5, 8, 18, 58, 80, 49.399167162403300}; double[] originalWeight = {0.34146341463414637, 0.3902439024390244, 0.14634146341463414, 0.024390243902439025, 0.024390243902439025, 0.07317073170731707}; double initialEX = 0.0; for (int i = 0; i < originalPrice.length; i++) { initialEX += originalPrice[i] * originalWeight[i]; } // 计算结果:initialEX ≈ 14.444244897959183
步骤2:确定固定权重
观察迭代后的数据newWeight1与原始权重,发现第2、4、5位(索引1、3、4)的权重完全未变,因此这三个权重固定:
- x2 = 0.3902439024390244
- x4 = 0.024390243902439025
- x5 = 0.024390243902439025
步骤3:简化约束方程
约束1:权重总和为1
代入固定权重,剩余权重需满足:
x1 + x3 + x6 = 1 - (0.3902439024390244 + 0.024390243902439025 * 2) = 0.5609756097560975
约束2:EX等于初始值
先计算固定权重对应新价格的贡献:
8*0.3902439024390244 + 58*0.024390243902439025 + 82*0.024390243902439025 ≈ 6.536585365853658
剩余权重与对应价格的乘积需满足:
5x1 + 20x3 + 49.3991671624033x6 = 14.444244897959183 - 6.536585365853658 ≈ 7.907659532105525
步骤4:利用权重比例关系求解
参考原始权重与newWeight1的规律,x1与x3的比例始终保持7:3(即x1 = (7/3)x3),将其代入上述两个方程:
- 由权重总和方程得:
x6 = 0.5609756097560975 - (10/3)x3 - 将x1、x6代入EX方程,计算得:
- x3 ≈ 0.1489265536723163
- x1 ≈ 0.34749599123130803
- x6 ≈ 0.0645537641817098
最终新权重2
double[] newWeight2 = {0.34749599123130803, 0.3902439024390244, 0.1489265536723163, 0.024390243902439025, 0.024390243902439025, 0.0645537641817098};
原缩放算法无效的原因
原算法将所有权重乘以统一缩放因子,会改变本应固定的权重,且未遵循特定权重间的比例约束,不符合迭代数据的调整逻辑,因此无法得到正确结果。
内容的提问来源于stack exchange,提问作者Duy Pham Nguyen
相关产品推荐
相关产品推荐

