Apriori Algorithm - 先验算法,基于数据挖掘和关联规则的推荐算法(一)
什么是Apriori
如副标题,Apriori 是一个基于数据挖掘和关联规则的推荐算法,旨在通过数据挖掘分析数据之前的关联性,并根据关联性强弱进行相关数据的推送。在早期,Netflix正是使用此算法,使其流媒体平台能实现对用户的精准推送。
以Netflix为例:用户A观看过《太空漫游2001》、《星际穿越》。而用户B观看过《太空漫游2001》、《火星救援》。此时一名新用户C,他仅在流媒体观看过《星际穿越》,平台则根据关联规则,为用户C推荐了《太空漫游》和《星际穿越》。从此例子看出,数据之间存在某些关联性,而Apriori算法则可以挖掘出这些关联性,实现精准的用户推送。
Apriori的核心
引用文献&资料1:https://en.wikipedia.org/wiki/Apriori_algorithm(维基百科)
优点:易于代码实现
缺点:数据集合量越大,算法效率越低
tips:可通过进阶算法:FP-Growth解决Apriori的局限性
关键参数 - 要实现Apriori算法需先定义2个值和计算3个值:
最小支持度:minSup(只有大于等于此值的集合才能参与下轮递归,低于此值的集合将不参与递归)
最小置信度:minConf(所有置信度需大于等于此值才符合最强关联规则,否则此值不具备参考性)
支持度:support(以下简称Sup)
置信度:confidence(以下简称Conf)
提升度:lift(以下简称Lift)
tips: 关于minSup和minConf的参数调优,以下是DeepSeek给出的参考(AI工具仅供参考,具体参数调优,需要根据数据集微调)
什么是数据频繁项集
引用文献&资料3:https://www.geeksforgeeks.org/r-language/association-rule-mining-in-r-programming/(Geeks for Geeks 极客社区文章:《Association Rule Mining in R Programming》)
例:这里有一个订单表,3名用户分别购买了以下产品:
订单列表 | |
---|---|
用户A | 菠萝、西瓜、柠檬 |
用户B | 苹果、菠萝、西瓜 |
用户C | 火龙果、苹果、西瓜,柠檬 |
首先,数据的频繁一项集即所有出现的产品:{菠萝}, {西瓜}, {柠檬}, {苹果}, {火龙果}
数据的频繁二项集即所有出现的产品的排列组合:{菠萝,西瓜}, {菠萝,柠檬}, {菠萝,苹果}, {菠萝,火龙果}, {西瓜,柠檬}, {西瓜,苹果}, {西瓜,火龙果}, {柠檬,苹果},{柠檬,火龙果},{苹果,火龙果}
以此类推,数据的频繁K项集,即穷举所有产品的排列组合(当然,未出现在订单表的组合为无用组合)。在电商领域一般只需要3项集即可。即:{菠萝,西瓜,柠檬},{菠萝,西瓜,苹果} ...等 -> {P1,P2,P3}。理解了数据频繁项集这个概念后,我们来看Apriori的核心算法公式
Apriori核心算法公式
tips:所有公式的计算需要按项计算:K=1 → K=2 → K=3 → K=N
Sup formula:
即:Sup = {A,B} / total number of data collections
支持度 = 包含数据A,B的集合数量 / 数据集总量
*(total number of data collections 或 total number of transactions 以下简写为:T)
即:Sup₁ = {A} / T 、 Sup₂ = {A,B} / T 、 Sup₃ = {A,B,C} / T
Conf formula:
即:Conf(A→B) = {A,B} / {A}
置信度(A→B) = 包含{A,B}的集合数 / 包含{A}的集合数
以此类推,二阶(k=2)对应公式为:Conf({A,B}→{C}) = {A,B,C} / {A,B}
Lift formula:
即:Lift(A→B) = Sup{A,B} / Sup{A} * Sup{B}
提升度(A→B) = 支持度{A,B} / 支持度{A} * 支持度{B}
以此类推,二阶对应公式为:Lift({A,B}→{C}) = Sup{A,B,C} / Sup{A,B} * Sup{C}
*Lift < 1:负相关(彼此不太可能一起出现)即:不太可能一起买,前者甚至影响后者销量
*Lift = 1:无相关(彼此独立)即:毫无关联
*Lift > 1:正相关(彼此倾向于一起出现)即:很可能一起买,前者可以提高后者销量
结语
至此,我们已明确Apriori的概念,数据频繁项集的概念,Apriori的核心算法公式。下一章我们开始用一个简单的例子,手工演算Apriori算法,并发现数据之间的关联性规则