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

关联规则挖掘中置信度超100%的问题排查与解读

关联规则挖掘中置信度超过100%的问题排查与修正

问题背景

我正在对包含acct_id和商户类别码(MCC)的数据集应用关联规则挖掘,目标是识别每位客户频繁光顾的MCC码(不受交易日期影响)。使用SAS/Proc SQL编写的关联规则代码出现了部分账户内规则置信度超过100%的情况,请问该如何解读这类数值?置信度不应≤100%吗?查询语句是否存在错误?

示例数据集

data dfsample;
input acct_id mcc $;
datalines;
1 5411
1 5411
1 5812
1 5942
1 5942
2 5411
2 5812
2 5812
2 5967
2 5411
;
run;

原SAS代码

proc sql;
create table mcc_pairs as
select a.acct_id, a.mcc as mcc1, b.mcc as mcc2
from dfsample a inner join dfsample b
on a.acct_id=b.acct_id
where a.mcc^=b.mcc;
run;

proc freq data=mcc_pairs noprint;
tables acct_id*mcc1*mcc2/out=mcc_pair_counts(drop=percent);
run;

proc freq data=dfsample noprint;
tables acct_id*mcc/out=mcc_support(drop=percent);
run;

proc sql;
create table assoc_rules as
select a.acct_id, a.mcc1, a.mcc2, a.count as pair_count, b.count as mcc1_count, (a.count/b.count) as confidence format=percent8.2
from mcc_pair_counts as a inner join mcc_support as b
on a.acct_id=b.acct_id
order by confidence desc;
run;

问题原因分析

1. 置信度超100%的本质

关联规则中置信度的定义是P(B|A) = 同时出现A和B的有效次数 / 出现A的有效次数,正常范围应≤100%。你的代码出现异常的核心原因:

  • 生成mcc_pairs时直接用交易记录级的自连接,导致pair_count统计的是「A交易记录与B交易记录的配对次数」,而非「客户同时拥有A和B两类MCC的有效共存次数」。
  • 举个实例:账户1的MCC5812有1条交易记录,MCC5411有2条交易记录,自连接后会生成1×2=2条(5812,5411)的配对记录,因此pair_count=2;而mcc_support中MCC5812的交易次数是1,最终计算置信度为2/1=200%,完全偏离了关联规则的逻辑。

2. 原代码的关键错误

  • 未对客户MCC记录去重:你的目标是识别客户频繁光顾的MCC类别,而非交易记录间的关联,应基于每个客户的唯一MCC集合计算,而非原始重复交易记录。
  • 配对逻辑错误:直接用交易记录自连接会无意义地放大配对次数,导致统计值失去关联规则所需的“共存”意义。
  • 关联条件遗漏:最后一步计算置信度时,仅用acct_id关联,未匹配mcc1和b.mcc,会导致错误的次数匹配(比如把账户1的mcc1=5812和mcc=5411的次数关联),进一步加剧置信度异常。

修正后的SAS代码

步骤1:生成每个客户的唯一MCC集合(去重)

proc sql;
create table unique_mcc as
select distinct acct_id, mcc
from dfsample;
run;

步骤2:基于去重数据集生成MCC配对(排除自身配对)

proc sql;
create table mcc_pairs as
select a.acct_id, a.mcc as mcc1, b.mcc as mcc2
from unique_mcc a inner join unique_mcc b
on a.acct_id = b.acct_id
where a.mcc ^= b.mcc;
run;

步骤3:统计配对出现次数(每个客户的同一MCC配对仅出现1次)

proc freq data=mcc_pairs noprint;
tables acct_id*mcc1*mcc2/out=mcc_pair_counts(drop=percent);
run;

步骤4:统计每个客户各MCC的交易次数(体现光顾频率)

proc freq data=dfsample noprint;
tables acct_id*mcc/out=mcc_support(drop=percent);
run;

步骤5:计算正确的置信度(补充mcc1的关联条件)

proc sql;
create table assoc_rules as
select 
    a.acct_id, 
    a.mcc1, 
    a.mcc2, 
    a.count as pair_count, 
    b.count as mcc1_count, 
    (a.count / b.count) as confidence format=percent8.2
from mcc_pair_counts as a 
inner join mcc_support as b
on a.acct_id = b.acct_id and a.mcc1 = b.mcc  -- 关键:匹配对应MCC的次数
order by confidence desc;
run;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 14:17:35