给定10个函数y = a + bx和1000个(x,y)数据点四舍五入到整数,如何导出10个最佳(a,b)元组?

Jus*_*ant 9 c# sql algorithm statistics cluster-analysis

我们构建的软件可以审核银行向接受信用卡和借记卡的商家收取的费用.我们的客户希望我们告诉他们卡处理器是否过度充电.每笔交易信用卡费用的计算如下:

fee = fixed + variable*transaction_price
Run Code Online (Sandbox Code Playgroud)

"费用计划"是(fixed, variable)由一组信用卡使用的对,例如"由好莱坞第一国家银行发行的万事达卡商业借记卡金卡".我们认为在任何时候使用的费用计划少于10种,但我们没有从合作伙伴处获得完整的或当前的费用计划清单.(是的,我知道一些"费用计划"比上面的等式更复杂,因为有上限和其他陷阱,但我们的交易已知只有a + bx使用的方案).

以下是我们要解决的问题:我们希望使用有关费用的每笔交易数据来推导使用中的费用方案.然后,我们可以比较该列表的费用计划,每个客户应该根据自己的银行使用.

我们获得的每个事务的数据是一个数据元组:(card_id, transaction_price, fee).

transaction_price并且fee是整数美分.银行每次转账都会超过分数美分,直到累计金额超过1美分,然后"四舍五入"将附加到该交易的费用上.我们无法预测哪些交易将附加"四舍五入".

card_id识别一组共享相同费用计划的卡.在10,000个交易的典型日子里,可能有数百个独特card_id的交易.多个人card_id将分享费用计划.

我们得到的数据看起来像这样,我们想要弄清楚的是最后两列.

card_id    transaction_price       fee        fixed        variable
=======================================================================
12345      200                     22         ?            ?
67890      300                     21         ?            ?
56789      150                      8         ?            ?
34567      150                      8         ?            ?
34567      150    "rounding cent"-> 9         ?            ?
34567      150                      8         ?            ?
Run Code Online (Sandbox Code Playgroud)

我们想要的最终结果是一个这样的简短列表,其中10个或更少的条目显示了最适合我们数据的费用方案.像这样:

fee_scheme_id       fixed     variable
======================================
1                      22            0
2                      21            0
3                       ?            ?
4                       ?            ?
...
Run Code Online (Sandbox Code Playgroud)

平均费用约为8美分.这意味着舍入分数会产生巨大影响,上面的推导需要大量数据.

平均交易额为125美分.交易价格总是在5美分的边界上.

我们想要一份简短的费用计划清单,这些费用计划"适合"每位客户每天获得的3,000多笔交易中的98%以上.如果没有足够的数据来实现98%的置信度,我们可以使用多天的数据.

由于每次交易有点随意应用的舍入分数,这不是一个简单的代数问题.相反,这是一种统计聚类练习,我不确定如何解决.

有关如何解决此问题的任何建议?实现可以在C#或T-SQL中,无论哪种算法都是最有意义的.

thi*_*ton 5

霍夫变换

在图像术语中考虑您的问题:如果您在价格与费用关系图上绘制输入数据,每个方案的条目将形成一条直线(四舍五入为噪声).将绘图的密度图考虑为图像,并将任务简化为在图像中查找直线.这只是霍夫变换的工作.

您基本上可以通过将每个交易的一条线绘制成可能的固定费用与可能的可变费用的图表来进行处理,并添加它们交叉的线的值.在实际费用计划的点上,许多线将相交并形成大的局部最大值.通过检测此最大值,您可以找到您的费用计划,甚至是费用计划的重要程度.

这种方法肯定会起作用,但可能需要一些时间,具体取决于您想要达到的分辨率.如果计算时间被证明是一个问题,请记住粗Hough空间的Voronoi图可以用作分类器 - 一旦您将您的点分类为费用方案,简单的线性回归就可以解决您的问题.