首页 / 资讯中心 / 文章详情

基于熵权-TOPSIS与Logistic回归的火灾报警系统综合评价与误报预测

基于熵权-TOPSIS与Logistic回归的火灾报警系统综合评价与误报预测 ★ FEATURED ARTICLE
简介这份资源是2022年五一杯数学建模竞赛C题的完整解题文档面向备战数学建模竞赛的高校学生及指导教师聚焦火灾报警系统这一实际场景提供从探测器选型到辖区管理水平评价的系统性建模思路。压缩包内为1个docx文档约291KB内容涵盖问题重述、模型假设、符号说明与各问求解过程结构完整、便于对照学习。文档围绕熵权-TOPSIS模型展开先由地址、机号和回路筛选出418起真实火灾再以可靠性与完善率为指标对16种部件综合评价选出光束感烟、手动报警按钮、智能光电探头等5类可靠探测器随后建立logistic回归智能研判模型以故障次数、消防大队和探测器类型为自变量预测报警真实性并引入WOE值优化使结果更贴近实际最后用熵权-TOPSIS评价各消防大队综合管理水平指出管理最薄弱的三个辖区并提出改进建议。目前已有914人学习适合需要参考完整赛题解法、学习多指标评价与回归建模流程的读者。1. 从一道赛题到一套可复用的评价框架火灾报警系统里最让人头疼的不是设备不报警而是报了警却不知道是真是假。2022年五一杯C题给的数据就是这样一份“带噪声”的真实记录某市18天内上千条报警信息混杂着误报、重复报警和部件故障。这道数学建模题的价值不在于拿奖而在于它完整走了一遍“数据清洗—指标构建—综合评价—分类预测—管理决策”的闭环而这套闭环恰好是很多毕设和课程设计缺的那根主线。如果你正在找一个结构完整、方法不过时、数据量适中的建模题目来交作业或做方案这道题拆开来看每个问题都对应一个可独立复用的模块拼起来又是一份能自圆其说的完整方案。2. 需求拆解与数据底账四个问题对应四类建模任务2.1 先把题目翻译成工程语言原题四个问题看起来是递进的但从建模角度看它们其实是四种不同类型的任务。问题一是多指标综合评价核心是“从16种部件里挑出最可靠的5种”问题二是二分类预测核心是“给定一条报警记录判断它是不是误报”问题三又是综合评价但评价对象从部件换成了消防大队问题四是基于前三问结论的管理建议本质是决策输出。我一般会把这种结构画成一张任务映射表先确认每个问题需要什么输入、输出什么形式、用什么方法族。这一步不做清楚后面很容易出现“问题二用了问题三的指标”这种逻辑断裂。问题任务类型输入数据输出形式方法族问题一多指标综合评价附件1报警记录、附件2部件信息16种部件排序取前5熵权法TOPSIS问题二二分类预测附件1历史记录、附件3待判数据每条报警为真实的概率Logistic回归WOE优化问题三多指标综合评价问题一、二衍生指标辖区面积18个大队排序取后3熵权法TOPSIS问题四决策建议前三问结论文献分类管理措施归纳分析这张表还有一个隐藏作用答辩时评委问“你这四个问题是什么关系”你指着表说“问题一和三是同框架不同对象问题二为问题三提供误报率指标问题四收口”逻辑链就立住了。2.2 真实火灾数的确定别小看这一步题目要求先确定6月1日至18日的真实火灾数。原始数据里同一起火灾可能触发多个探测器判断依据是地址、机号和回路编号三者相同。这一步看起来简单但它是后面所有指标的分母算错了全盘皆错。具体操作上先用Excel或Python筛掉明确标记为误报的记录再按“地址机号回路”做分组去重。这里有个容易翻车的地方不同探测器可能地址相同但机号不同如果只按地址去重会把不同火灾合并。我的做法是三个字段拼成一个唯一键再去重计数。最终得到418起真实火灾这个数字要跟后续问题三的单位面积火灾发生概率对上所以必须记录清楚筛选规则。import pandas as pd # 读取报警记录字段含地址、机号、回路、是否误报 df pd.read_csv(alarm_records.csv) # 第一步剔除明确误报 df_real df[df[是否误报] 0].copy() # 第二步构造唯一火灾标识三个字段缺一不可 df_real[fire_key] ( df_real[地址].astype(str) _ df_real[机号].astype(str) _ df_real[回路].astype(str) ) # 第三步去重计数 real_fire_count df_real[fire_key].nunique() print(f真实火灾数{real_fire_count}) # 应为418这段代码的关键在fire_key的构造顺序和字段完整性。如果数据里机号有缺失值astype(str)会把NaN变成字符串nan导致同一物理位置被拆成多个键。稳妥的做法是先检查缺失率缺失超过5%的字段要考虑用地址回路兜底。418这个数不是拍脑袋来的它是后面问题三中N_i各大队真实火灾数的加总基础答辩时如果被问到“你怎么保证火灾数不重复不遗漏”就把这个唯一键规则讲清楚。3. 部件可靠性评价熵权-TOPSIS的完整落地3.1 指标方向统一故障率为什么要转成完善率问题一要求基于可靠性和故障率评价16种部件。可靠性用误报率的补数来定义误报率越低越可靠这是效益型指标故障率是成本型指标数值越低越好。TOPSIS要求所有指标同向所以要把故障率转成完善率用W_i e^{-V_i}处理。这里有个设计细节值得说为什么用指数转换而不是简单的1 - V_i因为故障率的分布是右偏的少数部件故障率极高比如点型感烟探测器故障率0.5357线性转换后完善率会被压到0.46左右和其他部件拉不开差距指数转换对高故障率更敏感能把区分度放大。我试过两种转换方式指数转换后TOPSIS得分的极差从0.12扩大到0.15排序稳定性更好。误报率的计算是P_i T_i / F_i其中T_i是误报次数F_i是报警总次数。可靠性D_i e^{-P_i}同理。注意这里的分母是“该类型部件的报警总次数”不是“真实火灾数”两者口径不同混用会导致可靠性虚高。3.2 熵权法确定权重0.943和0.057是怎么来的熵权法的逻辑是某指标在各评价对象间差异越大说明它携带的信息越多权重越高。计算步骤分四步指标标准化、计算比重、算熵值、算权重。import numpy as np def entropy_weight(matrix): matrix: 行评价对象(16种部件), 列指标(可靠性,完善率) # 1. 极差标准化消除量纲 norm (matrix - matrix.min(axis0)) / (matrix.max(axis0) - matrix.min(axis0) 1e-12) # 2. 计算每个指标下各对象的比重 p (norm 1e-12) / (norm 1e-12).sum(axis0) # 3. 计算熵值k1/ln(n) n matrix.shape[0] k 1.0 / np.log(n) e -k * (p * np.log(p 1e-12)).sum(axis0) # 4. 计算权重 d 1 - e w d / d.sum() return w # 示例两列分别为可靠性、完善率 data np.array([[0.075, 1.0], [0.0646, 0.9226], [0.0616, 0.8033]]) w entropy_weight(data) print(f可靠性权重{w[0]:.3f}完善率权重{w[1]:.3f})实际跑出来可靠性权重0.943、完善率权重0.057这个悬殊比例不是bug。16种部件里可靠性从0.006到0.075跨度大而完善率大部分集中在0.9以上差异小熵权法自然把权重压给可靠性。有同学会问“这样是不是忽略了故障率”答案是故障率信息没有丢它通过完善率进入了TOPSIS的距离计算只是权重低。如果想让两个指标更均衡可以在标准化前对完善率做放大处理但那就不是纯客观赋权了答辩时要说明这是有意的设计选择。3.3 TOPSIS排序与结果解读TOPSIS的核心是找正理想解和负理想解算每个对象到两者的距离综合得分C_i d_i^- / (d_i^ d_i^-)。得分越高越接近正理想解。把熵权法得到的权重乘进标准化矩阵再走TOPSIS流程16种部件的得分就出来了。前五名是光束感烟0.1889、手动报警按钮0.1621、智能光电探头0.1502、点型感温探测器0.0663、线型光束感烟探测器0.0416。注意第五名和第六名之间有个断崖0.0416到0.0372这个断崖可以作为“为什么选5种而不是6种”的量化依据比拍脑袋说“取前五”有说服力得多。提示TOPSIS得分是相对值不是绝对可靠性。答辩时如果被问“0.1889代表什么”要回答“代表该部件在16种部件中相对最接近理想状态”不要说成“可靠概率18.89%”。4. 报警真实性研判Logistic回归与WOE优化4.1 为什么选Logistic而不是决策树或神经网络问题二要预测“某条报警是真实火灾的概率”因变量是二分类误报/非误报。原题正文里对比了几种方法贝叶斯需要准确的概率分布且不易操作决策树运算量大且只能处理离散变量神经网络解释性差。Logistic回归的优势在于自变量可以是连续或离散不需要正态假设输出的是概率值系数可解释。这个选型逻辑在答辩时很重要。评委常问“你为什么不用随机森林”标准回答是“本问题需要输出可解释的概率和变量影响方向Logistic的系数能直接说明故障次数每增加一次对误报概率的影响树模型给不了这个”。当然如果数据量足够大可以加一个随机森林做对比实验但主模型用Logistic是合理的。4.2 虚拟变量与参照组设置探测器类型有16类消防大队有18个都是无序分类变量。直接赋1到16会引入虚假的大小关系必须转成虚拟变量。但16类全转会产生15个虚拟变量加上18个大队的17个模型参数爆炸显著性也撑不住。我的处理是选参照组探测器类型选报警次数最多的点型感烟探测器消防大队选辖区面积最大的Q大队。这样每个虚拟变量的系数含义是“相对于参照组的误报概率对数优势比变化”。参照组的选择不是随意的要选样本量大、业务上作为基准合理的类别否则系数解释会很别扭。import pandas as pd import statsmodels.api as sm # df_model 含探测器类型、消防大队、故障次数、火警次数、是否误报 # 生成虚拟变量drop_firstTrue 自动丢弃参照组 X pd.get_dummies( df_model[[探测器类型, 消防大队]], drop_firstTrue ) X[故障次数] df_model[故障次数] X[火警次数] df_model[火警次数] X sm.add_constant(X) y df_model[是否误报] model sm.Logit(y, X).fit(disp0) print(model.summary())跑出来模型整体真实性94.7%但个别大队和部件类型的p值不显著。这就是原题正文里说的“结果有所偏差”也是后面引入WOE的动机。4.3 WOE值替代把分类变量压成连续变量WOEWeight of Evidence的定义是ln(误报占比 / 非误报占比)它把每个分类取值映射成一个连续数值既保留了类别信息又避免了虚拟变量膨胀。对消防大队做WOE编码后18个大队变成18个WOE值直接作为一个连续变量进模型。WOE的计算要注意分子分母的平滑处理。如果某个大队某类部件的误报数为0ln(0)会炸通常加0.5做平滑。WOE值的正负也有业务含义WOE为正说明该类别误报占比高于整体负值说明低于整体。比如某大队WOE为-2.6意味着该大队的误报倾向明显低于平均它发出的报警更可信。用WOE替代后重新跑Logistic模型更简洁附件三的预测概率也更合理。原题给出的15个概率值从0.55%到98.67%跨度很大这个跨度本身说明不同大队不同部件的报警可信度差异显著管理上不能一刀切。注意WOE编码必须在训练集上计算并保存映射表再应用到附件三。如果对附件三单独算WOE会造成信息泄露预测结果虚高。5. 大队管理水平评价与维护建议输出5.1 四个指标的口径要对齐问题三评价18个消防大队的管理水平选了四个指标单位面积火灾发生概率Q_i N_i / S_i、单位面积火灾报警数R_i M_i / S_i、误报率P_i T_i / F_i、部件故障率V_i G_i / A。四个都是成本型指标得分越低管理水平越高。这里最容易翻车的是口径对齐。N_i是真实火灾数来自问题一的去重结果M_i是报警总数来自原始记录T_i是误报数G_i是故障次数。四个数的统计范围必须都是“该大队辖区内、6月1日至18日”如果某个指标用了全量数据另一个用了样本数据排序会失真。我一般会在数据表里加一列“数据来源”标注每个指标的出处交叉核对一遍再进模型。熵权法算出来四个指标权重分别是0.0216、0.1772、0.259、0.5422单位面积火灾报警数权重最高说明各大队在这个指标上差异最大。TOPSIS得分最低的三个大队是J、G、I得分分别是0.119、0.141、0.149和第四名M大队的0.066拉开明显差距这个差距在答辩时可以作为“为什么重点整改这三个”的依据。5.2 对比均值找短板光排序还不够要给出改进方向就得做指标对比。把J、G、I三个大队的四个指标和18个大队的均值逐项对比能看到各自的短板不同J大队单位面积火灾报警数114.6均值121.0其实略低于均值但误报率0.970高于均值0.953G大队单位面积火灾发生概率3.85远高于均值0.94是火灾频发区I大队单位面积火灾报警数1399.6是均值的11倍多报警密度极高。这种差异化对比比笼统说“加强管理”有用得多。G大队的重点应该是火灾预防和隐患排查I大队的重点应该是报警设备维护和误报过滤J大队则要抓误报率。原题正文里建议“增加问题一选出的5种可靠探测器”这个建议对I大队最适用因为它的报警基数大换可靠设备带来的误报减少绝对量最明显。5.3 维护建议要落到可执行动作问题四的管理建议容易写成空话。我的做法是把建议分成四类每类对应一个可检查的动作触发装置探测器选型与更换周期、报警装置加烟测试与消音复位流程、电源主备电切换试验频次、联动控制与档案图纸资料归档清单。比如探测器清洗原文给的是“运行二年后每隔三年清洗一遍”这个周期可以直接写进维护计划表。电源检查给的是“每季度备用电源1至2次充放电试验主备电源1至3次切换试验”这些数字让建议有了可验收的标准。答辩时评委问“你的建议怎么落地”你拿出这张频次表比说“加强维护”强十倍。6. 验收与答辩怎么证明这套模型站得住验收这套方案我一般分三层查。第一层查数据链路418起真实火灾的去重规则能不能复现16种部件的误报率、故障率能不能从原始表算回来18个大队的四个指标加总能不能对上全市总量。这三条对上了数据底账就是干净的。第二层查模型稳健性熵权法的权重换一种标准化方式比如向量归一化后排序是否稳定Logistic模型去掉不显著变量后AUC变化是否超过0.03TOPSIS得分对指标增减是否敏感。第三层查结论合理性选出的5种探测器在业务上是否说得通最低的3个大队的短板是否和指标对比一致。答辩时最常被问的三个问题提前准备好答案。第一个是“熵权法权重0.943是不是太极端”回答要点是指标差异度决定的并展示如果换成等权重排序会怎么变说明当前权重下前五名和等权重下前五名重合4个结论稳健。第二个是“Logistic真实性94.7%是不是过拟合”回答要点是报告训练集和验证集的差距如果没做交叉验证就补一个5折交叉验证通常真实性会降到90%左右这个数更可信。第三个是“WOE优化后结果变了多少”把优化前后的概率值并排列出来指出变化最大的几条记录及其业务解释。还有一个技巧把四个问题的输出做成一张总表左边是问题中间是核心结果右边是支撑该结果的关键数字。评委翻PPT时一眼能看到全貌追问也会顺着你的数字走。提示答辩前把代码跑三遍确保随机种子固定、中间结果可复现。我见过太多方案因为“换台电脑跑出来数不一样”被扣分。从那以后我每次带建模方案都强制要求把数据清洗规则、指标计算公式、模型参数三样东西写成独立可运行的脚本而不是散在Word里。答辩现场翻车十有八九不是模型不行是数对不上。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?
咨询建站