我正在尝试构建一个函数,该函数将基于3种潜在输入来输出表示产品成为畅销书可能性的概率:
nbids,avgask,vol
畅销书也用变量'huge'== 1
表示这是通过评估37个观测值的数据集的概率得出的。例如,通过使用以下公式,它将评估某产品的平均销量超过600时成为畅销产品的可能性:
(最畅销和具有avgask的产品数量> = 600)/ (具有avgask> = 600
的产品数量
现在已经有了足够的数学知识,我对自己设计的方法和阈值充满信心。我关心的是我的编码能力。基本上,由于我的数据中只有6种最畅销的产品,因此并非所有阈值组合都由最畅销的产品代表。因此,根据所有3个变量的输入值,我最终可能会得出0%的机率,原因是数据集中的最畅销书都不代表我输入的属性。
要解决此问题,我将允许用户仅使用2,或者甚至可能输入三个可能变量中的一个,以便可以使用来自数据的更多表示形式。问题是,我无法在头脑上全神贯注地允许函数使用可变数量的输入(...)并根据它们设计变量表。结果,我放弃了基于潜在输入组合的7种不同功能。以下是用户仅输入nbids和avgask的函数示例:
prob_nbids_avgask <- function (nbids, avgask) {
# Create Constraints
c_h = df$huge == 1
c_nb = ((df$n_bids >= 600) == T)
c_avg_ask = (df$avg_ask >= 1250)
# Create Inputs Table
input = tibble(
n_bids = nbids,
avg_ask = avgask
)
# Conditions Table
conditions = tibble(
c_nb = (input[[1]][[1]] >= 600),
c_avg_ask = (input[[2]][[1]] >= 1250)
)
# Probability Calculation
# Probability Function Components
numerator = nrow(df[c_h &
c_nb == conditions[[1]] &
c_avg_ask == conditions[[2]],])
denominator = nrow(df[
c_nb == conditions[[1]] &
c_avg_ask == conditions[[2]],])
# Calculate Probability
if (numerator != 0) {
numerator / denominator
} else {
print('No Examples Exist, Use Less Inputs')
}
}
我不能满足于此,但是由于缺乏编码经验,我在精神上无法实现我想要的目标。我的想法是为给定的输入使用类似vlookup的东西。输入阈值表如下:
c_vl = (df$vol < 375000)
c_vm = (df$vol >= 375000 & df$vol < 750000)
c_vh = (df$vol >= 750000)
c_nb = ((df$n_bids >= 600) == T)
c_avg_ask = (df$avg_ask >= 1250)
这些规则应该很容易解释。如果用户仅提供了vol(归因于c_vl,c_vm,c_vh,低中高)和nbid(c_nb),则我的函数将查找这4个参数,并构建TRUE / FALSE表,以用于构建概率的分子和分母:
# Probability Function Components
numerator = nrow(df[c_h &
c_vl == conditions[[1]] &
c_vm == conditions[[2]] &
c_vh == conditions[[3]] &
c_nb == conditions[[4]] &
c_avg_ask == conditions[[5]],])
denominator = nrow(df[c_vl == conditions[[1]] &
c_vm == conditions[[2]] &
c_vh == conditions[[3]] &
c_nb == conditions[[4]] &
c_avg_ask == conditions[[5]],])
我希望这足以说明我的问题。我真的想提高我的编码能力,不能忍受制作7个重复的函数。我已经用尽所有可能的方法将其汇总为1个函数,并且需要经验丰富的程序员的帮助。我将非常感谢您的帮助,而且我敢肯定,解决方案将为我的掌心打个巴掌。