Ментально Борьба с отображением переменных входов для этой функции вероятности

63
6

Я пытаюсь создать функцию, которая выведет вероятность, показывающую, насколько вероятно, что продукт будет бестселлером на основе 3 потенциальных ресурсов:

nbids, avgask, vol

бестселлеры также представлены переменной "огромный" == 1

Это делается путем оценки вероятностей набора данных из 37 наблюдений. Например, он оценил бы вероятность того, что продукт является бестселлером, поскольку его avgask составляет более 600, используя эту формулу:

(# товаров, которые являются лучшими продавцами и имеют avgask> = 600)/(# из продуктов с avgask> = 600

Достаточно с математикой, я уверен в своем подходе и порогах, которые я разработал. Меня интересуют мои способности кодирования. В принципе, поскольку в моих данных есть только 6 самых продаваемых продуктов, не все комбинации порогов представлены самыми продаваемыми продуктами. Таким образом, в зависимости от входных значений всех трех переменных я мог бы получить вероятность 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, low medium high) и nbids (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 функцию и нуждался в помощи от опытных программистов. Я буду очень благодарен за любую помощь, и я уверен, что это решение станет серьезным ударом пальцы на моем лице.

спросил(а) 2018-07-12T01:29:00+03:00 1 год, 9 месяцев назад
0
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема