{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "86636d66",
   "metadata": {},
   "source": [
    "# 安全控制 ROI 分析\n",
    "\n",
    "对应案例: [安全ROI](/docs/case-studies/risk/security-roi-case/)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "babbe02b",
   "metadata": {},
   "source": [
    "## 1. 模拟安全投资"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "421e3d03",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np, pandas as pd, matplotlib.pyplot as plt\n",
    "np.random.seed(42)\n",
    "invest=pd.DataFrame({\n",
    "    'Solution':['Endpoint','Network','Training','Encryption','SIEM'],\n",
    "    'Cost':[50,80,20,40,100],\n",
    "    'Benefit':[120,200,60,90,250]\n",
    "})\n",
    "invest['ROI']=(invest['Benefit']-invest['Cost'])/invest['Cost']\n",
    "invest['Net']=invest['Benefit']-invest['Cost']\n",
    "print(invest.to_string(index=False))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c688a59b",
   "metadata": {},
   "source": [
    "## 2. 蒙特卡洛模拟"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f2d40eec",
   "metadata": {},
   "outputs": [],
   "source": [
    "n_sim=10000; sims={}\n",
    "params={'Endpoint':(120,30,50,5),'Network':(200,40,80,8),'Training':(60,20,20,2),'Encryption':(90,25,40,4),'SIEM':(250,60,100,10)}\n",
    "for name,(bm,bs,cm,cs) in params.items():\n",
    "    b=np.random.normal(bm,bs,n_sim)\n",
    "    c=np.random.normal(cm,cs,n_sim)\n",
    "    sims[name]=(b-c)/c\n",
    "fig,ax=plt.subplots(figsize=(12,6))\n",
    "colors=['#2196F3','#4CAF50','#FF9800','#9C27B0','#F44336']\n",
    "for (name,roi),c in zip(sims.items(),colors):\n",
    "    ax.hist(roi,bins=50,alpha=0.4,label=f'{name} (mean={np.mean(roi):.2f})',color=c,density=True)\n",
    "ax.set_xlabel('ROI'); ax.legend(); ax.set_title('ROI Distribution (Monte Carlo)'); plt.show()\n",
    "for name,roi in sims.items():\n",
    "    print(f'{name}: P(ROI>100%)={np.mean(roi>1):.1%}')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "34bf4660",
   "metadata": {},
   "source": [
    "## 3. 预算约束优化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d9c1c78c",
   "metadata": {},
   "outputs": [],
   "source": [
    "budget=150\n",
    "import itertools\n",
    "combos=[]\n",
    "for r in range(1,6):\n",
    "    for combo in itertools.combinations(range(5),r):\n",
    "        cost=sum(invest.iloc[list(combo)]['Cost'])\n",
    "        if cost<=budget:\n",
    "            benefit=sum(invest.iloc[list(combo)]['Net'])\n",
    "            combos.append({'Combo':', '.join(invest.iloc[list(combo)]['Solution']),'Cost':cost,'Benefit':benefit,'ROI':benefit/cost})\n",
    "combos_df=pd.DataFrame(combos).sort_values('Benefit',ascending=False)\n",
    "print(combos_df.head(5).to_string(index=False))\n",
    "print(f'\\nBest: {combos_df.iloc[0][\"Combo\"]} (Benefit={combos_df.iloc[0][\"Benefit\"]:.0f}K)')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e2abc9c5",
   "metadata": {},
   "source": [
    "---\n",
    "*更多分析见 [案例文档](/docs/case-studies/risk/security-roi-case/)*"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "name": "python",
   "version": "3.10.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
