我训练了一个模型来预测某个变量。当我现在使用此模型预测所述值并将此预测与实际值进行比较时,我得到以下两个分布。
相应的R数据框如下所示:
x_var | kind
3.532 | actual
4.676 | actual
...
3.12 | predicted
6.78 | predicted
这两个分布显然有不同的均值,分位数等。我现在要做的是将这两个分布合二为一(特别是它们非常相似),但不就像在以下thread。
相反,我想绘制一个密度函数,显示实际值和预测值之间的差异,并让我说例如。 50%的预测值在实际值的-X%和+ Y%之内。
我已经尝试绘制predicted-actual
之间的差异以及与相应组中的平均值相比的差异。但是,这两种方法都没有产生我想要的结果。利用绘制的分布,能够进行上述陈述尤其重要,即50%的预测在实际值的-X%和+ Y%之内。如何实现这一目标?
答案 0 :(得分:0)
让我们将这两个分布视为df_actual,df_predicted,然后计算
# dataframe with difference between two distributions
df_diff <- data.frame(x = df_predicted$x - df_actual$x, y = df_predicted$y - df_actual$y)
然后通过以下方式找到相对%差异:
x_diff = mean(( df_diff$x - df_actual$x) / df_actual $x) * 100
y_diff = mean(( df_diff$y - df_actual$y) / df_actual $y) * 100
这将为您提供%预测,无论是+/-在x还是y 。这是我的意见,并且也跟随this thread显示和测量两条分布曲线之间的区域。
我希望这会有所帮助。
答案 1 :(得分:0)
ParthChaudhary是对的 - 你想要分析差异的分布,而不是减去分布。但要注意减去相应对中的值,否则单独actual - predicted
(和actual
)的方差会使predicted
差异蒙上阴影。即,如果你有类似的东西:
x y type
0 10.9 actual
1 15.7 actual
2 25.3 actual
...
0 10 predicted
1 17 predicted
2 23 predicted
...
你会merge(df[df$type=="actual",], df[df$type=="predicted",], by="x")
,然后计算并绘制y.x-y.y
。
答案 2 :(得分:0)
要更好地量化预测分布和实际分布之间的差异是否显着,可以考虑使用R中的Kolmogorov-Smirnov检验,该检验可通过函数ks.test