Project_Carmignac/.ipynb_checkpoints/repair-checkpoint.ipynb
2026-03-10 17:45:51 +00:00

1671 lines
118 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "code",
"execution_count": 11,
"id": "29f7e620-7b04-45f6-ac87-f17505f140c3",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import plotly.graph_objects as go\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "a48ad016-e4f2-40d9-a607-344a316f5f02",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/tmp/ipykernel_2803/242871890.py:1: DtypeWarning: Columns (1,2,3,4) have mixed types. Specify dtype option on import or set low_memory=False.\n",
" stocks = pd.read_csv(\"stocks.csv\")\n",
"/tmp/ipykernel_2803/242871890.py:2: DtypeWarning: Columns (1,2,3,4) have mixed types. Specify dtype option on import or set low_memory=False.\n",
" flows = pd.read_csv(\"flows.csv\")\n"
]
}
],
"source": [
"stocks = pd.read_csv(\"stocks.csv\")\n",
"flows = pd.read_csv(\"flows.csv\")\n",
"\n",
"stocks[\"Centralisation Date\"] = pd.to_datetime(stocks[\"Centralisation Date\"])\n",
"flows[\"Centralisation Date\"] = pd.to_datetime(flows[\"Centralisation Date\"])"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "3c6d9d05-b203-49ae-869f-7f85ead2c69e",
"metadata": {},
"outputs": [],
"source": [
"keys = [\n",
" \"Registrar Account - ID\",\n",
" \"Product - Isin\",\n",
" \"Centralisation Date\"\n",
"]\n",
"\n",
"stocks = stocks[keys + [\"Quantity - AUM\"]]\n",
"\n",
"flows = flows[keys + [\"Quantity - NetFlows\"]]\n",
"\n",
"flows = (\n",
" flows\n",
" .groupby(keys, as_index=False)\n",
" .sum()\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "d30c2235-281b-41a6-828b-abb6fcfc4183",
"metadata": {},
"outputs": [],
"source": [
"df = stocks.merge(flows, on=keys, how=\"left\")\n",
"\n",
"df[\"Quantity - NetFlows\"] = df[\"Quantity - NetFlows\"].fillna(0)\n",
"\n",
"df = df.sort_values(keys)\n",
"\n",
"\n",
"\n",
"# REBUILD ACCOUNTING IDENTITY\n",
"\n",
"\n",
"df[\"prev_aum\"] = df.groupby(\n",
" [\"Registrar Account - ID\",\"Product - Isin\"]\n",
")[\"Quantity - AUM\"].shift(1)\n",
"\n",
"df[\"prev_flow\"] = df.groupby(\n",
" [\"Registrar Account - ID\",\"Product - Isin\"]\n",
")[\"Quantity - NetFlows\"].shift(1).fillna(0)\n",
"\n",
"df[\"expected_aum\"] = df[\"prev_aum\"] + df[\"prev_flow\"]\n",
"\n",
"\n",
"\n",
"# GAP ANALYSIS\n",
"\n",
"\n",
"df[\"gap\"] = df[\"Quantity - AUM\"] - df[\"expected_aum\"]\n",
"df[\"gap_abs\"] = df[\"gap\"].abs()\n",
"\n",
"EPS = 10\n",
"\n",
"df[\"rupture_flag\"] = (\n",
" df[\"prev_aum\"].notna()\n",
" & (df[\"gap_abs\"] > EPS)\n",
")\n",
"\n",
"\n",
"\n",
"# PARAMETERS\n",
"\n",
"\n",
"GAP_TOL = 1e-6\n",
"REL_GAP_THR = 0.05\n",
"MIN_PERSISTENCE = 3\n",
"\n",
"\n",
"\n",
"# SORT DATA\n",
"\n",
"\n",
"df = df.sort_values(\n",
" [\"Registrar Account - ID\", \"Product - Isin\", \"Centralisation Date\"]\n",
")\n",
"\n",
"df[\"corrected_aum\"] = df[\"Quantity - AUM\"]\n",
"df[\"repair_flag\"] = False\n",
"\n",
"\n",
"# REBUILD EXPECTED AUM BEFORE REPAIR\n",
"\n",
"\n",
"df = df.sort_values(\n",
" [\"Registrar Account - ID\", \"Product - Isin\", \"Centralisation Date\"]\n",
")\n",
"\n",
"df[\"prev_aum\"] = (\n",
" df.groupby([\"Registrar Account - ID\",\"Product - Isin\"])\n",
" [\"Quantity - AUM\"]\n",
" .shift(1)\n",
")\n",
"\n",
"df[\"prev_flow\"] = (\n",
" df.groupby([\"Registrar Account - ID\",\"Product - Isin\"])\n",
" [\"Quantity - NetFlows\"]\n",
" .shift(1)\n",
" .fillna(0)\n",
")\n",
"\n",
"df[\"expected_stock\"] = df[\"prev_aum\"] + df[\"prev_flow\"]\n",
"\n",
"#delete negative AUM\n",
"df = df[df[\"Quantity - AUM\"] >= 0]"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "efd374d0-6393-45f2-926e-2c29249cd078",
"metadata": {},
"outputs": [],
"source": [
"def repair_group(g):\n",
"\n",
" g = g.copy()\n",
"\n",
" obs = g[\"Quantity - AUM\"].values\n",
" flows = g[\"Quantity - NetFlows\"].values\n",
"\n",
" corrected = obs.copy()\n",
"\n",
" \n",
" # Build expected AUM path\n",
" \n",
"\n",
" expected = np.empty_like(obs)\n",
" expected[0] = np.nan\n",
"\n",
" for t in range(1, len(obs)):\n",
" expected[t] = corrected[t-1] + flows[t-1]\n",
"\n",
" gap = obs - expected\n",
"\n",
" rel_gap = np.abs(gap) / np.maximum(np.abs(expected), 1.0)\n",
"\n",
" idx = None\n",
"\n",
" \n",
" # Detect persistent shift\n",
" \n",
"\n",
" for i in range(1, len(obs) - MIN_PERSISTENCE):\n",
"\n",
" if (\n",
" rel_gap[i] > REL_GAP_THR\n",
" and np.all(np.abs(gap[i:i+MIN_PERSISTENCE] - gap[i]) < GAP_TOL)\n",
" and np.all(np.abs(np.diff(flows[i:i+MIN_PERSISTENCE])) < GAP_TOL)\n",
" ):\n",
" idx = i\n",
" break\n",
"\n",
" if idx is None:\n",
" return g\n",
"\n",
" \n",
" # Compute shift\n",
" \n",
"\n",
" shift = gap[idx]\n",
"\n",
" candidate = obs[idx:] - shift\n",
"\n",
" \n",
" # SAFETY CHECKS\n",
" \n",
"\n",
" # 1. do not allow negative AUM\n",
" # refuse repair if it creates NEW negative AUM\n",
" if ((candidate < 0) & (obs[idx:] >= 0)).any():\n",
" return g\n",
"\n",
" # 2. avoid extreme corrections\n",
" if abs(shift) > 2 * np.nanmax(np.abs(obs)):\n",
" return g\n",
"\n",
" \n",
" # Apply correction\n",
" \n",
"\n",
" corrected[idx:] = candidate\n",
"\n",
" g.loc[g.index[idx]:, \"repair_flag\"] = True\n",
"\n",
" \n",
" # Rebuild expected path after repair\n",
" \n",
"\n",
" expected_corr = np.empty_like(obs)\n",
" expected_corr[0] = np.nan\n",
"\n",
" for t in range(1, len(obs)):\n",
" expected_corr[t] = corrected[t-1] + flows[t-1]\n",
"\n",
" g[\"corrected_aum\"] = corrected\n",
" g[\"expected_stock_corr\"] = expected_corr\n",
"\n",
" return g"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "f94f07b4-e053-4828-bbb1-3697f9a11751",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/tmp/ipykernel_2803/2538339937.py:4: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.\n",
" .apply(repair_group)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" Before repair After repair Repaired points\n",
"0 750995 7708 6386\n",
"\n",
"NUMBER OF MODIFIED OBSERVATIONS: 2407679\n",
"Share modified: 26.66 %\n",
"\n",
"TOTAL AUM\n",
"Raw total : 82015854859.97653\n",
"Repaired total : 82060603424.22249\n"
]
}
],
"source": [
"df = (\n",
" df\n",
" .groupby([\"Registrar Account - ID\", \"Product - Isin\"], group_keys=False)\n",
" .apply(repair_group)\n",
")\n",
"\n",
"# VALIDATION BEFORE / AFTER\n",
"\n",
"\n",
"df[\"gap_before\"] = df[\"Quantity - AUM\"] - df[\"expected_stock\"]\n",
"\n",
"df[\"gap_after\"] = df[\"corrected_aum\"] - df[\"expected_stock_corr\"]\n",
"\n",
"df[\"rupture_before\"] = df[\"gap_before\"].abs() > GAP_TOL\n",
"\n",
"df[\"rupture_after\"] = df[\"gap_after\"].abs() > GAP_TOL\n",
"\n",
"\n",
"\n",
"# SUMMARY\n",
"\n",
"\n",
"summary = pd.DataFrame({\n",
" \"Before repair\": [df[\"rupture_before\"].sum()],\n",
" \"After repair\": [df[\"rupture_after\"].sum()],\n",
" \"Repaired points\": [df[\"repair_flag\"].sum()]\n",
"})\n",
"\n",
"print(summary)\n",
"\n",
"\n",
"\n",
"# BUILD REPAIRED DATASET\n",
"\n",
"\n",
"stocks_repaired = stocks.copy()\n",
"\n",
"repair_map = df[[\n",
" \"Registrar Account - ID\",\n",
" \"Product - Isin\",\n",
" \"Centralisation Date\",\n",
" \"corrected_aum\",\n",
" \"repair_flag\"\n",
"]]\n",
"\n",
"stocks_repaired = stocks_repaired.merge(\n",
" repair_map,\n",
" on=keys,\n",
" how=\"left\"\n",
")\n",
"\n",
"stocks_repaired[\"Quantity - AUM\"] = np.where(\n",
" stocks_repaired[\"repair_flag\"] == True,\n",
" stocks_repaired[\"corrected_aum\"],\n",
" stocks_repaired[\"Quantity - AUM\"]\n",
")\n",
"\n",
"stocks_repaired.to_csv(\"AUM_repaired.csv\", index=False)\n",
"\n",
"\n",
"\n",
"# COMPARISON RAW VS REPAIRED\n",
"\n",
"\n",
"df_compare = stocks.merge(\n",
" stocks_repaired,\n",
" on=keys,\n",
" how=\"inner\",\n",
" suffixes=(\"_raw\",\"_repaired\")\n",
")\n",
"\n",
"df_compare[\"aum_diff\"] = (\n",
" df_compare[\"Quantity - AUM_repaired\"]\n",
" - df_compare[\"Quantity - AUM_raw\"]\n",
")\n",
"\n",
"print(\"\\nNUMBER OF MODIFIED OBSERVATIONS:\",\n",
" (df_compare[\"aum_diff\"] != 0).sum())\n",
"\n",
"print(\"Share modified:\",\n",
" round((df_compare[\"aum_diff\"] != 0).mean()*100,2), \"%\")\n",
"\n",
"print(\"\\nTOTAL AUM\")\n",
"\n",
"print(\"Raw total :\", df_compare[\"Quantity - AUM_raw\"].sum())\n",
"print(\"Repaired total :\", df_compare[\"Quantity - AUM_repaired\"].sum())\n",
"\n",
"\n",
"\n",
"# RUPTURE DISTRIBUTION BEFORE / AFTER\n",
"\n",
"\n",
"def rupture_distribution(df, flag):\n",
"\n",
" rupture_summary = (\n",
" df.groupby([\"Registrar Account - ID\",\"Product - Isin\"])\n",
" .agg(\n",
" n_ruptures=(flag,\"sum\"),\n",
" total_obs=(flag,\"count\"),\n",
" rupture_ratio=(flag,\"mean\")\n",
" )\n",
" .reset_index()\n",
" )\n",
"\n",
" rs = rupture_summary.copy()\n",
"\n",
" bins = [0,0.01,0.10,0.30,1.01]\n",
"\n",
" labels = [\n",
" \"Clean / quasi-clean (≤1%)\",\n",
" \"Moderate (110%)\",\n",
" \"High (1030%)\",\n",
" \"Severe (>30%)\"\n",
" ]\n",
"\n",
" rs[\"rupture_class\"] = pd.cut(\n",
" rs[\"rupture_ratio\"],\n",
" bins=bins,\n",
" labels=labels,\n",
" include_lowest=True\n",
" )\n",
"\n",
" dist = (\n",
" rs[\"rupture_class\"]\n",
" .value_counts(normalize=True)\n",
" .sort_index()\n",
" * 100\n",
" ).round(1)\n",
"\n",
" return dist\n",
"\n",
"\n",
"dist_before = rupture_distribution(df,\"rupture_before\")\n",
"dist_after = rupture_distribution(df,\"rupture_after\")"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "54491736-58b3-4ef7-b6c4-5534ec796bce",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.plotly.v1+json": {
"config": {
"plotlyServerURL": "https://plot.ly"
},
"data": [
{
"domain": {
"x": [
0,
0.48
]
},
"hole": 0.45,
"labels": [
"Clean / quasi-clean (≤1%)",
"Moderate (110%)",
"High (1030%)",
"Severe (>30%)"
],
"name": "Before repair",
"textinfo": "percent",
"type": "pie",
"values": {
"bdata": "MzMzMzNzREAzMzMzM7M6QJqZmZmZGTBAZmZmZmZmMEA=",
"dtype": "f8"
}
},
{
"domain": {
"x": [
0.52,
1
]
},
"hole": 0.45,
"labels": [
"Clean / quasi-clean (≤1%)",
"Moderate (110%)",
"High (1030%)",
"Severe (>30%)"
],
"name": "After repair",
"textinfo": "percent",
"type": "pie",
"values": {
"bdata": "mpmZmZn5WEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=",
"dtype": "f8"
}
}
],
"layout": {
"annotations": [
{
"showarrow": false,
"text": "Before repair",
"x": 0.22,
"y": 0.5
},
{
"showarrow": false,
"text": "After repair",
"x": 0.78,
"y": 0.5
}
],
"template": {
"data": {
"bar": [
{
"error_x": {
"color": "#2a3f5f"
},
"error_y": {
"color": "#2a3f5f"
},
"marker": {
"line": {
"color": "#E5ECF6",
"width": 0.5
},
"pattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
}
},
"type": "bar"
}
],
"barpolar": [
{
"marker": {
"line": {
"color": "#E5ECF6",
"width": 0.5
},
"pattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
}
},
"type": "barpolar"
}
],
"carpet": [
{
"aaxis": {
"endlinecolor": "#2a3f5f",
"gridcolor": "white",
"linecolor": "white",
"minorgridcolor": "white",
"startlinecolor": "#2a3f5f"
},
"baxis": {
"endlinecolor": "#2a3f5f",
"gridcolor": "white",
"linecolor": "white",
"minorgridcolor": "white",
"startlinecolor": "#2a3f5f"
},
"type": "carpet"
}
],
"choropleth": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"type": "choropleth"
}
],
"contour": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "contour"
}
],
"contourcarpet": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"type": "contourcarpet"
}
],
"heatmap": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "heatmap"
}
],
"histogram": [
{
"marker": {
"pattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
}
},
"type": "histogram"
}
],
"histogram2d": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "histogram2d"
}
],
"histogram2dcontour": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "histogram2dcontour"
}
],
"mesh3d": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"type": "mesh3d"
}
],
"parcoords": [
{
"line": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "parcoords"
}
],
"pie": [
{
"automargin": true,
"type": "pie"
}
],
"scatter": [
{
"fillpattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
},
"type": "scatter"
}
],
"scatter3d": [
{
"line": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatter3d"
}
],
"scattercarpet": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattercarpet"
}
],
"scattergeo": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattergeo"
}
],
"scattergl": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattergl"
}
],
"scattermap": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattermap"
}
],
"scattermapbox": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattermapbox"
}
],
"scatterpolar": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatterpolar"
}
],
"scatterpolargl": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatterpolargl"
}
],
"scatterternary": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatterternary"
}
],
"surface": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "surface"
}
],
"table": [
{
"cells": {
"fill": {
"color": "#EBF0F8"
},
"line": {
"color": "white"
}
},
"header": {
"fill": {
"color": "#C8D4E3"
},
"line": {
"color": "white"
}
},
"type": "table"
}
]
},
"layout": {
"annotationdefaults": {
"arrowcolor": "#2a3f5f",
"arrowhead": 0,
"arrowwidth": 1
},
"autotypenumbers": "strict",
"coloraxis": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"colorscale": {
"diverging": [
[
0,
"#8e0152"
],
[
0.1,
"#c51b7d"
],
[
0.2,
"#de77ae"
],
[
0.3,
"#f1b6da"
],
[
0.4,
"#fde0ef"
],
[
0.5,
"#f7f7f7"
],
[
0.6,
"#e6f5d0"
],
[
0.7,
"#b8e186"
],
[
0.8,
"#7fbc41"
],
[
0.9,
"#4d9221"
],
[
1,
"#276419"
]
],
"sequential": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"sequentialminus": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
]
},
"colorway": [
"#636efa",
"#EF553B",
"#00cc96",
"#ab63fa",
"#FFA15A",
"#19d3f3",
"#FF6692",
"#B6E880",
"#FF97FF",
"#FECB52"
],
"font": {
"color": "#2a3f5f"
},
"geo": {
"bgcolor": "white",
"lakecolor": "white",
"landcolor": "#E5ECF6",
"showlakes": true,
"showland": true,
"subunitcolor": "white"
},
"hoverlabel": {
"align": "left"
},
"hovermode": "closest",
"mapbox": {
"style": "light"
},
"paper_bgcolor": "white",
"plot_bgcolor": "#E5ECF6",
"polar": {
"angularaxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
},
"bgcolor": "#E5ECF6",
"radialaxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
}
},
"scene": {
"xaxis": {
"backgroundcolor": "#E5ECF6",
"gridcolor": "white",
"gridwidth": 2,
"linecolor": "white",
"showbackground": true,
"ticks": "",
"zerolinecolor": "white"
},
"yaxis": {
"backgroundcolor": "#E5ECF6",
"gridcolor": "white",
"gridwidth": 2,
"linecolor": "white",
"showbackground": true,
"ticks": "",
"zerolinecolor": "white"
},
"zaxis": {
"backgroundcolor": "#E5ECF6",
"gridcolor": "white",
"gridwidth": 2,
"linecolor": "white",
"showbackground": true,
"ticks": "",
"zerolinecolor": "white"
}
},
"shapedefaults": {
"line": {
"color": "#2a3f5f"
}
},
"ternary": {
"aaxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
},
"baxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
},
"bgcolor": "#E5ECF6",
"caxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
}
},
"title": {
"x": 0.05
},
"xaxis": {
"automargin": true,
"gridcolor": "white",
"linecolor": "white",
"ticks": "",
"title": {
"standoff": 15
},
"zerolinecolor": "white",
"zerolinewidth": 2
},
"yaxis": {
"automargin": true,
"gridcolor": "white",
"linecolor": "white",
"ticks": "",
"title": {
"standoff": 15
},
"zerolinecolor": "white",
"zerolinewidth": 2
}
}
},
"title": {
"text": "Rupture intensity distribution (Before vs After repair)"
}
}
},
"image/png": "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d8PVbn2r64vOcckZmhEFQwm7ocE4sggGqkkCJEACliBAI8cS3UQlSYAESIAESCDfCLC9JEACJJA8ARo5ybNjSRIgARIgARIgARIgARLILgHWFhcBGjlxYWImEiABEiABEiABEiD+L9zcAAAHd0lEQVQBEiABqxCgkWOVnkqfnpREAiRAAiRAAiRAAiRAArYmQCPH1t3LxpEACcRPgDlJgARIgARIgATsQoBGjl16ku0gARIgARIggUwQoEwSIAESsCABGjkW7DSqTAIkQAIkQAIkQAIkkFsCrN3cBGjkmLt/qB0JkAAJkAAJkAAJkAAJkECCBGjkJAgsfdkpiQRIgARIgARIgARIgARIIBMEaORkgiplkgAJJE+AJUmABEiABEiABEggRQI0clIEyOIkQAIkQAIkkA0CrIMESIAESCB+AjRy4mfFnCRAAiRAAiRAAiRAAuYiQG1IICwBGjlhsTCSBEiABEiABEiABEiABEjAqgRo5Fi156g3CZAACZAACZAACZAACZBAWAI0csJiYSQJkAAJkAAJkAAJkAAJkIBVCdDIsWrPUW8SIAESIIFcEGCdJEACJEACFiBAI8cCnUQVSYAESIAESIAESMDcBKgdCZiLAI0cc/UHtSEBEiABEiABEiABEiABEkiRgGmMnBTbweIkQAIkQAIkQAIkQAIkQAIkoBOgkaNj4B8SMC0BKkYCJEACJEACJEACJJAgARo5CQJjdhIgARIgATMQoA4kQAIkQAIkEJkAjZzIbJhCAiRAAiRAAiRAAtYiQG1JgAR0AjRydAz8QwIkQAIkQAIkQAIkQAIkYBcCoUaOXdrFdpAACZAACZAACZAACZAACeQpARo5edrxbHaiBJifBEiABEiABEiABEjAKgRo5Filp6gnCZAACZiRAHUiARIgARIgARMSoJFjwk6hSiRAAiRAAiRAAtYmQO1JgARyS4BGTm75s3YSIAESIAESIAESIAESyBcCWWsnjZysoWZFJEACJEACJEACJEACJEAC2SBAIycblFlH+ghQEgmQAAmQAAmQAAmQAAnEIEAjJwYgJpMACZCAFQhQRxIgARIgARIggd0EaOTsZsEzEiABEiABEiABexFga0iABPKUAI2cPO14NpsESIAESIAESIAESCBfCdi/3TRy7N/HbCEJkAAJkAAJkAAJkAAJ5BUBGjl51d3paywlkQAJkAAJkAAJkAAJkIBZCdDIMWvPUC8SIAErEqDOJEACJEACJEACJiBAI8cEnUAVSIAESIAESMDeBNg6EiABEsguARo52eXN2kiABEiABEiABEiABEighgD/ZowAjZyMoaVgEiABEiABEiABEiABEiCBXBCgkZML6umrk5JIgARIgARIgARIgARIgARCCNDICQHCSxIgATsQYBtIgARIgARIgATymQCNnHzufbadBEiABEggvwiwtSRAAiSQJwRo5ORJR7OZJEACJEACJEACJEAC4Qkw1n4EaOTYr0/ZIhIgARIgARIgARIgARLIawI0ctLS/RRCAiRAAiRAAiRAAiRAAiRgFgI0cszSE9SDBOxIgG0iARIgARIgARIggRwQoJGTA+iskgRIgARIIL8JsPUkQAIkQAKZJUAjJ7N8KZ0ESIAESIAESIAESCA+AsxFAmkjQCMnbSgpiARIgARIgARIgARIgARIwAwE7GXkmIEodSABEiABEiABEiABEiABEsgpARo5OcXPykkgOwRYCwmQAAmQAAmQAAnkEwEaOfnU22wrCZAACZCAkQDPSYAESIAEbEqARo5NO5bNIgESIAESIAESIIHkCLAUCVifAI0c6/chW0ACJEACJEACJEACJEACJGAgkBEjxyCfpyRAAiRAAiRAAiRAAiRAAiSQVQI0crKKm5XlOQE2nwRIgARIgARIgARIIAsEaORkATKrIAESIAESiEaAaSRAAiRAAiSQXgI0ctLLk9JIgARIgARIgARIID0EKIUESCBpAjRykkbHgiRAAiRAAiRAAiRAAiRAAtkmEE99NHLiocQ8JEACJEACJEACJEACJEACliFAI8cyXUVF00eAkkiABEiABEiABEiABOxMgEaOnXuXbSMBEiCBRAgwLwmQAAmQAAnYhACNHJt0JJtBAiRAAiRAAiSQGQKUSgIkYD0CNHKs12fUmARIgARIgARIgARIgARyTcDU9dPIMXX3UDkSIAESIAESIAESIAESIIFECdDISZQY86ePACWRAAmQAAmQAAmQAAmQQAYI0MjJAFSKJAESIIFUCLAsCZAACZAACZBAagRo5KTGj6VJgARIgARIgASyQ4C1kAAJkEDcBGjkxI2KGUmABEiABEiABEiABEjAbASoTzgCNHLCUWEcCZAACZAACZAACZAACZCAZQnQyLFs16VPcUoiARIgARIgARIgARIgATsRoJFjp95kW0iABNJJgLJIgARIgARIgAQsSoBGjkU7jmqTAAmQAAmQQG4IsFYSIAESMD8BGjnm7yNqSAIkQAIkQAIkQAIkYHYC1M9UBGjkmKo7qAwJkAAJkAAJkAAJkAAJkECqBGjkpEowfeUpiQRIgARIgARIgARIgARIIA0EaOSkASJFkAAJZJIAZZMACZAACZAACZBAYgRo5CTGi7lJgARIgARIwBwEqAUJkAAJkEBEAjRyIqJhAgmQAAmQAAmQAAmQgNUIUF8SAIH/BwAA//8h6+/jAAAABklEQVQDAAO/FPj3HdDWAAAAAElFTkSuQmCC"
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# DONUT CHART BEFORE / AFTER\n",
"\n",
"fig = go.Figure()\n",
"\n",
"fig.add_trace(go.Pie(\n",
" labels=dist_before.index,\n",
" values=dist_before.values,\n",
" hole=0.45,\n",
" name=\"Before repair\",\n",
" domain=dict(x=[0,0.48]),\n",
" textinfo=\"percent\"\n",
"))\n",
"\n",
"fig.add_trace(go.Pie(\n",
" labels=dist_after.index,\n",
" values=dist_after.values,\n",
" hole=0.45,\n",
" name=\"After repair\",\n",
" domain=dict(x=[0.52,1]),\n",
" textinfo=\"percent\"\n",
"))\n",
"\n",
"fig.update_layout(\n",
" title=\"Rupture intensity distribution (Before vs After repair)\",\n",
" annotations=[\n",
" dict(text=\"Before repair\", x=0.22, y=0.5, showarrow=False),\n",
" dict(text=\"After repair\", x=0.78, y=0.5, showarrow=False)\n",
" ]\n",
")\n",
"\n",
"fig.show()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "d844f6f0-c0f4-4f71-8280-1fd39ced83b7",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/tmp/ipykernel_2803/1326609018.py:3: DtypeWarning:\n",
"\n",
"Columns (0,5) have mixed types. Specify dtype option on import or set low_memory=False.\n",
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Dataset size: (5510007, 6)\n",
"\n",
"ACCOUNTING GAP DISTRIBUTION\n",
"count 5.430291e+06\n",
"mean 1.194750e+03\n",
"std 4.328850e+04\n",
"min 0.000000e+00\n",
"25% 0.000000e+00\n",
"50% 0.000000e+00\n",
"75% 0.000000e+00\n",
"max 4.254300e+07\n",
"Name: gap_abs, dtype: float64\n",
"\n",
"Relative gap quantiles\n",
"0.90 0.022107\n",
"0.95 0.523385\n",
"0.99 33.742925\n",
"Name: gap_rel, dtype: float64\n",
"\n",
"NEGATIVE AUM: 15989\n",
"\n",
"REPAIR RATE\n",
"0.006871198899152992\n",
"\n",
"AUM JUMP QUANTILES\n",
"0.90 1.005955\n",
"0.95 1.125092\n",
"0.99 11.418952\n",
"Name: aum_jump, dtype: float64\n"
]
}
],
"source": [
"# LOAD DATA\n",
"\n",
"aum = pd.read_csv(\"AUM_repaired.csv\")\n",
"\n",
"aum[\"Centralisation Date\"] = pd.to_datetime(aum[\"Centralisation Date\"])\n",
"\n",
"\n",
"# KEEP USEFUL COLUMNS\n",
"\n",
"aum = aum[[\n",
" \"Registrar Account - ID\",\n",
" \"Product - Isin\",\n",
" \"Centralisation Date\",\n",
" \"Quantity - AUM\",\n",
" \"repair_flag\"\n",
"]]\n",
"\n",
"flows = flows[[\n",
" \"Registrar Account - ID\",\n",
" \"Product - Isin\",\n",
" \"Centralisation Date\",\n",
" \"Quantity - NetFlows\"\n",
"]]\n",
"\n",
"\n",
"\n",
"# AGGREGATE FLOWS\n",
"\n",
"flows = (\n",
" flows\n",
" .groupby(\n",
" [\"Registrar Account - ID\",\"Product - Isin\",\"Centralisation Date\"],\n",
" as_index=False\n",
" )[\"Quantity - NetFlows\"]\n",
" .sum()\n",
")\n",
"\n",
"\n",
"\n",
"# MERGE DATASETS\n",
"\n",
"df = aum.merge(\n",
" flows,\n",
" on=[\"Registrar Account - ID\",\"Product - Isin\",\"Centralisation Date\"],\n",
" how=\"left\"\n",
")\n",
"\n",
"df[\"Quantity - NetFlows\"] = df[\"Quantity - NetFlows\"].fillna(0)\n",
"\n",
"print(\"Dataset size:\", df.shape)\n",
"\n",
"\n",
"\n",
"# SORT DATA\n",
"\n",
"df = df.sort_values(\n",
" [\"Registrar Account - ID\",\"Product - Isin\",\"Centralisation Date\"]\n",
")\n",
"\n",
"\n",
"\n",
"# REBUILD ACCOUNTING IDENTITY\n",
"\n",
"df[\"prev_aum\"] = (\n",
" df.groupby([\"Registrar Account - ID\",\"Product - Isin\"])\n",
" [\"Quantity - AUM\"]\n",
" .shift(1)\n",
")\n",
"\n",
"df[\"prev_flow\"] = (\n",
" df.groupby([\"Registrar Account - ID\",\"Product - Isin\"])\n",
" [\"Quantity - NetFlows\"]\n",
" .shift(1)\n",
" .fillna(0)\n",
")\n",
"\n",
"df[\"expected_aum\"] = df[\"prev_aum\"] + df[\"prev_flow\"]\n",
"\n",
"\n",
"\n",
"# GAPS\n",
"\n",
"df[\"gap\"] = df[\"Quantity - AUM\"] - df[\"expected_aum\"]\n",
"\n",
"df[\"gap_abs\"] = df[\"gap\"].abs()\n",
"\n",
"df[\"gap_rel\"] = (\n",
" df[\"gap_abs\"] /\n",
" df[\"expected_aum\"].abs().clip(lower=1)\n",
")\n",
"\n",
"\n",
"\n",
"# ACCOUNTING CONSISTENCY\n",
"\n",
"print(\"\\nACCOUNTING GAP DISTRIBUTION\")\n",
"\n",
"print(df[\"gap_abs\"].describe())\n",
"\n",
"print(\"\\nRelative gap quantiles\")\n",
"\n",
"print(df[\"gap_rel\"].quantile([0.90,0.95,0.99]))\n",
"\n",
"\n",
"\n",
"# NEGATIVE AUM\n",
"\n",
"neg = (df[\"Quantity - AUM\"] < 0).sum()\n",
"\n",
"print(\"\\nNEGATIVE AUM:\", neg)\n",
"\n",
"\n",
"\n",
"# REPAIR RATE\n",
"\n",
"print(\"\\nREPAIR RATE\")\n",
"\n",
"print(df[\"repair_flag\"].mean())\n",
"\n",
"\n",
"\n",
"# AUM JUMPS\n",
"\n",
"\n",
"df[\"prev_obs\"] = (\n",
" df.groupby([\"Registrar Account - ID\",\"Product - Isin\"])\n",
" [\"Quantity - AUM\"]\n",
" .shift(1)\n",
")\n",
"\n",
"df[\"aum_jump\"] = (\n",
" df[\"Quantity - AUM\"] /\n",
" df[\"prev_obs\"].replace(0,np.nan)\n",
")\n",
"\n",
"print(\"\\nAUM JUMP QUANTILES\")\n",
"\n",
"print(df[\"aum_jump\"].quantile([0.90,0.95,0.99]))\n",
"\n",
"\n",
"\n",
"# VISUAL CHECK\n",
"\n",
"\n",
"def plot_series(account, isin):\n",
"\n",
" sub = df[\n",
" (df[\"Registrar Account - ID\"] == account) &\n",
" (df[\"Product - Isin\"] == isin)\n",
" ]\n",
"\n",
" plt.figure(figsize=(8,3))\n",
"\n",
" plt.plot(\n",
" sub[\"Centralisation Date\"],\n",
" sub[\"Quantity - AUM\"],\n",
" label=\"AUM\"\n",
" )\n",
"\n",
" plt.plot(\n",
" sub[\"Centralisation Date\"],\n",
" sub[\"expected_aum\"],\n",
" linestyle=\"--\",\n",
" label=\"Expected AUM\"\n",
" )\n",
"\n",
" plt.legend()\n",
" plt.title(f\"Account {account} — ISIN {isin}\")\n",
"\n",
" plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "f7d759f7-64be-4d82-a79c-98cda407cfec",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAmQAAAJwCAYAAAAnVn0xAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAU95JREFUeJzt3Xd8VGW+x/HvpMykkUYSkkCA0EFapKkrTZEii2JXUIGr7OoFXVbdq1z3iririG2xoa66YMEuKHZZNYCIBVZEiggYQJQSIKSTNs/9g80sQxJImeSZJJ/36zUvM2eec+Z3nsyYL+c85zwOY4wRAAAArAmwXQAAAEBzRyADAACwjEAGAABgGYEMAADAMgIZAACAZQQyAAAAywhkAAAAlhHIAAAALCOQAQAAWEYgA5qpYcOGadiwYbbLwL/t2LFDDodDCxcutF1KtSxcuFAOh0M7duywXUqDSU9Pl8PhUHp6uu1S0AQRyABJ8+fPl8Ph0KBBgyp9vfyP5QMPPFDp6w888ECFP07Dhg2Tw+FQ586dK11n2bJlcjgccjgceuONN6pd60UXXaRzzz23ytfL/2hU9rj88sur/T4NbfPmzXI4HAoJCdHhw4dtl1NvXnrpJc2bN892GV6O/8y4XC61atVKw4YN0z333KPMzEzbJTao+fPnN5pgjKYjyHYBgD9YtGiR2rdvr6+//lrbtm1Tp06dfLLdkJAQbdu2TV9//bUGDhxY4T1DQkJ05MiRam+vpKREy5Yt05w5c07a9sYbb9SAAQO8lrVv377a79XQXnzxRSUmJiorK0tvvPGGrr32Wtsl1YuXXnpJGzZs0IwZM7yWt2vXToWFhQoODrZTmP7zmSkrK1NmZqa++OILzZo1Sw899JBee+01nXXWWZ62V111lS6//HK5XC5r9daX+fPnKy4uTpMnT/ZaPmTIEBUWFsrpdNopDE0agQzNXkZGhr744gstXrxYv//977Vo0SLNmjXLJ9vu2LGjSktL9fLLL3sFsiNHjmjJkiUaO3as3nzzzWpvb+XKlcrNzdXYsWNP2nbw4MG6+OKLa1V3QzPG6KWXXtKECROUkZGhRYsWNdlAVpXyo4M2VfaZ+e677zRy5EhddNFF2rRpk5KSkiRJgYGBCgwMtFGmNQEBAdZ/R2i6OGWJZm/RokWKiYnR2LFjdfHFF2vRokU+3f4VV1yhV199VW6327PsnXfeUUFBgS699NIabeu9995Tjx496u1I1/79+3XNNdeoVatWCgkJUZ8+ffTcc895tTn11FN14YUXei3r1auXHA6H1q9f71n26quvyuFwaPPmzSd931WrVmnHjh26/PLLdfnll2vFihXavXt3hXZut1sPP/ywevXqpZCQEMXHx2v06NFas2aNV7sXX3xRAwcOVFhYmGJiYjRkyBB9/PHHXm3mz5+vU045RS6XS8nJyZo2bVqFU6Xt27evcJREqjj+rvyU32uvvaa7775bbdq0UUhIiM4++2xt27bNa7333ntPO3fu9JweLP9dVjaGbPLkyYqIiNAvv/yi8ePHKyIiQvHx8brllltUVlbmVdPBgwd11VVXKTIyUtHR0Zo0aZK+++67Oo9L69Onj+bNm6fDhw/rscce8yyvbAzZ22+/rbFjxyo5OVkul0sdO3bUX/7ylwq1StLjjz+uDh06KDQ0VAMHDtTKlStr3a/lXn/9dfXr10+hoaGKi4vTlVdeqV9++cWrzd69ezVlyhS1adNGLpdLSUlJOv/88z370b59e23cuFHLly/3/I7Ka6pqDNlXX32lc889VzExMQoPD1fv3r318MMP16yj0ewRyNDsLVq0SBdeeKGcTqeuuOIKbd26Vd98843Ptj9hwgTt2bPH63/iL730ks4++2wlJCTUaFvvv//+CcePHSs3N1cHDhzwehwbCo9XWFioYcOG6YUXXtDEiRN1//33KyoqSpMnT/b64zJ48GB9/vnnnueHDh3Sxo0bFRAQoJUrV3qWr1y5UvHx8erevftJa120aJE6duyoAQMGaNy4cQoLC9PLL79cod0111yjGTNmKCUlRXPnztVtt92mkJAQffnll542s2fP1lVXXaXg4GDdddddmj17tlJSUvTpp5962tx5552aNm2akpOT9eCDD+qiiy7SU089pZEjR6qkpOSk9Vbl3nvv1ZIlS3TLLbdo5syZ+vLLLzVx4kTP67fffrv69u2ruLg4vfDCC3rhhRdOOp6srKxMo0aNUsuWLfXAAw9o6NChevDBB/X3v//d08btdmvcuHF6+eWXNWnSJN19993as2ePJk2aVOt9OdbFF1+s0NDQCqH2eAsXLlRERIRuuukmPfzww+rXr5/uuOMO3XbbbV7tnnjiCU2fPl1t2rTRfffdp8GDB2v8+PGVhnDp5P1a/t6XXnqpAgMDNWfOHE2dOlWLFy/WmWee6RW0L7roIi1ZskRTpkzR/PnzdeONNyo3N1e7du2SJM2bN09t2rRRt27dPL+j22+/vcp9XrZsmYYMGaJNmzbpD3/4gx588EENHz5c77777gn7CqjAAM3YmjVrjCSzbNkyY4wxbrfbtGnTxvzhD3/wapeRkWEkmfvvv7/S7dx///1GksnIyPAsGzp0qDnllFOMMcb079/fXHPNNcYYY7KysozT6TTPPfec+eyzz4wk8/rrr5+01p9++slIMp999tkJ25Vvs7LH8fUNHTrU83zevHlGknnxxRc9y4qLi83pp59uIiIiTE5OjjHGmNdff91IMps2bTLGGLN06VLjcrnMeeedZy677DLPur179zYXXHDBSferuLjYtGzZ0tx+++2eZRMmTDB9+vTxavfpp58aSebGG2+ssA23222MMWbr1q0mICDAXHDBBaasrKzSNvv37zdOp9OMHDnSq81jjz1mJJl//OMfnmXt2rUzkyZNqvB+x/ddeZ93797dFBUVeZY//PDDRpL5/vvvPcvGjh1r2rVrV2Gb5Z+xBQsWeJZNmjTJSDJ33XWXV9u0tDTTr18/z/M333zTSDLz5s3zLCsrKzNnnXVWhW1Wpjqfwz59+piYmBjP8wULFlT4TBUUFFRY7/e//70JCwszR44cMcYYU1RUZFq2bGkGDBhgSkpKPO0WLlxoJNWqX4uLi01CQoLp2bOnKSws9LR79913jSRzxx13GGOOfvdO9D0ud8opp3jVcXw95d/B0tJSk5qaatq1a2eysrK82pZ/3oDq4ggZmrVFixapVatWGj58uKSj43guu+wyvfLKK5WeZqmtCRMmaPHixSouLtYbb7yhwMBAXXDBBTXaxnvvvaeoqCideeaZ1Wp/xx13aNmyZV6PxMTEKtu///77SkxM1BVXXOFZFhwcrBtvvFF5eXlavny5pKNHyCRpxYoVko4eCRswYIDOOecczxGyw4cPa8OGDZ62J/LBBx/o4MGDXu97xRVX6LvvvtPGjRs9y9588005HI5Kx/c5HA5J0ltvvSW326077rhDAQEBlbb55z//qeLiYs2YMcOrzdSpUxUZGan33nvvpDVXZcqUKV4Dvsv3/6effqr1NiXpuuuu83o+ePBgr21++OGHCg4O1tSpUz3LAgICNG3atDq977EiIiKUm5t7wjahoaGen8uP0A4ePFgFBQX64YcfJElr1qzRwYMHNXXqVAUF/WcY88SJExUTE1Ppdk/Wr2vWrNH+/fv13//9315jvMaOHatu3bp5fqehoaFyOp1KT09XVlZWTXa/Ut9++60yMjI0Y8YMRUdHe71W/nkDqqtZBrIVK1Zo3LhxSk5OlsPh0FtvvVXjbRhj9MADD6hLly5yuVxq3bq17r77bt8Xi3pTVlamV155RcOHD1dGRoa2bdumbdu2adCgQdq3b58++eSTGm+zqv8JX3755crOztYHH3ygRYsW6be//a1atGhRo22/9957GjlypNcfsRPp1auXRowY4fU40YDknTt3qnPnzhWCTPkpx507d0qSWrVqpc6dO3vC18qVKzV48GANGTJEv/76q3766SetWrVKbre7WoHsxRdfVGpqqlwul+d30LFjR4WFhXmN59u+fbuSk5MVGxtb5ba2b9+ugIAA9ejR44T7KUldu3b1Wu50OtWhQwfP67XRtm1br+flAaMuf/zLx8odv91jt7lz504lJSUpLCzMq52vrhaWpLy8vJN+Zjdu3KgLLrhAUVFRioyMVHx8vK688kpJUnZ2tqfWymoLCgqqcmzkyfq1qt+pJHXr1s3zusvl0ty5c/XBBx+oVatWGjJkiO677z7t3bv3hPtVle3bt0uSevbsWav1gWM1y0CWn5+vPn366PHHH6/1Nv7whz/omWee0QMPPKAffvhBS5curXBbA/i3Tz/9VHv27NErr7yizp07ex7lA+2PDQPlQaawsLDSbRUUFHi1O15SUpKGDRumBx98UCtWrNCECRNqVGtBQYHS09OrPX6svp155plauXKlCgsLtXbtWg0ePFg9e/ZUdHS0Vq5cqZUrVyoiIkJpaWkn3E5OTo7eeecdZWRkeP0OevTooYKCAr300ksyxjTQXlVUVcCu6uhpVVcd1mUf/OFKxpKSEv34448nDHiHDx/W0KFD9d133+muu+7SO++8o2XLlmnu3LmSdMLxiyfjy36dMWOGfvzxR82ZM0chISH6v//7P3Xv3l3ffvttresDfKFZ3vZizJgxGjNmTJWvFxUV6fbbb9fLL7+sw4cPq2fPnpo7d67nSpvNmzfriSee0IYNGzz/IktNTW2I0uFDixYtUkJCQqXBfPHixVqyZImefPJJhYaGKj4+XmFhYdqyZUul29qyZYvCwsIUFxdX5ftNmDBB1157raKjo2scrD799FMVFRWd8HNbV+3atdP69evldru9jpKVn2pq166dZ9ngwYO1YMECz6ndM844QwEBAZ6gtnnzZp1xxhknDROLFy/WkSNH9MQTT1Touy1btujPf/6zVq1apTPPPFMdO3bURx99pEOHDlV5lKxjx45yu93atGmT+vbtW+V+lm+/Q4cOnuXFxcXKyMjQiBEjPMtiYmIqvUntzp07vdatifo4ldWuXTt99tlnKigo8DpKVtmViLXxxhtvqLCwUKNGjaqyTXp6ug4ePKjFixdryJAhnuUZGRkVai2vrXyogCSVlpZqx44d6t27d43rO/Z3euy90sqXHfvZlY5+Tm6++WbdfPPN2rp1q/r27asHH3xQL774oqTq/446duwoSdqwYYPX5waojWZ5hOxkpk+frtWrV+uVV17R+vXrdckll2j06NHaunWrpKO3LOjQoYPeffddpaamqn379rr22mt16NAhy5WjugoLC7V48WL99re/1cUXX1zhMX36dOXm5mrp0qWSjv4LfeTIkXrnnXc8V2OV27Vrl9555x2NHDnyhAHk4osv1qxZszR//vwa31jy/fffV//+/dWqVaua72w1nXvuudq7d69effVVz7LS0lI9+uijioiI0NChQz3Ly09Fzp07V71791ZUVJRn+SeffKI1a9ZU+3Rlhw4ddN1111X4Hdxyyy2KiIjwHKm86KKLZIzR7NmzK2yn/EjJ+PHjFRAQoLvuuqvCEZnyNiNGjJDT6dQjjzzidYTl2WefVXZ2ttc93jp27Kgvv/xSxcXFnmXvvvuufv7555PuW1XCw8M9p+98ZdSoUSopKdHTTz/tWeZ2u+t0FqDcd999pxkzZigmJuaEY9LKP/vH9mlxcbHmz5/v1a5///5q2bKlnn76aZWWlnqWL1q0qNandvv376+EhAQ9+eSTKioq8iz/4IMPtHnzZs/vtKCgoMKNmDt27KgWLVp4rRceHl6t2SJOPfVUpaamem4LciybR3bRODXLI2QnsmvXLi1YsEC7du1ScnKyJOmWW27Rhx9+qAULFuiee+7RTz/9pJ07d+r111/X888/r7KyMv3xj3/UxRdf7HVpPfzX0qVLlZubq/POO6/S10877TTFx8dr0aJFuuyyyyRJ99xzj0477TSdeuqp+t3vfqf27dtrx44d+vvf/y6Hw6F77rnnhO8ZFRWlO++8s1b1vv/++5oyZUqt1q2u3/3ud3rqqac0efJkrV27Vu3bt9cbb7yhVatWad68eV7jhzp16qTExERt2bJFN9xwg2f5kCFDdOutt0rSSQPZr7/+qs8++0w33nhjpa+7XC6NGjVKr7/+uh555BENHz5cV111lR555BFt3bpVo0ePltvt1sqVKzV8+HBNnz5dnTp10u23366//OUvGjx4sC688EK5XC598803Sk5O1pw5cxQfH6+ZM2dq9uzZGj16tM477zxt2bJF8+fP14ABAzxjniTp2muv1RtvvKHRo0fr0ksv1fbt2/Xiiy96jozURr9+/fTqq6/qpptu0oABAxQREaFx48bVenvS0SA6cOBA3Xzzzdq2bZu6deumpUuXev6RWN0jPitXrtSRI0dUVlamgwcPatWqVVq6dKmioqK0ZMmSE14UcsYZZygmJkaTJk3SjTfeKIfDoRdeeKFCMHE6nbrzzjt1ww036KyzztKll16qHTt2aOHCherYsWOtjiAGBwdr7ty5mjJlioYOHaorrrhC+/bt08MPP6z27dvrj3/8oyTpxx9/1Nlnn61LL71UPXr0UFBQkJYsWaJ9+/Z5TSvWr18/PfHEE/rrX/+qTp06KSEhocKRN+nohRNPPPGExo0bp759+2rKlClKSkrSDz/8oI0bN+qjjz6q8b6gGbN0daffkGSWLFnieV5+mXR4eLjXIygoyFx66aXGGGOmTp1qJJktW7Z41lu7dq2RZH744YeG3gXUwrhx40xISIjJz8+vss3kyZNNcHCwOXDggGfZ5s2bzWWXXWYSEhJMUFCQSUhIMJdffrnZvHlzhfWPve1FVapzu4ENGzYYSebrr7+uxp5Vb5vl9R1/af++ffvMlClTTFxcnHE6naZXr15V3jLhkksuMZLMq6++6llWXFxswsLCjNPp9Lr9QGUefPBBI8l88sknVbYpvxXC22+/bYw5epuB+++/33Tr1s04nU4THx9vxowZY9auXeu13j/+8Q+TlpZmXC6XiYmJMUOHDvXc2qTcY489Zrp162aCg4NNq1atzPXXX1/h1gXldbZu3dq4XC7zm9/8xqxZs6bK214c3+eV3coiLy/PTJgwwURHRxtJnltgVHXbi/Dw8Ao1zZo1yxz/v+/MzEwzYcIE06JFCxMVFWUmT55sVq1aZSSZV155paou9qq//BEcHGzi4+PNkCFDzN133232799fYZ3KbnuxatUqc9ppp5nQ0FCTnJxs/ud//sd89NFHld6u5ZFHHjHt2rUzLpfLDBw40Kxatcr069fPjB49ulb9aowxr776quf3HhsbayZOnGh2797tef3AgQNm2rRpplu3biY8PNxERUWZQYMGmddee81rO3v37jVjx441LVq08LoVx/G3vSj3+eefm3POOce0aNHChIeHm969e5tHH330hH0OHM9hTPM+rupwOLRkyRKNHz9e0tG7i0+cOFEbN26scPopIiJCiYmJmjVrlu655x6vG0gWFhYqLCxMH3/8sc4555yG3AU0cffdd58eeugh7dmzh0vpUSNvvfWWLrjgAn3++ef6zW9+Y7ucE3K73YqPj9eFF17odeoVaC44ZXmctLQ0lZWVaf/+/VWecvnNb36j0tJSbd++3XPq4scff5SkCoNHgbpq3769/va3vxHGcEKFhYVe9wErKyvTo48+qsjISJ166qkWK6voyJEjcrlcXp/p559/XocOHfKaOgloTprlEbK8vDzP1UdpaWl66KGHNHz4cMXGxqpt27a68sortWrVKj344INKS0tTZmamPvnkE/Xu3Vtjx46V2+32jP2YN2+e3G63pk2bpsjIyJNOLQIA9eHaa69VYWGhTj/9dBUVFWnx4sX64osvdM8992jmzJm2y/OSnp6uP/7xj7rkkkvUsmVL/etf/9Kzzz6r7t27a+3atTW+6AVoEuyeMbWjqqllyqdIKS4uNnfccYdp3769CQ4ONklJSeaCCy4w69ev92zjl19+MRdeeKGJiIgwrVq1MpMnTzYHDx60tEcAmrtFixaZU0891URGRhqn02l69Ojht+OYMjIyzLhx40yrVq08Y/imTJli9u3bZ7s0wJpmeYQMAADAn3AfMgAAAMsIZAAAAJY1q6ss3W63fv31V7Vo0YIr1gAAQL0yxig3N1fJycleU9JVplkFsl9//VUpKSm2ywAAAM3Izz//rDZt2pywTbMKZOVTv/z888+KjIy0XA0AAGjKcnJylJKS4jX1XFWaVSArP00ZGRlJIAMAAA2iOsOkGNQPAABgGYEMAADAMgIZAACAZc1qDBkAoPkwxqi0tFRlZWW2S0ETFhwcrMDAwDpvh0AGAGhyiouLtWfPHhUUFNguBU2cw+FQmzZtFBERUaftEMgAAE2K2+1WRkaGAgMDlZycLKfTyc3AUS+MMcrMzNTu3bvVuXPnOh0pI5ABAJqU4uJiud1upaSkKCwszHY5aOLi4+O1Y8cOlZSU1CmQMagfANAknWyqGsAXfHX0lU8rAACAZQQyAAAAywhkAAA0A3feeadatWolh8Oht956q8Hed/LkyRo/fvwJ2wwbNkwzZsyo91p27Nghh8OhdevW1ft71RSBDAAAPzF58mQ5HA45HA45nU516tRJd911l0pLS+u03c2bN2v27Nl66qmntGfPHo0ZM6bOtd55553q27fvSds9/PDDWrhwYZ3fr6YqC4IpKSnas2ePevbsKUlKT0+Xw+HQ4cOHG7y+43GVJQAAfmT06NFasGCBioqK9P7772vatGkKDg7WzJkza7ytsrIyORwObd++XZJ0/vnnN/gtQKKiohr0/U4kMDBQiYmJtsuoFEfIAABNnzFSfn7DP4ypcakul0uJiYlq166drr/+eo0YMUJLly6VJBUVFemWW25R69atFR4erkGDBik9Pd2z7sKFCxUdHa2lS5eqR48ecrlc+q//+i+NGzdO0tErT48NZM8884y6d++ukJAQdevWTfPnz/eqZffu3briiisUGxur8PBw9e/fX1999ZUWLlyo2bNn67vvvvMc0avqKNjxR6ry8/N19dVXKyIiQklJSXrwwQcrrFPd/fzoo4/UvXt3RUREaPTo0dqzZ4+ko0fvnnvuOb399tue+tLT071OWe7YsUPDhw+XJMXExMjhcGjy5Ml6/vnn1bJlSxUVFXnVNH78eF111VUn/uXVAUfIAABNX0GBVMc7qddKXp4UHl6nTYSGhurgwYOSpOnTp2vTpk165ZVXlJycrCVLlmj06NH6/vvv1blzZ0lSQUGB5s6dq2eeeUYtW7ZUUlKShg0bpilTpngCiyQtWrRId9xxhx577DGlpaXp22+/1dSpUxUeHq5JkyYpLy9PQ4cOVevWrbV06VIlJibqX//6l9xuty677DJt2LBBH374of75z39Kqv6RsD/96U9avny53n77bSUkJOh///d/9a9//cvr9Gd19/OBBx7QCy+8oICAAF155ZW65ZZbtGjRIt1yyy3avHmzcnJytGDBAklSbGysfv31V897pKSk6M0339RFF12kLVu2KDIyUqGhoXI6nbrxxhu1dOlSXXLJ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iBHm22+/Ne+//76Ji4szM2fO9LT56aefTFhYmLnpppvMpk2bzKOPPmoCAwPNhx9+6Gnj733//vvvm9tvv90sXrzYSDJLlizxet0X36GG/D43pJP13aRJk8zo0aO9PoOHDh3yatNc+27UqFFmwYIFZsOGDWbdunXm3HPPNW3btvX6O+BP39GT1dKQqtN3Q4cONVOnTvX67GVnZ3teb6p9RyCrhXbt2pm//e1vVb4+f/58ExMTY4qKijzLbr31VtO1a1fP80svvdSMHTvWa71BgwaZ3//+98YYY9xut0lMTDT333+/5/XDhw8bl8tlXn75ZWOMMZs2bTKSzDfffONp88EHHxiHw2F++eWXOu2jPxk4cKCZNm2a53lZWZlJTk42c+bMsVhV/Zo1a5bp06dPpa8dPnzYBAcHm9dff92zbPPmzUaSWb16tTHm6B/bgIAAs3fvXk+bJ554wkRGRno+l//zP/9jTjnlFK9tX3bZZWbUqFGe542p748PFb76DjXU99mmqgLZ+eefX+U69N1/7N+/30gyy5cvN8b413e0OrXYdHzfGXM0kP3hD3+ocp2m2necsqyle++9Vy1btlRaWpruv/9+r0Olq1ev1pAhQ+R0Oj3LRo0apS1btigrK8vTZsSIEV7bHDVqlFavXi1JysjI0N69e73aREVFadCgQZ42q1evVnR0tPr37+9pM2LECAUEBOirr77y/U5bUFxcrLVr13r1Q0BAgEaMGOHph6Zq69atSk5OVocOHTRx4kTt2rVLkrR27VqVlJR49Um3bt3Utm1br89Gr1691KpVK0+bUaNGKScnRxs3bvS0OdFnsLH3va++Qw31ffZH6enpSkhIUNeuXXX99dfr4MGDntfou//Izs6WJMXGxkryr+9odWqx6fi+K7do0SLFxcWpZ8+emjlzpgoKCjyvNdW+a1aTi/vKjTfeqFNPPVWxsbH64osvNHPmTO3Zs0cPPfSQJGnv3r1KTU31Wqf8g7N3717FxMRo7969Xh+m8jZ79+71tDt2varaJCQkeL0eFBSk2NhYT5vG7sCBAyorK6u0H3744QdLVdW/QYMGaeHCheratav27Nmj2bNna/DgwdqwYYP27t0rp9Op6Ohor3WO/2xU1mflr52oTU5OjgoLC5WVldWo+95X36GG+j77m9GjR+vCCy9Uamqqtm/frv/93//VmDFj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",
"text/plain": [
"<Figure size 700x700 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# COMPUTE AUM CHANGE\n",
"\n",
"df[\"prev_aum\"] = (\n",
" df.groupby([\"Registrar Account - ID\",\"Product - Isin\"])\n",
" [\"Quantity - AUM\"]\n",
" .shift(1)\n",
")\n",
"\n",
"df[\"delta_aum\"] = df[\"Quantity - AUM\"] - df[\"prev_aum\"]\n",
"\n",
"df[\"flow_lag\"] = (\n",
" df.groupby([\"Registrar Account - ID\",\"Product - Isin\"])\n",
" [\"Quantity - NetFlows\"]\n",
" .shift(1)\n",
")\n",
"\n",
"\n",
"\n",
"# FILTER VALID OBSERVATIONS\n",
"\n",
"\n",
"diag = df[\n",
" df[\"prev_aum\"].notna() &\n",
" df[\"flow_lag\"].notna()\n",
"]\n",
"\n",
"\n",
"\n",
"# SAMPLE FOR PLOTTING (dataset is large)\n",
"\n",
"\n",
"sample = diag.sample(20000, random_state=1)\n",
"\n",
"\n",
"\n",
"# SCATTER PLOT\n",
"\n",
"\n",
"plt.figure(figsize=(7,7))\n",
"\n",
"plt.scatter(\n",
" sample[\"flow_lag\"],\n",
" sample[\"delta_aum\"],\n",
" alpha=0.3,\n",
" s=5\n",
")\n",
"\n",
"# perfect accounting identity\n",
"x = np.linspace(\n",
" sample[\"flow_lag\"].min(),\n",
" sample[\"flow_lag\"].max(),\n",
" 100\n",
")\n",
"\n",
"plt.plot(x, x, color=\"red\", label=\"Perfect identity\")\n",
"\n",
"plt.xlabel(\"Flow (t-1)\")\n",
"plt.ylabel(\"Δ AUM\")\n",
"\n",
"plt.title(\"AUM / Flow Accounting Diagnostic\")\n",
"\n",
"plt.legend()\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "d0a959c9-cfff-44cb-a1df-6c7275ec5b43",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.50 0.000000\n",
"0.90 0.010919\n",
"0.95 0.162503\n",
"0.99 11.550941\n",
"Name: implied_return, dtype: float64\n"
]
}
],
"source": [
"df[\"implied_return\"] = (\n",
" df[\"Quantity - AUM\"] - df[\"prev_aum\"] - df[\"flow_lag\"]\n",
") / df[\"prev_aum\"].replace(0, np.nan)\n",
"\n",
"print(df[\"implied_return\"].quantile([0.5,0.9,0.95,0.99]))"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.13.11"
}
},
"nbformat": 4,
"nbformat_minor": 5
}