🏭制造业数据与AI践行者老蒋的技术博客全系列文章汇总(持续更新)
文章摘要
针对制造业 MES 工时异常人工排查效率低、误报多、难演示的普遍痛点,本文在 3σ+IQR 双重检测算法基础上,新增 ECharts 深色监控看板、可复制提示词模板与 9 条实战排坑笔记。结合智联工坊 360 条工单数据完整演示,附全套可复用 Python 脚本、结构化 JSON 结果、分析报告与 HTML 看板,替换字段即可落地到企业生产场景。
目录
一、开篇:上篇发布后,读者问得最多的 3 个问题
二、数据准备:360 条工单,3 条产线,5 个埋点(回顾)
三、优化更新 1:从"一份报告"到"一个监控看板"
四、优化更新 2:两段可复制提示词,读者改个文件名就能用
五、优化更新 3:9 条排坑笔记——"不注意会怎样"全说透
六、核心算法回顾:按产线分组 + 3σ/IQR 双重判定
七、检测结果:5 个埋点全部检出,无一遗漏
八、产线对比:核心洞察(C线标杆 / B线短板 / A线波动)
九、为什么这个场景价值大?
十、完整交付物清单(更新版)
十一、实在人总结
十二、评论区炸弹
📎 系列导航
【热榜文&精品推荐】
一、开篇:上篇发布后,读者问得最多的 3 个问题
兄弟们,上一版《MES 工时异常检测:WorkBuddy 自动排查》发出后,后台和评论区炸了——数据、脚本、报告全公开,很多兄弟直接拿去跑通了。
但问得最多的问题,就三个:
"脚本跑完了,报告也出了,怎么给老板演示?" —— 总不能把 Markdown 报告直接贴到周会上吧?大家要的是"一眼能看懂"的看板。
"提示词能不能直接复制?我懒得自己写。" —— 上一版只贴了原始需求,很多人还是不知道该怎么把"分析 + 做看板"两步串起来。
"你踩过的坑能不能提前说?" —— 有兄弟照着 3σ 跑,结果把好产线全标红了,跑完发现阈值不对,白干。
所以这一版,我不改核心算法(那套是对的),只做三件事:
✅ 新增 ECharts 深色监控看板(HTML,双击即开,给老板演示用的)
✅ 新增两段可复制提示词(分析 + 看板,改个文件名就能用)
✅ 新增 9 条排坑笔记(每条都写清楚"不注意会怎样")
| 版本说明 | 交付内容 | 适用场景 |
|---|---|---|
| v1.0(第一篇) | 算法脚本 + 分析报告 | 技术同学自行跑数据 |
| v2.0(本篇,优化篇) | 新增:HTML 看板 + 提示词模板 + 9 条排坑笔记 | 全岗位复用,可直接给管理层演示 |
读完本文你将获得:
- 可直接给管理层演示的 MES 异常监控看板(HTML)
- 两段复制即用的提示词模板(分析 / 看板)
- 9 条用真金白银换来的踩坑笔记
- 上版核心:3σ+IQR 双重检测脚本 + 产线分组方法论
二、数据准备:360 条工单,3 条产线,5 个埋点(回顾)
本次分析依然沿用智联工坊的同一批数据:时间范围为 8 月 1 日至 15 日,共计 360 条工单,覆盖 3 条产线、9 种产品。
数据字段包括:工单编号、日期、产线、产品型号、计划工时、实际工时、产出数量、不良率、停机时长。
为了验证检测算法的有效性,我在数据中预先埋设了 5 个异常点,用以检验系统能否将它们全部识别出来。
| 埋点 | 产线 | 异常类型 | 严重程度 |
| ① | 交互屏A线 | 工时超标 + 停机 45min | 🔴 严重 |
| ② | 传感器B线 | 不良率 8.5% | 🔴 严重 |
| ③ | 测试C线 | 停机 80min | 🔴 严重 |
| ④ | 交互屏A线 | 工时超标 + 不良率 4.2% | 🟠 明显 |
| ⑤ | 传感器B线 | 产出 72 件 + 不良率 6.8% | 🟠 明显 |
三、优化更新 1:从"一份报告"到"一个监控看板"
上一版交付的是 Markdown 报告,这一版 WorkBuddy 直接生成了 HTML 监控看板,双击就能在浏览器打开,深色管理后台风格,给老板演示完全不掉价。
看板包含 4 个模块:
① 4 个 KPI 卡片(一眼看全局)
KPI | 数值 | 说明 |
总工单数 | 360 | 3 条产线 × 120 单 |
异常工单数 | 9 | 按工单编号去重(不是 13,见排坑笔记 #4) |
异常率 | 2.5% | 9 / 360 |
待处理数 | 5 | 严重/明显等级,需人工介入 |
② 产线对比柱状图(3 指标并排)
用 ECharts 画了三个并排小柱状图——平均效率 / 平均不良率 / 平均停机时长。为什么分开画?因为三个指标量纲完全不同(效率是 0~1,不良率是 %,停机是分钟),画在一个图里柱子会被压成一条缝(见排坑笔记 #3)。
③ 异常类型 × 产线 堆叠柱状图
同一张工单可能同时命中多类异常(比如 WO-20260801-001 既是效率异常又是不良率异常),用堆叠图能看出"哪条产线的哪类问题最集中"。
④ 异常工单明细表(含判定依据)
每行一条异常工单,列:工单编号、日期、产线、产品型号、异常类型(多类标签并列)、关键数值、判定依据(具体到"低于 3σ 下限 0.736"这种程度)、等级徽章(严重红 / 边缘黄 / 观察绿)。
这一版的升级点:判定依据不再是"是/否",而是精确到阈值。 老板问"为什么这条算异常",你直接指给他看:"效率 0.541,低于这条产线的 3σ 下限 0.736,超了 26%。"——这就是从"数据展示"到"数据解释"的差距。
四、优化更新 2:两段可复制提示词,读者改个文件名就能用
上一版(查看链接)很多人问提示词,这一版直接给成品。两段提示词,把<尖括号>里的内容换成你自己的文件名/字段名,复制给 WorkBuddy 就能跑。
提示词 ①:MES 工单异常分析(输出报告 + JSON)
请分析工作目录下的 <你的数据文件名>.xlsx(例如 mes_work_order_data.xlsx), 这是一个 <行业/场景描述,如:MES 生产工单> 数据集,找出其中的异常情况。 数据字段说明: - 工单编号:唯一标识 - 日期:生产日期 - 产线:<你的产线字段值,如:A线/B线/C线> - 产品型号:产品型号 - 计划工时:标准计划工时(分钟) - 实际工时:实际消耗工时(分钟) - 产出数量:合格产出数量 - 不良率:不良率(%) - 停机时长:设备停机时长(分钟) 请从以下维度进行分析: 1. 工时效率异常:效率 = 计划工时 / 实际工时,找出效率严重偏低的工单 2. 质量异常:不良率异常高的工单或产线 3. 设备异常:停机时长异常高的工单或产线 4. 产线对比:各产线的效率、质量、设备表现对比 5. 按日期趋势:各项指标的时间变化趋势 检测方法要求(重要): - 必须按产线分组后再做异常判定(不同产线基准不同,全局检测会误判) - 每组内用 3σ 原则 + IQR 箱线图双重判定,取并集(3σ 对偏态分布不敏感,IQR 兜底) - 效率/产出数量只判"偏低"方向;不良率/停机时长判"偏高"方向 - 异常分三级:严重(超 3σ)/ 边缘(仅超 IQR)/ 观察(方向性离群,如不良率偏低属良性) - 同一工单命中多类异常时合并为一行,不要重复计数 - 额外检测产出数量是否偏低(与不良率联动) 输出要求: 1. 用表格展示异常数据,标注异常类型与判定依据 2. 文字总结核心发现 3. 按优先级排序的改进建议(3~5 条) 4. 同时输出一份结构化 JSON(含数据概览、各维度异常明细、产线对比、按日趋势),保存为 anomaly_result.json
提示词 ②:生成 MES 异常监控 HTML 看板
请根据工作目录下的 <分析结果文件>.json(例如 anomaly_result.json)生成一个 HTML 监控看板,用于展示 MES 工单异常监控结果。 数据说明: - JSON 中包含 overview(总记录数、时间范围、产线分布)、 efficiency_anomaly / defect_anomaly / downtime_anomaly / output_anomaly (各维度异常工单明细,含判定依据)、line_comparison(产线对比指标)、 daily_trend(按日趋势)等字段 看板要求: 1. 深色管理后台风格(背景深蓝黑、卡片式布局、全局深色主题) 2. 4 个 KPI 卡片:总工单数、异常工单数(按工单编号去重)、异常率、待处理数 (待处理 = 严重/明显等级的异常工单数) 3. 产线对比柱状图:用 ECharts 展示各产线平均效率、平均不良率、平均停机时长 (三个指标量纲不同,用三个并排小图,各自独立坐标轴) 4. 异常类型 × 产线 堆叠柱状图(同一工单命中多类异常按检出计数) 5. 异常工单明细表格:工单编号、日期、产线、产品型号、异常类型(多类用标签并列)、 关键数值、判定依据、等级徽章(严重=红 / 边缘=黄 / 观察=绿) 6. 表格按"严重在前、日期升序"排序;同一工单多类异常合并为一行 7. ECharts 用 CDN 引入(https://cdn.jsdelivr.net/npm/echarts@5/dist/echarts.min.js), 页面不依赖本地服务,浏览器双击 index.html 即可打开 8. 图表配色与深色主题一致(图表坐标轴、图例、tooltip 均为深色系)
组合使用流程: 先跑 ① 得到报告 + JSON → 再跑 ② 得到看板 → 双击看板演示。
【老蒋经验谈】
做了二十多年工厂信息化项目,我最深的感受是:算法本身从来不是难点,难的是落地不翻车。这 9 条坑,每一条都是我或者同行真实踩过的 —— 有的上线了才发现全是误报,有的给老板汇报时 KPI 对不上直接穿帮。 把这些写出来,就是不想大家再走一遍弯路。做制造业数字化,稳比快重要。
五、优化更新 3:9 条排坑笔记——"不注意会怎样"全说透
这 9 条坑,是我这一版实战里真实踩过的,也是读者最容易翻车的点。每条都按"坑 → 不注意会怎样 → 正确做法"写清楚。
排坑速查表:
# | 坑 | 一句话解法 |
1 | 3σ 对偏态分布不敏感 | 3σ + IQR 取并集,分"严重/边缘"两级 |
2 | 全局检测跨产线误判 | 必须 groupby 产线后组内判定 |
3 | 量纲混用 | 不同指标独立阈值、独立作图 |
4 | 异常数重复计数 | 按工单编号去重后统计 KPI |
5 | 方向性离群误报 | 按业务指定判定方向,良性离群单独归类 |
6 | 漏检产出塌方 | 产出数量单独做偏低检测,与不良率联动看 |
7 | 阈值散落难维护 | 集中配置,参数化 |
8 | pandas Series 三目报错 | 掩码→标签一律 np.where |
9 | 小样本组乱判 | min_rows_group 门槛,不足则跳过 |
说明:为了确保主题文章内容过于冗长,我把具体的排坑内容整理到一起了,请参考:
MES 异常检测全是误报和漏检?3σ+IQR 分组判定,9 个坑一次说清(附速查表)
六、核心算法回顾:按产线分组 + 3σ/IQR 双重判定
上一版的方法论不变(链接回顾),这里是完整代码:
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 环境依赖 Requirements: - Python 3.10+ - pandas >= 2.0 - openpyxl >= 3.1 模块名: analyze_mes_work_order.py 作者: 制造业数据与AI践行者老蒋 | CSDN: https://blog.csdn.net/javy21 专栏归属: AI赋能数据开发工程手册 核心问题: MES 工单数据中如何系统性识别工时效率、质量、设备三类异常 解决方案推演: 1. 工时效率异常 → 效率=计划工时/实际工时,按产线 3σ 下限判定(不同产线基准效率不同) 2. 质量异常 → 不良率按产线分组 3σ + IQR 双重判定,避免跨产线基准差异导致误判 3. 设备异常 → 停机时长按产线分组 IQR 判定,尾部长尾分布更适用分位数法 案例溯源: 智联工坊(虚拟工厂)交互屏组装A线/传感器组装B线/成品测试C线 MES 工单 适用周次: 第 4 周 """ import json import logging from pathlib import Path from typing import Any, Dict, List, Tuple import numpy as np import pandas as pd # --------------------------------------------------------------------------- # 配置区(对应规范 §7:路径统一用 pathlib,参数集中管理) # --------------------------------------------------------------------------- BASE_DIR: Path = Path(__file__).resolve().parent INPUT_FILE: Path = BASE_DIR / "mes_work_order_data.xlsx" OUTPUT_FILE: Path = BASE_DIR / "anomaly_result.json" # 异常判定阈值配置(可调参数集中管理,便于现场标定) CONFIG: Dict[str, Any] = { "sigma": 3.0, # 3σ 原则 "iqr_k": 1.5, # IQR 箱线图系数(1.5 为经典取值) "min_rows_group": 10, # 分组样本量下限,低于此样本不判异常 } logging.basicConfig( level=logging.INFO, format="%(asctime)s | %(levelname)s | %(message)s", datefmt="%Y-%m-%d %H:%M:%S", ) logger = logging.getLogger("mes_analyzer") # --------------------------------------------------------------------------- # 数据加载 # --------------------------------------------------------------------------- def load_work_orders(file_path: Path) -> pd.DataFrame: """ 加载 MES 工单 Excel 并做基础清洗。 设计思路: 数值列强制转 float 并保留原始不良率百分比口径(%), 日期列转 datetime 以便后续按日聚合。 Args: file_path: Excel 文件路径 Returns: 清洗后的工单 DataFrame;文件不存在或解析失败时抛出异常 Raises: FileNotFoundError: 输入文件不存在 """ if not file_path.exists(): raise FileNotFoundError(f"输入文件不存在: {file_path}") df = pd.read_excel(file_path) num_cols = ["计划工时", "实际工时", "产出数量", "不良率", "停机时长"] for col in num_cols: df[col] = pd.to_numeric(df[col], errors="coerce") df["日期"] = pd.to_datetime(df["日期"]) df["效率"] = (df["计划工时"] / df["实际工时"]).round(3) logger.info("数据加载完成: %d 条记录", len(df)) return df # --------------------------------------------------------------------------- # 异常检测工具函数 # --------------------------------------------------------------------------- def detect_by_3sigma(series: pd.Series, sigma: float = 3.0) -> pd.Series: """ 按 3σ 原则判定异常: |x - mean| > sigma * std 视为异常。 设计思路: 正态分布下 3σ 覆盖 99.7% 数据,超出即为离群; 对偏态分布(如停机时长)会偏保守,配合 IQR 方法互补使用。 Args: series: 待检测数值序列 sigma: σ 倍数,默认 3.0 Returns: 布尔 Series,True 表示异常 """ mean, std = series.mean(), series.std() if std == 0 or std != std: return pd.Series(False, index=series.index) return (series - mean).abs() > sigma * std def detect_by_iqr(series: pd.Series, k: float = 1.5) -> pd.Series: """ 按箱线图 IQR 原则判定异常: 超出 [Q1-k*IQR, Q3+k*IQR] 视为异常。 设计思路: 不依赖正态假设,对偏态/长尾分布更稳健; 上下界分别计算,可只关注上尾(如停机时长只判过高)。 Args: series: 待检测数值序列 k: IQR 倍数,默认 1.5 Returns: 布尔 Series,True 表示异常 """ q1, q3 = series.quantile(0.25), series.quantile(0.75) iqr = q3 - q1 if iqr == 0 or iqr != iqr: return pd.Series(False, index=series.index) lower, upper = q1 - k * iqr, q3 + k * iqr return (series < lower) | (series > upper) def detect_anomalies_per_group( df: pd.DataFrame, group_col: str, value_col: str, lower_tail: bool = False ) -> pd.DataFrame: """ 按产线分组执行 3σ 与 IQR 双重检测。 设计思路: 三条产线基准差异明显(如 C 线不良率基准 1% vs B 线 2.5%), 全局检测会误伤低基准产线,必须分组后检测; 两法取并集以提高召回,但样本过少的组直接放行。 Args: df: 工单 DataFrame group_col: 分组列名(产线) value_col: 待检测数值列名 lower_tail: 是否只关注下尾(True 表示只判过低,如效率) Returns: 仅含异常记录的子 DataFrame,新增 anomaly_type 列 Raises: ValueError: 分组样本量低于 min_rows_group 时抛错提示 """ results: List[pd.DataFrame] = [] for group, sub in df.groupby(group_col): if len(sub) < CONFIG["min_rows_group"]: logger.warning("分组 %s 样本量 %d 不足,跳过检测", group, len(sub)) continue flag_3sigma = detect_by_3sigma(sub[value_col], CONFIG["sigma"]) flag_iqr = detect_by_iqr(sub[value_col], CONFIG["iqr_k"]) if lower_tail: flag_3sigma = flag_3sigma & (sub[value_col] < sub[value_col].mean()) flag_iqr = flag_iqr & (sub[value_col] < sub[value_col].median()) mask = flag_3sigma | flag_iqr if mask.any(): hit = sub[mask].copy() basis = np.where(flag_3sigma[mask], "3σ", "IQR") hit["判定依据"] = basis + ("(偏低)" if lower_tail else "") results.append(hit) if not results: return pd.DataFrame() return pd.concat(results, ignore_index=True) # --------------------------------------------------------------------------- # 四维分析入口 # --------------------------------------------------------------------------- def analyze_efficiency(df: pd.DataFrame) -> pd.DataFrame: """工时效率异常检测: 效率=计划/实际,只关注严重偏低工单。""" return detect_anomalies_per_group(df, "产线", "效率", lower_tail=True) def analyze_defect(df: pd.DataFrame) -> pd.DataFrame: """质量异常检测: 不良率(%) 按产线分组,双向(过高/过低)检测。""" return detect_anomalies_per_group(df, "产线", "不良率", lower_tail=False) def analyze_downtime(df: pd.DataFrame) -> pd.DataFrame: """设备异常检测: 停机时长(分钟) 按产线分组,双向检测。""" return detect_anomalies_per_group(df, "产线", "停机时长", lower_tail=False) def analyze_line_comparison(df: pd.DataFrame) -> pd.DataFrame: """ 产线横向对比: 聚合效率/不良率/停机时长均值。 设计思路: 用均值+变异系数(CV)描述各组水平与稳定性, CV 高说明该产线波动大,管理一致性差。 """ agg = ( df.groupby("产线") .agg( 工单数=("工单编号", "count"), 平均效率=("效率", "mean"), 效率波动CV=("效率", "std"), 平均不良率=("不良率", "mean"), 不良率最大值=("不良率", "max"), 平均停机时长=("停机时长", "mean"), 停机时长最大值=("停机时长", "max"), 平均产出=("产出数量", "mean"), ) .round(3) .reset_index() ) agg["效率波动CV"] = (agg["效率波动CV"] / agg["平均效率"] * 100).round(1) return agg def analyze_daily_trend(df: pd.DataFrame) -> pd.DataFrame: """按日期聚合各产线日平均效率/不良率/停机时长。""" return ( df.groupby(["日期", "产线"])[["效率", "不良率", "停机时长"]] .mean() .round(3) .reset_index() ) def build_report(df: pd.DataFrame) -> Dict[str, Any]: """ 汇总全部分析结果,输出可序列化字典。 Args: df: 清洗后的工单 DataFrame Returns: 含概览/异常明细/产线对比/日趋势的嵌套字典 """ eff_anomaly = analyze_efficiency(df) defect_anomaly = analyze_defect(df) down_anomaly = analyze_downtime(df) # 产出数量异常(质量/产能联动,按产线 3σ 偏低) output_anomaly = detect_anomalies_per_group(df, "产线", "产出数量", lower_tail=True) report: Dict[str, Any] = { "overview": { "total_records": int(len(df)), "date_range": [df["日期"].min().strftime("%Y-%m-%d"), df["日期"].max().strftime("%Y-%m-%d")], "line_distribution": df.groupby("产线")["工单编号"].count().to_dict(), "product_count": int(df["产品型号"].nunique()), }, "efficiency_anomaly": _to_records(eff_anomaly), "defect_anomaly": _to_records(defect_anomaly), "downtime_anomaly": _to_records(down_anomaly), "output_anomaly": _to_records(output_anomaly), "line_comparison": _to_records(analyze_line_comparison(df)), "daily_trend": _to_records(analyze_daily_trend(df)), } return report def _to_records(frame: pd.DataFrame) -> List[Dict[str, Any]]: """DataFrame 转 JSON 友好记录列表(日期/NumPy 类型统一转换)。""" if frame is None or frame.empty: return [] out = frame.copy() if "日期" in out.columns: out["日期"] = out["日期"].dt.strftime("%Y-%m-%d") return out.astype(object).where(pd.notnull(out), None).to_dict(orient="records") def main() -> None: """主流程: 加载 → 分析 → 落盘 JSON → 打印概览。""" df = load_work_orders(INPUT_FILE) report = build_report(df) OUTPUT_FILE.write_text( json.dumps(report, ensure_ascii=False, indent=2), encoding="utf-8" ) logger.info("分析完成,结果已写入 %s", OUTPUT_FILE) for key in ("efficiency_anomaly", "defect_anomaly", "downtime_anomaly", "output_anomaly"): logger.info("%s: 检出 %d 条", key, len(report[key])) print("\n=== 产线对比 ===") print(pd.DataFrame(report["line_comparison"]).to_string(index=False)) if __name__ == "__main__": main()关键设计:按产线分组检测,而非全局检测。各产线基准差异如下,全局检测必然误判:
产线 | 效率基准 | 不良率基准 | 停机基准 |
交互屏组装A线 | 0.91 | 1.8% | 7.5 min |
传感器组装B线 | 0.86 | 2.6% | 11.8 min |
成品测试C线 | 0.94 | 0.9% | 5.8 min |
七、检测结果:5 个埋点全部检出,无一遗漏
5 个预设异常,全部检出,无一遗漏。(另检出 3 条IQR 边缘异常 + 1 条良性离群,看板中分级展示)
埋点 | 工单编号 | 产线 | 异常指标 | 实际值 | 检测阈值 | 判定依据 |
① | WO-20260802-028 | A线 | 效率 | 0.541 | < 0.736 | 3σ |
① | WO-20260802-028 | A线 | 停机 | 45 min | > 21.2 min | 3σ |
② | WO-20260801-009 | B线 | 不良率 | 8.5% | > 5.12% | 3σ |
③ | WO-20260801-018 | C线 | 停机 | 80 min | > 28.1 min | 3σ |
③ | WO-20260801-018 | C线 | 效率 | 0.732 | < 0.800 | 3σ |
④ | WO-20260801-001 | A线 | 效率 | 0.671 | < 0.736 | 3σ |
④ | WO-20260801-001 | A线 | 不良率 | 4.2% | > 3.40% | 3σ |
⑤ | WO-20260801-010 | B线 | 不良率 | 6.8% | > 5.12% | 3σ |
⑤ | WO-20260801-010 | B线 | 产出 | 72 件 | < 3σ 下限 | 3σ |
八、产线对比:核心洞察(C线标杆 / B线短板 / A线波动)
以下为 WorkBuddy 生成报告原文。
产线 | 平均效率 | 效率波动CV | 平均不良率 | 不良率峰值 | 平均停机 | 停机峰值 | 平均产出 |
成品测试C线 | 0.937 🥇 | 4.8% | 0.94% 🥇 | 2.23% | 5.8 min 🥇 | 80 min | 94.5 🥇 |
交互屏组装A线 | 0.909 | 6.4% ⚠️ | 1.82% | 4.20% | 7.5 min | 45 min | 93.8 |
传感器组装B线 | 0.862 ⚠️ | 5.3% | 2.61% ⚠️ | 8.50% | 11.8 min ⚠️ | 20 min | 92.5 |
C 线是标杆:效率最高、不良率最低(不到 B 线 1/3)、停机最少、波动最小。
B 线是短板:效率比 C 线低 7.5 个百分点,不良率是 C 线 2.8 倍,平均停机是 C 线 2 倍——四指标全线下滑,系统性问题而非偶发。
A 线波动最大:效率 CV 6.4% 三线最高,生产一致性差;两次严重效率异常均伴随停机,停机是 A 线效率损失主因。
趋势结论:异常集中爆发于 8/1~8/2(月初产能爬坡期),4/5 埋点集中在开月前两天,之后各线回归稳态;B 线"高不良率 + 高停机 + 低效率"为全期常态。
九、为什么这个场景价值大?
传统方式 | WorkBuddy 方式 |
导出 Excel,人工翻数据 | 拖入文件,一键分析 |
凭经验判断"哪些算异常" | 3σ+IQR 统计算法客观判定 |
写了报告没法复用 | 生成 Python 脚本,每周跑一次 |
只知道"有异常",说不清根因 | 给出改进建议,能指导行动 |
报告贴 PPT 给老板看 | HTML 看板直接演示,判定依据精确到阈值 |
这个案例的本质:从"手工查数"到"自动化异常监控",再到"能解释、能演示、能复用"。
十、完整交付物清单(更新版)
序号 | 文件 | 说明 |
1 |
| 可复用分析脚本,3σ+IQR 双检测 |
2 |
| 结构化异常结果,可接 MES 看板 |
3 |
| 完整分析报告 |
4 |
| 新增:ECharts 深色监控看板,双击即开 |
5 |
| 新增:两段可复制提示词模板 |
6 |
| 新增:9 条排坑笔记 + 速查表 |
💡 适用说明
本方案适配离散制造业工单级异常检测(电子组装、汽配加工等),默认适配日维度 / 工单维度数据; 流程行业(化工、冶金)需调整指标体系,分钟级时序数据需增加滑动窗口做平滑处理; 看板为静态单文件,如需实时刷新可搭配定时任务每日自动生成。
十一、实在人总结
怕你忘了,我再啰嗦一遍:
1. 这一版把"分析"升级成了"产品"。 从脚本到报告到看板,从"能用"到"好用"——给老板演示、给团队复用、给下周数据重新跑,一条龙。
2. https://blog.csdn.net/javy21/article/details/163703388。 不同产线基准不同,全局检测会误判。按产线分组检测,才是制造业的正确姿势。
3. 3σ + IQR 双重判定,比单用任何一种都稳。 3σ 抓极端离群,IQR 抓边界越界,取并集覆盖更全——这也是排坑笔记第一条。
4. 提示词要"给读者留好替换位"。 把文件名、字段名、口径说明都写进提示词里,读者改个尖括号就能用,这才叫可复现。
5. 踩坑笔记的价值,比脚本本身还大。 脚本是"答案",踩坑笔记是"为什么这么答"——知道坑在哪,才敢在自己的数据上动手。
十二、评论区炸弹
兄弟们,这一版把 MES 异常检测的完整闭环公开了:数据、脚本、报告、看板、提示词、排坑笔记,全都有。
现在轮到你们了:
你们的 MES 数据做异常检测,现在卡在哪一步?
A. 不知道"异常"怎么定义,全靠老师傅经验
B. 有脚本但跑出来全是误报,不敢用
C. 能检出异常,但给老板演示拿不出手
D. 我们做得比这还牛(大佬求带)
全套 6 份交付物(脚本 + JSON + 报告 + 看板 + 提示词 + 排坑笔记),评论区留言「MES 全套」我直接发你,不用自己凑。
够意思吧?评论区见!👇
后续大家用的时候遇到什么新坑,也欢迎评论区告诉我,我持续更新进去,咱们一起把这套方案磨得更实用。
📌 本文数据来源:智联工坊虚拟工厂 MES 工单模拟数据。分析脚本、结构化结果、完整报告、监控看板、提示词模板、排坑笔记均已随文章公开。
📎 系列导航
专栏:制造业数据与AI落地实战 AI赋能数据开发工程手册
上一篇:#04 代码审查不想得罪人?WorkBuddy 先做第一轮审查,附完整 Prompt 模板
下一篇:#06 《把500页设备维护手册喂给AI:RAG知识库从0到1》(规划中)
【热榜文&精品推荐】
TOP1、我用 WorkBuddy 分析了 30 篇 CSDN 博客,发现 3 个反直觉的流量真相
TOP2、还在翻 git log 写周报?WorkBuddy 一键生成结构化周报
TOP3、老攻城狮的AI开发环境搭建全记录:从零到跑通本地大模型(一日速通版)
TOP4、LangChain Agent 反复调用工具死循环?结构化返回 + Prompt 规则
TOP5、智联工坊实战:多工具协同Agent,让AI像人类一样规划与执行复杂任务
TOP6、代码审查不想得罪人?WorkBuddy 先做第一轮审查