【发布时间】:2010-11-01 08:22:04
【问题描述】:
我有一堆关于某人是否购买特定产品的数据(呼叫自动呼叫中心),1 表示购买,0 表示不购买。
我想使用这些数据来估计一个人会购买特定产品的概率,但问题是我可能需要使用相对较少的历史数据来计算有多少人购买/没有购买该产品产品。
一位朋友建议使用贝叶斯概率,您可以通过提出“先验概率分布”来“帮助”您的概率估计,本质上这是在考虑实际数据之前有关您期望看到的信息。
所以我想做的是创建一个具有类似签名(Java)的方法:
double estimateProbability(double[] priorProbabilities, int buyCount, int noBuyCount);
priorProbabilities 是我在以前的产品中看到的一组概率,此方法将使用它来创建此概率的先验分布。 buyCount 和 noBuyCount 是该产品特定的实际数据,我想从中估计用户购买的概率,给定数据和先验。这是从方法作为双精度返回的。
我不需要数学上完美的解决方案,只需要比统一或平坦先验更好的解决方案(即,probability = buyCount / (buyCount+noBuyCount))。由于我对源代码比对数学符号更熟悉,如果人们可以在解释中使用代码,我将不胜感激。
【问题讨论】:
-
真的很酷的问题,我想我知道确切的贝叶斯解决方案,但编写代码仍然需要一段时间(您介意可执行伪代码,AKA Python 源代码吗?我对 Java 有点生疏...;-)。
-
Alex,是的 - Python 或伪 Python 绝对没问题!
-
我不认为这是一个编程问题。这是一个包含在 java 方法存根中的理论数学问题。
-
@Steven,对这里隐约涉及数学的任何事物的仇恨是什么?数学和编程密切相关。许多编程问题都有数学成分。如果在 SO 上不允许有任何与数学相关的内容,那么我很遗憾地说 SO 将是一个没那么有用且没那么有趣的网站。
-
我同意@Steven A. Lowe;不直接编程相关
标签: java statistics probability