将 pdf 转换为条件 pdf,使得均值增加而标准差下降

数据挖掘 机器学习 可能性 方差 判别分析
2022-03-14 08:56:45

让成功指标(对于我正在处理的某些业务用例)是一个连续的随机变量 S。在 S 上定义的 pdf 的平均值表示成功的机会。越高意味着成功的机会越大。让 S 上定义的 pdf 的 std dev 表示风险。降低标准偏差会降低失败的风险。

我有数据,我们称它们为 X,它会影响 S。让 X 也被建模为一堆随机变量。

P(S|X) 基于 X 变化。问题陈述是我想选择 Xs,使得 P(S|X) 的均值高于 P(S),标准偏差低于 P(S)。

为了说明我的观点,我采用了一维的 X。X(水平)和 Y(垂直)之间的散点图:

在此处输入图像描述

您可以看到 P(S|X) 针对不同的 X 值发生变化,如下图所示: 在此处输入图像描述

对于介于 4500 和 10225 之间的 X,S 的平均值为 3.889,标准偏差为 0.041,而当 X 没有约束时,平均值为 3.7 和标准偏差为 0.112。

我感兴趣的是给定 S 和一堆 X... 选择 Xs 的范围,使得 P(S|X) 的结果分布具有更高的均值和更低的标准偏差...请帮助我找到一个可以帮助的标准技术我做到了这一点。

此外,我不想以 X 为条件,使得样本数量太少而无法概括。我想避免诸如样本数量为 1 的树最左侧的情况。

1个回答

只需应用优化来搜索满足您正在寻找的条件的 X 值。这是一个简单的演示:

set.seed(123)
mu_x_true = 1e4
mu_y_true = 3.75
n = 1e2

x <- rpois(n, mu_x_true)
y <- rnorm(n, sqrt(mu_y_true))^2

plot(x, y)

# conditions:
# E[Y|X] > E[Y]
# std(Y|x) < std(Y)

mu_y_emp = mean(y)
sd_y_emp = sd(y)

objective <- function(par, alpha=0.5){ 
    if (par[1]>par[2]) par = rev(par)
    ix <- which((par[1] < x) & (x < par[2]))
    k <- length(ix)
    if (k==0) return(1e12)
    mu_yx <- mean(y[ix])
    sd_yx <- sd(y[ix])

    alpha*(mu_y_emp - mu_yx) + (1-alpha)*(sd_yx - sd_y_emp)
}

init <- mean(x) + c(-sd(x), sd(x))
test <- optim(objective, par=init)

ix <- which((par[1] < x) & (x < par[2]))

mean(y[ix]) > mean(y) 
# TRUE

sd(y) > sd(y[ix])
# TRUE