解决方案:使用Apriori算法进行关联分析

优采云 发布时间: 2022-12-23 18:22

  解决方案:使用Apriori算法进行关联分析

  目录

  1.名词概念

  2. 频繁项集发现

  3. Apriori算法关联分析

  4.代码实现

  5.参考文章

  结合交叉变量制定风控策略有两种方式:一种是通过决策树分箱进行变量交叉,文章中可以看到,一个函数实现了自动风控策略挖掘; 另一种是使用先验算法进行相关性分析。

  关联分析是从*敏*感*词*数据集中寻找物品之间的隐含关系,比如著名的例子“啤酒和尿布”,即发现买啤酒的顾客也买尿布,商店可以更多地了解顾客'通过挖掘这些规则来进行购买行为。 然而,关联分析需要从大量数据集中寻找组合关系,计算成本非常高,因此应用Aprior算法以合理的算法高效地发现组合规则(也称为频繁项集)。

  假设一个简单的交易列表如下,每个代表5笔交易。

  以下是关联分析中使用的一些名词概念。

  1.项目和项目集

  item指的是我们分析数据中的一个对象,比如豆浆; 一个项目集是由多个项目组成的一组项目,例如集合{豆浆,生菜}是一个2项集。

  2.支持

  某个项目集出现在数据集中的概率。 即,项目集在记录中出现的次数除以数据集中所有记录的数量。 比如豆浆的支持度是4/5,{豆浆、纸尿裤}的支持度是3/5。

  支持度反映了项目集出现的频率。 只有当一个项目集的支持度达到一定水平时,我们才能对项目集进行研究。

  3.信心

  也称为可信度,它是为关联规则定义的。 关联规则{A->B}的置信度是A和B同时出现的次数除以A出现的次数。 也就是说,在 A 发生的情况下 B 发生的概率。

  例如{尿布 -> 葡萄酒} = 支撑力(尿布 -> 葡萄酒)/支撑力(尿布)= 3/5 除以 4/5 = 0.75。 也就是说,在购买尿布的情况下,有 75% 的概率购买葡萄酒。

  4.电梯

  在关联规则{A->B}中,提升度是指{A->B}的置信度除以B的支持度。提升度反映了合并(应用关联规则)与不合并(不应用关联)的比率规则)。 如果提升度大于 1,则表示应用关联规则是有价值的。 如果lift小于1,说明关联规则的应用有负面影响。

  例如{尿布 -> 葡萄酒} = 置信度(尿布 -> 葡萄酒)/支持度(葡萄酒)= 0.75/0.6 = 1.25

  查找频繁项集

  一般支持度和置信度是用于量化关联分析成功与否的方法。 例如,对于只有 4 个项目的集合 {0,1,2,3},我们希望获得每个可能集合的支持度。 首先,你需要列出4项可能的组合,一共有15种组合。

  例如,如果需要计算{0,3}项集的支持度,则需要遍历每条记录,检查记录中是否收录0和3,如果收录则将计数值加1。 这样就可以得到{0, 3}项集的支持度,需要重复上述过程得到每个可能集合的支持度。

  对于一个N项的数据集,共有2N−12^N-12N−1项集组合,计算量巨大。 为了减少计算所需的时间,可以使用 Apriori 来寻找频繁项集。

  Apriori算法原理

  Apriori在拉丁语中是“从之前”的意思,即先验知识或假设。 它的原理是如果一个项集是频繁的,那么它的所有子集也都是频繁的。

  如上图所示,如果{0,1}是频繁的,那么{0}和{1}也一定是频繁的。 因为{0}和{1}的支持度必须大于等于{0,1}。 相反,如果一个项集是一个不频繁的项集,那么它的所有超集也都是不频繁的。 如下所示:

  如果{2,3}不频繁,那么{0,2,3},{1,2,3},{0,1,2,3}也一定不频繁,因为{2,3}支持 度必须大于或等于其超集的支持度。

  使用 Apriori 算法发现频繁项集

  关联分析的目标分为两类:发现频繁项集和发现关联规则。 首先需要找到频繁项集,然后才能得到关联规则。

  Apriori算法需要输入两个参数,一个是最小支持度,一个是数据集。 进行如下:

  1.为单个项目生成项目集

  

  2.剔除支持度小于阈值的项,得到频繁1-项集

  3.合并频繁的1-itemsets得到2-itemsets

  4.剔除支持度小于阈值的items,得到频繁2-itemsets

  5.重复以上步骤,直到所有item set都被移除

  具体例子见下图:

  在上面的例子中,得到的频繁项集是{2}{3}{4}{2,4}。

  从频繁项集中挖掘关联规则

  关联规则需要从频繁项集中生成。 比如上面的例子,一个频繁项集是{2,4},那么可能存在关联规则{2}->{4},也就是说买2的人也倾向于买4。但是反过来不一定是真的。

  对于关联规则的量化,需要置信度。 规则 P->H 的置信度定义如下:

  信心(P|H)=支持度(P|H)支持度(P)信心度(P|H)=\frac{支持度(P|H)}{支持度(P)}信心度(P|H)=支持度(P )支持(P|H)

  例如置信度{2|4}=4/5=0.8,置信度{4|2}=4/6=0.66,即在买的情况下有80%的概率买2 4、而在买2的情况下,有66%的概率只买4。

  项集{0,1,2,3}要生成关联规则,需要生成一个可能的规则列表,然后检验每条规则的可信度。 可能的规则列表如下:

  可以找到以下属性:

  如果规则不满足最小置信度,则该规则的所有子集也不满足最小置信度。

  例如规则{0,1,2}->{3}不满足最低可信度要求,那么任何左边部分为{0,1,2}子集的规则都不满足最低可信度要求,或 结果为 {3} 的所有规则将不满足最低置信度要求。 原因是这些规则的置信度的分子相同,而{0,1,2}->3的分母{0,1,2}的支持度最小,导致这条规则的置信度最大. 因此,其他规则的置信度只会比这个小,达不到最低可靠性要求。

  除了可用于挖掘关联规则的Apriori算法外,FP-growth算法针对Apriori算法进一步优化,可以显着加快频繁项集的发现速度。

  代码实现(Python)

  sklearn 库中没有 Apriori 算法,也没有 FP-Growth 算法。 但是可以使用python的第三方库实现Aprior算法来发现关联规则。 相关库包括mlxtend机器学习包、efficient-apriori等。首先附上一个Apriori的开源实现链接,AprioriDemo

  Aprior 算法在这里使用 mlxtend 库实现。

  import pandas as pd

from mlxtend.frequent_patterns import apriori

from mlxtend.frequent_patterns import association_rules

df = pd.read_excel('./Online Retail.xlsx')

df.head()

  对数据进行预处理,去除Description字段前后空格,删除*敏*感*词*号“InvoiceNo”为空的数据记录,将*敏*感*词*号“InvoiceNo”字段转为字符类型,删除*敏*感*词*号“InvoiceNo”的记录不收录“C”。

  然后需要将数据集转换成购物篮的格式,如下图所示:

  列名是产品名称,每一行是一个订单。

  有两种转换方法:

  方法一:使用pivot_table函数

  import numpy as np

basket = df[df['Country'] =="France"].pivot_table(columns = "Description",index="InvoiceNo",

<p>

values="Quantity",aggfunc=np.sum).fillna(0)

</p>

  方法二:groupby后unstack

  basket2 = (df[df[&#39;Country&#39;] =="Germany"]

.groupby([&#39;InvoiceNo&#39;, &#39;Description&#39;])[&#39;Quantity&#39;]

.sum().unstack().reset_index().fillna(0)

.set_index(&#39;InvoiceNo&#39;))

  然后将购物数量变成0/1变量,即是否购买该商品。

  def encode_units(x):

if x = 1:

return 1

basket_sets = basket.applymap(encode_units)

basket_sets.drop(&#39;POSTAGE&#39;, inplace=True, axis=1)

  使用算法包的关联规则操作

  frequent_itemsets = apriori(basket_sets2, min_support=0.05, use_colnames=True)

rules = association_rules(frequent_itemsets, metric="lift", min_threshold=1)

  frequent_itemsets 是频繁项集:

  Support 列为support,即item set出现频率/总订单量

  rules是最终的关联规则结果表:

  Antecedants前项集,后项后项集,support支持,confidence置信度,lift提升。选择confidence大于0.8,lift大于5的规则,按lift降序排列

  参考文章

  1.机器学习实践第11章

  2. Python极简关联分析(购物篮分析)

  【作者】:实验室

  【原创公众号】:风控猎人

  【简介】:创业公司战略分析师,积极上进,努力提升。 世事无常,你我都是黑马。

  核心方法:整站SEO优化和关键词排名优化的区别在哪里

  “之所以混淆全站SEO优化和关键词排名优化,是因为关键词排名被视为SEO优化的最终目标。但是,从某种意义上说,关键词排名只是全站SEO优化的一个表现维度。效果,整站SEO优化和关键词优化在实施过程和效果导向上有很大的不同和不同。”

  一般来说,SEO优化实际上是指利用白帽优化手段来提高网站质量,不仅是对搜索引擎友好性的优化整改,更是对网站权威性和专业性的提升。 ,并从搜索需求和用户体验的角度不断改进搜索。 引擎信任该站点,以便获得稳定增长的免费搜索流量。

  全站SEO优化

  对于整个站点的SEO优化,需要完成对搜索引擎友好的调整,从流量结构、用户粘性等多个维度对站点进行优化。 同样,整个站点的SEO优化效果也体现在抓取量、收录速度、索引量上。 以及用户流量价值等各方面,甚至在搜索词排名表现的维度上,也不仅仅是特定关键词的位置不稳定,而是有足够的词表能力围绕核心关键词展开。

  虽然通过关键词排名来测试整个站点的SEO效果并没有错,但是关键词优化以搜索排名作为唯一的测试标准,在优化操作中很容易导致用户体验受损,刻意“讨好”搜索引擎,导致网站被搜索引擎判断为过度优化甚至作弊而被K站降级。

  

  网站优化和关键词优化的区别

  1)优化目标不同

  整站优化是为了提高网站质量,既符合搜索引擎标准,又满足用户的搜索需求,增加网站权重,建立稳定的SEO流量来源。 但关键词优化是一味地“取悦”搜索引擎。 既不注重网站质量的提升,也不考虑用户的搜索需求。 得到的只是昙花一现的关键词排名和毫无价值的短期流量。

  2)实现过程不同

  整站优化利用站内SEO提高网站对搜索引擎的友好度,以用户搜索需求为原则持续输出内容,围绕用户体验不断提升网站领域的专业性和权威性,建立并不断完善关键词库制定合理的关键词布局策略。 然而,关键词优化在目标词周围产生了大量低质量无意义的内容,并通过关键词堆砌或重复滥用来增加关键词密度,导致搜索引擎误判网页内容。

  3)SEO效果检测标准不同

  

  全站SEO优化效果检测是对网站收录、索引、抓取量、字数、搜索显示点击率、网站权重等多个维度的综合评价,而关键词优化只评价排名和位置在搜索结果中正是这种错误的SEO思维导致了以结果为导向的SEO优化效果检测方式,成为快排作弊等优化服务眼中最公平公正的SEO计费方式。

  4)流量值不同

  整个站点的优化都是基于用户的搜索体验。 在帮助搜索引擎识别和建立信任的同时,会逐渐在用户心中形成一定的认同度,从而赋予网站一定的销售和推广能力。 关键词优化没有把握好搜索引擎和用户体验的程度,关键词数量有限,排名不稳定,能带来的流量屈指可数,与SEM竞价推广点击的成本相比,具有相当大的优势,但排名效果花大力气实现的付费流量可以说是唾手可得。

  关键词排名优化

  全站SEO是围绕搜索引擎和用户体验优化网站质量,而关键词优化只是围绕目标词优化搜索引擎,无论从流量稳定性、增长性还是可持续性方面,全站优化带来的价值远非关键词优化可比。

  全站优化可以为任何目标关键词排名提供足够的竞争优势,而关键词优化只能带来难以自保的特定关键词排名。 如果对搜索引擎营销的理解仅仅停留在关键词排名维度,那么SEM付费推广的获客成本可能远低于关键词优化。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线