Как получить оптимальные значения отсечки для двух переменных с помощью линейного программирования - PullRequest
0 голосов
/ 27 января 2020

Я пытаюсь использовать симплексный алгоритм для определения оптимальных значений двух переменных, чтобы охватить наиболее привлекательных людей в маркетинговой кампании. Переменными являются индивидуальные эффекты лечения (как результат прогностической модели) и расходы на человека. Теперь я хочу определить оптимальные уровни этих переменных, чтобы максимизировать расходы, при этом гарантируя, что мы нацелены только на тех людей, у которых лечение имеет высокий положительный эффект. Кроме того, у меня есть ограничение на охват только 20% людей из целых данных. Я считаю, что линейное программирование помогает мне достичь этого.

Чтобы получить значения для целевой функции, я просто использую средние значения для каждой переменной и следую цели максимизации. Однако я застрял с функцией ограничения, так как не знаю, как ее настроить, учитывая мои требования. Очевидно, Treatm_score + расходы <[20% наблюдений] работает концептуально, но с точки зрения программирования, я смешиваю значения с количествами, я думаю. Кажется, мне нужно по крайней мере одно ограничение, чтобы использовать линейное программирование для получения значений отсечки (если бы я мог получить значения отсечки без необходимости ограничения, я также был бы счастлив). Я ищу заявление типа «Как продавец продукта, я максимально увеличиваю свои ожидаемые продажи до z, если нацеливаюсь на людей с индивидуальным эффектом лечения по крайней мере x и расходами как минимум y». </p>

Мои вопросы: 1) Можете ли вы помочь мне определить значения отсечки? 2) Может быть, есть лучший способ достичь цели?

Давайте использовать следующий код для генерации данных

treatm_score <- rnorm(1000, 0.1, 0.02)
hist(treatm_score)

isZero = rbinom(n=1000, size=1, prob=0.95)
expenditures = ifelse(isZero==1, 0, rlnorm(sum(isZero==0), meanlog=1, sdlog=2))
hist(expenditures); table(expenditures)
length(expenditures[expenditures>0]) / length(expenditures) *100 # 5% of people with expenditures

mean_treatm_score <- mean(treatm_score)
mean_expenditures <- mean(expenditures)

Мы видим, что распределения переменных очень разные и только некоторые люди фактически тратят деньги в прошлом (около 5% от всего, что реально c).

Если я следую https://en.proft.me/2015/09/23/classical-simplex-method-and-calc-r/, мне нужно загрузить пакет linprog и попробовать следующее (вот где я терплю неудачу):

install.packages("linprog"); library("linprog")

c = c(mean(treatm_score), mean(expenditures)) # objective function
max_quant = 0.2*length(expenditures) # constraint: only 20% of all observations
b = c(max_quant)
res = solveLP(c, b, maximum=TRUE) # does not work

Ваша помощь очень ценится!

...