浅谈支持度与置信度

前言

由于本人初学数据挖掘,许多知识与见解还有所欠缺,因为看书《python数据挖掘入门与实践》有点没能理解,所以查阅了一些资料,有一些自己的理解,若有错误,望各位海涵并指点本人的不足。

参考样本

由于下面的理解会讨论到相关的参考样本,所以这里先列出书上实例的参考样本节选。(1代表了购买,0代表没有购买)
参考样本

定义与理解

在具体讨论支持度与置信度时,需要先讨论两个概念,规则和应验。
规则:即给出一个前提条件,得到一个对应的结论。就好比:我如果买了苹果,那么我有可能会继续选择香蕉
应验:即事件的发生。就好比:我买了苹果,也确实买了香蕉,那么就应验了上一条规则

支持度(support)

在《python数据挖掘入门与实践》一书中,对支持度(support)的定义为:
数据集中规则应验的次数,统计起来很简单。有时候,还需要对支持度进行规范化,再除以规则有效前提下的总数量。支持度衡量的是给定规则应验的比例

由于作为初学者没有太懂这句话的含义,所以查询了相关资料,在资料中写到,支持度即:表示同时包含A和B的事务所占所有事务的比例。用公式表示则是:
support(A → B) = P(A ∪ B)

支持度实际作用

从概率上讲,支持度反映了一组事务(商品)被选择的概率,就假设一个商场从支持度推测出苹果和香蕉的支持度很高,那么就证明了苹果与香蕉这个组合更受人们的欢迎,所以商家可以将香蕉和苹果放在接近入口的地方,方便人们的购买。

置信度(confidence)

在《python数据挖掘入门与实践》一书中,对置信度(confidence)的定义是:
置信度衡量的是规则准确率如何,即符合给定条件(即规则的“如果”语句所表示的前提条件)的所有规则里,跟当前规则结论一致的比例有多大。计算方法为首先统计当前规则的出现次数,再用它来除以条件(“如果”语句)相同的规则数量。

我不确定多少人和我一样看了这句话后云里雾里的,反正我是查阅了资料,资料里写的是:表示使用包含A的事务(商品)中同时包含B事务(商品)的比例,即同时包含A和B的事务(商品)占包含A事务的比例。相应的公式为:
Confidence(A->B)=P(A | B)

置信度的实际作用

置信度的实际作用是能够做到关联规则挖掘,判断用户最有可能选择哪些组合的商品,即计算用户选择了A商品(前提条件)后又选择了B商品(结论)的概率。
就比如曾经有个案例,发现婴儿的爸爸在购买尿布时很有可能购买啤酒,于是商家就将尿布和啤酒放一起卖,增加了销售额,这就是置信度在实际生活中的一个场景。

代码与结果

由于书上的代码中支持度只是具体的数值而非概率,所以我进行了一定的优化,代码在书上都有,我这里截取最核心的部分:

# 遍历所有样本
for sample in X:
    for premise in range(n_features):
        # 如果客户没有购买,则跳过
        if sample[premise] == 0:
            continue
        num_occurances[premise] += 1
        for conclusion in range(n_features):
            # 不需要判断用户购买了A,又购买了A
            if premise == conclusion:
                continue
            # 当前提条件与结论都应验后,有效数据 + 1,否则无效数据 + 1
            if sample[conclusion] == 1:
                valid_rules[(premise, conclusion)] += 1
            else:
                invalid_rules[(premise, conclusion)] += 1

support = defaultdict(float)
confidence = defaultdict(float)

# 支持度
for premise, conclusion in valid_rules.keys():
    rule = (premise, conclusion)
    support[rule] = valid_rules[rule] / n_samples

# 置信度
for premise, conclusion in valid_rules.keys():
    rule = (premise, conclusion)
    confidence[rule] = valid_rules[rule] / num_occurances[premise]

for premise, conclusion in confidence:
    premise_name = features[premise]
    conclusion_name = features[conclusion]
    print("Rule: if a person buys {0} they will also buy {1}".format(premise_name, conclusion_name))
    print(" - Confidence: {0:.3f}".format(confidence[(premise, conclusion)]))
    print(" - Support: {0}".format(support[(premise, conclusion)]))
    print("")

部分结果截图如下:
部分结果图片
说明:
X:存放了所有的样本集合的ndarray对象
n_features:X.shape[1],即该数组(样本)有多少列
n_samples:X.shape[0],即该数组(样本)有多少行
valid_rules:defaultdict(int),规则应验次数
invalid_rules:defaultdict(int),规则无效次数

参考

hooly.数据挖掘关联分析中的支持度、置信度和提升度.简书,2017
Robert Layton.python数据挖掘入门与实践〔M〕.人民邮电出版社,2016:6-10

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值