单因素敏感性分析
一、直观理解:一次只拧一颗旋钮
单因素敏感性分析(One-at-a-Time, OAT)在基准参数组合下,每次只改变一个参数,其余固定,观察模型输出(最优值、预测、指标)如何响应。它像检修仪器时一次只拧一颗旋钮,便于定位“最敏感的那几个量”。
结果常用折线图、蜘蛛图或龙卷风图展示:条越长,说明该参数在考察范围内对输出影响越大。
二、适用场景与优缺点
| 类型 | 说明 |
|---|---|
| 适用场景 | 参数不多;需要可解释的重要性排序;论文验证章节;优化/评价/预测模型的稳健性说明。 |
| 核心优点 | 实现简单;图示直观;沟通成本低。 |
| 局限与缺点 | 忽略参数交互;非线性强时可能误导;依赖基准点选择。 |
三、核心原理
设模型输出 ,基准 。对参数 ,在集合 上计算
敏感性度量示例:
- 极差 ;
- 弹性 (可用中心差商);
- 归一化重要性 。
扰动方式:相对 或按实际可行区间扫描。
四、实践要点
- 明确输出指标(可多个);
- 参数扰动范围写清来源;
- 同时看相对变化百分比;
- 对最敏感参数做更细扫描或多因素跟进;
- 优化问题可看最优解 是否结构变化。
五、MATLAB 示例
%% 单因素敏感性:对 f = a*x^b + c 的“预测输出”在 x0 处
% 更贴近建模:库存 EOQ 对 D,K,h 的敏感性
EOQ = @(D,K,h) sqrt(2*K*D./h);
D0=10000; K0=80; h0=2;
base = EOQ(D0,K0,h0);
pct = [-0.2 -0.1 0 0.1 0.2];
% 对 D
yD = EOQ(D0*(1+pct), K0, h0);
% 对 K
yK = EOQ(D0, K0*(1+pct), h0);
% 对 h
yh = EOQ(D0, K0, h0*(1+pct));
figure;
plot(pct*100, yD/base, "-o", "LineWidth", 1.2); hold on;
plot(pct*100, yK/base, "-s", "LineWidth", 1.2);
plot(pct*100, yh/base, "-d", "LineWidth", 1.2);
yline(1, "--k");
xlabel("参数相对变化 (%)"); ylabel("EOQ / 基准 EOQ");
legend("D","K","h","Location","best");
title("单因素敏感性(蜘蛛图)"); grid on;
% 龙卷风图:±20% 极差
rangeD = max(yD)-min(yD);
rangeK = max(yK)-min(yK);
rangeh = max(yh)-min(yh);
figure;
barh([rangeh rangeK rangeD]);
yticklabels(["h","K","D"]);
xlabel("EOQ 极差(参数在 ±20% 内)");
title("龙卷风图:影响幅度排序"); grid on;
fprintf("基准 EOQ=%.2f\n", base);
fprintf("极差 D/K/h = %.2f / %.2f / %.2f\n", rangeD, rangeK, rangeh);
评价模型输出敏感性示例:
% TOPSIS 得分对权重的单因素扰动(示意)
score = @(w) (w(:)' * [0.8; 0.5; 0.2]) / sum(w); % 简化
w0 = [0.5 0.3 0.2];
s0 = score(w0);
for i=1:3
w = w0; w(i)=w(i)*1.2; w=w/sum(w);
fprintf("权重%d +20%% 并重归一后, 得分变化 = %.4f\n", i, score(w)-s0);
end
六、如何解释结果
说明基准情景、扰动方案、输出定义,列出参数重要性排序,并讨论:最敏感参数是否估计可靠;若不可靠,结论需更谨慎或需补充数据。
七、常见误区
1. 只扰动 ±1% 就宣称不敏感
范围太小可能看不出。
2. 不重归一权重却扰动权重
评价问题中权重和常为 1。
3. 忽略输出的定性翻转
数值变 5% 与“最优方案换人”意义不同。
4. 用 OAT 代替一切全局敏感性
有交互时应升级多因素方法。
附:建模流程中的落地清单(单因素敏感性)
要把方法真正写进论文,建议补齐以下模块,而不是只贴一个最终数字。
1. 问题对齐与假设
说明题目中的输入/输出如何映射到本方法,并显式列出关键假设。假设越清楚,后面的敏感性分析越有对象。
2. 关键关系
每次只动一个参数,用极差/弹性排序;蜘蛛图与龙卷风图展示。
3. 补充实现片段
f=@(a,b)a.^2+b; a0=1;b0=2; da=abs(f(1.2,b0)-f(0.8,b0)); db=abs(f(a0,2.4)-f(a0,1.6)); disp([da db]);
4. 报告要素
基准、扰动范围、输出定义、重要性排序。
5. 不适用情形
范围过小;忽略交互;权重扰动不重归一。
6. 与验证章节的衔接
至少做一项:参数扰动、与基线方法对照、极限情形检查。把“方法正文”和“全局方法论(第15门类)”连起来,结论才站得住。
八、小结
单因素敏感性分析通过“一次一个参数”定位关键驱动因素,是建模验证的标准动作。它简单清晰,但要注意基准依赖与交互缺失;把蜘蛛图/龙卷风图与文字解释写进论文,能显著提升结论可信度。