You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

学生数据集关联规则挖掘:AND条件实现、Python方案及结果表格化需求

关联规则挖掘实现方案(针对学生数据集)

一、核心问题解答:关联规则中的AND条件

首先明确:关联规则天生支持AND逻辑。比如当你挖掘出规则{Grade:A, SUB:sub1} → {Rating:3},它的含义就是Grade=A AND SUB=sub1 → Rating=3——项集里的多个元素就是同时满足的条件,完全符合你需要的AND场景。

二、正确的Python实现步骤

你之前的代码问题在于把所有字段(包括Id、Sem这些不需要的字段)的原始值直接作为项,导致输出无意义。我们需要只针对Grade、Rating、SUB三个字段,把每个字段的"字段名:值"作为独立项,这样挖掘出的规则才有业务意义。

1. 数据预处理(以你的示例数据为例)

import pandas as pd

# 示例数据集
data = {
    'Id': [1,1,2],
    'Sem': [2,4,2],
    'Grade': ['A','C','B'],
    'Rating': [3,1,2],
    'SUB': ['sub1','sub2','sub1']
}
dfrslt = pd.DataFrame(data)

# 仅保留目标字段,转换为「字段名:值」的格式(避免不同字段值混淆)
records = []
for _, row in dfrslt.iterrows():
    item_set = [
        f"Grade:{row['Grade']}",
        f"Rating:{row['Rating']}",
        f"SUB:{row['SUB']}"
    ]
    records.append(item_set)

2. 关联规则挖掘(使用apyori库)

从你的输出格式判断,你用的是apyori库,这里设置合理的阈值参数(可根据实际数据集大小调整):

from apyori import apriori

# 挖掘关联规则
association_rules = apriori(
    records,
    min_support=0.3,    # 支持度最小值(示例数据量小,设为0.3)
    min_confidence=0.5, # 置信度最小值
    min_lift=1.0,       # 提升度最小值
    min_length=2        # 规则至少包含2个项(前件+后件)
)

三、将RelationRecord转换为易懂的表格格式

apyori的原生输出确实不够直观,我们可以用pandas把规则提取成结构化表格:

# 提取规则核心信息到列表
rule_list = []
for rule in association_rules:
    # 提取支持度
    support = round(rule.support, 4)
    # 遍历每个规则的有序统计量(一个规则可能对应多个前件后件组合)
    for stat in rule.ordered_statistics:
        # 格式化前件(AND条件集合)
        antecedents = ', '.join(stat.items_base) if stat.items_base else '无'
        # 格式化后件
        consequents = ', '.join(stat.items_add)
        # 提取置信度和提升度
        confidence = round(stat.confidence, 4)
        lift = round(stat.lift, 4)
        # 加入结果列表
        rule_list.append([antecedents, consequents, support, confidence, lift])

# 转换为DataFrame表格
rule_df = pd.DataFrame(
    rule_list,
    columns=['前件(AND条件)', '后件', '支持度', '置信度', '提升度']
)

# 打印或导出表格
print(rule_df)
# 导出为CSV(可选)
# rule_df.to_csv('关联规则结果.csv', index=False, encoding='utf-8-sig')

输出示例(针对你的样例数据)

前件(AND条件)后件支持度置信度提升度
Grade:ASUB:sub10.33331.00001.5000
SUB:sub1Grade:A0.33330.50001.5000
Grade:ARating:30.33331.00003.0000

四、关键注意事项

  • 你之前得到的frozenset({'0'})是因为错误地将所有字段(包括Id、Sem)的原始值作为项,甚至可能包含无关数值/缺失值,导致规则完全失去业务意义,按上述方法处理数据后即可解决。
  • 阈值参数需根据数据集大小调整:数据量越大,min_support可设得越小;若想得到更可靠的规则,可适当提高min_confidence。
  • 「字段名:值」的格式是关键:避免把不同字段的相同值(比如Rating的3和Sem的3)混淆,保证规则的可解释性。

内容的提问来源于stack exchange,提问作者Sample Test

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:06:42