关于算法:常见数据分析场景关联分析Apriori算法

47次阅读

共计 2495 个字符,预计需要花费 7 分钟才能阅读完成。

想必大家都据说过啤酒和纸尿裤的故事,十分典型的提篮剖析,通过剖析顾客的购买习惯,制订相应的营销策略,从而进步营收,是关联剖析在批发超市中的一个具体分析场景。明天就来总结下关联剖析的基本概念以及如何用 Apriori 算法实现关联剖析。

一、关联剖析是什么?

1. 关联剖析的定义

关联剖析是数据挖掘中一种简略而实用的技术,通过深入分析数据集,寻找事物之间的关联性,开掘频繁呈现的组合,并形容组合对象同时呈现的模式和法则。
关联剖析技术不仅能够用来剖析用户购买商品之间的关联性制订营销策略,也能够利用于智能举荐零碎、医疗、保险等畛域。

2. 关联剖析的基本概念
  • 事务库:记录用户行为的数据,以提篮剖析来说,就是用户的订单交易信息以及商品数据。
  • 事务:事务库中每一行记录就是一笔事务,以提篮剖析来说,一笔订单就是一笔事务。
  • 项和项集:在购物篮事务库中,订单中的每个商品就是一个项,项的汇合称为项集。
  • 关联规定:由“前件”和“后件”组成,A->B,{A,B}->C, 别离代表如果一个用户购买了 A 也会购买 B,一个用户购买了 A 和 B,也会购买 C。
  • 反对度:蕴含该项集的事务在整体所有事务中所占的比例。例如项集 {A,B} 在购物篮中共呈现 3 次,一共由 5 笔订单,则项集 {A,B} 的反对度为 3 /5。
  • 频繁项集:反对度大于人为设定的阈值的项集成为频繁项集。
  • 置信度:置信度的含意是项集 Y 在蕴含项集 X 的事务中呈现的频繁水平。在购物篮事务中,关联规定 X ->Y 的置信度 =P(Y|X)=P(XY)/P(X)=support(X,Y)/support(X)
  • 强关联规定:强关联规定是指频繁项集中满足了最小置信度的关联规定,即项集首先要满足最小反对度。

二、Apriori 算法是什么?

Apriori 算法是驰名的关联规定的开掘算法之一,外围是递推算法,步骤如下:

  1. 设定最小反对度和最小置信度
  2. 依据最小反对度找出频繁项集
  3. 依据最小置信度找出强关联规定

三、Apriori 算法在 Python 中的应用

Python 中能够利用 apyori 库和 mlxtend 库疾速推到强关联规定,apyori 库应用简略,但有时会漏掉一些强关联规定;mlxtend 库稍显麻烦,但比拟谨严。

1. 案例 1 - 用 apyori 库实现病症关联剖析
import pandas as pd
df = pd.read_excel('西医辨证.xlsx')
print(df.head())

excel 数据中存储的是病人的编号和病人病症,共 1000 条:

symptoms = []
for i in df['病人症状'].tolist():
    symptoms.append(i.split(','))
print(symptoms)

去掉逗号之后的 list:symptoms

from apyori import apriori
#设置反对度和置信度
rules = apriori(symptoms, min_support=0.1, min_confidence=0.7)
results = list(rules)

for i in results:
    for j in i.ordered_statistics: #获取频繁项集中的强关联规定
        # 前件
        X = j.items_base
        # 后件
        Y = j.items_add
        x = ','.join([item for item in X]) #连贯前件中的元素
        y = ','.join([item for item in Y])
        if x != '': #避免前件呈现为空的状况
            print(x + '→' + y)

最终获取后果如下:

2. 案例 1 - 用 mlxtend 库实现亚马逊提篮剖析

数据集是在 kaggle 上下载的,是个 1000 行的数据集,mlxtend 的数据要求是不能有 id 列,要有表头,值必须是 True 或者 False 的字符串

import pandas as pd
df = pd.read_csv('basket_analysis.csv')

print(df.head())

from mlxtend.frequent_patterns import apriori
items = apriori(df,min_support=0.1, use_colnames=True)
print(items)

items 是合乎置信度大于等于 0.1 的频繁项集

from mlxtend.frequent_patterns import association_rules
rules = association_rules(items, min_threshold=0.4)

rules 是最初获取到的后果集

表头的列如上,其中 antecedents 列代表关联规定中的前件,如关联规定 {A}→{B} 中的 {A};consequents 列代表关联规定中的后件,如关联规定{A}→{B} 中的{B};antecedent support 列代表前件的反对度,consequent support 列代表后件的反对度,support 列代表该关联规定的反对度,confidence 列代表该关联规定的置信度。

输入后果中的 lift、leverage、conviction 这 3 列都是用来掂量关联度强弱的:
lift 列代表该关联规定的晋升度,其计算公式为“关联规定反对度 /(前件反对度×后件反对度)”,该值越大,表明 X 和 Y 的关联度越强;
leverage 列代表关联规定的杠杆率,其计算公式为“关联规定反对度 - 前件反对度×后件反对度”,该值越大,表明 X 和 Y 的关联度越强;
conviction 列代表关联规定确实信度,其计算公式为“(1- 后件反对度)/(1- 关联规定置信度)”,该值越大,表明 X 和 Y 的关联度越强。

for i, j in rules.iterrows():
    X = j['antecedents']
    Y = j['consequents']
    x = ','.join([item for item in X])
    y = ','.join([item for item in Y])
    print(x + '→' + y)

这是最初呈现的局部关联规定,其中置信度的参数能够本人灵便调整,我一开始设置为 0.7 是没有后果的,阐明这个数据集中的商品购买 关联性没有达到 70% 这个比例的。
理论使用能够视理论场景而定,针对不同置信度的关联商品做分阶段的商品营销策略。

正文完
 0