文章目录

  • 一、理论知识
  • 1.1、定义
  • 1.2、关联规则
  • 1.3、频繁项集的产生
  • 二、python实战


一、理论知识

许多商业企业在运营中积累了大量的数据。例如:普通超市的收银台每天都会收集到大量的用户购物数据。下表给出一个这样的例子,通常称为购物篮事务。每一行代表一个事务,包含唯一标识id和顾客购买的商品的集合。零售商对分析这些数据会感兴趣,因为这样可以了解到用户的购物行为,可以使用这种有价值的信息来支持各种商务应用,如市场促销,库存管理等。

TID

项集

1

{黄油 ,苹果,香蕉}

2

{面包,牛奶,苹果}

3

{面包,黄油,苹果}

4

{黄油,苹果,香蕉}

5

{牛奶,香蕉}

这篇博客主要讲解关联分析的方法。用于发现隐藏在大型数据集中的有意义的联系。发现的联系可以利用关联规则或频繁项集的形式表示。例如,从上表中可以提取出如下规则:{面包}->{苹果},这个规则表示买了面包的人同时也买了苹果,继而可以发现新的交叉销售商机。

1.1、定义

  • 二元表示
    购物篮数据可以用下表的二元形式来表示,每行表示一个事务,每一列表示一个项集。项可以用二元值表示,若项在事务中出现,则表示为1,否则为0。

牛奶

苹果

面包

香蕉

黄油

1

0

1

0

1

1

2

1

1

1

0

0

3

0

1

1

0

1

4

0

1

0

1

1

5

1

0

0

1

0

  • 项集:关联分析中,包含0个或多个项的集合被称为项集。如果一个项集中包含k个项,则称其为k项集。例如:{苹果,面包,牛奶}是一个3项集。
  • 支持度计数:项集在事务中出现的次数即为支持度计数。例如:上面的二元表中,项集{面包,苹果}在5个事务中出现了2次,所以它的支持度计数就为2。

1.2、关联规则

  • 关联规则是形如X->Y的蕴含表达式,其中X和Y是不相交的项集,即它们的交集为空。关联规则的强度可以利用支持度和置信度度量。支持度确定给定数据集的频繁程度,而置信度确定Y在包含X的事务中出现的频繁程度。
  • 支持度(support)和置信度(confidence)的定义如下:N表示事务数量,N()表示项集在事务中出现的次数
    数据挖掘 关联分析 数据挖掘关联分析数据_机器学习
  • 提升度(lift):数据挖掘 关联分析 数据挖掘关联分析数据_机器学习_02,如果数据挖掘 关联分析 数据挖掘关联分析数据_人工智能_03说明X和Y没有任何关联,如果数据挖掘 关联分析 数据挖掘关联分析数据_机器学习_04,说明X和Y是排斥的,如果数据挖掘 关联分析 数据挖掘关联分析数据_机器学习_05,我们认为X和Y是有关联的。
    例如:上面的例子中:牛奶出现在2个事务中,那么{牛奶}的支持度就是2/5=0.4;苹果出现在包含牛奶的事务中出现了1次,那么规则{牛奶}→{苹果}的置信度为1/2=0.5,规则{牛奶}→{苹果}的提升度为0.5/(4/5)=0.625。
  • 给定事务的集合T,关联规则发现是指找出支持度大于等于minsup且置信度大于等于minconf的所有规则,其中minsup和minconf是对应的支持度和置信度的阈值即设置的最小支持度和最小置信度
  • 为什么使用支持度和置信度呢?
  • 支持度是一种重要度量值,因为支持度很低的规则可能知识偶尔出现,从商务角度看,低支持度的规则多半是无意义的,因为对顾客很少同时购买的商品进行促销活动并无益处。因此支持度,通常是删掉那些无意义的规则。
  • 置信度度量通过规则推理具有可靠性。对于给定的规则X→Y,置信度越高,说明Y在包含X的事务中出现的可能性就越大。置信度也可以估计Y在条件X下的条件概率。
  • 提升度存在的意义:
    置信度用于评估规则的可信程度,但是该度量有一个缺点,没有考虑规则后件的支持度问题,例如在下表中:

    规则{茶}数据挖掘 关联分析 数据挖掘关联分析数据_数据挖掘 关联分析_06{咖啡}的支持度为150/1000=15%,置信度为150/200=75%,先不考虑支持度,只看置信度会觉得比较高,因为可能会认为爱喝茶的人一般也爱喝咖啡。我们再来看一下喝咖啡的人的支持度,达到800/1000=80%,比规则{茶}数据挖掘 关联分析 数据挖掘关联分析数据_数据挖掘 关联分析_06{咖啡}的置信度75%高,这说明什么问题?并不是爱喝茶的人一般爱喝咖啡,从而使得规则置信度高,而是爱喝咖啡的人本身就很多,所以这条规则是一个误导。由于置信度存在的缺陷,人们又提出了称作提升度的度量。
  • 强关联规则
  • 对于给定的规则X→Y,如果规则同时满足数据挖掘 关联分析 数据挖掘关联分析数据_机器学习_08数据挖掘 关联分析 数据挖掘关联分析数据_数据挖掘 关联分析_09,那么称规则X→Y为强关联规则,否则为弱关联规则。

1.3、频繁项集的产生

  • 先验原理:如果一个项集是频繁的,那么该项集的所有子集一定也是频繁的。
  • Apriori算法是第一个关联挖掘算法,使用基于支持度的剪枝技术。对于例子来说,假定支持度阈值为60%,相当于最小支持度计数为3。
  • 如图:初始将每个项作为一个候选1-项集,对他们的支持度计数之后,候选项集{牛奶}和{面包}被丢弃,因为它们的计数均小于3;第二次迭代,仅使用频繁集1-项集来产生2-项集,因为先验原理保证2-项集的所有子集均属于频繁集,因为只有3个频繁1-项集,所以从3个中选择两个产生2-项集,2项集数目为数据挖掘 关联分析 数据挖掘关联分析数据_算法_10,计算它们在所有事务中的支持度,发现2-项集中频繁项集只有一个{苹果,黄油};最终的频繁项集就是{苹果,黄油}。

二、python实战

import numpy as np
import pandas as pd
from mlxtend.frequent_patterns import apriori
from mlxtend.frequent_patterns import association_rules  #关联规则

data = pd.read_csv('GoodsOrder.csv',sep=',',index_col=0,encoding='gbk')
df = pd.crosstab(index=data.index,columns=data.goods)
df
goods	牛奶	苹果	面包	香蕉	黄油
row_0					
1	0	1	0	1	1
2	1	1	1	0	0
3	0	1	1	0	1
4	0	1	0	1	1
5	1	0	0	1	0

frequent=apriori(df,min_support=0.3,use_colnames=True) #设置最小支持度为0.3,求频繁项集,显示列标签名
rules=association_rules(frequent,metric='confidence',min_threshold=0) #置信度大于0.5,求关联规则
rules.sort_values(by='confidence',ascending=False)

数据挖掘 关联分析 数据挖掘关联分析数据_机器学习_11

  • 结果解释:三项集中置信度最高的是数据挖掘 关联分析 数据挖掘关联分析数据_数据挖掘_12数据挖掘 关联分析 数据挖掘关联分析数据_人工智能_13,项集数据挖掘 关联分析 数据挖掘关联分析数据_数据挖掘_12说明在购买了黄油和香蕉的前提下,一定会购买苹果;且它们的提升度>1,说明有着较强的相关性。
  • 列名含义:针对规则{A}->{B},总事务数为N

列名

解释

公式

antecedents

前件

A

consequents

后件

B

antecedent support

前件支持度

consequent support

后件支持度

support

规则支持度

confidence

置信度

lift

提升度

leverage

杠杆率

conviction

参考:
《数据挖掘导论》 范明 译