Skip to content

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} 元")

🎯 方法论

蒙特卡洛风险模拟

步骤:
1. 定义损失频率分布 (通常 Poisson)
2. 定义损失严重度分布 (通常对数正态/帕累托)
3. 模拟 N 个周期的聚合损失
4. 计算风险指标 (VaR, ES, 分位数)

贝叶斯更新

Beta-Binomial 更新:
先验:Beta(α, β)
观测:n 次试验,k 次成功
后验:Beta(α + k, β + n - k)

Kaplan-Meier 生存估计

生存函数:
S(t) = P(T > t)

KM 估计:
Ŝ(t) = Π_{t_i ≤ t} (1 - d_i / n_i)
其中 d_i = t_i 时刻事件数,n_i = 风险集大小

🔗 相关资源


📚 理论基础

风险管理概念

概念 说明 计算
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}
)

🎓 学习路径

1. 安装并运行示例代码
2. 理解蒙特卡洛模拟原理
3. 学习贝叶斯更新方法
4. 掌握 VoI 计算
5. 应用到自己项目

本地路径: /workspace/code-examples/decision-security/
创建时间: 2026-06-01
难度: ⭐⭐⭐⭐ (专业级)


**Decision Security 中文导航 | 网络安全决策科学工具包** [返回代码索引](../../README_UPDATED.md) | [决策科学资源大全](../../docs/resources/decision-science-comprehensive-resources.md)