与负目标的百分比



我有以下一组目标和实际值:

实际:"-20"/目标:"-10"

实际"50"/目标:"-5"

实际:"-10"/目标:"30"

目标值是3类中每一类的预期值,实际值是今年迄今为止的实际值。

  • 关于第一类;预计年的销售额将比上一季度下降10倍。在本期结束时,结果是-20。答案可能是-100%或-200%。这些百分比都没有意义,因为完成的百分比不应该是负数。另一个使百分比不合理的原因是,在这种情况下,我看不出100%和-100%之间的区别。

  • 关于第二类,预计本期销售额将减少5笔,但事实证明,本期实际销售额为50笔。如果我们同意每5个数字都是100%,那么答案应该是+1100%。

  • 编辑:与上面一样,第三类的答案应该是-133%

我想看看目标实现了多少。如果实际=目标,那么答案是100%,尽管如果实际和目标都是负数,这就没有意义了。

如果我使用(实际/目标)*100负数总是错误的。我需要一个通用公式来计算正确答案。我不介意这个公式是否有很多条件定义。我该怎么做?

当涉及负金额时,您应该始终知道您要查找的是什么。

示例1:

如果您使用绝对值,您应该同意目标=10实际=-5是并且应该是50%。然而,"纯粹"的数学方法是-50%

对此的逻辑解释是,正如逻辑预测的那样,实际=0是0%,-5甚至更糟!由于不仅没有取得任何进展,反而出现了倒退,因此-50%是一个可以理解的结果。

示例2:

当两者都为负时,对于目标=-10实际=-20,由于锚定点为0时,"纯"数学结果为200%-并且是正确的(当然取决于您的观点),因为您想要减少10,但得到了减少20。

注意:如果你想以不同的方式定义你想要的输出,那么我们将尝试提出一种"自定义"百分比计算方法

编辑:

你可以在你的情况下尝试什么(尽管我必须说我不同意这种方法):

  • 如果目标>0而实际>0:(通常):

    (actual/target)*100

  • 如果目标<0和实际<0:(通常为负值):

    • 如果(目标>实际)-实际情况比预期更糟:

      -(actual/target)*100

    • 如果(目标<实际)-实际比预期好:

      (actual/target)*100

  • 如果目标>0并且实际<0:

    ((actual-target)/target)*100

    对应目标=50,实际=-100->结果=-300%

  • 如果目标<0和实际>0

    (abs(target)+actual)/abs(target))*100

    因此,对于目标=-50,但实际=100->结果=300%

我相信这涵盖了您的选择并符合您的需求。

编辑:

从我的角度来看,解决问题的一个好方法是查看绝对值(而不是微分值

假设你在A月的销售额是200,而你希望在A+1月增长10%->将你的目标设定为220,然后将实际值与之进行比较,你也可以将其与A月的实际值和总体值进行比较。一份报告将使用绝对值进行比较,这些值总是正的,并且可以更清楚地理解。

现在这个:

目标=-10%,实际+5%和上月基本值100

简单地说就是:

target=90实际=105=>总体性能为105/90,或(105/90)比预期高出1。

如果要将实际"-50"/目标"50"视为100%完成,则应在公式中使用绝对值函数。

| ((actual / target) * 100) |

如何在代码中使用它取决于语言。在JavaScript中,您的公式如下:

Math.abs((actual / target) * 100)

如果这不是你想要的评分方式,请提供一个例子,说明当targetactual为负时的评分应该是多少。

根据您的编辑以及您想要的更多细节,下面是一些实现该公式的JavaScript:

function percent_difference(target, actual) {
    if (target === 0 || actual === 0) {
        if (actual > target) {
            return 100;
        } else if (actual < target) {
            return -100;
        } else {
            return 0;
        }
    }
    var relative_to = Math.min(Math.abs(actual), Math.abs(target));
    var distance_from_target_to_actual = actual - target;
    var fraction_difference = distance_from_target_to_actual / relative_to;
    return 100 * fraction_difference;
}

我试图避免不必要的if语句,以保持代码的简单性。

该功能通过以下测试:

function test_percent_difference() {
    console.log("percent_difference(-10, -20)", percent_difference(-10, -20), "should be", -100);
    console.log("percent_difference(-5, 50)", percent_difference(-5, 50), "should be", 1100);
    console.log("percent_difference(30, -10)", percent_difference(30, -10), "should be", -400);
    console.log("percent_difference(15, 0)", percent_difference(15, 0), "should be", 100);
    console.log("percent_difference(0, 0)", percent_difference(0, 0), "should be", 0);
}

您可以在这个jsFiddle中在浏览器中自己运行它。

这是R的解决方案。假设您的数据是带有"目标"one_answers"实际"列的样本:

sample<-structure(list(Actual = c(-20L, 50L, -10L), Target = c(-10L, 
-5L, 30L)), .Names = c("Actual", "Target"), row.names = c(NA, 
-3L), class = "data.frame")
sample<-
  Actual Target
1    -20    -10
2     50     -5
3    -10     30
#first I compute the percentage deviation as ((Actual-Target)/Actual)*100
#then I will use following two conditions:
# if Actual<0 and Target>0 multiply by -1
#if Actual<0 and Target<0  and if  absolute(Actual)>absolute(Target) multiply by -1 else leave as original percent
sample$diff<-with(sample,((Actual-Target)/Actual)*100)
> sample
  Actual Target diff
1    -20    -10   50
2     50     -5  110
3    -10     30  400
sample$percent<-with(sample,ifelse((Actual<0 & Target>0),diff*(-1),ifelse((Actual<0 & Target<0),ifelse((abs(Actual)>abs(Target)),diff*-1,diff),diff)))
> sample
  Actual Target diff percent
1    -20    -10   50     -50
2     50     -5  110     110
3    -10     30  400    -400
#delete diff column 
sample$diff<-NULL 
#your final output
> sample
  Actual Target percent
1    -20    -10     -50
2     50     -5     110
3    -10     30    -400

更新:

匹配您的答案:

sample$diff<-with(sample,((Actual-Target)/Target)*100)
sample$percent<-with(sample,ifelse((Actual<0 & Target>0),diff,ifelse((Actual<0 & Target<0),ifelse((abs(Actual)>abs(Target)),diff*(-1),diff),diff*(-1))))
> sample
  Actual Target       diff   percent
1    -20    -10   100.0000 -100.0000
2     50     -5 -1100.0000 1100.0000
3    -10     30  -133.3333 -133.3333

最新更新