[开源] 科室二次分配公平感模拟器:用博弈论算出护士长敢拍板的奖金方案,让夜班、年资、技术难度全进模型 本项目是一个面向临床科室管理者的决策支持工具专为解决护理单元、急诊科、外科等一线科室在绩效二次分配中“凭经验难服众、按平均没激励、看年资欠公平”的典型困境而设计。我们把 Shapley 值合作博弈中的边际贡献量化、基尼系数收入分配离散度、纳什均衡稳定不背叛的分配状态三套数学逻辑封装进一个可本地运行的 Python 工具里输入一张含姓名、岗位、年资、夜班占比、技术难度和贡献分的 CSV 表就能输出带洛伦兹曲线、抱怨风险热力图、多方案公平感评分对比的 HTML 报告。它不是 Web SaaS不上传数据不是 Excel 插件不依赖人工拖拽而是命令行驱动的 CLI 工具也支持交互式向导核心模块全部开源可审技术栈聚焦 nashpy、scipy、matplotlib 和 Jinja2所有计算在本地完成输出即用。定位与能力范围我们不做全院级薪酬系统也不碰一次分配规则那是人事科和财务科的权限。我们专注在「科室主任或护士长拿到一笔已核定的绩效总额后如何在组内 5–15 人之间拆得既合规又服众」这一窄而深的环节。这个环节没有标准答案但有可量化的公平边界有人觉得按年资分最稳有人主张技术难度该加权还有人强调夜班多的人必须多拿。传统做法靠开会、投票、折中结果常是“表面同意、背后嘀咕”。本项目把这层模糊共识翻译成数学语言用 Shapley 值算每个人对科室整体产出的实际边际贡献用基尼系数衡量每种分配方案下的结果离散程度再用 nashpy 求解纳什均衡点即没人单方面改变策略比如要求重分能让自己更满意的状态。三者叠加不是给出唯一答案而是标出哪些方案落在“数学上稳定统计上公平”的交集区并明确提示谁可能成为高风险抱怨对象。这不是理论玩具。3 组示例数据已覆盖典型场景内科五区5人小团队适合快速验证逻辑、外科十区10人标准配置含护师/护士/技术员多岗、急诊科15人高强度轮值夜班比重大、技术难度梯度宽。每组数据都包含bonus_total总金额、night_shift_ratio夜班占比、technical_difficulty技术难度系数等真实字段直接运行即可看到完整报告。核心功能我们把“公平感”拆解为可计算、可对比、可归因的四个动作公平感指数生成对每种分配策略平均、年资加权、技术难度加权、夜班权重加权同步输出三项指标Shapley 值反映个体不可替代性、基尼系数越接近 0 越平均0.4 是常见警戒线、纳什稳定性得分1.0 表示完全均衡低于 0.7 视为易引发博弈反弹方案自动比对不只列数字而是生成横向表格直观显示同一组人用不同策略分到的金额、对应公平感三项指标、以及相对均值的偏离幅度如“张三在夜班权重方案中比平均分配多得 12.3%但其夜班占比达 38%”抱怨风险定位基于成员对自身贡献的认知偏差contribution_score 与实际分配额的残差、与其他人的横向比较落差如年资 8 年却分得低于年资 5 年者预测高概率表达不满的成员名单并按风险等级标注高/中/低HTML 可视化交付一键生成含交互元素的静态报告包括洛伦兹曲线直观展示分配偏移、公平感雷达图四策略并排对比、抱怨风险热力图横轴为成员纵轴为风险维度色块深浅表强度这些能力不是堆砌而是环环相扣Shapley 值决定“谁该多拿”基尼系数约束“多拿不能太离谱”纳什均衡确保“分完没人想掀桌子”风险预测则提前划出沟通重点让护士长在宣布方案前就知道该单独找谁聊哪一条。使用与配置你不需要懂博弈论也能用。整个流程就三步准备数据、选择模式、查看报告。数据准备只需一个 CSV字段必须严格匹配但无需手动录入。项目自带src/data_generator.py运行一次就在data/下生成三组真实结构的示例文件。你也可以基于以下字段新建 CSVUTF-8 编码逗号分隔字段必填说明示例department_name是科室全称用于报告标题急诊科bonus_total是本次可分配总金额元24797.76name是成员真实姓名王五position否岗位类型影响默认权重护士长/护师/护士/技术员/行政seniority否年资年用于年资加权策略12contribution_score是主管评定的相对贡献分0–1 区间1.0night_shift_ratio否近期夜班占总班次比例0–10.3technical_difficulty否所承担操作/病种的技术难度系数≥1.01.2运行方式两种入口推荐新手从交互式向导开始它会逐项提示输入路径、选择策略、确认参数python main.py --interactive熟悉后可直接命令行调用例如分析外科十区数据并生成报告python main.py --data data/sample_department_10.csv --report常用参数组合如下参数作用示例--data file指定输入 CSV--data data/sample_department_15.csv--scheme name锁定某一分配策略--scheme night_shift_weighted--report生成 HTML 报告默认存output/--report--output dir自定义输出目录--output ./my_reports--verbose输出详细计算过程调试用--verbose工程结构我们按职责切分模块每个.py文件只做一件事方便临床管理者或信息科同事按需查阅或二次开发模块文件职责关键能力fairness_engine.py公平感主引擎整合 Shapley 值、基尼系数、纳什均衡三路计算输出统一评分接口game_theory_engine.py博弈论专用层封装 nashpy将成员贡献矩阵转为收益矩阵求解混合策略纳什均衡distribution_generator.py分配策略实现内置平均、年资、技术难度、夜班权重四种算法支持自定义公式注入satisfaction_predictor.py风险建模基于贡献分残差、横向比较差、岗位敏感度三因子加权预测抱怨概率report_generator.py报告组装Jinja2 渲染 HTML嵌入 matplotlib 图表及结构化数据表格cli.py命令行胶水解析参数、调度流程、rich 输出进度与结果摘要所有模块通过analyzer.py串联main.py仅作入口无业务逻辑。这意味着如果你只想复用 Shapley 计算直接 importfairness_engine即可如果医院已有内部数据平台只需替换data_models.py中的读取逻辑其余模块无缝对接。环境与运行本项目对运行环境要求极简不依赖 GPU、不连数据库、不启服务进程。只要你的电脑装了 Python 3.10 或更高版本就能跑起来pip install -r requirements.txt依赖库全部来自 PyPI 官方源无私有包或编译障碍 -nashpy提供纳什均衡求解器核心博弈能力 -scipy支撑 Shapley 值的数值积分与排列组合计算 -matplotlib生成洛伦兹曲线、雷达图等交付图表 -rich让命令行输出带颜色、进度条、表格提升 CLI 可用性 -Jinja2将计算结果注入 HTML 模板生成即用报告Windows、macOS、Linux 全平台支持。无后台进程无网络外连除非你主动加了打赏链接所有中间数据留在本地符合医疗数据不出域的基本要求。数据与扩展示例数据不是摆设。data/目录下三组 CSV 已按真实科室逻辑构造-sample_department_5.csv内科五区5人岗位单一均为护士年资跨度小3–7年适合验证基础逻辑-sample_department_10.csv外科十区10人含护士长、护师、护士、技术员四类岗位夜班比差异大0.1–0.4技术难度系数拉到 1.0–1.5是主力测试场景-sample_department_15.csv急诊科15人岗位最杂含行政协调岗夜班占比普遍超 0.3技术难度系数出现 1.8 的极端值考验模型鲁棒性字段设计遵循临床管理习惯contribution_score不强制要求量化到小数点后两位0.8 和 0.82 在模型中无本质区别night_shift_ratio支持 0.33 这样的近似值不必精确到班次计数technical_difficulty允许按病种分级如气管插管1.5静脉采血1.0或按设备复杂度赋值。你甚至可以删掉seniority字段模型会自动降级为仅用贡献分夜班技术难度三因子运算边界清晰不强求全量数据。项目地址https://github.com/nexorin9/department-bonus-fairness-simulator