Decision Security 中文导航¶
原文: Decision Security
分类: 决策科学 + 网络安全
大小: 456 KB
语言: Python 包
📚 仓库简介¶
Decision Security 是一个可复用的决策科学工具包,专为网络安全决策设计。提供蒙特卡洛风险模拟、贝叶斯更新、生存分析、信息价值 (VoI) 计算、因果推断辅助和可视化工具。
GitHub: https://github.com/security-decision-science/decision-security
PyPI: https://pypi.org/project/decision-security/
🔧 核心模块¶
| 模块 | 功能 | 说明 |
|---|---|---|
| synth | 合成数据生成 | 重尾分布损失、计数数据、混合分布、生存数据 |
| montecarlo | 蒙特卡洛模拟 | Poisson 频率 + 严重度、风险带、VaR/ES |
| bayes | 贝叶斯统计 | Beta-Binomial 更新、正态分布更新、校准 |
| survival | 生存分析 | Kaplan-Meier、Nelson-Aalen 估计 |
| voi | 信息价值 | EVPI (完美信息期望价值)、ROI 选择 |
| causal | 因果推断 | DAG 工具 (父节点、后代、后门集) |
| viz | 可视化 | 损失分布、风险带、KM 曲线 |
📁 目录结构¶
decision-security/
├── src/
│ └── decision_security/
│ ├── synth/ # 合成数据生成
│ │ ├── losses.py # 损失分布
│ │ ├── counts.py # 计数数据
│ │ └── survival.py # 生存数据
│ ├── montecarlo/ # 蒙特卡洛模拟
│ │ ├── risk.py # 风险模拟
│ │ ├── var.py # VaR/ES 计算
│ │ └── bands.py # 风险带
│ ├── bayes/ # 贝叶斯统计
│ │ ├── updates.py # 贝叶斯更新
│ │ └── calibration.py # 校准
│ ├── survival/ # 生存分析
│ │ ├── km.py # Kaplan-Meier
│ │ └── na.py # Nelson-Aalen
│ ├── voi/ # 信息价值
│ │ ├── evpi.py # 完美信息价值
│ │ └── roi.py # ROI 选择
│ ├── causal/ # 因果推断
│ │ └── dag.py # DAG 工具
│ └── viz/ # 可视化
│ ├── loss_dist.py # 损失分布图
│ └── risk_bands.py # 风险带图
├── tests/ # 单元测试
├── examples/ # 示例代码
├── notebooks/ # Jupyter 笔记
└── README.md # 主文档
🚀 快速开始¶
安装¶
# 安装稳定版
pip install decision-security
# 安装预发布版 (最新功能)
pip install --pre decision-security
# 依赖要求
# Python >= 3.8
# numpy, scipy, pandas, matplotlib
第一个示例:蒙特卡洛风险模拟¶
import numpy as np
from decision_security.montecarlo import (
risk_bands, # 风险带
var_es, # VaR 和 ES
make_lognormal_severity, # 对数正态严重度
simulate_aggregate_losses # 聚合损失模拟
)
# 1. 创建损失严重度分布 (对数正态)
sev = make_lognormal_severity(
meanlog=8.0, # 对数均值
sdlog=1.2 # 对数标准差
)
# 2. 模拟聚合损失
# n_periods=10000: 模拟 10000 个周期
# lam=0.6: Poisson 频率参数 (平均每年 0.6 次事件)
losses = simulate_aggregate_losses(
n_periods=10000,
lam=0.6,
severity_sampler=sev
)
# 3. 计算风险带
risk = risk_bands(losses)
print(f"P50: {risk['p50']:,.2f} 元")
print(f"P90: {risk['p90']:,.2f} 元")
print(f"P95: {risk['p95']:,.2f} 元")
# 4. 计算 VaR 和 ES (Expected Shortfall)
var_95, es_95 = var_es(losses, alpha=0.95)
print(f"VaR95: {var_95:,.2f} 元")
print(f"ES95: {es_95:,.2f} 元")
贝叶斯更新示例¶
from decision_security.bayes import beta_binomial_update
# 先验:Beta(α=2, β=5)
# 表示 prior belief: breach 概率约 2/(2+5) = 28.6%
alpha_prior, beta_prior = 2, 5
# 观测数据:10 次攻击,2 次成功 breach
n_trials, n_successes = 10, 2
# 后验更新
alpha_post, beta_post = beta_binomial_update(
alpha_prior, beta_prior,
n_trials, n_successes
)
# 后验期望 breach 概率
posterior_mean = alpha_post / (alpha_post + beta_post)
print(f"后验 breach 概率:{posterior_mean:.2%}")
信息价值 (VoI) 计算¶
from decision_security.voi import calculate_evpi
# 决策场景
decision_value = 1000000 # 决策价值 (元)
uncertainty_reduction = 0.3 # 信息可减少的不确定性 (30%)
# 计算完美信息期望价值
evpi = calculate_evpi(
decision_value=decision_value,
uncertainty_reduction=uncertainty_reduction
)
print(f"信息价值:{evpi:,.2f} 元")
print(f"如果情报服务价格 < {evpi:,.2f} 元,则值得购买")
生存分析示例¶
from decision_security.survival import kaplan_meier
import numpy as np
# 示例数据:安全事件发生时间
# time: 事件发生时间 (天)
# event: 1=事件发生,0=删失 (未发生)
times = np.array([10, 20, 30, 40, 50, 60, 70, 80])
events = np.array([1, 1, 0, 1, 1, 0, 1, 0])
# 计算 Kaplan-Meier 生存曲线
survival_prob, median_time = kaplan_meier(times, events)
print(f"中位生存时间:{median_time:.1f} 天")
print(f"30 天生存概率:{survival_prob[30]:.2%}")
📖 关键文档¶
| 文档 | 说明 |
|---|---|
| Notebooks | 19 个交互式 Jupyter 笔记 |
| Security Decision Labs | FAIR 模拟器应用 |
| Blog | 决策安全博客文章 |
💡 典型应用场景¶
1. 网络安全风险量化¶
# 模拟年度网络安全损失分布
from decision_security.montecarlo import simulate_aggregate_losses
# 参数估计 (基于历史数据)
frequency_lambda = 0.8 # 年均安全事件次数
severity_meanlog = 9.0 # 平均损失对数均值
severity_sdlog = 1.5 # 损失对数标准差
# 运行模拟
losses = simulate_aggregate_losses(
n_periods=10000,
lam=frequency_lambda,
severity_sampler=make_lognormal_severity(severity_meanlog, severity_sdlog)
)
# 输出风险指标
print(f"期望年度损失:{np.mean(losses):,.2f} 元")
print(f"95% VaR: {np.percentile(losses, 95):,.2f} 元")
2. 安全控制 ROI 优化¶
from decision_security.voi import roi_selection
# 多个安全控制方案
controls = [
{"name": "防火墙升级", "cost": 50000, "risk_reduction": 0.3},
{"name": "员工培训", "cost": 20000, "risk_reduction": 0.15},
{"name": "渗透测试", "cost": 30000, "risk_reduction": 0.2},
]
# 总风险暴露
total_risk = 1000000
# 选择最优组合
optimal = roi_selection(controls, total_risk, budget=80000)
print(f"最优投资方案:{optimal}")
3. 威胁情报价值评估¶
# 计算威胁情报的 VoI
from decision_security.voi import calculate_evpi
# 当前决策不确定性
current_uncertainty = 0.4 # 40% 不确定性
# 情报可减少的不确定性
intelligence_reduction = 0.25 # 25% 减少
# 决策价值
decision_value = 500000 # 元
# 计算 VoI
voi = calculate_evpi(decision_value, intelligence_reduction)
print(f"威胁情报价值:{voi:,.2f} 元")
🎯 方法论¶
蒙特卡洛风险模拟¶
贝叶斯更新¶
Kaplan-Meier 生存估计¶
🔗 相关资源¶
- security-decision-labs - 决策科学实验平台
- EconML - 因果推断库
- 决策科学资源大全
📚 理论基础¶
风险管理概念¶
| 概念 | 说明 | 计算 |
|---|---|---|
| VaR | 在险价值 | 分位数 (如 95%) |
| ES | 期望损失 | VaR 之上的条件期望 |
| 风险带 | 不确定性区间 | P50, P90, P95 |
贝叶斯统计¶
| 分布 | 先验 | 似然 | 后验 |
|---|---|---|---|
| 比例 | Beta | Binomial | Beta |
| 均值 | Normal | Normal | Normal |
| 方差 | Inv-Gamma | Normal | Inv-Gamma |
信息价值¶
| 指标 | 说明 | 用途 |
|---|---|---|
| EVPI | 完美信息期望价值 | 信息购买决策 |
| EVSI | 样本信息期望价值 | 研究设计优化 |
| VOI | 信息价值 | 情报评估 |
🛠️ 扩展使用¶
自定义损失分布¶
from decision_security.synth import generate_pareto_losses
# 生成帕累托分布损失 (重尾)
losses = generate_pareto_losses(
n_samples=10000,
alpha=2.5, # 形状参数
x_m=10000 # 最小损失
)
混合分布模拟¶
from decision_security.synth import generate_mixture_losses
# 混合分布:70% 小损失 + 30% 大损失
losses = generate_mixture_losses(
n_samples=10000,
weights=[0.7, 0.3],
dist1_params={'mean': 10000, 'std': 5000},
dist2_params={'mean': 500000, 'std': 200000}
)
🎓 学习路径¶
本地路径: /workspace/code-examples/decision-security/
创建时间: 2026-06-01
难度: ⭐⭐⭐⭐ (专业级)
**Decision Security 中文导航 | 网络安全决策科学工具包**
[返回代码索引](../../README_UPDATED.md) | [决策科学资源大全](../../docs/resources/decision-science-comprehensive-resources.md)