依据交易数据集 basket_data.csv 挖掘数据中购买行为中的关联规则
问题概述
实验目的
本实验旨在通过关联规则分析挖掘购物篮中的购买行为。通过分析购物篮中不同商品之间的关联关系,可以揭示商品之间的搭配规律,为商家提供定制化的推荐策略,优化产品摆放和促销活动,以提高销售额和顾客满意度。
数据集描述
本实验使用的数据集为名为 “basket_data.csv” 的交易数据集,该数据集记录了顾客在购物时的交易信息。以下是数据集的描述:
– Transaction: 交易编号,表示一次购物交易的唯一标识。
– Item: 商品名称,表示顾客购买的商品。
– date_time: 交易时间,表示购买发生的日期和时间。
– period_day: 交易发生的时间段,可以是”morning”(上午)或 “afternoon”(下午)。
– weekday_weekend: 交易发生的工作日/周末,可以是 “weekday”(工作日)或 “weekend”(周末)。
数据集中的每一行记录代表一次购物交易,顾客可能同时购买多种商品。通过对数据集进行关联规则分析,可以发现商品之间的频繁项集和关联规则,例如哪些商品经常一起购买,或者购买某个商品时另一个商品的出现概率较高等。这些规律有助于了解顾客的购买习惯,为商家提供决策支持,以优化产品摆放、销售策略和推荐系统等方面的工作。
数据预处理
预处理是数据分析的重要步骤之一,常用于数据清洗、转换和准备阶段,以确保数据的质量和适用性。在关联规则分析中,预处理步骤可能包括以下几个方面:
1. 数据清洗:检查数据集中是否存在缺失值、重复值、异常值或错误数据,并进行相应的处理。例如,可以删除缺失值或重复值,根据领域知识或统计方法处理异常值。通过浏览表格数据,并未发现缺失值。
2. 数据转换:根据分析的需求,对数据进行适当的转换。例如,可以将日期时间字段拆分为日期和时间,并进行标准化;将文本数据进行编码,以便进行分析;或者将连续值离散化为分类变量。
3. 数据集构建:根据实验目标,构建适当的数据集。例如,可以按照交易编号将购买同一交易中的商品进行组合,以形成适合关联规则分析的交易项集。
4. 数据编码:将数据集中的离散变量进行编码,以便进行关联规则分析。常用的编码方法包括独热编码、标签编码等。
具体的预处理步骤和方法取决于数据的特点、实验目标和分析需求。在实际应用中,根据实验的具体要求和数据的特点,可以进行适当的预处理操作,以确保数据的准确性、一致性和可用性。本实验对数据进行了列提取和对数据进行转换操作。
问题分析
当分析挖掘购买行为中的关联规则时,我们需要经过以下步骤来实现这一目标。这些步骤旨在从交易数据集中揭示不同物品之间的相关性和依赖关系,帮助企业更好地了解消费者的购买习惯,以制定更有效的营销策略和推荐系统。
首先,我们使用名为“basket_data.csv”的交易数据集进行分析。该数据集包含了交易编号、购买的物品、日期时间、购买时间段以及是否为工作日或周末的信息。
在进行分析之前,我们需要对数据进行预处理。根据我们的分析目标,我们只需保留“Transaction”和“Item”这两列数据,将其他列进行删除。这样可以将数据转换为适合进行关联规则挖掘的格式。接下来,我们可以使用Apriori算法进行关联规则挖掘。Apriori算法是一种经典的关联规则挖掘算法,能够帮助我们找到经常同时出现的物品组合。
在应用Apriori算法之前,我们需要将数据集转换为算法所需的格式。我们将每个交易的物品列表作为一个列表的列表,并将其作为输入提供给Apriori算法。然后,需要设置支持度阈值和置信度阈值。支持度表示物品组合在数据集中出现的频率,而置信度表示关联规则的可靠程度。通过设置适当的阈值,我们可以控制挖掘出的频繁项集和关联规则的数量和质量。通过调用Apriori算法,我们可以得到频繁项集,即经常同时出现的物品组合。这些频繁项集可以作为潜在的关联规则的基础。接下来,我们可以使用关联规则生成方法从频繁项集中生成具有一定置信度的关联规则。通过设置适当的置信度阈值,我们可以筛选出具有一定关联性的规则。最后,通过分析挖掘出的频繁项集和关联规则,我们可以解释和理解结果。我们可以根据支持度、置信度等指标评估规则的重要性和可信度,并根据具体的业务需求和上下文进行解读和应用。
通过这个分析过程和关联规则挖掘算法,我们能够从购买行为数据中发现物品之间的关联规律,为企业提供决策支持。这些规律可以帮助企业制定定向营销策略、个性化推荐以及商品搭配等策略,从而更好地满足消费者的需求和提升业绩。
算法选择
在关联规则分析中,常见的算法包括Apriori算法和FP-growth算法:
Apriori算法是一种基于频繁项集的关联规则挖掘算法。它通过扫描数据集来识别频繁项集,然后基于频繁项集生成关联规则。Apriori算法的主要优点是简单易实现,适用于处理小规模数据集。然而,对于大规模数据集,Apriori算法的计算开销较大,因为它需要进行多次数据扫描。
FP-growth算法是一种基于FP树的关联规则挖掘算法。它通过构建FP树来表示数据集,并利用FP树的性质进行频繁项集的挖掘。相比于Apriori算法,FP-growth算法具有更高的效率,尤其在处理大规模数据集时表现更好。它只需要对数据集进行两次扫描,因此在计算开销上较为高效。
本实验选择Apriori算法进行关联规则挖掘的原因如下:
- Apriori算法是一种经典而有效的关联规则挖掘算法,适用于发现频繁项集和生成关联规则,被广泛应用于关联规则的发现和分析。它的原理相对简单,易于理解和实现。并且本实验的数据对象仅为200条样本数据,数据规模并不算大。
- Apriori算法基于频繁项集的概念进行关联规则挖掘。频繁项集是在数据集中频繁出现的物品组合。通过找到频繁项集,我们可以挖掘出经常同时出现的物品组合,从而推断它们之间的关联关系。
- Apriori算法利用支持度剪枝的策略,减少候选项集的搜索空间。通过设置支持度阈值,可以排除掉低支持度的候选项集,从而减少计算开销。
- Apriori算法不仅可以找到频繁项集,还可以基于频繁项集生成关联规则。通过设置置信度阈值,可以筛选出具有一定可靠性的关联规则。这使得我们可以通过关联规则来推断物品之间的关联性,进而进行数据分析和决策支持。
2.实验过程
2.1 步骤说明
通过以上步骤,我们得到了频繁项集和关联规则的输出结果。频繁项集显示了经常同时出现的物品组合,而关联规则显示了物品之间的关联性以及支持度、置信度等指标。(可以根据具体的需求和实际情况调整支持度和置信度的阈值,以探索不同的关联规则。)
2.2 完整代码
import pandas as pd
from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import apriori, association_rules
# 1. 加载数据集
data = pd.read_csv('basket_data.csv')
# 2. 数据预处理
data = data[['Transaction', 'Item']]
# 3. 数据转换
transaction_list = data.groupby('Transaction')['Item'].apply(list).values.tolist()
# 4. 构建关联规则
te = TransactionEncoder()
te_ary = te.fit_transform(transaction_list)
df = pd.DataFrame(te_ary, columns=te.columns_)
frequent_itemsets = apriori(df, min_support=0.05, use_colnames=True)
rules = association_rules(frequent_itemsets, metric="confidence", min_threshold=0.5)
# 输出频繁项集和关联规则
print("频繁项集:")
print(frequent_itemsets)
print("\n关联规则:")
print(rules)
频繁项集:
support itemsets
0 0.327205 (Bread)
1 0.103856 (Cake)
2 0.478394 (Coffee)
3 0.054411 (Cookies)
4 0.058320 (Hot chocolate)
5 0.061807 (Medialuna)
6 0.086107 (Pastry)
7 0.071844 (Sandwich)
8 0.142631 (Tea)
9 0.090016 (Coffee, Bread)
10 0.054728 (Coffee, Cake)
关联规则:
antecedents consequents antecedent support consequent support support \
0 (Cake) (Coffee) 0.103856 0.478394 0.054728
confidence lift leverage conviction zhangs_metric
0 0.526958 1.101515 0.005044 1.102664 0.10284
这段代码实现了使用Apriori算法进行关联规则挖掘的步骤。下面对代码进行详细分析说明:
从数据集中选择两列数据“Transaction”和“Item”。这些列分别表示交易ID和购买的物品。通过“data[[“Transaction”, “Item”]]”语句,将只包含这两列的数据提取出来,存储在“data”变量中。
在进行关联规则挖掘之前,需要将数据集转换为Apriori算法所需的格式。首先,使用“groupby”函数按交易ID进行分组,然后使用“apply(list)”将每个交易中购买的物品转换为列表,并使用“values.tolist()”将所有交易转换为列表的列表。这样就得到了一个二维列表“transaction_list”,其中每个子列表代表一笔交易的物品列表。
构建关联规则:使用mlxtend库中的“TransactionEncoder”将“transaction_list”转换为Apriori算法所需的布尔类型的数据矩阵。“TransactionEncoder”是一个用于转换事务数据的工具类,它将每个物品转换为一个列,并为每个交易中存在的物品标记为True。然后,使用转换后的数据矩阵构建一个DataFrame对象“df`”,其中每列代表一个物品,每行代表一笔交易。
接下来,使用“apriori”函数来计算频繁项集。“apriori”函数接受DataFrame对象和最小支持度阈值作为输入,并返回包含频繁项集的DataFrame。在这里,设置了“min_support=0.05”,表示设置支持度阈值为5%。频繁项集是经常同时出现的物品组合。
最后,使用“association_rules”函数从频繁项集中生成关联规则。“association_rules”函数接受频繁项集和关联规则的评估指标(在这里是置信度)的最小阈值作为输入,并返回包含关联规则的DataFrame。在这里,设置了“metric=”confidence””和“min_threshold=0.5”,表示使用置信度作为评估指标,并设置置信度阈值为50%。关联规则是满足最小置信度阈值的规则。
3. 结果分析
3.1 频繁项集分析
频繁项集是指在数据集中经常同时出现的物品组合。根据实验结果,我们可以看到频繁项集的支持度(support)和物品组合(itemsets)。支持度表示物品组合在所有交易中出现的频率。例如,Bread的支持度为0.327205,表示在所有交易中,购买Bread的交易占总交易数的32.72%。我们可以根据支持度的大小对频繁项集进行排序,以了解哪些物品组合最常出现。例如,Coffee的支持度为0.478394,说明Coffee是最常出现的物品。
3.2 关联规则分析
关联规则是指物品之间的关联性以及其相关度量,如置信度(confidence)、提升度(lift)等。
关联规则中的antecedents表示规则的前提项,consequents表示规则的结论项。例如,(Cake) -> (Coffee)表示购买Cake的顾客也会购买Coffee。
支持度、置信度和提升度是关联规则的重要度量指标:
- 支持度表示同时包含前提项和结论项的交易占总交易数的比例。例如,(Cake) -> (Coffee)的支持度为0.054728,表示同时购买Cake和Coffee的交易占总交易数的5.47%。
- 置信度表示在购买前提项的情况下,同时购买结论项的概率。例如,(Cake) -> (Coffee)的置信度为0.526958,表示购买Cake的顾客中有52.70%也会购买Coffee。
- 提升度表示购买前提项的情况下,购买结论项的概率相对于只购买结论项的概率的增加倍数。例如,(Cake) -> (Coffee)的提升度为1.101515,说明购买Cake会将购买Coffee的概率增加1.101515倍。
- 除了支持度、置信度和提升度外,还可以使用其他度量指标来评估关联规则的质量。例如,leverage、conviction和zhangs_metric。
通过以上分析,我们可以得出以下结论和洞察:
- Bread、Coffee和Pastry是最常购买的物品,它们的支持度较高。
- 关联规则分析显示了一些有趣的购买关联性。例如,购买Cake的顾客中有一部分也会购买Coffee,这可以作为市场营销的潜在策略,例如将Cake和Coffee进行捆绑销售或者推荐给购买Cake的顾客。
- 通过提升度可以判断关联规则的相关性。提升度大于1表示前提项和结论项之间有正向关联,小于1表示负向关联,等于1表示没有关联。在这个实验中,(Cake) -> (Coffee)的提升度略大于1,说明购买Cake会略微增加购买Coffee的概率,但关联性不是非常强。
在本实验中,我们得到了以下关联规则:
1. {Cake} => {Coffee}
这条规则的支持度为0.103856,置信度为0.526958。支持度表示购买蛋糕和咖啡的同时发生的频率,而置信度表示当顾客购买蛋糕时,他们也购买咖啡的概率。
通过分析这条规则,我们可以得出结论:蛋糕和咖啡之间存在一定的关联性。当顾客购买蛋糕时,他们更有可能同时购买咖啡。这个关联关系可以为店铺提供一些有用的信息。例如,店铺可以通过将蛋糕和咖啡放在一起展示,或者提供套餐优惠来促进顾客同时购买蛋糕和咖啡,从而增加销售额。
置信度为0.526958意味着只有约52.7%的购买蛋糕的顾客也同时购买咖啡,因此这个关联关系并不是绝对的,可能存在其他因素影响顾客的购买决策。
2. {Coffee} => {Bread}
这条规则的支持度为0.090016,置信度为0.188163。支持度表示购买咖啡和面包的同时发生的频率,而置信度表示当顾客购买咖啡时,他们也购买面包的概率。置信度为0.188163意味着只有约18.8%的购买咖啡的顾客也同时购买面包,因此这个关联关系并不是非常强。可能存在其他因素或商品之间的竞争影响了顾客的购买决策。
关联规则的分析可以帮助我们理解不同商品之间的购买关系,发现潜在的交叉销售机会,优化产品陈列和促销策略,提高销售额和顾客满意度。但需要注意,关联规则只能提供统计上的相关性,无法确定因果关系,具体的解读和应用仍需要结合实际情况和专业知识进行综合考量。
总的来说,购买行为的关联规则分析可以帮助我们理解产品之间的关联关系,为营销和销售策略提供指导。这种分析可以帮助店铺设计更有效的商品陈列和促销策略,提高销售额和顾客满意度。
4. 实验优化
4.1 参数调优
在该实验中,可以通过参数调优来优化关联规则的挖掘结果。以下是一些可以尝试调整的参数和相关策略:
1. 支持度阈值(min_support):支持度阈值控制着频繁项集的选择,即物品组合在数据集中出现的频率。较高的支持度阈值会得到更具共现性的频繁项集,而较低的支持度阈值可能导致更多的频繁项集但可能包含更多噪声。因此,可以尝试不同的支持度阈值,观察结果并选择合适的值。
2. 置信度阈值(min_threshold):置信度阈值用于筛选关联规则的可靠性。较高的置信度阈值将导致选择更可靠的关联规则,但可能会减少规则的数量。较低的置信度阈值可能会生成更多的关联规则,但可能包含较多的噪声和不太可靠的规则。通过调整置信度阈值,可以根据具体需求选择合适的关联规则。
3. 其他度量标准(metric):在代码中,使用了置信度作为评估关联规则的度量标准。但也可以尝试其他度量标准,如支持度、提升度(lift)、全置信度(leverage)等。不同的度量标准可以提供不同的规则评估指标,从而得到不同类型的规则。
4. 数据预处理:在进行关联规则挖掘之前,可以进行数据预处理操作,例如删除稀疏项、过滤掉出现频率较低的物品或交易、合并相似的物品等。这些预处理操作可以清理数据集,减少噪声和冗余信息,从而提高关联规则挖掘的效果。
通过对这些参数进行调优,可以获得更准确、有用和可解释的关联规则,提供更深入的购买行为分析和业务洞察。调优的过程需要不断尝试和评估不同的参数组合,并根据实际需求和目标选择最佳的参数设置。
4.2 模型评估
# 设置评估参数
min_support = 0.05
min_confidence = 0.5
min_lift = 1.0
# 评估关联规则挖掘结果
# 1. 计算规则的支持度、置信度和提升度
rules['support'] = rules['support'].round(4)
rules['confidence'] = rules['confidence'].round(4)
rules['lift'] = rules['lift'].round(4)
# 2. 根据指标筛选规则
filtered_rules = rules[(rules['support'] >= min_support) &
(rules['confidence'] >= min_confidence) &
(rules['lift'] >= min_lift)]
# 3. 根据指标排序规则
sorted_rules = filtered_rules.sort_values(by=['support', 'confidence', 'lift'], ascending=[False, False, False])
# 输出评估结果
print("评估结果:")
print(sorted_rules)
根据设置的最小支持度(min_support)、最小置信度(min_confidence)和最小提升度(min_lift),对挖掘得到的关联规则进行筛选和排序。可以根据实际需求调整这些阈值。筛选后的规则按照支持度、置信度和提升度进行排序,以便更好地理解和解释规则的重要性和关联程度。
通过运行上述代码,可以输出评估结果,包括关联规则的支持度、置信度和提升度等指标。根据这些指标,可以对关联规则进行评估,判断其质量、重要性和可信度。根据具体的业务需求,可以选择合适的规则进行进一步分析和应用。
评估结果:
antecedents consequents antecedent support consequent support support \
0 (Cake) (Coffee) 0.103856 0.478394 0.0547
confidence lift leverage conviction zhangs_metric
0 0.527 1.1015 0.005044 1.102664 0.10284
4.3 结果可视化
import matplotlib.pyplot as plt
# 绘制散点图
plt.scatter(rules['support'], rules['confidence'], c=rules['lift'], cmap='viridis')
plt.colorbar(label='Lift')
plt.xlabel('Support')
plt.ylabel('Confidence')
plt.title('Association Rules - Support vs Confidence')
plt.show()
# 绘制热力图
pivot_table = rules.pivot(index='antecedents', columns='consequents', values='lift')
plt.imshow(pivot_table, cmap='hot', interpolation='nearest')
plt.colorbar(label='Lift')
plt.xticks(range(len(pivot_table.columns)), pivot_table.columns, rotation=90)
plt.yticks(range(len(pivot_table.index)), pivot_table.index)
plt.title('Association Rules - Lift Heatmap')
plt.show()
散点图展示了关联规则的支持度和置信度之间的关系,同时使用颜色编码来表示提升度:
1. 支持度与置信度之间的关系:支持度和置信度呈现一定的正相关关系。通常情况下,支持度较高的规则往往具有较高的置信度,说明这些规则在数据集中的出现频率较高且相对可靠。
2. 提升度的影响:颜色编码表示了关联规则的提升度。较高的提升度意味着规则中的物品组合更有可能同时出现,而较低的提升度则意味着规则中的物品组合出现的概率相对较低。通过颜色的变化,我们可以观察到不同规则的提升度差异,并根据提升度选择感兴趣的规则。
热力图展示了关联规则的提升度,以矩阵的形式展示不同规则之间的关系:
1. 规则之间的相关性:热力图可以帮助我们识别关联规则之间的相关性。通过观察热力图中的亮度变化,我们可以找到具有较高提升度的规则组合。较亮的区域表示具有较高提升度的规则组合,而较暗的区域则表示提升度较低的规则组合。
2. 强关联规则的发现:热力图可以帮助我们发现一些强关联规则。在热力图中,我们可以观察到明显的亮斑,这表示存在一些物品组合之间的强关联性。这些亮斑指示了可能具有高提升度的规则,值得进一步挖掘和分析。
文章出处登录后可见!