将分数转化为概率

4
人们访问我的网站,我有一个算法产生1到0之间的分数。分数越高,这个人购买的概率就越大,但是这个分数不是概率,它可能与购买概率没有线性关系。
我有一堆关于过去给人们的分数以及这些人是否真正购买的数据。
使用这些关于过去得分情况的数据,我想能够将分数转换为相应的概率。
有什么想法吗?
编辑:有几个人建议分桶,我也考虑过这种方法,但我相信必须有一种“平滑”的方法来做到这一点。一段时间以前,我在这里提出了一个不同但可能相关的问题,链接,我觉得类似的方法可能适用,但我不确定。
编辑2:假设我告诉你,在得分超过0.5的100名客户中,有12人购买了,在得分低于0.5的25名客户中,有2人购买了。对于得分为0.5的人的预计购买概率,我能得出什么结论(如果有的话)?

一个简单的贝叶斯分类器(http://en.wikipedia.org/wiki/Naive_Bayes_classifier)是起步的好选择,而且实现起来并不太困难。 - Jim Mischel
我熟悉贝叶斯分类器,但我不知道如何将其应用于这个问题。 - sanity
Argote,这很棘手,我也不确定为什么这是必要的。 - sanity
1
你询问如何应用你的数据,而不是任何特定于代码的内容,因此你的问题最好在http://stats.stackexchange.com/上提出。 - zxt
1
我正在寻找一种特定于代码的算法。 - sanity
算法并不是特定于代码的,只有实现细节是特定的。 - Aniko
7个回答

4

绘制图表-将买家与非买家的比率绘制在Y轴上,将分数绘制在X轴上-拟合曲线-然后对于给定的分数,您可以通过曲线的高度获得概率。

(您不需要物理上创建图表-但是算法应该从练习中清晰可见)

简单易懂。


这个被踩了,但我真的很喜欢它。你甚至可以对它进行回归分析来收集公式。 - corsiKa
我希望可以在不需要显式曲线拟合的情况下实现。 - sanity
考虑到得分和购买之间存在概率关系而非确定性关系(即图表上会有一些“噪音”),因此你无法避免某种程度的曲线拟合(即使只是ARMA)。 - symcbean

1

这就是逻辑回归概率回归等算法的用途。现在大多数人会使用逻辑回归,但拟合需要迭代算法 - 当然有很多实现,但您可能不想自己编写一个。概率回归具有近似的显式解决方案,链接中描述了这个方案,这可能足以满足您的需求。

评估逻辑回归是否适用于您的数据的一种可能方法是查看每个分数与购买概率的logit(log(p /(1-p)))之间的图形,看看它们是否形成一条直线。


1

最终我找到了我需要的算法,它叫做“相邻对破坏者”算法。初始时我在这篇论文中找到了它,但是请注意他们对于实现的描述有缺陷。

我在我的博客里详细描述了这个算法、缺陷以及解决方案。


0

嗯,做这件事情的直接方法是计算在一个分数区间内购买某物的人所占的百分比,并对所有区间进行此操作(例如,每0.05个点)。

您是否注意到在您的数据中,得分越高与购买可能性增加之间存在实际相关性?

我不是统计学专家,也许有更好的答案。


是的,我可以通过将它们分组来实现 - 但我希望有更好的解决方案。 - sanity

0

你可以将分数分成若干个桶,例如0.0-0.1、0.1-0.2等,并计算每个桶中购买和未购买物品的客户数量。

或者,你可以将每个分数与花费金额(作为散点图)绘制出来,看看是否存在明显的关系。


0

您可以使用指数衰减来产生加权平均值。

将用户按分数顺序排列(随机打破平局)。

从左到右工作,从0开始运行平均值。每个用户都会改变平均值,average = (1-p) * average + p * (sale ? 1 : 0)。从右到左做同样的事情,只是从1开始。

您使p越小,曲线就会越平滑。玩弄数据,直到找到一个您喜欢的结果的p值。

顺便说一句,这是Unix系统计算负载平均值的关键思想。


我不明白,如何使用平均值将分数转换为概率? - sanity
@sanity:所呈现的平均值是基于接近您当前分数的分数进行估计的概率。这有点像一个“模糊”的桶分类版本。 - btilly

0

根据您的“edit2”评论,您可能没有足够的数据来做出陈述。您的整体购买率为11.2%。这与您高于/低于0.5的两个购买率没有统计学上的差异。此外,为了验证您的得分,您必须确保随着您的得分增加,购买百分比单调递增。您可以进行分桶,但您需要使用概率计算器检查结果,以确保它们不是偶然发生的。

http://stattrek.com/Tables/Binomial.aspx


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接