6. PySpark关联规则及聚类模型简明教程

一、PySpark关联规则模型

  关联规则分析为的就是发现商品与商品之间的关联。通过计算商品之间的支持度、置信度与提升度,分析哪些商品有正向关系,顾客愿意同时购买它们。
  此处使用了pyspark自带的FPGrowth算法。它和APRIORI算法一样都是计算两两商品之间支持度置信度与提升度的算法,虽然算法流程不同,但是计算结果是一样的。

(1) Antecedent(前件)
  定义:在关联规则中,if部分称为前提(Antecedent),表示某些物品的组合。它是规则中用于推断或预测的条件部分。
  示例:在规则“购买牛奶 → 购买面包”中,“购买牛奶”是前件。
(2) Consequent(后件)
  定义:在关联规则中,then部分称为结果(Consequent),表示其他物品的组合。它是在前件满足时可能发生的结果。
  示例:在规则“购买牛奶 → 购买面包”中,“购买面包”是后件。
(3) Confidence(置信度)
  定义:置信度是关联规则的可信程度,表示在包含前件的事务中,同时也包含后件的事务所占的比例。
  示例:如果购买牛奶的顾客中有70%也购买了面包,则规则“购买牛奶 → 购买面包”的置信度为70%。
(4) Lift(提升度)
  定义:提升度表示在包含前件的事务中同时包含后件的比例,与仅包含后件的事务的比例之间的比值。它反映了前件对后件出现的提升作用。
  示例:如果购买牛奶的顾客中购买面包的比例是70%,而所有顾客中购买面包的比例是50%,则规则“购买牛奶 → 购买面包”的提升度为1.4(70% / 50%)。
(5) Support(支持度)
  定义:支持度是项集在数据集中出现的频率或概率,表示同时包含前件和后件的事务占所有事务的比例。
  示例:如果100个购物交易中,有30个交易同时包含了牛奶和面包,则规则“购买牛奶 → 购买面包”的支持度为30%。

二、关联规则模型应用

1. 数据集介绍

  数据集:简单关联规则分析.txt,为5张购物小票,每张购物小票上面是购买的商品名称,如下图所示。
在这里插入图片描述
  数据集的样本数很少,这里仅为演示PySpark关联规则的简单教程,方便读者理解。

2.数据导入及预处理

  配置Pyspark应用程序,导入数据集:简单关联规则分析.txt。
在这里插入图片描述

  PySpark关联规则模型仅需要一列数据,并且需将每行数据以逗号分隔,放在列表里。处理 后的数据集如下:
在这里插入图片描述
  代码如下:

from pyspark import SparkConf
from pyspark.ml.feature import StringIndexer
from pyspark.sql import SparkSession
from pyspark.sql.functions import *
from pyspark.ml.recommendation import ALS
from pyspark.ml.evaluation import RegressionEvaluator
from pyspark.ml.fpm import *

import matplotlib
# 设置一个支持GUI的后端,用于在IDEA绘图
matplotlib.use('TkAgg')  # 或者 'Qt5Agg', 'GTK3Agg' 等,用于在IDEA绘图
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 配置PySpark应用程序
conf = SparkConf().setAppName("简单关联规则分析").setMaster('spark://192.168.126.10:7077')
sc = SparkContext.getOrCreate(conf)
spark = SparkSession(sc)
# ------------1.加载数据--------------------
filename = "关联规则分析.txt"
data = spark.read.text('hdfs://192.168.126.10:9000/data/' + filename)
data.show()
#  --------2.数据处理---------
transactions = data.select(split('value', ',').alias('items'))  # 将每行数据按逗号分割,并将结果数组作为新的列items
transactions.show()

3.关联规则分析

  • 创建FPGrowth模型

  • 训练模型。设最小支持度minSupport=0.5, 最小置信度minConfidence=0.6

  • 获取频繁项集。频繁项集是指那些在数据集中频繁出现的项的集合。在购物篮分析中,一个频繁项集可能是一组经常被顾客一起购买的商品。频繁项集的识别是关联规则挖掘的第一步。通常使用支持度(Support)来量化一个项集的频繁程度,即数据集中包含该项集的交易数占总交易数的比例。
    在这里插入图片描述
    上图可知,“面包”在数据集中出现了4次,“面包”和“尿不湿”同时在数据集中出现3次。

  • 获取关联规则。关联规则是描述数据集中项之间关系的规则。它们通常以“如果…那么…”的形式出现,例如,“如果顾客购买了牛奶,那么他们也可能购买面包”。关联规则由两个主要部分组成:前项(Antecedent)和后项(Consequent),分别对应于“如果…”和“那么…”部分。
    在这里插入图片描述
      由上图可知,第一条关联规则为:啤酒–>尿不湿,置信度confidence=1.0,提升度lift=1.25,支持度support=0.6。这表明:

  • 置信度(Confidence) = 1.0:这意味着在所有包含“啤酒”的交易中,都同时也包含了“尿不湿”。换句话说,当顾客购买了啤酒时,他们100%的几率也会购买尿不湿。这是一个非常高的置信度,表明啤酒和尿不湿之间的购买行为几乎是同时发生的。

  • 提升度(Lift) = 1.25:提升度大于1表明“啤酒”和“尿不湿”之间存在正相关性,即它们不是独立出现的。具体来说,当“啤酒”出现时,“尿不湿”出现的频率是它在整个数据集中出现频率的1.25倍。这意味着,啤酒的购买增加了尿不湿被购买的可能性。

  • 支持度(Support) = 0.6:支持度表示同时包含“啤酒”和“尿不湿”的交易占所有交易的比例是60%。这是一个相对较高的支持度,表明这两种商品经常被一起购买。

  综合这些指标,我们可以得出以下结论:

  • 强关联性:由于置信度和提升度都很高,这条规则表明啤酒和尿不湿之间存在很强的关联性。商家可以利用这种关联性来优化商品布局、促销策略或推荐系统,以增加销售额。
  • 高购买频率:支持度较高表明这两种商品经常被顾客一起购买。这可能反映了某种生活习惯或购物模式,商家可以进一步分析这种模式的成因,以便更好地满足顾客需求。
  • 营销策略:基于这条规则,商家可以考虑将啤酒和尿不湿放在相邻的货架上,或者提供捆绑销售、满减优惠等促销活动,以吸引顾客购买这两种商品。

代码如下:

# ---------3.关联规则挖掘---------
fp = FPGrowth(minSupport=0.5, minConfidence=0.6, itemsCol='items')  # 创建FPGrowth模型
fpModel = fp.fit(transactions)  # 训练模型
fpModel.freqItemsets.show()  # 获取频繁项集
associations_rules = fpModel.associationRules.sort('lift', ascending=False)  # 获取 关联规则
associations_rules.show()

4. 关联规则数据处理,为可视化做准备

  只有提升度大于1,关联规则才有效,因此提取提升度大于1的关联规则,并转换为Pandas DataFrame。
在这里插入图片描述
  关联规则里面的前件antecedent和后件consequent的元素都是以集合形式存在,需通过遍历或用apply()函数将每个元素提取出来,组成:“啤酒–>尿不湿” 的字符串形式,用于绘制柱形图。
在这里插入图片描述

# ----4.关联规则处理,为可视化做准备-----
rules_pd = associations_rules.filter(col('lift') > 1).toPandas()
print(rules_pd)
ant_cons = []  # 前件antecedent-->后件consequent
confidence = []  # 置信度
lift = []  # 提升度
# 使用apply()函数对数据批量处理
def process_row(row):
    ant = row['antecedent']
    cons = row['consequent']
    conf = row['confidence']
    li = row['lift']
    ant_join = ','
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

侧耳倾听童话

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值