在R语言中求解ROI最大化对应的spend与revenue精确值
精确求解ROI最大值的方法
一、解析解推导
已知收益函数和ROI定义,先将ROI表达式简化:
ROI(s) = calculate_abc_revenue(a0, b0, c0, s) / s = a0 / (s * (1 + b0*s^c0))
由于c0是负数,令c1 = -c0(此时c1>0),则s^c0 = 1/s^c1,代入后ROI可改写为:
ROI(s) = a0 / (s + b0*s^(1 - c1))
要最大化ROI,对s求导并令导数为0。聚焦分母g(s) = s + b0*s^k(其中k = 1 + c0),求导得:
g’(s) = 1 + b0*k*s^(k-1)
令g’(s)=0,解出最优投入s_opt的解析公式:
s_opt = ( -1/(b0*k) )^( 1/(k-1) )
代入k=1+c0、k-1=c0,最终简化为:
s_opt = ( -1/(b0*(1 + c0)) )^( 1/c0 )
二、R语言实现
1. 直接计算解析解
代入给定常量计算精确值:
a0 <- 1303066.36937866 b0 <- 15560519.9999999 c0 <- -1.09001859302511 # 计算最优投入 k <- 1 + c0 s_opt <- ( -1/(b0 * k) )^( 1/c0 ) # 计算对应收益和ROI revenue_opt <- calculate_abc_revenue(a = a0, b = b0, c = c0, spend = s_opt) roi_opt <- revenue_opt / s_opt cat("最优投入:", round(s_opt, 4), "\n") cat("对应收益:", round(revenue_opt, 2), "\n") cat("最大ROI:", round(roi_opt, 4), "\n")
2. 用一维优化函数验证
R的optimize()函数专为单峰函数极值设计,效率极高且能保证全局最优(此问题中ROI函数是单峰的,存在唯一最大值):
# 定义ROI目标函数 roi_func <- function(s) { rev <- calculate_abc_revenue(a0, b0, c0, s) rev / s } # 设定投入范围(可根据实际场景调整) opt_result <- optimize(roi_func, interval = c(1, 1e6), maximum = TRUE) cat("优化得到的最优投入:", round(opt_result$maximum, 4), "\n") cat("最大ROI:", round(opt_result$objective, 4), "\n") cat("对应收益:", round(calculate_abc_revenue(a0, b0, c0, opt_result$maximum), 2), "\n")
优势说明
- 解析解一步到位,无需迭代,结果绝对精确;
optimize()函数计算量极小,远优于生成大量spend向量的方法,且能确保找到全局最大值;- 两种方法结果完全一致,可互相验证。
内容的提问来源于stack exchange,提问作者GNicoletti
相关产品推荐
相关产品推荐

