[开源] 科室数据人格健康度画像:面向医院数据质控的CLI分析工具,用多维特征漂移检测替代人工盯表

本项目是一套专为医院信息科、医务处与质控办设计的数据行为分析工具,将科室日常上报行为拟人化为「数据人格」,通过保守度、激进度、稳定性、波动度、异常回避倾向五个维度建模,建立动态基线并量化检测其漂移(drift),帮助管理者在指标异常爆发前识别系统性风险苗头。它不依赖BI看板或定制大屏,而是以命令行(CLI)为统一入口,支持单科室深度分析、多科室横向对比、基线独立构建与报告批量生成四种标准动作;输出含可视化图表(雷达图、时间线、散点图)、结构化Markdown报告与可集成JSON结果;技术栈基于成熟Python生态,使用pandas/scipy/scikit-learn完成特征工程与统计检验,matplotlib/seaborn实现轻量可视化,全程无Web依赖、无数据库、不联网运行。
定位与能力范围
我们不做数据采集,也不改写HIS或EMR接口。我们只处理你已有的科室级历史报表,CSV或Excel格式,字段只需包含「科室名称」「上报日期」及若干业务指标(如门诊量、住院量、手术量、床位使用率、院内感染率、平均住院日、药品比例等),外加可选的质量评分与修改频次列。所有分析逻辑围绕「数据如何被科室呈现」展开,而非「数据本身对错」。因此它天然适配三类典型场景:
- 质控人员每月核查各科室上报一致性时,发现某科突然从“稳定低波动”变成“高频小幅修正”,却查不到操作日志;
- 医务处做季度考核前,想快速比对心内、呼吸、消化三个内科科室在“保守vs激进”光谱上的分布差异;
- 信息科上线新填报系统后,需验证各科室是否出现集体性数据平滑或截断行为。
它不承诺替代人工判断,但把过去靠经验翻表、凭感觉划重点的过程,转化为可复现、可回溯、可归因的五维人格评分。所谓“人格”,不是玄学比喻,而是从原始数值中严格提取的统计特征:比如“保守度”由3个月滚动变异系数加权衰减计算,“异常回避倾向”通过残差分布偏度与峰度联合判定,“稳定性”则融合修改次数、版本回滚率与指标离群值密度。
核心功能模块
系统五大能力全部封装为独立CLI子命令,彼此解耦,可组合调用:
|
子命令 |
主要用途 |
典型输出物 |
适用角色 |
|---|---|---|---|
analyze |
单科室全链路分析 |
radar_chart.png
, |
质控员、信息科工程师 |
compare |
≥2个科室横向对比 |
comparison_radar.png
, |
医务处、绩效办 |
baseline |
仅构建人格基线(不检测漂移) |
baseline_sliding.json
, |
数据治理岗、方法论验证者 |
report |
从已有分析结果重生成报告 |
report.md
, |
需批量导出汇报材料的行政人员 |
其中compare命令要求至少输入两个科室名(逗号分隔),最多建议8个,这是雷达图视觉可读性的实际边界,超出后自动降级为表格+散点图为主。所有命令均支持--output自定义路径,避免覆盖历史结果;--clean开关可启用自动清洗(空值填充、日期标准化、异常值截断),但默认关闭,尊重原始数据决策权。
使用与配置方式
安装极简,仅需Python 3.9+环境:
pip install -r requirements.txt
首次使用可先生成示例数据验证流程:
python scripts/generate_sample_data.py
该脚本产出data/sample_department_reporting.csv,含心内、呼吸、神内等8个科室12个月模拟数据,字段完全对齐真实场景(含药品比例、平均住院日等7类核心指标)。接着执行分析:
python main.py analyze data/sample_department_reporting.csv --output output/heart_lung/
若只想聚焦心内与呼吸两科,并生成纯Markdown报告:
python main.py analyze data/sample_department_reporting.csv --departments 心内,呼吸 --format markdown --output output/heart_lung_md/
对比分析则更直观:
python main.py compare data/sample_department_reporting.csv --departments 心内,呼吸,消化 --output output/comparison_2024Q2/
输出目录中,comparison_radar.png以五边形雷达图并排展示三科人格轮廓,一眼可见“心内保守度高但波动度低,消化激进度突出但稳定性弱”;comparison_scatter.png将所有科室投射到保守度-X轴、激进度-Y轴坐标系,形成分布聚类;comparison_report.md则自动列出各维度评分表格,并标注“心内与消化在异常回避倾向上差异达0.42,提示前者更倾向平滑处理院感率异常值”。
基线方法支持三种策略,通过--method参数指定:
- sliding(滑动窗口):取最近N个月数据直接建模,响应快,适合考核周期敏感场景;
- ema(指数加权移动平均):赋予近期数据更高权重,抑制短期噪声干扰;
- quantile(分位数基线):以历史P10/P50/P90为参考带,适合存在明显季节性波动的指标(如儿科冬季门诊量)。
阈值配置集中于config/example.yaml,例如PSI漂移分级:<0.2为稳定,0.2–0.25触发黄色预警,>0.25标红告警。这些数值非硬编码,可按院内管理习惯调整。
数据与扩展边界
输入数据格式宽松但明确:必需列为「科室名称」「日期」,其余指标列均为数值型,无强制字段名,你可用门诊人次或OPD_Count,只要列内是数字即可。说明文档中列出的常见指标(床位使用率、药品比例等)仅为示例,不构成解析限制。缺失值默认保留,由--clean开关控制是否插补。
系统不预设科室分类体系。示例数据虽含内科、外科等分组,但分析过程完全忽略该语义,仅以字符串匹配科室名。这意味着你可以分析“互联网医院运营部”“医联体办公室”等新型部门,只要其有连续上报记录。
根因分析模块(root_cause_analyzer.py)不连接外部系统,而是基于时间序列突变点与已知业务节奏库匹配:若突变发生在每年3月(三甲复审启动月)、9月(新系统上线季)或12月(年度考核节点),则优先推断为制度性动因;若仅单科室突变且伴随修改频次陡增,则标记为操作层原因。所有推断均附置信度评分,并在报告中注明“建议结合OA系统操作日志复核”。
JSON输出遵循扁平化结构,顶层键为department_name、analysis_date、persona_scores(含5维浮点值)、drift_alerts(含PSI/KS/EWMA/CUSUM四项结果及阈值状态)、root_causes(字符串数组)。此结构可直连医院数据中心API,无需额外ETL。
限制与说明
本工具不处理原始数据采集、权限管控或用户登录。它假设你已获得合规授权的数据文件,并自行承担数据脱敏责任。所有分析均在本地完成,无任何网络请求,不上传数据至任何服务器。
可视化图表为辅助理解而设,非最终交付物。radar_chart.png中各维度数值经Z-score标准化后映射至0–1区间,仅用于相对比较;timeline.png中标注的“突变时间点”是CUSUM算法检测到累积偏移超过阈值的首个日期,不代表事件发生日,而是信号确认日。
跨科室对比时,若科室数据覆盖时段差异过大(如A科有12个月数据、B科仅3个月),系统会自动截取交集时段参与计算,并在报告首行注明“分析基于2023-07至2024-06共12个月交集数据”。此机制确保比较公平,但也意味着过短数据可能被排除。
最后强调:它不替代临床判断,也不评价医疗质量。当系统提示“神内科室激进度骤降0.35”,真实原因可能是该科刚接手一批高龄慢病患者导致平均住院日被动拉长,这恰是工具价值所在:把模糊的“感觉数据变怪了”,锚定为可追溯、可讨论、可验证的具体维度变化。
项目地址:
https://github.com/nexorin9/department-data-persona
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)