{ "cells": [ { "cell_type": "markdown", "id": "24af9d0c", "metadata": {}, "source": [ "### Apply Assumption with Obligor info" ] }, { "cell_type": "code", "execution_count": 1, "id": "6390f712", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
Connecting engine server -> https://absbox.org/api/dev\n",
       "
\n" ], "text/plain": [ "Connecting engine server -> \u001b[4;94mhttps://absbox.org/api/dev\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "/home/xiaoyu/repo/AbsBox/lib/python3.13/site-packages/urllib3/connectionpool.py:1097: InsecureRequestWarning: Unverified HTTPS request is being made to host 'absbox.org'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#tls-warnings\n", " warnings.warn(\n" ] }, { "data": { "text/html": [ "
✅Connected, local lib:0.46.5, server:0.50.1\n",
       "
\n" ], "text/plain": [ "✅Connected, local li\u001b[1;92mb:0\u001b[0m.\u001b[1;36m46.5\u001b[0m, server:\u001b[1;36m0.50\u001b[0m.\u001b[1;36m1\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from absbox import API,EnginePath\n", "\n", "localAPI = API(EnginePath.DEV,check=False,lang='english')" ] }, { "cell_type": "markdown", "id": "f8ea0008", "metadata": {}, "source": [ "#### Assets with obligor info\n", "\n", "Let's setup asset with different tags/ids, just plug a map call `obligor` to the asset\n", "\n", " * Asset 1\n", " \n", " * ID: \"1\"\n", " * Tag:[\"A\",\"B\"]\n", "\n", " * Asset 2\n", " \n", " * ID: \"2\"\n", " * Tag:[\"C\",\"B\"]" ] }, { "cell_type": "code", "execution_count": 2, "id": "2ff8e928", "metadata": {}, "outputs": [], "source": [ "ob1 = {\n", " \"id\":\"1\",\n", " \"tag\":[\"A\",\"B\"]\n", "} \n", "\n", "ob2 = {\n", " \"id\":\"2\",\n", " \"tag\":[\"C\",\"B\"]\n", "} \n", "\n", "\n", "myAsset1 = [\"Mortgage\"\n", " ,{\"originBalance\": 12000.0\n", " ,\"originRate\": [\"fix\",0.045]\n", " ,\"originTerm\": 120\n", " ,\"freq\": \"monthly\"\n", " ,\"type\": \"level\"\n", " ,\"originDate\": \"2021-02-01\"\n", " ,\"obligor\":ob1\n", " }\n", " ,{\"currentBalance\": 2000.0\n", " ,\"currentRate\": 0.075\n", " ,\"remainTerm\": 80\n", " ,\"status\": \"current\"}]\n", "myAsset2 = [\"Mortgage\"\n", " ,{\"originBalance\": 12000.0\n", " ,\"originRate\": [\"fix\",0.045]\n", " ,\"originTerm\": 120\n", " ,\"freq\": \"monthly\"\n", " ,\"type\": \"level\"\n", " ,\"originDate\": \"2021-02-01\"\n", " ,\"obligor\":ob2\n", " }\n", " ,{\"currentBalance\": 5000.0\n", " ,\"currentRate\": 0.075\n", " ,\"remainTerm\": 80\n", " ,\"status\": \"current\"}]\n", "\n", "myPool = {'assets':[myAsset1,myAsset2],\n", " 'cutoffDate':\"2022-03-01\"}\n", "\n", "ppyAssump = ((\"Mortgage\",None ,{\"CPR\":0.1}, None, None)\n", " ,None\n", " ,None)\n", "defAssump = ((\"Mortgage\",{\"CDR\":0.2} ,None, None, None)\n", " ,None\n", " ,None)" ] }, { "cell_type": "markdown", "id": "78719b5d", "metadata": {}, "source": [ "#### \"ByObligor\"\n", "\n", "`ByObligor` is introduced `0.29.x` . It accepts a list of (`condition`, `assumptions` )." ] }, { "cell_type": "markdown", "id": "0cd1c309", "metadata": {}, "source": [ "#### assumption with obligor id" ] }, { "cell_type": "markdown", "id": "ef6af022", "metadata": {}, "source": [ "`ById` will catch assets with its `id` in the list and apply assumptions." ] }, { "cell_type": "code", "execution_count": 4, "id": "0a778aca", "metadata": { "scrolled": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/xiaoyu/repo/AbsBox/lib/python3.13/site-packages/urllib3/connectionpool.py:1097: InsecureRequestWarning: Unverified HTTPS request is being made to host 'absbox.org'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#tls-warnings\n", " warnings.warn(\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
BalancePrincipalInterestPrepaymentDefaultRecoveryLossWACBorrowerNumPrepayPenaltyCumPrincipalCumPrepayCumDelinqCumDefaultCumRecoveryCumLoss
Date
2024-06-017000.000.000.000.000000.075NoneNone0.000.000000
2024-07-016915.2267.5443.6417.240000.075NoneNone67.5417.240000
2024-08-016829.9467.7943.1017.490000.075NoneNone135.3334.730000
2024-09-016744.7368.0542.5717.160000.075NoneNone203.3851.890000
2024-10-016660.1268.3142.0416.300000.075NoneNone271.6968.190000
\n", "
" ], "text/plain": [ " Balance Principal Interest Prepayment Default Recovery Loss \\\n", "Date \n", "2024-06-01 7000.00 0.00 0.00 0.00 0 0 0 \n", "2024-07-01 6915.22 67.54 43.64 17.24 0 0 0 \n", "2024-08-01 6829.94 67.79 43.10 17.49 0 0 0 \n", "2024-09-01 6744.73 68.05 42.57 17.16 0 0 0 \n", "2024-10-01 6660.12 68.31 42.04 16.30 0 0 0 \n", "\n", " WAC BorrowerNum PrepayPenalty CumPrincipal CumPrepay \\\n", "Date \n", "2024-06-01 0.075 None None 0.00 0.00 \n", "2024-07-01 0.075 None None 67.54 17.24 \n", "2024-08-01 0.075 None None 135.33 34.73 \n", "2024-09-01 0.075 None None 203.38 51.89 \n", "2024-10-01 0.075 None None 271.69 68.19 \n", "\n", " CumDelinq CumDefault CumRecovery CumLoss \n", "Date \n", "2024-06-01 0 0 0 0 \n", "2024-07-01 0 0 0 0 \n", "2024-08-01 0 0 0 0 \n", "2024-09-01 0 0 0 0 \n", "2024-10-01 0 0 0 0 " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "AssetLevelAssumption = (\"ByObligor\"\n", " ,(\"ById\",[\"1\"],ppyAssump)\n", " #,(\"ByTag\",[\"C\"],\"TagSuperset\",defAssump)\n", " )\n", "\n", "r = localAPI.runPool(myPool\n", " ,poolAssump=AssetLevelAssumption\n", " ,read=True)\n", "\n", "r['PoolConsol']['flow'].head()" ] }, { "cell_type": "markdown", "id": "c35d4b12", "metadata": {}, "source": [ "#### assumption with obligor tag\n", "\n", "There are couple way to apply assumption with tags:\n", "\n", "\n", "* `TagEq` hit when asset tags equals to tags in the assumption\n", "\n", "* `TagSubset` hit when asset tags is a subset of the list\n", "\n", "* `TagSuperset` hit when asset tags is a superset of the list\n", "\n", "* `TagAny` hit when asset tags has any intersetion with tags in assumption" ] }, { "cell_type": "markdown", "id": "4f51d329", "metadata": {}, "source": [ "`TagEq`, only match tags Equals to asset's tag. Here ,there is not match" ] }, { "cell_type": "code", "execution_count": 5, "id": "9b2035e6", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/xiaoyu/repo/AbsBox/lib/python3.13/site-packages/urllib3/connectionpool.py:1097: InsecureRequestWarning: Unverified HTTPS request is being made to host 'absbox.org'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#tls-warnings\n", " warnings.warn(\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
BalancePrincipalInterestPrepaymentDefaultRecoveryLossWACBorrowerNumPrepayPenaltyCumPrincipalCumPrepayCumDelinqCumDefaultCumRecoveryCumLoss
Date
2024-06-017000.000.000.0000000.075NoneNone0.0000000
2024-07-016932.3067.7043.7500000.075NoneNone67.7000000
2024-08-016864.1668.1443.3100000.075NoneNone135.8400000
2024-09-016795.6068.5642.8900000.075NoneNone204.4000000
2024-10-016726.6168.9942.4600000.075NoneNone273.3900000
\n", "
" ], "text/plain": [ " Balance Principal Interest Prepayment Default Recovery Loss \\\n", "Date \n", "2024-06-01 7000.00 0.00 0.00 0 0 0 0 \n", "2024-07-01 6932.30 67.70 43.75 0 0 0 0 \n", "2024-08-01 6864.16 68.14 43.31 0 0 0 0 \n", "2024-09-01 6795.60 68.56 42.89 0 0 0 0 \n", "2024-10-01 6726.61 68.99 42.46 0 0 0 0 \n", "\n", " WAC BorrowerNum PrepayPenalty CumPrincipal CumPrepay \\\n", "Date \n", "2024-06-01 0.075 None None 0.00 0 \n", "2024-07-01 0.075 None None 67.70 0 \n", "2024-08-01 0.075 None None 135.84 0 \n", "2024-09-01 0.075 None None 204.40 0 \n", "2024-10-01 0.075 None None 273.39 0 \n", "\n", " CumDelinq CumDefault CumRecovery CumLoss \n", "Date \n", "2024-06-01 0 0 0 0 \n", "2024-07-01 0 0 0 0 \n", "2024-08-01 0 0 0 0 \n", "2024-09-01 0 0 0 0 \n", "2024-10-01 0 0 0 0 " ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "AssetLevelAssumption = (\"ByObligor\"\n", " ,(\"ByTag\",[\"C\"],\"TagEq\",ppyAssump)\n", " )\n", "\n", "r = localAPI.runPool(myPool\n", " ,poolAssump=AssetLevelAssumption\n", " ,read=True)\n", "\n", "r['PoolConsol']['flow'].head()" ] }, { "cell_type": "markdown", "id": "44584b28", "metadata": {}, "source": [ "This will match `Asset 2` " ] }, { "cell_type": "code", "execution_count": 6, "id": "9c2045bb", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/xiaoyu/repo/AbsBox/lib/python3.13/site-packages/urllib3/connectionpool.py:1097: InsecureRequestWarning: Unverified HTTPS request is being made to host 'absbox.org'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#tls-warnings\n", " warnings.warn(\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
BalancePrincipalInterestPrepaymentDefaultRecoveryLossWACBorrowerNumPrepayPenaltyCumPrincipalCumPrepayCumDelinqCumDefaultCumRecoveryCumLoss
Date
2024-06-017000.000.000.000.000000.075NoneNone0.000.000000
2024-07-016889.6167.2843.4843.110000.075NoneNone67.2843.110000
2024-08-016778.5967.2942.7743.730000.075NoneNone134.5786.840000
2024-09-016668.4167.2742.0942.910000.075NoneNone201.84129.750000
2024-10-016560.3867.2841.4140.750000.075NoneNone269.12170.500000
\n", "
" ], "text/plain": [ " Balance Principal Interest Prepayment Default Recovery Loss \\\n", "Date \n", "2024-06-01 7000.00 0.00 0.00 0.00 0 0 0 \n", "2024-07-01 6889.61 67.28 43.48 43.11 0 0 0 \n", "2024-08-01 6778.59 67.29 42.77 43.73 0 0 0 \n", "2024-09-01 6668.41 67.27 42.09 42.91 0 0 0 \n", "2024-10-01 6560.38 67.28 41.41 40.75 0 0 0 \n", "\n", " WAC BorrowerNum PrepayPenalty CumPrincipal CumPrepay \\\n", "Date \n", "2024-06-01 0.075 None None 0.00 0.00 \n", "2024-07-01 0.075 None None 67.28 43.11 \n", "2024-08-01 0.075 None None 134.57 86.84 \n", "2024-09-01 0.075 None None 201.84 129.75 \n", "2024-10-01 0.075 None None 269.12 170.50 \n", "\n", " CumDelinq CumDefault CumRecovery CumLoss \n", "Date \n", "2024-06-01 0 0 0 0 \n", "2024-07-01 0 0 0 0 \n", "2024-08-01 0 0 0 0 \n", "2024-09-01 0 0 0 0 \n", "2024-10-01 0 0 0 0 " ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "AssetLevelAssumption = (\"ByObligor\"\n", " ,(\"ByTag\",[\"C\",\"B\"],\"TagEq\",ppyAssump)\n", " )\n", "\n", "r = localAPI.runPool(myPool\n", " ,poolAssump=AssetLevelAssumption\n", " ,read=True)\n", "\n", "r['PoolConsol']['flow'].head()" ] }, { "cell_type": "markdown", "id": "799523b3", "metadata": {}, "source": [ "`TagAny` will match if any interesection between match tags and asset tags " ] }, { "cell_type": "code", "execution_count": 7, "id": "374b0206", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/xiaoyu/repo/AbsBox/lib/python3.13/site-packages/urllib3/connectionpool.py:1097: InsecureRequestWarning: Unverified HTTPS request is being made to host 'absbox.org'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#tls-warnings\n", " warnings.warn(\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
BalancePrincipalInterestPrepaymentDefaultRecoveryLossWACBorrowerNumPrepayPenaltyCumPrincipalCumPrepayCumDelinqCumDefaultCumRecoveryCumLoss
Date
2024-06-017000.000.000.000.000000.075NoneNone0.000.000000
2024-07-016889.6167.2843.4843.110000.075NoneNone67.2843.110000
2024-08-016778.5967.2942.7743.730000.075NoneNone134.5786.840000
2024-09-016668.4167.2742.0942.910000.075NoneNone201.84129.750000
2024-10-016560.3867.2841.4140.750000.075NoneNone269.12170.500000
\n", "
" ], "text/plain": [ " Balance Principal Interest Prepayment Default Recovery Loss \\\n", "Date \n", "2024-06-01 7000.00 0.00 0.00 0.00 0 0 0 \n", "2024-07-01 6889.61 67.28 43.48 43.11 0 0 0 \n", "2024-08-01 6778.59 67.29 42.77 43.73 0 0 0 \n", "2024-09-01 6668.41 67.27 42.09 42.91 0 0 0 \n", "2024-10-01 6560.38 67.28 41.41 40.75 0 0 0 \n", "\n", " WAC BorrowerNum PrepayPenalty CumPrincipal CumPrepay \\\n", "Date \n", "2024-06-01 0.075 None None 0.00 0.00 \n", "2024-07-01 0.075 None None 67.28 43.11 \n", "2024-08-01 0.075 None None 134.57 86.84 \n", "2024-09-01 0.075 None None 201.84 129.75 \n", "2024-10-01 0.075 None None 269.12 170.50 \n", "\n", " CumDelinq CumDefault CumRecovery CumLoss \n", "Date \n", "2024-06-01 0 0 0 0 \n", "2024-07-01 0 0 0 0 \n", "2024-08-01 0 0 0 0 \n", "2024-09-01 0 0 0 0 \n", "2024-10-01 0 0 0 0 " ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "AssetLevelAssumption = (\"ByObligor\"\n", " ,(\"ByTag\",[\"C\"],\"TagAny\",ppyAssump)\n", " )\n", "\n", "r = localAPI.runPool(myPool\n", " ,poolAssump=AssetLevelAssumption\n", " ,read=True)\n", "\n", "r['PoolConsol']['flow'].head()" ] }, { "cell_type": "markdown", "id": "8a4ff67b", "metadata": {}, "source": [ "`TagSubset` will match if asset tags is subset of matching tags" ] }, { "cell_type": "code", "execution_count": 8, "id": "3b77cdbc", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/xiaoyu/repo/AbsBox/lib/python3.13/site-packages/urllib3/connectionpool.py:1097: InsecureRequestWarning: Unverified HTTPS request is being made to host 'absbox.org'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#tls-warnings\n", " warnings.warn(\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
BalancePrincipalInterestPrepaymentDefaultRecoveryLossWACBorrowerNumPrepayPenaltyCumPrincipalCumPrepayCumDelinqCumDefaultCumRecoveryCumLoss
Date
2024-06-017000.000.000.0000000.075NoneNone0.0000000
2024-07-016932.3067.7043.7500000.075NoneNone67.7000000
2024-08-016864.1668.1443.3100000.075NoneNone135.8400000
2024-09-016795.6068.5642.8900000.075NoneNone204.4000000
2024-10-016726.6168.9942.4600000.075NoneNone273.3900000
\n", "
" ], "text/plain": [ " Balance Principal Interest Prepayment Default Recovery Loss \\\n", "Date \n", "2024-06-01 7000.00 0.00 0.00 0 0 0 0 \n", "2024-07-01 6932.30 67.70 43.75 0 0 0 0 \n", "2024-08-01 6864.16 68.14 43.31 0 0 0 0 \n", "2024-09-01 6795.60 68.56 42.89 0 0 0 0 \n", "2024-10-01 6726.61 68.99 42.46 0 0 0 0 \n", "\n", " WAC BorrowerNum PrepayPenalty CumPrincipal CumPrepay \\\n", "Date \n", "2024-06-01 0.075 None None 0.00 0 \n", "2024-07-01 0.075 None None 67.70 0 \n", "2024-08-01 0.075 None None 135.84 0 \n", "2024-09-01 0.075 None None 204.40 0 \n", "2024-10-01 0.075 None None 273.39 0 \n", "\n", " CumDelinq CumDefault CumRecovery CumLoss \n", "Date \n", "2024-06-01 0 0 0 0 \n", "2024-07-01 0 0 0 0 \n", "2024-08-01 0 0 0 0 \n", "2024-09-01 0 0 0 0 \n", "2024-10-01 0 0 0 0 " ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "AssetLevelAssumption = (\"ByObligor\"\n", " ,(\"ByTag\",[\"C\"],\"TagSubset\",ppyAssump)\n", " )\n", "\n", "r = localAPI.runPool(myPool\n", " ,poolAssump=AssetLevelAssumption\n", " ,read=True)\n", "\n", "r['PoolConsol']['flow'].head()" ] }, { "cell_type": "markdown", "id": "34abb710", "metadata": {}, "source": [ "[\"C\",\"B\"] is a subset of match tag [\"C\",\"B\"] " ] }, { "cell_type": "code", "execution_count": 9, "id": "fc98af42", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/xiaoyu/repo/AbsBox/lib/python3.13/site-packages/urllib3/connectionpool.py:1097: InsecureRequestWarning: Unverified HTTPS request is being made to host 'absbox.org'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#tls-warnings\n", " warnings.warn(\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
BalancePrincipalInterestPrepaymentDefaultRecoveryLossWACBorrowerNumPrepayPenaltyCumPrincipalCumPrepayCumDelinqCumDefaultCumRecoveryCumLoss
Date
2024-06-017000.000.000.000.000000.075NoneNone0.000.000000
2024-07-016889.6167.2843.4843.110000.075NoneNone67.2843.110000
2024-08-016778.5967.2942.7743.730000.075NoneNone134.5786.840000
2024-09-016668.4167.2742.0942.910000.075NoneNone201.84129.750000
2024-10-016560.3867.2841.4140.750000.075NoneNone269.12170.500000
\n", "
" ], "text/plain": [ " Balance Principal Interest Prepayment Default Recovery Loss \\\n", "Date \n", "2024-06-01 7000.00 0.00 0.00 0.00 0 0 0 \n", "2024-07-01 6889.61 67.28 43.48 43.11 0 0 0 \n", "2024-08-01 6778.59 67.29 42.77 43.73 0 0 0 \n", "2024-09-01 6668.41 67.27 42.09 42.91 0 0 0 \n", "2024-10-01 6560.38 67.28 41.41 40.75 0 0 0 \n", "\n", " WAC BorrowerNum PrepayPenalty CumPrincipal CumPrepay \\\n", "Date \n", "2024-06-01 0.075 None None 0.00 0.00 \n", "2024-07-01 0.075 None None 67.28 43.11 \n", "2024-08-01 0.075 None None 134.57 86.84 \n", "2024-09-01 0.075 None None 201.84 129.75 \n", "2024-10-01 0.075 None None 269.12 170.50 \n", "\n", " CumDelinq CumDefault CumRecovery CumLoss \n", "Date \n", "2024-06-01 0 0 0 0 \n", "2024-07-01 0 0 0 0 \n", "2024-08-01 0 0 0 0 \n", "2024-09-01 0 0 0 0 \n", "2024-10-01 0 0 0 0 " ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "AssetLevelAssumption = (\"ByObligor\"\n", " ,(\"ByTag\",[\"C\",\"B\"],\"TagSubset\",ppyAssump)\n", " )\n", "\n", "r = localAPI.runPool(myPool\n", " ,poolAssump=AssetLevelAssumption\n", " ,read=True)\n", "\n", "r['PoolConsol']['flow'].head()" ] }, { "cell_type": "markdown", "id": "05ec0f5b", "metadata": {}, "source": [ "`TagSuperset` will match if asset tags is superset of matching tags" ] }, { "cell_type": "code", "execution_count": 10, "id": "106d5eeb", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/xiaoyu/repo/AbsBox/lib/python3.13/site-packages/urllib3/connectionpool.py:1097: InsecureRequestWarning: Unverified HTTPS request is being made to host 'absbox.org'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#tls-warnings\n", " warnings.warn(\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
BalancePrincipalInterestPrepaymentDefaultRecoveryLossWACBorrowerNumPrepayPenaltyCumPrincipalCumPrepayCumDelinqCumDefaultCumRecoveryCumLoss
Date
2024-06-017000.000.000.000.000000.075NoneNone0.000.000000
2024-07-016889.6167.2843.4843.110000.075NoneNone67.2843.110000
2024-08-016778.5967.2942.7743.730000.075NoneNone134.5786.840000
2024-09-016668.4167.2742.0942.910000.075NoneNone201.84129.750000
2024-10-016560.3867.2841.4140.750000.075NoneNone269.12170.500000
\n", "
" ], "text/plain": [ " Balance Principal Interest Prepayment Default Recovery Loss \\\n", "Date \n", "2024-06-01 7000.00 0.00 0.00 0.00 0 0 0 \n", "2024-07-01 6889.61 67.28 43.48 43.11 0 0 0 \n", "2024-08-01 6778.59 67.29 42.77 43.73 0 0 0 \n", "2024-09-01 6668.41 67.27 42.09 42.91 0 0 0 \n", "2024-10-01 6560.38 67.28 41.41 40.75 0 0 0 \n", "\n", " WAC BorrowerNum PrepayPenalty CumPrincipal CumPrepay \\\n", "Date \n", "2024-06-01 0.075 None None 0.00 0.00 \n", "2024-07-01 0.075 None None 67.28 43.11 \n", "2024-08-01 0.075 None None 134.57 86.84 \n", "2024-09-01 0.075 None None 201.84 129.75 \n", "2024-10-01 0.075 None None 269.12 170.50 \n", "\n", " CumDelinq CumDefault CumRecovery CumLoss \n", "Date \n", "2024-06-01 0 0 0 0 \n", "2024-07-01 0 0 0 0 \n", "2024-08-01 0 0 0 0 \n", "2024-09-01 0 0 0 0 \n", "2024-10-01 0 0 0 0 " ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "AssetLevelAssumption = (\"ByObligor\"\n", " ,(\"ByTag\",[\"C\"],\"TagSuperset\",ppyAssump)\n", " )\n", "\n", "r = localAPI.runPool(myPool\n", " ,poolAssump=AssetLevelAssumption\n", " ,read=True)\n", "\n", "r['PoolConsol']['flow'].head()" ] }, { "cell_type": "markdown", "id": "56b5416e", "metadata": {}, "source": [ "`('not',)` will match with negated" ] }, { "cell_type": "code", "execution_count": 11, "id": "e2caa44d", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/xiaoyu/repo/AbsBox/lib/python3.13/site-packages/urllib3/connectionpool.py:1097: InsecureRequestWarning: Unverified HTTPS request is being made to host 'absbox.org'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#tls-warnings\n", " warnings.warn(\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
BalancePrincipalInterestPrepaymentDefaultRecoveryLossWACBorrowerNumPrepayPenaltyCumPrincipalCumPrepayCumDelinqCumDefaultCumRecoveryCumLoss
Date
2024-06-017000.000.000.000.000000.075NoneNone0.000.000000
2024-07-016915.2267.5443.6417.240000.075NoneNone67.5417.240000
2024-08-016829.9467.7943.1017.490000.075NoneNone135.3334.730000
2024-09-016744.7368.0542.5717.160000.075NoneNone203.3851.890000
2024-10-016660.1268.3142.0416.300000.075NoneNone271.6968.190000
\n", "
" ], "text/plain": [ " Balance Principal Interest Prepayment Default Recovery Loss \\\n", "Date \n", "2024-06-01 7000.00 0.00 0.00 0.00 0 0 0 \n", "2024-07-01 6915.22 67.54 43.64 17.24 0 0 0 \n", "2024-08-01 6829.94 67.79 43.10 17.49 0 0 0 \n", "2024-09-01 6744.73 68.05 42.57 17.16 0 0 0 \n", "2024-10-01 6660.12 68.31 42.04 16.30 0 0 0 \n", "\n", " WAC BorrowerNum PrepayPenalty CumPrincipal CumPrepay \\\n", "Date \n", "2024-06-01 0.075 None None 0.00 0.00 \n", "2024-07-01 0.075 None None 67.54 17.24 \n", "2024-08-01 0.075 None None 135.33 34.73 \n", "2024-09-01 0.075 None None 203.38 51.89 \n", "2024-10-01 0.075 None None 271.69 68.19 \n", "\n", " CumDelinq CumDefault CumRecovery CumLoss \n", "Date \n", "2024-06-01 0 0 0 0 \n", "2024-07-01 0 0 0 0 \n", "2024-08-01 0 0 0 0 \n", "2024-09-01 0 0 0 0 \n", "2024-10-01 0 0 0 0 " ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "AssetLevelAssumption = (\"ByObligor\"\n", " ,(\"ByTag\",[\"C\"],(\"not\",\"TagSuperset\"),ppyAssump)\n", " )\n", "\n", "r = localAPI.runPool(myPool\n", " ,poolAssump=AssetLevelAssumption\n", " ,read=True)\n", "\n", "r['PoolConsol']['flow'].head()" ] }, { "cell_type": "markdown", "id": "f2cc3665", "metadata": {}, "source": [ "#### Asset missed by rule\n", "\n", "The `ByDefault` will catch every asset not being captured by previous rules" ] }, { "cell_type": "code", "execution_count": 12, "id": "b700641c", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/xiaoyu/repo/AbsBox/lib/python3.13/site-packages/urllib3/connectionpool.py:1097: InsecureRequestWarning: Unverified HTTPS request is being made to host 'absbox.org'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#tls-warnings\n", " warnings.warn(\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
BalancePrincipalInterestPrepaymentDefaultRecoveryLossWACBorrowerNumPrepayPenaltyCumPrincipalCumPrepayCumDelinqCumDefaultCumRecoveryCumLoss
Date
2024-06-017000.000.000.000.000000.075NoneNone0.000.000000
2024-07-016872.5367.1243.3760.350000.075NoneNone67.1260.350000
2024-08-016744.3766.9442.5661.220000.075NoneNone134.06121.570000
2024-09-016617.5466.7641.7760.070000.075NoneNone200.82181.640000
2024-10-016493.8966.6040.9957.050000.075NoneNone267.42238.690000
\n", "
" ], "text/plain": [ " Balance Principal Interest Prepayment Default Recovery Loss \\\n", "Date \n", "2024-06-01 7000.00 0.00 0.00 0.00 0 0 0 \n", "2024-07-01 6872.53 67.12 43.37 60.35 0 0 0 \n", "2024-08-01 6744.37 66.94 42.56 61.22 0 0 0 \n", "2024-09-01 6617.54 66.76 41.77 60.07 0 0 0 \n", "2024-10-01 6493.89 66.60 40.99 57.05 0 0 0 \n", "\n", " WAC BorrowerNum PrepayPenalty CumPrincipal CumPrepay \\\n", "Date \n", "2024-06-01 0.075 None None 0.00 0.00 \n", "2024-07-01 0.075 None None 67.12 60.35 \n", "2024-08-01 0.075 None None 134.06 121.57 \n", "2024-09-01 0.075 None None 200.82 181.64 \n", "2024-10-01 0.075 None None 267.42 238.69 \n", "\n", " CumDelinq CumDefault CumRecovery CumLoss \n", "Date \n", "2024-06-01 0 0 0 0 \n", "2024-07-01 0 0 0 0 \n", "2024-08-01 0 0 0 0 \n", "2024-09-01 0 0 0 0 \n", "2024-10-01 0 0 0 0 " ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "AssetLevelAssumption = (\"ByObligor\"\n", " ,(\"ByDefault\",ppyAssump)\n", " )\n", "\n", "r = localAPI.runPool(myPool\n", " ,poolAssump=AssetLevelAssumption\n", " ,read=True)\n", "\n", "r['PoolConsol']['flow'].head()" ] }, { "cell_type": "code", "execution_count": null, "id": "3a42fa41-39c8-4e6c-8766-3f81f3aacd99", "metadata": {}, "outputs": [], "source": [] } ], "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.3" } }, "nbformat": 4, "nbformat_minor": 5 }