aboutsummaryrefslogtreecommitdiffstats
path: root/python/notebooks
diff options
context:
space:
mode:
Diffstat (limited to 'python/notebooks')
-rw-r--r--python/notebooks/Dispersion.ipynb46
1 files changed, 25 insertions, 21 deletions
diff --git a/python/notebooks/Dispersion.ipynb b/python/notebooks/Dispersion.ipynb
index 53fe6993..59e98647 100644
--- a/python/notebooks/Dispersion.ipynb
+++ b/python/notebooks/Dispersion.ipynb
@@ -48,11 +48,9 @@
"outputs": [],
"source": [
"#Get Gini factor\n",
- "risk = disp.get_tranche_data(index_type, serenitas_engine)\n",
- "date_range = pd.bdate_range(end=value_date, freq='5B',periods=52*4)\n",
- "risk = risk[(risk.index.isin(date_range))]\n",
- "temp = risk.apply(lambda x: disp.get_gini_spreadstdev(x['index'], x.series, [x.tenor], x.name), axis=1)\n",
- "risk[['gini_spread', 'std_spread']] = pd.DataFrame(temp.values.tolist(), columns=['gini_spread','std_spread'], index=temp.index)"
+ "date_range = pd.bdate_range(end=value_date, freq='5B',periods=52*.5)\n",
+ "risk = disp.get_tranche_data(index_type, date_range, serenitas_engine)\n",
+ "gini_model, gini_calc = disp.create_gini_models(risk)"
]
},
{
@@ -61,8 +59,7 @@
"metadata": {},
"outputs": [],
"source": [
- "gini_calc = risk[(risk.index.isin(date_range)) & (risk.attach == 0)]\n",
- "to_plot_gini = gini_calc[(gini_calc.tenor == '5yr')].groupby(['date', 'series']).nth(-1)\n",
+ "to_plot_gini = gini_calc.loc(axis=0)[:,:,:,'5yr',0].groupby(['date', 'series']).nth(-1)\n",
"to_plot_gini['gini_spread'].unstack().plot()"
]
},
@@ -72,10 +69,8 @@
"metadata": {},
"outputs": [],
"source": [
- "##### model expected loss percentage instead of correlation -- equity\n",
- "gini_calc = risk[(risk.attach == 0)]\n",
- "gini_model = smf.ols(\"np.log(exp_percentage) ~ np.log(gini_spread) + np.log(duration) + np.log(moneyness)\", data=gini_calc).fit()\n",
- "gini_model.summary()"
+ "today = gini_calc.loc(axis=0)[value_date,:,33,'5yr',:]\n",
+ "today[['exp_percentage', 'predict_N', 'predict_preN', 'mispricing']]"
]
},
{
@@ -84,7 +79,8 @@
"metadata": {},
"outputs": [],
"source": [
- "plot_fit(gini_model, 'np.log(moneyness)')"
+ "to_plot = gini_calc.loc(axis=0)[:,:,:,'5yr',0]['mispricing']\n",
+ "to_plot.reset_index(['index','tenor','attach'], drop=True).unstack().plot()"
]
},
{
@@ -93,7 +89,7 @@
"metadata": {},
"outputs": [],
"source": [
- "gini_calc['predict'] = np.exp(gini_model.predict(gini_calc))"
+ "plot_fit(gini_model[0], 'np.log(index_duration)')"
]
},
{
@@ -102,8 +98,15 @@
"metadata": {},
"outputs": [],
"source": [
- "today = gini_calc[(gini_calc['index'] == index_type) & (gini_calc['series'] == 33)].loc[value_date]\n",
- "today"
+ "#Run a particular gini scenario\n",
+ "scenario = gini_calc.loc(axis=0)[value_date,'HY',33,'5yr',0]\n",
+ "scenario['gini_spread'] = .6\n",
+ "scenario_disp = np.exp(gini_model[0].predict(scenario))\n",
+ "mispricing = (scenario['exp_percentage'] - scenario_disp) * \\\n",
+ " scenario['index_expected_loss'] / \\\n",
+ " (scenario['detach_adj'] - scenario['attach_adj']) / \\\n",
+ " scenario['indexfactor'] * 10000\n",
+ "mispricing"
]
},
{
@@ -114,7 +117,7 @@
"source": [
"#Let's use a GAM model instead?\n",
"#only use the 5yr point for modeling\n",
- "equity = gini_calc[(gini_calc.tenor=='5yr') & (gini_calc.series >= 23)]\n",
+ "equity = gini_calc.loc(axis=0)[:,:,[25,27,29,31,33],'5yr',0]\n",
"X = np.array(equity[['gini_spread', 'duration', 'moneyness']])\n",
"y = np.array(equity['exp_percentage'])\n",
"\n",
@@ -165,9 +168,8 @@
"metadata": {},
"outputs": [],
"source": [
- "today = (equity.loc[max(equity.index)])\n",
- "predict_HY33 = gam_model.predict(np.array(today[today.series==33][['gini_spread', 'duration', 'moneyness']]))\n",
- "today[today.series==31][['exp_percentage']], predict_HY33"
+ "today = gini_calc.loc(axis=0)[value_date,'HY',33,'5yr',0]\n",
+ "predict_HY33 = gam_model.predict(np.array(today[['gini_spread', 'duration', 'moneyness']]))"
]
},
{
@@ -175,7 +177,9 @@
"execution_count": null,
"metadata": {},
"outputs": [],
- "source": []
+ "source": [
+ "today, predict_HY33"
+ ]
}
],
"metadata": {
@@ -194,7 +198,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.8.0"
+ "version": "3.8.1-final"
}
},
"nbformat": 4,