统计物料A与B同时出现的概率,Apriori算法,关联性分析

统计物料A与B同时出现的概率,Apriori算法,关联性分析

该任务主要是根据一次拣货的数据,来进行物料之间的关联性分析。从大规模数据集中寻找物品间的隐含关系被称作关联分析(association analysis)或者关联规则学习(association rule learning)。以前沃尔玛就是用关联性分析去得出啤酒和纸尿裤一起被购买的关联性。但这里的主要问题在于,如果数据量较大,寻找物品的不同组合是一项十分耗时的任务,所需的计算代价很高,蛮力搜索方法并不能解决这个问题,所以需要用更智能的方法在合理的时间范围内找到频繁项集。

而本文所要求得物料A与B同时出现的概率,其实是求频繁项的概率。该任务中,主要是求频繁出现的两件物料,具体是哪两件物料未知,需要对数据进行统计分析才可以得知。
在关联分析中,频繁项集(frequent item sets)是指那些经常出现在一起的物品集合。关联规则(association rules)暗示两种物品之间可能存在很强的关系。

关联性分析中的支持度和可信度定义。一个项集的支持度(support)被定义数据集中包含该项集的记录所占的比例。支持度是针对项集来说的,因此可以定义一个最小支持度,而只保留满足最小值尺度的项集。这里的支持度,相当于求同时出现的概率。可信度或置信度(confidence)是针对关联规则来定义的。这里的可信度相当于求条件概率。

考虑到任务所提供的数据量较大,而且物料的种类数量较多,这里就考虑使用关联分析中最经典的算法----Apriori算法去进行数据分析。

一种所谓的Apriori原理,可以帮助我们减少计算量。Apriori原理是说如果某个项集是频繁的,那么它的所有子集也是频繁的。更常用的是它的逆否命题,即如果一个项集是非频繁的,那么它的所有超集也是非频繁的。

Apriori算法的主要思想有点类似于剪枝,从而大大减少计算量。

1、使用Apriori算法来发现频繁集:

关联分析的目标包括两项:发现频繁项集和发现关联规则。首先需要找到频繁项集,然后才能获得关联规则(正如前文所讲,计算关联规则的可信度需要用到频繁项集的支持度)。

Apriori算法是发现频繁项集的一种方法。Apriori算法的两个输入参数分别是最小支持度和数据集。该算法首先会生成所有单个元素的项集列表。接着扫描数据集来查看哪些项集满足最小支持度要求,那些不满足最小支持度的集合会被去掉。然后,对剩下来的集合进行组合以生成包含两个元素的项集。接下来,再重新扫描交易记录,去掉不满足最小支持度的项集。该过程重复进行直到所有项集都被去掉。

目前任务所需要的数据主要是来源于SQL Server,而且是测试数据。前期需要对数据进行预处理,然后在对处理过后的数据进行分析。
(1)数据预处理:
利用SQL语句去除确实数据的订单记录,如下:
在这里插入图片描述

SELECT RequestID, MaterialCode FROM [dbo].[WMS_Out_RequestOccupiedDetail] WHERE CreateDateTime like '%2020%' and IsDel = 0 and MaterialCode is not null and RequestID is not null

这条SQL语句主要用于查询出2020年所有的订单记录,一共有178870条。当然,这些是在去除full值之后出来的查询结果。查询结果主要包含需要分析的两列,一列是RequestID,一列是MaterialCode。

然后在Navicat Premium 导出为xlsx格式的文件,最后使用Python来进行分析。

Python已经有apriori库函数,可以直接安装之后再调用。
目前我使用的是anaconda+Python3.8编程环境,apriori的安装相当简单,就是一句命令:

Pip install apyori

下面是Python代码:

import pandas as pd
from apyori import apriori
data = pd.read_excel('AB2020.xlsx')
data = data.drop_duplicates()
data = data.astype(str)
itemSets = []
groups = data.groupby(by='RequestID')
for group in groups:
    itemSets.append(group[1]['MaterialCode'].tolist())
    
dataSet = itemSets
result = list(apriori(transactions = dataSet,min_support = 0.5,max_length = 3))
Result

这里设置的最低支持度为50%(也就是同时出现的概率为50%),最多的物料种类为3(也就是同时出现的物料种类为3)。

得到的结果如下:
统计物料A与B同时出现的概率,Apriori算法,关联性分析_第1张图片
统计物料A与B同时出现的概率,Apriori算法,关联性分析_第2张图片

你可能感兴趣的:(Python,统计学习方法,算法,数据挖掘,数据分析)