利⽤Python进⾏市场购物篮分析——⼊门篇
我们从⽇常⽣活中获取数据,⼤量的商业活动以及社交活动为我们提供了丰富的数据。如何从这些看似⽆⽤的数据中提取价值,这对于我们程序猿来说应该是我们的职责所在。今天就让我们⽤Python来进⾏市场购物篮的分析。
python分析师可以使⽤许多数据分析⼯具,但知道在那些情况下使⽤那些数据分析⼯具可能很困难。⼀种有⽤的(但却被忽视)的技术称为关联分析,它尝试在⼤型数据集中查相关商品之间的关联。⼀个具体的应⽤通常称为市场篮⼦分析。最经典引⽤的市场篮⼦分析的例⼦是所谓的“啤酒和尿布”案例。基本的故事是,⼤型零售商能够挖掘他们的交易数据,并到⼀个意想不到的购买啤酒和婴⼉尿布的购买模式。
不幸的是,这个故事很可能是⼀个。然⽽,它是挖掘事务数据可以获得的商业价值的⽰例。
如果你对Python数据科学有⼀些基本的了解,可能你的第⼀个倾向就是考虑scikit学习⼀个现成的算法。然⽽,scikit-learn不⽀持这种算法。幸运的是,Sebastian Raschka 提供了⾮常有⽤的具有的库的,以⽅便我们进⼀步分析我们所掌握的数据。
接下来我将演⽰⼀个使⽤此库来分析相对较⼤的数据集的⽰例,并尝试查有趣的购买组合。在本⽂结尾处,我希望你能掌握将其应⽤于你⾃⼰的数据集的基本⽅法。
为什么是关联分析?
在当今的世界,有许多复杂的数据分析⽅法(聚类,回归,神经⽹络,随机森林,SVM等)。这些⽅法中的很多种所⾯临的挑战在于它们可能难以调整,并需要相当多的数据准备和特征⼯程才能获得好的结果。换句话说,它们都⾮常强⼤,但需要掌握很多知识才能正确实现。
关联分析对数学知识的掌握要求⾮常低,⽽且结果易于向⾮技术⼈员解释。此外,它是⼀种⽆监督的学习⼯具,可以查隐藏的模式,因此对数据准备和特征⼯程的需求有限。对于某些数据探索案例来说,这是⼀个很好的开始,并且可以发现使⽤其他⽅法深⼊了解数据的⽅式。
另外⼀个额外的好处,MLxtend库中的python实现对于⾮常熟悉scikit-learn 和pandas应该是⾮常简单的。由于所有这些原因,我认为这是⼀个有⽤的⼯具来帮助你解决数据分析实际问题。
关联分析101
理解关联分析中常⽤使⽤的⼏个术语很重要。在是为那些有兴趣了解这些定义和算法实现的⼈,让他们对关联分析的数学⽅法有⼀个基本的概念。
关联规则通常如下:{Diapers} - > {Beer},这意味着在同⼀交易中购买尿布的客户之间和购买啤酒之间存在很强的关系。
安装应用商店
在上⾯的例⼦中,{Diaper}是前提,{Beer}是后果。前提和后果可以包含很多内容,换句话说,就是类似{Diaper,Gum} - >
{Beer,Chips}也是⼀个有效的关联规则。
信⼼是对关联规则可靠性的度量。上述例⼦中有0.5的信⼼意味着在购买了Diaper和Gum的情况下,有50%的可能去购买Beer和Chips。对于产品推荐,50%的置信度可能是完全可以接受的,但在医疗情况下,此级别可能不够⾼。
Lift是观察到的⽀持与预期的⽀持的⽐率(lift解释详见)。基本的经验法则是Lift接近1表⽰规则完全独⽴。Lift>如果两个规则是独⽴的,Lift
1通常更“有趣”,可以表⽰这是有⽤的规则模式。
最后⼀个注意事项,与数据有关。此分析要求将交易的所有数据包含在1⾏中,并且编码⽅式应为one-hot编码(了解one-Hot编码)。了解MLxtend 的对了解如何运⽤是⾮常有⽤:
本⽂的具体来⾃UCI机器学习存储库,数据代表了2010-2011年英国零售商的交易数据。这主要代表的是批发商的销售数据,所以它与消费者购买模式略有不同,但仍然是⼀个有⽤的案例研究。
代码讲解
可以使⽤pip安装MLxtend,只有安装了MLxtend下⾯的代码才能真正运⾏。⼀旦安装完毕,下⾯的代码将会开始⼯作。我已经将源代码上传⾄,以⽅便你的下载。
获取我们的Pandas和MLxtend代码导⼊并读取数据:
import pandas as pd
from mlxtend.frequent_patterns import apriori
from mlxtend.frequent_patterns import association_rules
ad_excel('archive.ics.uci.edu/ml/machine-learning-databases/00352/Online%20Retail.xlsx')
df.head()
我们需要做⼀点数据处理。⾸先,⼀些数据描述中具有需要删除的空格。我们还会删除没有发票编号的⾏,并删除信⽤交易(发票编号包含C)。
df['Description'] = df['Description'].str.strip()
df.dropna(axis=0, subset=['InvoiceNo'], inplace=True)
df['InvoiceNo'] = df['InvoiceNo'].astype('str')
df = df[~df['InvoiceNo'].ains('C')]
数据清理完成后,我们需要将每个产品。为了保持数据集⼩,我选择只是看法国的销售记录。然⽽,在下⾯的其他代码中,我将这些结果与德国的销售进⾏⽐较。进⼀步的国家⽐较将会是有趣的调查。
basket = (df[df['Country'] =="France"]
.groupby(['InvoiceNo', 'Description'])['Quantity']
.sum().unstack().reset_index().fillna(0)
.set_index('InvoiceNo'))
以下是前⼏列的样⼦(注意,我在列中添加了⼀些数字来说明这个概念,这个例⼦中的实际数据全是0).
数据中有很多零,但是我们还需要确保将任何正则转换为1,⽽将0设置为0。此步骤将完成数据的one-
hot编码,并删除邮资列:
def encode_units(x):
if x <= 0:
return 0
if x >= 1:
return 1
basket_sets = basket.applymap(encode_units)
basket_sets.drop('POSTAGE', inplace=True, axis=1)
既然数据的结构是正确,我们可以⽣成⽀持⾄少7%的频繁项⽬集(选择这个数字,可以帮助我得到更多有⽤的例⼦。)
frequent_itemsets = apriori(basket_sets, min_support=0.07, use_colnames=True)
最后⼀步是产⽣相应的信⼼和提升的规则:
rules = association_rules(frequent_itemsets, metric="lift", min_threshold=1)
rules.head()
这就是这个项⽬的⼀切!
现在,最棘⼿的部分是弄清楚我们得到的这些结论告诉我们什么了。可能绝⼤多数程序猿不太关注。例如,我们可以发现很多关联规则具有很⾼的提升价值,这意味着它的发⽣频率可能会⾼于交易和产品组合数量的预期值。这部分分析是⾏业知识将派上⽤场的地⽅。由于我没有,所以我只是想⼏个说明性的例⼦。
我们可以使⽤标准的pandas code来过滤数据帧。在这种情况下,寻⼀个lift(6)和⾼信度(.8):
rules[ (rules['lift'] >= 6) &
(rules['confidence'] >= 0.8) ]
在查看规则时,可以发现似乎绿⾊和红⾊闹钟是⼀起购买的,红纸杯,餐⼱纸和纸板是以总体概率提⾼的⽅式⼀起购买的。
您可能想要看看有多⼤的机会可以使⽤⼀种产品的受欢迎程度来推动另⼀种产品的销售。例如,我们可以看到,我们销售340个绿⾊闹钟,但只有316个红⾊闹钟,所以也许我们可以通过科学的⽅法来推动更多的红⾊闹钟销售。
basket['ALARM CLOCK BAKELIKE GREEN'].sum()
340.0
basket['ALARM CLOCK BAKELIKE RED'].sum()
316.0
我们来看看德国有什么流⾏的组合呢?
basket2 = (df[df['Country'] =="Germany"]
.groupby(['InvoiceNo', 'Description'])['Quantity']
.sum().unstack().reset_index().fillna(0)
.set_index('InvoiceNo'))
basket_sets2 = basket2.applymap(encode_units)
basket_sets2.drop('POSTAGE', inplace=True, axis=1)
frequent_itemsets2=apriori(basket_sets2,min_support=0.05, use_colnames=True)
rules2= association_rules(frequent_itemsets2, metric="lift", min_threshold=1)
rules2[ (rules2['lift'] >= 4) &
(rules2['confidence'] >= 0.5)]
似乎除了⼤卫·哈塞尔夫以外,德国⼈喜欢锡太太雄和林地动物的Plaster。
在⾮常认真的情况下,熟悉数据的分析师可能会有⼗⼏个不同的问题,即这种类型的分析可以发挥商业价值。我没有将此分析复制到额外的国家或客户组合,但是由于上述基本的pandas代码,整个过程将相对简单。
结论
关联分析有⼀个⾮常好的⽅⾯是它很容易运⾏,相对容易解释。如果您没有使⽤MLxtend和关联分析,则使⽤基本Excel分析到这些模式将是⾮常困难。使⽤python和MLxtend,分析过程相对简单,如果你了解Python,你可以访问python⽣态系统中的所有其他可视化技术和数据分析⼯具。
最后,我建议您查看MLxtend库的其余部分。如果您在使⽤scikit-learn做⼯作,可以了解并熟悉MLxtend,以及如何增加数据科学⼯具包中的⼀些现有⼯具。
本⽂由北邮推荐,@阿⾥云云栖社区组织翻译。
⽂章原标题《》,
作者: 译者:袁虎 审阅:董昭男
⽂章为简译,更为详细的内容,请查看

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。