跳至主要内容

Python 关联规则挖掘教程

使用关联规则挖掘,在 Python 中揭示隐藏模式
· 14分钟 阅读

使用 AI 探索

关联规则挖掘是一种用于在大型数据集中发掘变量之间隐含关系的技术。它是数据挖掘与机器学习中的常用方法,应用广泛,涵盖购物篮分析、客户细分与欺诈检测等多个领域。

本文将带您了解如何在 Python 中进行关联规则挖掘,包括典型用例、常见算法以及具体实现。我们将从关联规则挖掘及其应用的简要概述开始,随后深入介绍算法细节及其在 Python 中的实现,最后以要点总结收尾。

What is Association Rule Mining?

关联规则挖掘是一种用于识别大型数据集中模式的技术。它通过寻找数据中变量之间的关系,并基于这些关系进行预测或决策。关联规则挖掘的目标,是找出能够描述数据集中不同项目之间关系的规则。

例如,考虑一家杂货店的交易数据集。关联规则挖掘可用于识别经常被一起购买的商品之间的关系。比如,规则 "If a customer buys bread, they are also likely to buy milk"(如果顾客买了面包,他们也很可能会买牛奶)就是可以从该数据集中挖掘出的关联规则。我们可以利用此类规则来指导门店布局、商品陈列和营销活动的决策。

关联规则挖掘通常通过算法来分析数据并识别关系。这些算法可能基于统计方法或机器学习技术。生成的规则通常以 "if-then" 语句表示,其中 "if" 部分表示前件(被检验的条件),"then" 部分表示后件(当条件成立时发生的结果)。

关联规则挖掘在数据分析中非常重要,因为它能帮助用户发现数据中不易被直观看出的模式或关系。通过识别变量之间的关联,关联规则挖掘可以帮助用户理解不同变量之间的联系,以及这些变量可能如何相互关联。 

这对于多种用途都很有价值,例如识别市场趋势、检测欺诈行为或洞察客户行为。关联规则挖掘也可作为其他类型数据分析(如结果预测或识别关键驱动因素)的起点。总体而言,关联规则挖掘是提炼洞见、理解数据底层结构的有力工具。

Use Cases of Association Rule Mining:

关联规则挖掘常用于多种应用场景,较常见的包括:

Market Basket Analysis

最知名的应用之一是购物篮分析。这涉及分析顾客同时购买的商品,以了解其购买习惯与偏好。 

例如,零售商可能通过关联规则挖掘发现,购买纸尿裤的顾客也很可能购买婴儿配方奶粉。我们可以利用这些信息来优化商品陈列与促销策略,从而提升销量。 

若想进一步了解购物篮分析,请参阅我们的R 语言购物篮分析教程。

Customer Segmentation

关联规则挖掘也可用于基于购买习惯对客户进行细分。 

例如,公司可能通过关联规则挖掘发现,购买某些类别产品的客户更可能偏年轻。同样地,他们也可能发现,购买特定产品组合的客户更可能集中在某些地理区域。 

我们可以据此为特定客户细分制定营销活动和个性化推荐。想进一步了解该主题,请查看我们的Python 入门客户细分教程。 

Fraud Detection

您也可以使用关联规则挖掘来检测欺诈行为。例如,信用卡公司可能利用关联规则挖掘识别欺诈交易的模式,如在短时间内来自同一商户的多笔消费。 

随后,我们可以利用这些信息标记潜在的欺诈活动,并采取预防措施以保护客户。您可在我们的银行业中的数据科学:欺诈检测博文中进一步了解其工作原理。 

Social network analysis

多家公司利用关联规则挖掘识别社交媒体数据中的模式,以支持社交网络分析。 

例如,对 Twitter 数据的分析可能揭示:发布某一特定主题推文的用户,也很可能会发布其他相关主题的推文,这有助于识别网络中的群组或社群。

Recommendation systems

关联规则挖掘可用于根据客户的过往购买或浏览历史,推荐其可能感兴趣的商品。例如,音乐流媒体服务可能利用关联规则挖掘,基于用户的收听历史向其推荐新的艺人或专辑。

通过我们的Python 推荐系统教程,您可以深入学习如何构建多种执行此功能的模型。 

Association Rule Mining Algorithms

用于关联规则挖掘的算法有多种,常见的包括:

Apriori algorithm

Apriori 算法是应用最广泛的关联规则挖掘算法之一。其工作流程为:首先识别数据集中的频繁项集(在一定数量的交易中出现的项集),然后基于这些频繁项集生成关联规则,即形如 "if item A is purchased, then item B is also likely to be purchased." 的陈述。Apriori 算法采用自底向上的方法,从单个项目开始,逐步构建更复杂的项集。

FP-Growth algorithm

FP-Growth(频繁模式增长)算法是另一种流行的关联规则挖掘算法。它通过构建一种称为 FP-tree 的树状结构来编码数据集中的频繁项集,然后以与 Apriori 类似的方式使用 FP-tree 生成关联规则。FP-Growth 通常比 Apriori 更快,尤其在处理大型数据集时。

ECLAT algorithm

ECLAT(等价类聚类与自顶向下格遍历)算法是 Apriori 的一种变体,采用自顶向下而非自底向上的方法。它根据支持度(出现于多少笔交易)将项目划分为等价类,然后通过在类格结构中组合这些等价类来生成关联规则。它是 Apriori 更高效且更具可扩展性的版本。

Apriori Algorithm

Apriori 算法已成为频繁项集挖掘与关联规则学习中使用最广的算法之一,广泛应用于购物篮分析、推荐系统与欺诈检测等场景,并启发出许多用于类似任务的其他算法。

Algorithm Details

Apriori 算法首先设置最小支持度阈值。即某个项目要被视为频繁项集,必须在数据库中至少出现的次数。随后,算法会剔除不满足最小支持度阈值的候选项集。 

接着,算法会生成所有频繁项集的可能组合,并统计每种组合在数据库中出现的次数。然后,算法基于这些频繁项集组合生成关联规则。 

关联规则是形如 "if item A is present in a transaction, then item B is also likely to be present" 的陈述。关联强度通过置信度来衡量,即在 A 出现的前提下,B 出现的概率。

随后,算法会过滤掉未达到最小置信度阈值的关联规则。这些满足阈值的规则称为强关联规则。最后,算法输出强关联规则列表。

Apriori 采用“自底向上”的方法,从单个项目开始,随着对频繁模式的搜索逐步组合成更大的项集。它还使用“删除-重标记”的思路高效剪枝,通过剔除不频繁的项集来收缩搜索空间。

Pros:

  • Apriori 相对简单,易于理解。
  • 能有效识别大型数据集中的频繁模式与关联规则。
  • 通过剔除不频繁项集来有效剪枝,从而降低算法的计算复杂度。
  • 已在多种应用中被广泛使用与验证,算法成熟可靠。

Cons:

  • 对超大规模数据集不太适用,因其计算复杂度会随数据规模呈指数增长。
  • 在包含大量稀有项目或低频交易的数据集中,识别模式的效果可能不佳。
  • 对最小支持度与最小置信度阈值较为敏感,这会影响结果质量。
  • 可能生成大量关联规则,导致结果难以解读。

若想更深入学习 Apriori 算法,请查看 DataCamp 上这篇精彩的购物篮分析教程。 

Metrics for Evaluating Association Rules

在关联规则挖掘中,通常使用多种指标来评估所发现关联规则的质量与重要性。 

这些指标可用于评估关联规则的质量与重要性,并据此为给定应用选择最相关的规则。需要注意的是,合适的指标选择取决于具体应用的目标与需求。

解读关联规则挖掘指标的结果,需要理解每个指标的含义与影响,以及如何利用它们评估所发现规则的质量与重要性。以下给出主要指标的解读指南:

Support

支持度衡量某个项目或项集在数据集中出现的频率。计算方法为:包含该项目(集)的交易数,除以数据集中的交易总数。较高的支持度表示该项目(集)在数据集中较常见,较低支持度则表示其较为罕见。

Support Formula

Confidence

置信度衡量两项之间关联的强度。计算方法为:同时包含这两项的交易数,除以包含第一项的交易数。较高的置信度表明第一项的出现对第二项的出现具有较强的预测性。

Confidence Formula

Lift

提升度在考虑两项各自出现频率的前提下,衡量它们之间关联的强度。其计算方式为:该关联的置信度,除以第二项的支持度。提升度用于将两项之间的关联强度,与在二者独立情况下的期望强度进行比较。 

当提升度大于 1,表示两项之间的关联强于在各自频率下的独立期望,这表明该关联可能具有意义,值得进一步分析。提升度小于 1 则表示关联弱于期望,可能不太可靠或不够显著。

Lift Formula

Python and R Libraries for Association Rule Mining

在 R 与 Python 中,有多种可用于关联规则挖掘的库:

R libraries

  • arules:用于在 R 中挖掘关联规则与频繁项集的包。它提供读取与处理事务数据的函数,以及生成关联规则并评估其质量的功能。
  • arulesViz:用于在 R 中可视化关联规则与频繁项集的包。它提供绘图与制图函数,帮助理解与解释关联规则挖掘的结果。
  • arulesSequences:用于在 R 中从序列数据挖掘关联规则的包。它提供读取与处理序列数据的函数,以及生成关联规则并评估其质量的功能。

Python libraries

  • apyori:在 Python 中实现 Apriori 算法的库。提供读取与处理事务数据、生成关联规则并评估其质量的函数。
  • mlxtend:在 Python 中实现多种机器学习算法与工具的库,包括关联规则挖掘。提供读取与处理事务数据、生成关联规则并评估其质量的函数。
  • PyCaret:PyCaret 是一个开源、低代码的 Python 机器学习库,用于自动化机器学习流程。它在 mlxtend 之上提供 Apriori 算法的便捷封装。

Implementing Association Rules in Python

我们将使用 PyCaret 在 Python 中实现关联规则。首先安装 PyCaret,然后导入示例数据集。 

Install PyCaret

您可以使用 pip 安装 pycaret。 

```

# install pycaret

pip install pycaret

```

Dataset

我们将从 pycaret 的仓库加载示例数据集。该数据集来自法国一家零售门店的交易数据,包含用于标识交易的发票号(Invoice number)与商品描述(Description)。在从该数据集中挖掘规则时,我们只需关注这两项。

```

# load sample data

from pycaret.datasets import get_data

data = get_data('france')

```

Sample Data

Setup

第一步是导入 `arules` 模块,并通过定义 data、transaction_id 和 item_id 来初始化 `setup` 函数。

```

# init setup

from pycaret.arules import *

s = setup(data = data, transaction_id = 'InvoiceNo', item_id = 'Description')

```

Setup Function

setup 函数的输出

Create Model

```

The `create_model` function runs the algorithm and return the rules in pandas DataFrame based on the selection parameters defined in the `create_model`. In this example we have used selection metric `confidence` with threshold and support of 0.5.

# train model

arules = create_model(metric='confidence', threshold=0.5, min_support=0.05)

```

Create Model

create_model 函数的输出

基于 `create_model` 函数中设定的阈值,我们共创建了 45 条规则。上述输出显示了按置信度从高到低排序的前 10 条规则。 

Plot Rules

使用 PyCaret 的 `plot_model` 函数可视化并分析规则。

```

# 2d plot
plot_model(arules, plot = '2d')

```

Plot Rules

```

# 3d plot

plot_model(arules, plot = '3d')

```

查看完整 Notebook以便跟进学习。

3D Plot

Conclusion

关联规则挖掘是数据分析中的一项重要工具,能够有力地发现数据中的模式与关系。在 Python 与 R 中,有多种可用于实现关联规则挖掘的库,既提供多种算法的开箱即用实现,也提供结果可视化的选项。 

您可以在多种情境下使用关联规则挖掘来提炼洞见,并理解数据的底层结构。但务必选择合适的算法,并设定恰当的参数(如最小支持度与置信度阈值),以获得有意义且准确的结果。 

如果您希望更深入地学习该主题并了解更多关联规则挖掘内容,可以查看以下课程:

Association Rule Mining FAQs

What are some common algorithms for association rule mining?

关联规则挖掘的常见算法包括 Apriori 与 FP-Growth。Apriori 采用自底向上的方法迭代生成并检验候选规则,而 FP-Growth 则基于频繁项集,以更高效的自顶向下方式生成规则。

What Python libraries can I use to implement association rules mining in Python?

在 Python 中可用于实现关联规则挖掘的库包括 apyori 与 mlxtend。apyori 提供 Apriori 算法的简易实现,而 mlxtend 则在 Apriori 之外提供更多算法与功能。您也可以使用 PyCaret,它在 mlxtend 之上提供了 Apriori 算法的简便实现。

What are some common metrics used for assessing the quality of rules?

用于评估关联规则质量的常见指标包括支持度(support)、置信度(confidence)与提升度(lift)。

What is the difference between support and confidence?

在关联规则挖掘中,支持度表示数据集中包含某一项目或项目集的交易所占比例;而置信度表示在同时存在另一项目或项目集的前提下,包含某一项目或项目集的交易所占比例。支持度用于衡量某一项目或项目集的重要性或相关性,置信度则用于衡量某条规则的强度或可靠性。

Is association rule mining supervised or unsupervised?

关联规则挖掘是一种无监督的机器学习技术,因为它不需要带标签的训练数据。其目标在于发现数据中的模式或关系,而非基于带标签示例去预测特定结果。

What are some drawbacks of Apriori algorithm?

Apriori 算法的主要缺点之一是计算成本较高,尤其在大型数据集上。该算法会生成并检验大量候选规则,过程耗时。此外,Apriori 对最小支持度阈值较为敏感,不恰当的阈值选择会导致性能不佳。算法还需要大量内存来存储项集,这在超大规模数据集上可能成为问题。

Can association rule mining be used with continuous variables or only categorical variables?

关联规则挖掘通常用于分类变量(取值有限)。不过,通过将连续变量离散化为若干类别区间或范围,也可以将其用于连续变量。

主题