我试图用正数和负数来计算excel中的百分比增长.
This Year's value: 2434
Last Year's value: -2
Run Code Online (Sandbox Code Playgroud)
我正在使用的公式是:
(This_Year - Last_Year) / Last_Year
=(2434 - -2) / -2
Run Code Online (Sandbox Code Playgroud)
问题是我得到了否定的结果.可以计算一个近似的增长数,如果是,如何计算?
Eri*_*ski 11
您可以尝试向上移动数字空间,以便它们都变为正数.
要计算任何两个正数或负数之间的增益,你将不得不一直保持在增长幅度增长的世界中,而另一只脚则保持在量增长的世界中.您可以倾斜到一侧或另一侧,具体取决于您希望结果增益的显示方式,并且每种选择都会产生影响.
战略
创建一个相对于旧数字和新数字生成正数的移位方程.
将自定义班次添加到旧号码和新号码以获取new_shifted和old_shifted.
采用(new_shifted - old_shifted)/ old_shifted)计算来获得收益.
例如:
old -> new
-50 -> 30 //Calculate a shift like (2*(50 + 30)) = 160
shifted_old -> shifted_new
110 -> 190
= (new-old)/old
= (190-110)/110 = 72.73%
Run Code Online (Sandbox Code Playgroud)
如何选择换档功能
如果您的移位功能将数字向上移动太远,例如向每个数字添加10000,则总是会获得微小的增长/下降.但如果这种转变只是大到足以使两个数字都进入正值区域,那么边缘情况下的增长/下降将会出现大幅波动.您需要拨入shift功能,以便对您的特定应用程序有所帮助.对于这个问题没有完全正确的解决方案,你必须对甜蜜感到苦涩.
将此添加到您的Excel中,以查看数字和收益如何移动:
shift function
old new abs_old abs_new 2*abs(old)+abs(new) shiftedold shiftednew gain
-50 30 50 30 160 110 190 72.73%
-50 40 50 40 180 130 220 69.23%
10 20 10 20 60 70 80 14.29%
10 30 10 30 80 90 110 22.22%
1 10 1 10 22 23 32 39.13%
1 20 1 20 42 43 62 44.19%
-10 10 10 10 40 30 50 66.67%
-10 20 10 20 60 50 80 60.00%
1 100 1 100 202 203 302 48.77%
1 1000 1 1000 2002 2003 3002 49.88%
Run Code Online (Sandbox Code Playgroud)
增益百分比受数字大小的影响.上面的数字是一个不好的例子,是由原始移位函数产生的.
你必须问自己哪个生物最有成效:
Evaluate the growth of critters A, B, C, and D:
A used to consume 0.01 units of energy and now consumes 10 units.
B used to consume 500 units and now consumes 700 units.
C used to consume -50 units (Producing units!) and now consumes 30 units.
D used to consume -0.01 units (Producing) and now consumes -30 units (producing).
Run Code Online (Sandbox Code Playgroud)
在某些方面,可以提出争论,即每个生物都是以自己的方式成为最大的种植者.有人说B是最好的种植者,其他人会说D是更大的收益.你必须自己决定哪个更好.
问题变成了,我们能否将这种直观的感觉映射为一种连续的功能,这种功能告诉我们人类倾向于将其视为"令人敬畏的增长"与"平庸的增长".
成长是一件神秘的事
然后你必须考虑到,小动物B的生存时间可能要比小动物D困难得多.小动物D在将来可能比其他人有更多的前景.它有一个优势!你如何衡量的opportunity,difficulty,velocity和acceleration成长的?为了能够预测未来,您需要直观地了解"主要本垒打"和"生产力的跛足".
函数的一阶和二阶导数将为您提供"增长速度"和"增长加速".了解微积分中的那些,它们非常重要.
哪个增长更多?一个正在逐渐加速其增长的生物,或者正在减速其增长的生物?高速和低速以及高/低变化率如何?那些耗尽增长机会的概念怎么样?成本效益分析和能力/无法利用机会.对抗系统(你的成功来自另一个人的失败)和零和游戏怎么样?
有指数增长,线性增长.而且不可持续的增长.成本效益分析和曲线拟合数据.世界比我们想象的要大得多.为数据绘制完美的线条并不能告诉您由于黑天鹅效应而接下来会出现哪个数据点.我建议所有人都听这个关于成长的讲座,科罗拉多大学博尔德分校就成长,它是什么,它不是什么以及人类如何完全误解它进行了精彩的讨论. http://www.youtube.com/watch?v=u5iFESMAU58
根据加热水的温度设置一条线,一旦你认为自己适合曲线,就会出现黑天鹅,水沸腾.这种效果在整个宇宙中都会发生,而你的原始函数(new-old)/ old对你没有帮助.
以下是Java代码,它在一个适合我需要的整洁包中完成上述大多数概念:
小动物的成长 - (一个生物可以是"无线电波","甲虫","石油温度","股票期权",任何东西).
public double evaluate_critter_growth_return_a_gain_percentage(
double old_value, double new_value) throws Exception{
double abs_old = Math.abs(old_value);
double abs_new = Math.abs(new_value);
//This is your shift function, fool around with it and see how
//It changes. Have a full battery of unit tests though before you fiddle.
double biggest_absolute_value = (Math.max(abs_old, abs_new)+1)*2;
if (new_value <= 0 || old_value <= 0){
new_value = new_value + (biggest_absolute_value+1);
old_value = old_value + (biggest_absolute_value+1);
}
if (old_value == 0 || new_value == 0){
old_value+=1;
new_value+=1;
}
if (old_value <= 0)
throw new Exception("This should never happen.");
if (new_value <= 0)
throw new Exception("This should never happen.");
return (new_value - old_value) / old_value;
}
Run Code Online (Sandbox Code Playgroud)
结果
它的行为有点像人类对生物的成长有本能的感觉.当我们的银行账户从-9000变为-3000时,我们说这是比账户从1000到2000更好的增长.
1->2 (1.0) should be bigger than 1->1 (0.0)
1->2 (1.0) should be smaller than 1->4 (3.0)
0->1 (0.2) should be smaller than 1->3 (2.0)
-5-> -3 (0.25) should be smaller than -5->-1 (0.5)
-5->1 (0.75) should be smaller than -5->5 (1.25)
100->200 (1.0) should be the same as 10->20 (1.0)
-10->1 (0.84) should be smaller than -20->1 (0.91)
-10->10 (1.53) should be smaller than -20->20 (1.73)
-200->200 should not be in outer space (say more than 500%):(1.97)
handle edge case 1-> -4: (-0.41)
1-> -4: (-0.42) should be bigger than 1-> -9:(-0.45)
Run Code Online (Sandbox Code Playgroud)
如果我的班次功能对您的需求有意义,请使用它.一定要对此进行战斗测试,如果你撞毁了航天飞机,那完全不是我的错.这种方法是一种启发式方法.
最简单的解决方案如下:
=(NEW/OLD-1)*SIGN(OLD)
Run Code Online (Sandbox Code Playgroud)
如果值为负,则该SIGN()函数将导致值为正。因此,如果前一个值为负,则乘以该值将有条件地反转结果。-11
小智 5
当base小于0且当前数字大于0时,百分比增长不是一个有意义的度量:
1年1%变化(绝对基数)
-1 10%1100
-10 10%200
上述计算揭示了该指标的弱点 - 如果基准年为负且当前为正,则结果为N/A.
您应该得到负结果 - 您正在除以负数。如果去年是负数,那么就是负增长。您可以通过除以来避免这种异常情况Abs(Last Year)
| 归档时间: |
|
| 查看次数: |
114785 次 |
| 最近记录: |