我做这道 MathorCup E 题的时候,最开始其实没有把它当成三道彼此独立的小题去看。题目表面上是问题一、问题二、问题三依次展开,但我真正开始动手之后,很快就意识到,这三问其实是在逼着我搭一条完整的分析链路:先解释药价为什么会这样形成,再把罕见病的特殊性补进来,最后把价格分析真正落到一个具体患者的决策上。
也正因为我把它看成一条链,而不是三块拼图,所以我后面做模型的时候,思路一直很明确:问题一解决"看清价格形成机制",问题二解决"把罕见病特殊性纳入模型",问题三解决"在这个价格体系下,患者到底该怎么选药"。
这篇文章,我就不按论文口吻去复述结论了。我想换成更真实的复盘方式,把我当时是怎么理解题目、怎么拆问题、为什么这样设计模型、代码是怎么一步步搭起来的、结果又让我修正了哪些认识,完整讲出来。
目录
三、问题一:我先解决的不是模型,而是把乱掉的多年份数据真正整理干净
[我为什么同时比较 Ridge、随机森林和梯度提升树](#我为什么同时比较 Ridge、随机森林和梯度提升树)
问题一真正让我有感觉的,不是模型跑出来了,而是结果把层级差异讲明白了
四:问题二:我为什么没有继续堆算法,而是把重点放在"新增变量到底有没有意义"上
[为什么我用"基础层 vs 增强层"而不是换一套更花哨的模型](#为什么我用“基础层 vs 增强层”而不是换一套更花哨的模型)
五、问题三:做到这里,我才真正把题目从"药价分析"落到了"患者决策"
这道题最后让我真正做成的,不是三问答案,而是一条完整的建模链路
一、问题重述
我刚看到这道题时,第一个直觉是:这不就是一个回归问题吗?药品的谈判后价格作为目标变量,前面一堆药品属性和文本特征作为输入,最后做个机器学习模型预测一下不就行了?
但我真正开始读题以后,马上就发现这样理解太浅了。
因为题目并不是只要我"预测一个价格"。它至少有三层意思。
第一层,是要我解释影响谈判后价格的因素,这意味着我不能只追求精度,还得回答"为什么"。
第二层,是要我考虑罕见病药品的特殊性,这意味着普通药品定价逻辑可能不够,要往疾病层信息继续扩展。
第三层,是要我把这件事落到患者层面。也就是说,价格模型不是终点,患者怎么在替代药之间选出自付成本最低、又能满足疗效要求的方案,才是题目的最终落脚点。
所以我最后没有把它做成一个单点预测项目,而是把它设计成了一条完整流水线:
前面两问负责解释和增强定价逻辑,第三问负责把前面的分析真正用于决策。
从工程上讲,我也没有把所有东西写进一个大脚本里,而是尽量拆成了数据读取、清洗、特征工程、建模、解释、可视化、优化、敏感性分析这些模块。因为我希望这套方案不是"一次性跑通",而是真的能顺着逻辑一层层往下接。问题一里我就是这么处理多年份异构 Excel 的,问题二和问题三也沿用了这种模块化思路。
二、问题分析
如果我用最直白的话来概括这三问,我会这么说。
问题一,是在回答:医保谈判后的药价,到底受什么影响,我能不能建立一个基础定价模型把它解释清楚。
问题二,是在回答:如果我只看药品本身还不够,那把罕见病的疾病层特征加进来,模型会不会变得更合理、更有解释力。
问题三,是在回答:既然我已经大致知道价格是怎么形成的,那面对一个具体患者,在已有价格、报销规则和替代关系下,到底该怎么选药,才能把自己的负担压到最低。
这三问不是平行关系,而是递进关系。
问题一让我先看清楚"价格形成机制"。
问题二让我把"罕见病特殊性"正式纳入模型。
问题三则让我从"解释药价"真正走到"做用药决策"。
这也是我后面整套方案的主线。
三、问题一:我先解决的不是模型,而是把乱掉的多年份数据真正整理干净
问题一最先难住我的,其实不是算法,而是数据。
因为我面对的是 2020 到 2024 年的医保谈判药品数据,这种数据最麻烦的地方不在数量,而在格式。不同年份的表头写法不一致,sheet 结构也不统一,有的 sheet 里甚至还有说明页、重复表头、合并单元格。我如果一上来就直接读 Excel、拼 DataFrame,然后开始训练模型,后面一定会踩坑。
所以我第一步根本没急着建模,而是先做了一个多年份异构表的统一读取逻辑:我先在代码里手动定义了字段映射表,把"药品名称、企业名称、谈判前价格、谈判后价格、规格、药品类别、适应症"等核心字段统一起来,然后再自动去识别每个 sheet 真正的表头行,把无关页跳过去,只保留真正能用于建模的核心列。这样做完之后,我才敢把不同年份的数据合起来。
清洗的时候,我主要保留了 drug_name、company、year、spec、price_before、price_after、drug_category、indication_text 这些字段,再把价格列里的异常字符、空白、横杠、星号这些都清掉,然后用正则把价格抽成浮点数。最后,我用"药品名称 + 规格 + 年份 + 企业"去重,因为同一种药在不同规格和不同年份下,本来就应该被视作不同样本。做完这一轮以后,我拿到的是 405 条可用样本。这个数字不算特别大,但对于我后面的三层建模已经够用了。
为什么我没有直接把所有特征一股脑塞进去
我在问题一里做特征工程时,也没有一上来就把所有东西全堆进模型。
因为我真正想回答的问题不是"哪个黑盒模型最准",而是"哪些信息真的在给模型带来增量"。如果我从第一步就把谈判前价格、规格、类别、适应症关键词、TF-IDF 全部塞进去,最后即便模型效果好,我也很难说清楚,究竟是基础价格信息在起作用,还是类别信息在起作用,还是文本信息在起作用。
所以我把问题一拆成了三层:
第一层是 A_Base ,只放最基础的特征,比如谈判前价格、规格值、剂型和年份。
第二层是 B_Ext ,在基础层上加上药品类别 One-Hot 编码。
第三层是 C_Full,再进一步加上适应症关键词、文本长度和 TF-IDF 特征。
这个分层设计对我来说特别重要。因为它让我不是在比较"模型 A 和模型 B",而是在比较"信息层级增加之后,模型到底有没有变好"。
我为什么同时比较 Ridge、随机森林和梯度提升树
模型选择上,我也没有只跑一个随机森林就结束。
我当时的想法很简单:
如果我只跑线性模型,我可能会错过非线性关系;
如果我只跑树模型,我又会失去一个很重要的参考系------也就是"线性方法到底差多少"。
所以我同时比较了三种模型:
这是 Ridge 的目标函数。我引入它,不是因为它一定最好,而是因为我想先知道:如果我只允许模型用"线性方式"理解这些变量,它到底能做到什么程度。
随机森林这边,我用的是
也就是多棵回归树取平均的形式。它更适合我这个问题,因为规格、剂型、类别、适应症文本这些特征之间很可能存在明显的非线性交互。
梯度提升树我也一起跑了,原因类似:我想看看 boosting 这种逐步拟合残差的方式,在这个问题上能不能比 bagging 更强。
为了让误差指标更有业务意义,我没有直接在对数尺度上做评估,而是先对价格做了 Log1p 变换,再把预测结果反变换回真实价格尺度上计算 (R^2)、MAE、RMSE 和 MAPE。这里用到的几个指标分别是:
我这里引入这些公式,不是为了把博客写成论文,而是因为它们直接对应了我在代码里怎么评估模型。
问题一真正让我有感觉的,不是模型跑出来了,而是结果把层级差异讲明白了





问题一最有意思的地方,是我把三层特征和三类模型都跑完之后,结果非常清楚地告诉我:我的分层思路是对的。
A_Base 层里,随机森林的 (R^2) 是 0.5209,梯度提升树是 0.4270,而 Ridge 甚至是明显的负值。
到 B_Ext 层,也就是只加了类别特征之后,随机森林 (R^2) 只从 0.5209 提升到 0.5359,提升很有限。
真正明显跳起来的是 C_Full 层。加上适应症文本特征之后,随机森林 (R^2) 直接到了 0.9427,MAE 降到了 237.94,RMSE 也只有 543.59;梯度提升树也达到了 0.9132。相反,线性的 Ridge 虽然也被文本特征拉上来了,但还是明显不如随机森林。
这一组结果让我特别确信两件事。
第一,谈判前价格确实是一个非常强的锚点,但它绝对不是全部。
第二,适应症信息不是"可有可无的文本补充",而是影响医保谈判定价的重要信息源。
问题一的散点图也在强化这个认识。谈判前价格和谈判后价格在 Log1p 尺度下明显正相关,这个趋势我一眼就能看出来;但我同时也看到,同一谈判前价格附近,谈判后价格仍然散得很开。这就说明,单靠价格锚点不能把问题解释完。这个时候,规格、类别、尤其是适应症文本,就不是锦上添花,而是必须补进去的变量。模型对比图后来也验证了这一点:类别信息有一点帮助,但真正让模型发生"跃升"的,是适应症层的信息。
我一开始以为做到这里就差不多了,后来发现还不够
我最初做问题一的时候,其实差点就满足于"找到一个精度最高的模型"了。
但后来我反过来想,题目并不是只想让我交一个预测器。它还要我回答"哪些因素更重要"。也就是说,我不能停在"模型很准",我还得能解释"模型为什么这么判断"。
所以我后面又加了特征重要性和 SHAP 解释。随机森林的特征重要性结果里,log_price_before 的重要性是 0.7436,远高于其他变量;后面排得比较靠前的是 spec_value、ind_length、year、is_injection。这组结果很符合我当时的直觉:谈判前价格是最强锚点,规格和适应症复杂度是第二层,给药方式和年份效应再往后排。SHAP 图则让我进一步看到方向信息------高谈判前价格对应更强的正向贡献,高规格、高适应症复杂度也更倾向于把预测价格往上推。
也正是做到这里,我才觉得问题一真的闭环了。因为我不只是做出了一个基础定价模型,我还真的把"哪些因素在影响药价"这件事给讲清楚了。
四:问题二:我为什么没有继续堆算法,而是把重点放在"新增变量到底有没有意义"上
问题一做完之后,我其实已经有一个精度很不错的模型了。按常见套路,我完全可以继续往更复杂的算法上走,比如更深的 boosting、更复杂的 stacking,甚至做更多文本模型。
但我当时没有这么做。
因为我觉得问题二真正值得回答的,不是"我还能不能把分数再刷高一点",而是:如果把罕见病的特殊性加进来,这件事到底有没有意义。
这就是我为什么会把问题二的重点放在"模型增强"和"合理性验证"上,而不是单纯追求更复杂的模型。
我为什么觉得只看药品还不够
问题一里,我主要是在药品层做分析:谈判前价格、规格、类别、适应症文本,这些本质上都还属于"药品自己的属性"。
但罕见病药品的定价,我越看越觉得不能只停在这个层面。
比如说,同样是高价药,如果一种药对应的是患者非常少、几乎没有替代治疗的疾病,另一种药对应的是患者群体更大、替代方案更多的疾病,它们的医保谈判逻辑很可能是不一样的。前者可能会更强调不可替代性和临床迫切性,后者则更容易受到医保控费和竞争约束。
所以我在问题二里,专门做了一步"药品---疾病映射",把药品样本先映射到疾病层,然后再去接疾病层特征。这样一来,我的分析对象就不只是"药品",而是"药品所对应的疾病场景"。如果没有外部 disease_mapping.csv,我就用规则生成一个可复现的映射;这个做法不完美,但至少让我能把问题二的机制验证做起来。
我引入了哪些疾病层变量
问题二里,我新增了 8 个疾病层变量:
这里面分别对应疾病受众人数、是否癌症、严重程度、死亡风险、是否长期治疗、是否涉及儿童患者、可替代治疗数量和创新水平。代码里如果没有外部 rare_disease_features.csv,我就按固定随机种子生成一组可复现的疾病层特征,用来验证增强机制。这一点我一直是明确承认的:这不是说我拿到了完整权威的真实外部疾病数据库,而是在现实数据缺口下,我先构造一个可重复的扩展变量体系,看看把疾病层信息加进来以后,模型会不会真的变好。
为什么我用"基础层 vs 增强层"而不是换一套更花哨的模型
我在问题二里没有换算法,核心还是随机森林。
原因很简单:如果我同时改变量、又改模型,那最后模型变好到底是因为新增变量有用,还是因为算法换了,我就说不清了。
所以我把问题二做成了双层对比:
其中 (x_i^{(1)}) 是问题一的基础特征,(z_i) 是问题二新增的疾病层变量。
然后我直接比较:
这么做的好处特别明显:我比较的不是"不同算法谁更厉害",而是"加了疾病层变量以后,模型到底有没有提升"。
问题二真正让我觉得值的,是增强模型确实变好了




结果也很直接。
基础层模型的 (R^2) 是 0.5052,MAE 是 920.34,MAPE 是 2044.96%。
增强层模型把罕见病特异性因素加进去之后,(R^2) 提升到了 0.5461,MAE 降到了 871.43,MAPE 直接降到了 784.77%。
这组结果对我来说特别有说服力。因为它不是"某一个指标偶然变好",而是三个方向一起变好:解释能力更强了,绝对误差更低了,相对误差也显著下降了。
我从这里读到的不是"模型小幅优化了一下",而是:疾病层信息确实在补问题一没有覆盖的那部分结构。 问题一更多是在解释"药品怎么定价",问题二则开始解释"药品所在的疾病场景,如何进一步修正这个价格"。这也是为什么我觉得问题二不是问题一的重复,而是真正的增强。
我为什么又补做了消融实验
问题二做到这里,如果只是停在"增强模型指标更好",其实也能交。
但我自己并不满足。
因为我还想知道,新增的这些疾病层变量里,究竟是谁真的在起作用,谁只是跟着凑热闹。于是我又加了一步消融实验。做法很直接:把完整增强模型作为基准,然后每次删掉一个疾病层变量,重新训练模型,看 (R^2) 掉多少。
我用的定义是:
如果删除某个变量之后 (R^2) 掉得很多,就说明这个变量是有用的;如果几乎不掉,甚至还略微升一点,就说明它可能和其他变量有信息重叠,或者在当前样本规模下边际贡献不够稳定。这个实验逻辑就是我在 run_ablation_study 里实现的。
消融实验让我真正看清了问题二的关键变量
消融结果出来以后,我觉得问题二的故事一下子讲清楚了。
影响最大的变量是 treatment_alternative_count,删掉它以后 (R^2) 下降 0.042727。这个结果我一点都不意外,甚至觉得特别合理。因为在医保谈判里,"有没有替代方案"本来就是最关键的议价因素之一。替代治疗越多,药品的不可替代性越弱,谈判空间就越大,这对价格形成的影响非常直接。
排在后面的 pediatric_flag 和 chronic_need 也很有意思,分别让 (R^2) 掉了 0.019694 和 0.019436。这个结果让我意识到,儿童用药和长期治疗需求在罕见病场景里真的很关键。因为这两个因素不仅关系到临床使用场景,也关系到医保支付的持续性和保障倾向。
disease_population 的影响处在中间位置,下降 0.008389。我对它的理解是:患者规模不是最强主导因素,但它确实在提供一个经济学维度的信息------患者人数越少,单位成本摊薄越难;人数越多,基金承受和控费逻辑就更容易进来。
severity_score 和 is_cancer 的边际作用相对弱一些,但并不等于没用。我更倾向于认为,它们的信息已经部分被适应症文本、长期治疗需求这些变量吸收了。
至于 innovation_level 和 mortality_risk 出现了负向消融,我当时反而没有觉得这是坏事。因为这恰恰提醒我:不是所有新增变量都能稳定提供独立信息。在当前样本规模和随机森林分裂机制下,它们可能跟别的变量有比较强的信息重叠,或者在树模型里存在分裂竞争现象。这个结果让我对问题二的理解更成熟了------增强模型不是"变量越多越好",而是"哪些变量真的提供独立增量"。
问题二让我第一次真正觉得,我不是在刷模型,而是在做机制验证
如果说问题一让我建立了基础定价模型,那么问题二真正让我满意的地方,是我没有把它做成"再刷一次精度",而是做成了"验证罕见病特异性因素到底有没有意义"。
这一点对我后面做问题三特别重要。因为到了第三问,我已经不是单纯在看价格本身,而是要开始思考:价格体系背后那些影响因素,最后会怎样影响一个真实患者的选择。
五、问题三:做到这里,我才真正把题目从"药价分析"落到了"患者决策"
做到第三问的时候,我的视角已经彻底变了。
前两问里,我关心的是药价怎么形成、为什么会这样定价。
到第三问,我开始关心的是:在这个价格体系已经摆在面前的情况下,一个具体患者到底该怎么选药。
这也是我为什么觉得第三问不能再继续做回归预测。因为再预测一个价格,对这个问题已经没有本质帮助了。第三问真正的核心,是一个个体优化问题。
我为什么把它做成一个单体患者案例
在程序里,如果没有外部病例文件,我会自动生成一个 SMA 患儿案例:3 岁、15kg、治疗周期 365 天、目标疗效阈值 8.0、报销比例 70%。我一直把这个案例理解成"方法验证用的示范性病例",而不是某个真实医院病例。因为这里最重要的不是病例真实性本身,而是我能不能把给药规则、报销机制、替代关系和疗效约束都放进一个统一的决策模型里。
我怎么构建候选药物库和替代关系
候选药物这边,我用了两种 SMA 相关药物:诺西那生钠注射液和利司扑兰口服溶液用散。
前者是固定剂量、首年约 6 次给药;
后者是按体重给药、每天一次。
同时,我明确加了互斥替代关系,也就是这两种药不能同时选。这个设置对我来说很重要,因为第三问不是在做"多药联合用药优化",而是在做"存在替代关系时,如何从候选药里选一个患者自付成本最低的可行方案"。
我怎么把给药规则真正换算成年化成本
问题三里,我最不想做的一件事,就是只拿药物单价来比较。
因为这会把整个问题做错。实际决策里,药物便不便宜,不看单价,而要看"这一年到底要用多少"。
对于固定剂量药物,我用的是:
也就是单次剂量乘以年度给药次数。
所以诺西那生钠在当前设定下就是:
对于按体重给药药物,我用的是:
这里 (w) 是体重,(\alpha_i) 是单位体重剂量,(s_i) 是单瓶规格,(T) 是治疗天数。
代到利司扑兰上,在 15kg 体重下,
也就是说,这个孩子一年要用 23 瓶利司扑兰。
接下来我再把年总费用和患者自付算出来:
这里我优化的目标不是总费用,而是患者自付费用。因为从患者决策角度看,真正影响能不能承受的不是医保总共花了多少钱,而是他自己最后要掏多少钱。
这一步算出来的结果很清楚。
诺西那生钠:年需求量 6,单价 33180 元,年总费用 199080 元,自付 59724 元,疗效评分 9.0。
利司扑兰:年需求量 23,单价 3780 元,年总费用 86940 元,自付 26082 元,疗效评分 8.5。
这个结果其实已经很说明问题了:在当前案例下,利司扑兰不仅总费用更低,自付费用也明显更低。
我为什么把目标设成"最小自付成本",而不是最小总费用
这是第三问里我自己最看重的一个设计。
因为如果我把目标函数设成最小总费用,那我其实是在替医保基金做决策。
但题目问的是具体患者怎么选药,所以真正合理的目标函数应该是:
也就是最小化患者自付成本。
同时我还加了三个关键约束:
疗效约束:
互斥约束:
至少选一种药:
再加上
整个问题就是一个很标准的 0-1 整数规划。程序里如果 PuLP 可用,我就直接精确求解;如果没有 PuLP,我就退化成枚举。因为当前候选药就两个,枚举其实同样能保证最优。
第三问的结果为什么让我觉得这条链路终于闭环了

最后跑出来的最优方案是利司扑兰。
而且这个"最优"不是简单地因为它便宜,而是因为在满足疗效阈值和替代规则的前提下,它的患者自付成本最低。当前案例里,利司扑兰的自付是 26082 元,诺西那生钠是 59724 元,前者比后者少了 33642 元。
这一步对我来说特别重要,因为它让我觉得,前两问不是停在"解释药价",而是真的开始服务决策了。前两问告诉我药为什么这样定价,第三问让我进一步回答:那在这个定价体系下,患者到底该怎么选。
六、敏感性分析
我做完第三问最优方案之后,没有马上收工。

因为我还想知道,这个结论会不会对患者个体差异和医保政策变化特别敏感。如果报销比例一变,或者患者体重一变,最优方案就翻了,那这个模型的稳健性就不够。
所以我又做了两组敏感性分析。
第一组是报销比例,从 50% 到 90%。
第二组是患者体重,从 10kg 到 30kg。
对于诺西那生钠,因为它是固定剂量方案,自付成本可以直接写成:
它只受报销比例影响,不受体重影响。
对于利司扑兰:
它同时受体重和报销比例影响。
结果出来以后,我反而觉得特别踏实。
在我测试的整个区间内,最优方案没有发生翻转。25 个场景里,利司扑兰 25 次都是最优。
把报销比例固定在 70% 时,体重从 10kg 增加到 30kg,诺西那生钠的自付始终是 59724 元;利司扑兰则从 18144 元逐步增加到 52164 元。它确实随着体重增加在慢慢逼近诺西那生钠,但在 10kg 到 30kg 的范围内,始终没有超过去。这个现象我从敏感性分析图里看得非常直观:诺西那生钠那条线几乎是平的,利司扑兰那条线随着体重抬升,但一直在下面。也就是说,当前分析区间内没有出现交叉点。
这个结果让我对第三问的结论更有信心。因为它说明,当前这个示范性 SMA 患儿案例里,最优方案不是某组参数下偶然的产物,而是在一个相对合理的报销和体重区间内都保持稳定。
七、总结
如果只看单个问题,问题一像回归,问题二像特征增强,问题三像整数规划。
但当我把三问真的做完以后,我最强烈的感受反而不是"我做了三种模型",而是:我把一道题做成了一条链。
问题一让我先把价格形成机制看清楚。
问题二让我确认,罕见病的特殊性确实值得被单独拿出来建模。
问题三则让我把这一切落到一个患者到底该怎么选药上。
所以这道题在我这里不是"回归 + 回归 + 优化"的机械拼接,而是一条从宏观到微观、从解释到决策的建模链路:
先解释价格,
再增强解释,
最后做决策。
我觉得这也是这道题最有意思的地方。它不是只考我能不能把某个模型分数刷高,而是在逼着我思考:模型最后要落到哪里。
八、模型改进
如果让我自己复盘,我最满意的有三点。
第一,我没有把问题一做成一个只追求分数的黑盒,而是通过 A_Base、B_Ext、C_Full 三层结构,把"哪些信息真的带来了增量"讲清楚了。
第二,我在问题二里没有继续盲目堆算法,而是把重点放在"新增变量到底有没有意义"上,尤其是消融实验这一块,我觉得非常值。因为它让我不是只知道模型变好了,而是知道为什么变好。
第三,我在问题三里没有停留在价格预测,而是顺着题目一直走到患者决策。对我来说,这一步特别重要。因为只有做到这里,前面的价格分析才真正有了落地价值。
当然,这套方案也有明显局限。
最现实的一点,就是问题二里的疾病层特征并不全都来自完整外部数据库,有一部分是我在数据不完整的情况下,按规则和随机种子构造出来的可复现变量。这会影响它的现实精细度,但不会抹掉它的机制验证价值。至少它已经让我验证了:把疾病层变量加进来,模型确实会更合理。
另一个局限在问题三。现在的个体优化模型还比较"干净",我只纳入了价格、报销、给药规则、疗效阈值和互斥替代关系。它还没有把更多真实临床因素带进来,比如不良反应、依从性、长期效用、多阶段疗程切换,甚至预算上限也只是案例背景,并没有真的作为硬约束写进模型。也就是说,现在这个模型更像一个"经济决策原型",而不是完整的真实世界治疗决策系统。
如果我后面还继续扩展,我大概率会往三个方向走。
一个方向是补更真实的疾病层数据库,把问题二做得更扎实。
一个方向是把问题三从单阶段单药选择扩展成更接近真实路径的多阶段用药决策。
还有一个方向,是把前两问的价格形成模型和第三问的个体优化真正打通,比如把增强模型的预测结果直接作为后续决策模块的输入之一,形成一个更完整的政策---疾病---患者联动框架。
这道题最后让我真正做成的,不是三问答案,而是一条完整的建模链路
如果现在让我回头看这道题,我会觉得它最有价值的地方,不在于某一个 (R^2) 多高,也不在于某一问里我用了什么模型。
它真正有意思的地方在于,它把政策定价、疾病特征和患者选择放到了同一条分析链上。
我一开始做的是"药为什么这么定价";
做到中间,我开始问"罕见病为什么需要单独增强";
做到最后,我问的是"在这个价格体系下,患者应该怎么选"。
从结果上看,我最后得到的是这样一套链路:
问题一,我先用多年份医保谈判数据搭出基础定价模型,识别出谈判前价格、规格、适应症复杂度这些核心因素。
问题二,我把疾病层特征接进来,让模型从"看药品"扩展到"看药品 + 看疾病",并用消融实验验证了替代治疗数量、儿童适应证、长期治疗需求这些变量的价值。
问题三,我再把视角切到单体患者,用 0-1 整数规划在替代药之间寻找最小自付成本方案,并用敏感性分析检查这个结论是否稳健。
所以我最后交出去的,不只是三道题的答案,而是一条我自己觉得逻辑完整、工程上也能跑通的建模链路。
如果以后再做类似题目,我大概还是会坚持这个思路:
先把问题拆清楚,
再把模型串起来,
最后一定要问一句------这个模型,能不能真的落到决策上。
完整流程已经跑通,修改代码和论文的, 请在评论区留言,需要代码,作者会在半个小时内回复
制作不易,请点个赞和收藏吧
