关联规则分析(4-4)
关联规则分析(Association Rule Mining)是一种基于频繁项集的分析方法,它以最常出现在一起的元素之间的关系作为分析对象,主要用于发掘大数据中隐藏的关联规则,是数据挖掘技术的重要组成部分。关联规则分析的应用非常广泛,包括但不限于以下几个方面:
- 发现物品之间的关联性:通过发现某些物品经常出现在一起,从而发现两个物品之间的关联性。例如,在购买计算机的顾客中,有20%的人也同时购买了打印机。
- 预测消费者行为:当消费者购买某一物品时,可以利用关联规则分析来预测他们会购买哪些其他物品。例如,当顾客购买了牛奶和面包时,系统可以推荐给他们黄油或果酱。
- 电商交叉销售:在电商平台上,关联规则可以用于交叉销售。通过分析用户的购买历史,找出不同商品之间的关联关系,可以为用户推荐其他相关商品。例如,当用户购买了一台电视机时,可以推荐给他们音响或电视机支架。
- 商品陈列优化:关联规则可以用于优化商品陈列。通过分析商品销售数据,挖掘出不同商品之间的关联关系,可以调整商品陈列的位置。例如,如果某个商品与其他商品之间存在较强的关联关系,可以将它们放在相同的陈列区域,以提高销售额。
- 预防保健:关联规则可以用于预防保健。通过分析人群的健康数据,挖掘出不同健康指标之间的关联关系,可以为人们提供个性化的健康建议。例如,如果某个人的体重超标,可以建议他进行减肥并加强运动。
关联规则分析的具体方法包括Apriori算法等。Apriori算法是一种经典的关联分析算法,它通过逐层搜索的方式发现频繁项集。该算法首先扫描数据集,统计每个项的支持度,然后根据最小支持度阈值生成候选项集。接下来,通过连接和剪枝操作,逐渐生成更大的候选项集,直到不能再生成新的频繁项集为止。最后,根据频繁项集生成关联规则,并计算它们的置信度。
需要注意的是,关联分析方法在实际应用中需要注意以下几点:首先,选择合适的支持度和置信度阈值,以过滤掉不重要的规则,提高关联分析的效率和准确性。其次,处理大规模数据集时需要考虑算法的效率,选择合适的关联分析算法以提高计算效率。最后,关联分析结果需要结合业务实际进行解释和应用,在发现了关联规则之后,需要进一步分析规则的意义,结合实际情况进行解释,并制定相应的营销策略或业务决策。
- 安装mlxtend库
pip install mlxtend
- 数据读取与预处理
# 步骤2:数据读取与预处理
data = {
'I1': ['西红柿', '排骨', '鸡蛋', '毛巾', '水果刀', '苹果'],
'I2': ['西红柿', '茄子', '水果刀', '香蕉'],
'I3': ['鸡蛋', '袜子', '毛巾', '肥皂', '苹果', '水果刀'],
'I4': ['西红柿', '排骨', '茄子', '毛巾', '水果刀'],
'I5': ['西红柿', '排骨', '酸奶', '苹果'],
'I6': ['鸡蛋', '茄子', '酸奶', '肥皂', '苹果', '香蕉'],
'I7': ['排骨', '鸡蛋', '茄子', '水果刀', '苹果'],
'I8': ['土豆', '鸡蛋', '袜子', '香蕉', '苹果', '水果刀'],
'I9': ['西红柿', '排骨', '鞋子', '土豆', '香蕉', '苹果']
}
transactions = list(data.values())
- 使用TransactionEncoder将上图中列表转换为下图中所示DataFrame
# 步骤3:使用TransactionEncoder将列表转换为DataFrame
te = TransactionEncoder()
te_ary = te.fit(transactions).transform(transactions)
print(te_ary)
df = pd.DataFrame(te_ary, columns=te.columns_)
- 使用apriori算法挖掘频繁项集(最小支持度为0.3),并输出结果
# 步骤4:使用apriori算法挖掘频繁项集(最小支持度为0.3),并输出结果
frequent_itemsets_apriori = apriori(df, min_support=0.3, use_colnames=True)
print("使用Apriori算法挖掘频繁项集:")
print(frequent_itemsets_apriori.to_string(index=False))
(4)使用FP-growth算法挖掘频繁项集(最小支持度为0.3),并输出结果,与上一问结果进行对比
# 步骤5:使用FP-growth算法挖掘频繁项集(最小支持度为0.3),并输出结果,与上一问结果进行对比
frequent_itemsets_fpgrowth = fpgrowth(df, min_support=0.3, use_colnames=True)
print("\n使用FP-growth算法挖掘频繁项集:")
print(frequent_itemsets_fpgrowth.to_string(index=False))
(5)生成强规则(最小置信度为0.5, 提升度>1),并输出结果
# 步骤6:生成强规则(最小置信度为0.5, 提升度>1),并输出结果
rules = association_rules(frequent_itemsets_apriori, metric="confidence", min_threshold=0.5)
rules = rules[rules['lift'] > 1]
print("\n强规则:")
print(rules.to_string(index=False))
完整代码:
import pandas as pd
from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import apriori, fpgrowth, association_rules
# 步骤2:数据读取与预处理
data = {
'I1': ['西红柿', '排骨', '鸡蛋', '毛巾', '水果刀', '苹果'],
'I2': ['西红柿', '茄子', '水果刀', '香蕉'],
'I3': ['鸡蛋', '袜子', '毛巾', '肥皂', '苹果', '水果刀'],
'I4': ['西红柿', '排骨', '茄子', '毛巾', '水果刀'],
'I5': ['西红柿', '排骨', '酸奶', '苹果'],
'I6': ['鸡蛋', '茄子', '酸奶', '肥皂', '苹果', '香蕉'],
'I7': ['排骨', '鸡蛋', '茄子', '水果刀', '苹果'],
'I8': ['土豆', '鸡蛋', '袜子', '香蕉', '苹果', '水果刀'],
'I9': ['西红柿', '排骨', '鞋子', '土豆', '香蕉', '苹果']
}
transactions = list(data.values())
# 步骤3:使用TransactionEncoder将列表转换为DataFrame
te = TransactionEncoder()
te_ary = te.fit(transactions).transform(transactions)
print(te_ary)
df = pd.DataFrame(te_ary, columns=te.columns_)
# 步骤4:使用apriori算法挖掘频繁项集(最小支持度为0.3),并输出结果
frequent_itemsets_apriori = apriori(df, min_support=0.3, use_colnames=True)
print("使用Apriori算法挖掘频繁项集:")
print(frequent_itemsets_apriori.to_string(index=False))
# 步骤5:使用FP-growth算法挖掘频繁项集(最小支持度为0.3),并输出结果,与上一问结果进行对比
frequent_itemsets_fpgrowth = fpgrowth(df, min_support=0.3, use_colnames=True)
print("\n使用FP-growth算法挖掘频繁项集:")
print(frequent_itemsets_fpgrowth.to_string(index=False))
# 步骤6:生成强规则(最小置信度为0.5, 提升度>1),并输出结果
rules = association_rules(frequent_itemsets_apriori, metric="confidence", min_threshold=0.5)
rules = rules[rules['lift'] > 1]
print("\n强规则:")
print(rules.to_string(index=False))