SQL 矩阵 - 附加率

Posted

技术标签:

【中文标题】SQL 矩阵 - 附加率【英文标题】:SQL Matrix - Attach Rate 【发布时间】:2017-09-28 17:58:33 【问题描述】:

我正在尝试查找零售中某些类别的附加率,并希望创建一个矩阵表,因为我正在处理大约 65 个类别。为了找到附加率,我们需要附加物品/销售物品:

因此,如果我正在处理类别 - 牛仔裤和 T 恤,如果他们在第一季度购买了 25 件 T 恤,在第一季度购买了 75 件牛仔裤,那么 T 恤的附加率为 33%。

如果我有一个包含订单号、类别、数量的表格,我将如何获得附加率?

|OrderNumber|Category|PurchaseQty|
----------------------------
|   1       |Jeans   |  1      |
|   2       |Jeans   |   3     |
|   2       |TShirt  |   1     |
---------------------------

对于上面的示例,T 恤的整体贴合率为 25%(1 件 T 恤/4 条牛仔裤)。

我希望这是有道理的 - 很高兴澄清任何没有意义的事情。

谢谢!

【问题讨论】:

有点得到你的计算,但不完全。你希望你的结果是什么样的?只是一个标量值?似乎您可以通过将牛仔裤和 T 恤的数量相加并除以它们来实现您制定的计算。您可以使用变量或子查询来做到这一点 @Ally 感谢您发布第二个问题。这是由客户(如您的第一个)还是总体上。期望的输出是什么 ...附加率是否应按total 项计算(例如,衬衫的比率应为 1 件衬衫 /(1 件衬衫 + 4 条牛仔裤)= 20%),所有项目的总和,而不是这一项,或者只是最高的项目;将另一个项目添加到您的源示例中可能会有所帮助,示例结果呢? @John - 这不是按客户,而是按季度汇总。 @Clockwork-Muse - 所以它不是一个完整的项目,附加率将定义人们在购买牛仔裤时购买 T 恤的频率,这就是为什么它只是 1 件衬衫/4 件牛仔裤 = 25 %。所以如果我们添加鞋子,订单 1 买了 2 双鞋子,鞋子对牛仔裤的附着率为 50%。希望这会有所帮助。 【参考方案1】:

如果我正确理解了您的问题,您只需要每个类别与其他所有类别的比率,对吗? SQL 不适合将结果构建为 65x65 矩阵,但您可以很容易地用表示分子和分母的类别和值的列来表示它(注意,如果您真的需要它是一个 65x65 的网格,你必须查找动态旋转。我真的不推荐它,除非你出于某种原因需要它)。

只需总结每个类别,然后将该聚合与其自身交叉连接(不包括同类别连接),然后进行除法。

declare @src table
(
    OrderNum int,
    Category varchar(10),
    Qty int
)

insert into @src
select 1, 'Jeans', 1 union all
select 2, 'Jeans', 3 union all
select 2, 'TShirt', 1 union all
select 1, 'Shoes', 2

;with agg as
(
    select 
        Category, 
        Qty = sum(qty)
    from @src
    group by Category
)
select 
    Category = a.Category,
    CategoryCount = a.Qty,
    ComparisonCategory = b.Category,
    ComparisonCategoryCount = b.Qty,
    Ratio = (a.Qty * 1.0) / nullif(b.Qty, 0)
from agg a
inner join agg b
    on a.Category != b.Category

【讨论】:

【参考方案2】:

你可以试试这个

SELECT T.orderid, T.Category, T.Qty, (T.Qty / T.SumQty)*100 AS Persentage
FROM (
SELECT 
orderid, 
category, 
Qty,
CAST(SUM(Qty) OVER(PARTITION BY Category) AS DECIMAL) AS SumQty
FROM dbo.ORDERs
) T

【讨论】:

以上是关于SQL 矩阵 - 附加率的主要内容,如果未能解决你的问题,请参考以下文章

混淆矩阵准确率精确率/查准率召回率/查全率F1值ROC曲线的AUC值

如何从 Python 中的混淆矩阵中获取精度、召回率和 f 度量 [重复]

机器学习:评价分类结果(实现混淆矩阵精准率召回率)

使用 Cupy 将数组附加到矩阵

如何生成混淆矩阵并找到朴素贝叶斯分类器的错误分类率?

用矩阵 B 附加矩阵 A