如何基于直方图中的点位计算商品整体盈利概率?
计算蒙特卡洛模拟下的商品盈利概率
问题背景
- 变量定义:
norm= 蒙特卡洛生成的估计价格,norm2= 卖家的实际报价价格 - 通过蒙特卡洛模拟生成了100个估计价格(注:示例代码中实际生成1000个,可按需调整数量),对应直方图的关键标注:
- 橙色实线:实际报价价格
- 绿色点虚线:估计价格的均值
- 红色长虚线:均值±1标准差区间
- 已知估计价格落在±1标准差区间的概率为68%,由于实际报价位于-1标准差线下方,可判断盈利概率(估计价格>实际报价)高于68%,需计算具体概率值。
盈利概率计算逻辑
盈利的核心判定条件是估计价格 > 实际报价,直接统计蒙特卡洛生成的所有估计价格中满足该条件的样本比例,即可得到基于模拟结果的经验盈利概率。
包含概率计算的R代码
library(ggplot2) library(tidyverse) # 生成蒙特卡洛模拟数据 normalDist = data.frame( norm = rnorm(1000, mean = 1, sd = 2), # 生成1000个估计价格 norm2 = rnorm(1000, mean = 0.9, sd = 2) ) # 随机抽取1个实际报价 actual_price = sample(normalDist$norm2, 1) # 计算估计价格的均值与标准差 est_mean = mean(normalDist$norm) est_sd = sd(normalDist$norm) # 计算盈利概率:统计估计价格大于实际报价的样本占比 profit_prob = mean(normalDist$norm > actual_price) cat("商品盈利概率为:", round(profit_prob * 100, 2), "%\n", sep = "") # 绘制带标注的直方图 normalDist %>% ggplot() + geom_histogram(aes(x = norm), bins = 20, fill = "skyblue", color = "black") + geom_vline(xintercept = c(actual_price, est_mean, est_mean - est_sd, est_mean + est_sd), linetype = c("solid", "dotdash", "longdash", "longdash"), size = c(2, 1, 1, 1), color = c("darkorange", "darkgreen", "darkred", "darkred")) + # 在图中添加盈利概率标注 annotate("text", x = Inf, y = Inf, hjust = 1.1, vjust = 1.5, label = paste("盈利概率:", round(profit_prob * 100, 2), "%"), color = "darkorange", size = 4) + theme_bw()
代码说明
mean(normalDist$norm > actual_price):利用逻辑向量的特性,直接计算满足条件的样本占比,得到的就是模拟场景下的盈利概率- 代码中通过
cat()直接输出概率数值,同时用annotate()在直方图右上角标注结果,提升可读性 - 变量名做了更清晰的命名,便于理解和后续修改
内容的提问来源于stack exchange,提问作者user113156
相关产品推荐
相关产品推荐

