{ "cells": [ { "cell_type": "markdown", "id": "c3b0618a", "metadata": {}, "source": [ "### How to price Balloon Mortgage" ] }, { "cell_type": "code", "execution_count": 1, "id": "79e27982", "metadata": {}, "outputs": [], "source": [ "%load_ext autoreload\n", "%autoreload 2" ] }, { "cell_type": "code", "execution_count": 2, "id": "fff67ebb", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
Connecting engine server -> http://localhost:8081\n",
       "
\n" ], "text/plain": [ "\u001b[1;35mConnecting engine server -> \u001b[0m\u001b[1;4;35mhttp://localhost:8081\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
Connected, local lib:0.28.7, server:0.28.17\n",
       "
\n" ], "text/plain": [ "✅\u001b[1;32mConnected, local li\u001b[0m\u001b[1;32mb:0\u001b[0m\u001b[1;32m.\u001b[0m\u001b[1;32m28.7\u001b[0m\u001b[1;32m, server:\u001b[0m\u001b[1;32m0.28\u001b[0m\u001b[1;32m.\u001b[0m\u001b[1;32m17\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from absbox import API\n", "\n", "#localAPI = API(\"http://localhost:8081\",lang='english',check=False)\n", "localAPI = API(\"https://absbox.org/api/dev\",lang='english',check=False)" ] }, { "cell_type": "code", "execution_count": 10, "id": "11397515", "metadata": {}, "outputs": [], "source": [ "mortgage = [\"Mortgage\"\n", " ,{\"originBalance\": 12000.0\n", " ,\"originRate\": [\"fix\",0.045]\n", " ,\"originTerm\": 60\n", " ,\"freq\": \"Monthly\"\n", " ,\"type\": (\"Balloon\",120)\n", " ,\"originDate\": \"2021-02-01\"}\n", " ,{\"currentBalance\": 12000.0\n", " ,\"currentRate\": 0.075\n", " ,\"remainTerm\": 12\n", " ,\"status\": \"Current\"}]" ] }, { "cell_type": "markdown", "id": "95cd1e7d", "metadata": {}, "source": [ "#### Typical Cashflow Profile for Balloon Mortgage\n", "\n", "We model the balloon mortgage via change `type` to `(\"Balloon, xxx)`\n", "\n", "Then the mortgage will amortized as if it has a term `xxx` and have a final principal repayment at last period" ] }, { "cell_type": "code", "execution_count": 9, "id": "465160b5", "metadata": {}, "outputs": [ { "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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
2025-02-0112000.000.000.0000000.075NoneNone0.0000000
2025-03-0111867.52132.4875.0000000.075NoneNone132.4800000
2025-04-0111734.21133.3174.1700000.075NoneNone265.7900000
2025-05-0111600.06134.1573.3300000.075NoneNone399.9400000
2025-06-0111465.08134.9872.5000000.075NoneNone534.9200000
2025-07-0111329.25135.8371.6500000.075NoneNone670.7500000
2025-08-0111192.57136.6870.8000000.075NoneNone807.4300000
2025-09-0111055.04137.5369.9500000.075NoneNone944.9600000
2025-10-0110916.65138.3969.0900000.075NoneNone1083.3500000
2025-11-0110777.39139.2668.2200000.075NoneNone1222.6100000
2025-12-0110637.26140.1367.3500000.075NoneNone1362.7400000
2026-01-0110496.26141.0066.4800000.075NoneNone1503.7400000
2026-02-010.0010496.2665.6000000.075NoneNone12000.0000000
\n", "
" ], "text/plain": [ " Balance Principal Interest Prepayment Default Recovery \\\n", "Date \n", "2025-02-01 12000.00 0.00 0.00 0 0 0 \n", "2025-03-01 11867.52 132.48 75.00 0 0 0 \n", "2025-04-01 11734.21 133.31 74.17 0 0 0 \n", "2025-05-01 11600.06 134.15 73.33 0 0 0 \n", "2025-06-01 11465.08 134.98 72.50 0 0 0 \n", "2025-07-01 11329.25 135.83 71.65 0 0 0 \n", "2025-08-01 11192.57 136.68 70.80 0 0 0 \n", "2025-09-01 11055.04 137.53 69.95 0 0 0 \n", "2025-10-01 10916.65 138.39 69.09 0 0 0 \n", "2025-11-01 10777.39 139.26 68.22 0 0 0 \n", "2025-12-01 10637.26 140.13 67.35 0 0 0 \n", "2026-01-01 10496.26 141.00 66.48 0 0 0 \n", "2026-02-01 0.00 10496.26 65.60 0 0 0 \n", "\n", " Loss WAC BorrowerNum PrepayPenalty CumPrincipal CumPrepay \\\n", "Date \n", "2025-02-01 0 0.075 None None 0.00 0 \n", "2025-03-01 0 0.075 None None 132.48 0 \n", "2025-04-01 0 0.075 None None 265.79 0 \n", "2025-05-01 0 0.075 None None 399.94 0 \n", "2025-06-01 0 0.075 None None 534.92 0 \n", "2025-07-01 0 0.075 None None 670.75 0 \n", "2025-08-01 0 0.075 None None 807.43 0 \n", "2025-09-01 0 0.075 None None 944.96 0 \n", "2025-10-01 0 0.075 None None 1083.35 0 \n", "2025-11-01 0 0.075 None None 1222.61 0 \n", "2025-12-01 0 0.075 None None 1362.74 0 \n", "2026-01-01 0 0.075 None None 1503.74 0 \n", "2026-02-01 0 0.075 None None 12000.00 0 \n", "\n", " CumDelinq CumDefault CumRecovery CumLoss \n", "Date \n", "2025-02-01 0 0 0 0 \n", "2025-03-01 0 0 0 0 \n", "2025-04-01 0 0 0 0 \n", "2025-05-01 0 0 0 0 \n", "2025-06-01 0 0 0 0 \n", "2025-07-01 0 0 0 0 \n", "2025-08-01 0 0 0 0 \n", "2025-09-01 0 0 0 0 \n", "2025-10-01 0 0 0 0 \n", "2025-11-01 0 0 0 0 \n", "2025-12-01 0 0 0 0 \n", "2026-01-01 0 0 0 0 \n", "2026-02-01 0 0 0 0 " ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p = localAPI.runAsset(\"2021-02-01\"\n", " ,[mortgage]\n", " ,poolAssump=(\"Pool\"\n", " ,(\"Mortgage\",None ,None, None, None)\n", " ,None\n", " ,None)\n", " ,read=True)\n", "p[0]" ] }, { "cell_type": "markdown", "id": "c741020a", "metadata": {}, "source": [ "#### When \"CDR\" is failing\n", "\n", "`CDR` is a constant annualized default rates which apply default amounts on each payment period.\n", "\n", "The `CDR` works if the monthly payment are evenly distributed, because the payment obligation remains same during the life time of a mortgage.\n", "\n", "\n", "The issue is, for `Balloon Mortgage` , does the last payment which has a larger portion share same default rate with previous payments ? \n", "\n", "Imagine a borrower has obligation of paying:\n", "\n", "* 10 dollars per month and 10000 dollars at last payment\n", "\n", "The lender shall expect a larger risk at the last payment from the borrower, in other term, a larger default risk. In such case, the `CDR` way may doesn't present a pefect fit." ] }, { "cell_type": "code", "execution_count": 7, "id": "2698df3c", "metadata": {}, "outputs": [ { "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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
2025-02-0112000.000.000.0000.0000.000.075NoneNone0.00000.0000.00
2025-03-0111820.92131.9674.70047.12047.120.075NoneNone131.960047.12047.12
2025-04-0111637.33132.2173.55051.38051.380.075NoneNone264.170098.50098.50
2025-05-0111455.90132.4872.42048.95048.950.075NoneNone396.6500147.450147.45
2025-06-0111273.38132.7371.28049.79049.790.075NoneNone529.3800197.240197.24
2025-07-0111092.97132.9970.16047.42047.420.075NoneNone662.3700244.660244.66
2025-08-0110911.50133.2569.02048.22048.220.075NoneNone795.6200292.880292.88
2025-09-0110730.58133.4967.90047.43047.430.075NoneNone929.1100340.310340.31
2025-10-0110551.68133.7666.78045.14045.140.075NoneNone1062.8700385.450385.45
2025-11-0110371.81134.0165.66045.86045.860.075NoneNone1196.8800431.310431.31
2025-12-0110193.90134.2864.55043.63043.630.075NoneNone1331.1600474.940474.94
2026-01-0110015.06134.5363.43044.31044.310.075NoneNone1465.6900519.250519.25
2026-02-010.009971.5362.32043.53043.530.075NoneNone11437.2200562.780562.78
\n", "
" ], "text/plain": [ " Balance Principal Interest Prepayment Default Recovery \\\n", "Date \n", "2025-02-01 12000.00 0.00 0.00 0 0.00 0 \n", "2025-03-01 11820.92 131.96 74.70 0 47.12 0 \n", "2025-04-01 11637.33 132.21 73.55 0 51.38 0 \n", "2025-05-01 11455.90 132.48 72.42 0 48.95 0 \n", "2025-06-01 11273.38 132.73 71.28 0 49.79 0 \n", "2025-07-01 11092.97 132.99 70.16 0 47.42 0 \n", "2025-08-01 10911.50 133.25 69.02 0 48.22 0 \n", "2025-09-01 10730.58 133.49 67.90 0 47.43 0 \n", "2025-10-01 10551.68 133.76 66.78 0 45.14 0 \n", "2025-11-01 10371.81 134.01 65.66 0 45.86 0 \n", "2025-12-01 10193.90 134.28 64.55 0 43.63 0 \n", "2026-01-01 10015.06 134.53 63.43 0 44.31 0 \n", "2026-02-01 0.00 9971.53 62.32 0 43.53 0 \n", "\n", " Loss WAC BorrowerNum PrepayPenalty CumPrincipal CumPrepay \\\n", "Date \n", "2025-02-01 0.00 0.075 None None 0.00 0 \n", "2025-03-01 47.12 0.075 None None 131.96 0 \n", "2025-04-01 51.38 0.075 None None 264.17 0 \n", "2025-05-01 48.95 0.075 None None 396.65 0 \n", "2025-06-01 49.79 0.075 None None 529.38 0 \n", "2025-07-01 47.42 0.075 None None 662.37 0 \n", "2025-08-01 48.22 0.075 None None 795.62 0 \n", "2025-09-01 47.43 0.075 None None 929.11 0 \n", "2025-10-01 45.14 0.075 None None 1062.87 0 \n", "2025-11-01 45.86 0.075 None None 1196.88 0 \n", "2025-12-01 43.63 0.075 None None 1331.16 0 \n", "2026-01-01 44.31 0.075 None None 1465.69 0 \n", "2026-02-01 43.53 0.075 None None 11437.22 0 \n", "\n", " CumDelinq CumDefault CumRecovery CumLoss \n", "Date \n", "2025-02-01 0 0.00 0 0.00 \n", "2025-03-01 0 47.12 0 47.12 \n", "2025-04-01 0 98.50 0 98.50 \n", "2025-05-01 0 147.45 0 147.45 \n", "2025-06-01 0 197.24 0 197.24 \n", "2025-07-01 0 244.66 0 244.66 \n", "2025-08-01 0 292.88 0 292.88 \n", "2025-09-01 0 340.31 0 340.31 \n", "2025-10-01 0 385.45 0 385.45 \n", "2025-11-01 0 431.31 0 431.31 \n", "2025-12-01 0 474.94 0 474.94 \n", "2026-01-01 0 519.25 0 519.25 \n", "2026-02-01 0 562.78 0 562.78 " ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p = localAPI.runAsset(\"2021-02-01\"\n", " ,[mortgage]\n", " ,poolAssump=(\"Pool\"\n", " ,(\"Mortgage\",{\"CDR\":0.05} ,None, None, None)\n", " ,None\n", " ,None)\n", " ,read=True)\n", "p[0]" ] }, { "cell_type": "markdown", "id": "e2a8fc6d", "metadata": {}, "source": [ "#### Solution from Absbox/Hastructure\n", "\n", "\n", "A new assumption with 2 default rates is introduced by (Hastructure: `0.28.18`,/Absbox: `0.28.14`), \n", "\n", "`{\"DefaultAtEndByRate\":(A,B)}`\n", "\n", "* `A` : a CDR will be applied for payment periods except last period\n", " * default rate = days between ( current period , last period), then annualized with CDR\n", "* `B` : a CDR will be applied for last payment period\n", " * default rate = days between ( current period , BEGIN period), then annualized with CDR\n", "\n", "Now we can expect a larger portion of default in last period which factoring the life time span. ( The longer life of mortgage, the larger default rate)" ] }, { "cell_type": "code", "execution_count": 11, "id": "5ca97514", "metadata": {}, "outputs": [ { "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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
2025-02-0112000.000.000.0000.0000.000.075NoneNone0.00000.0000.00
2025-03-0111820.92131.9674.70047.12047.120.075NoneNone131.960047.12047.12
2025-04-0111637.33132.2173.55051.38051.380.075NoneNone264.170098.50098.50
2025-05-0111455.90132.4872.42048.95048.950.075NoneNone396.6500147.450147.45
2025-06-0111273.38132.7371.28049.79049.790.075NoneNone529.3800197.240197.24
2025-07-0111092.97132.9970.16047.42047.420.075NoneNone662.3700244.660244.66
2025-08-0110911.50133.2569.02048.22048.220.075NoneNone795.6200292.880292.88
2025-09-0110730.58133.4967.90047.43047.430.075NoneNone929.1100340.310340.31
2025-10-0110551.68133.7666.78045.14045.140.075NoneNone1062.8700385.450385.45
2025-11-0110371.81134.0165.66045.86045.860.075NoneNone1196.8800431.310431.31
2025-12-0110193.90134.2864.55043.63043.630.075NoneNone1331.1600474.940474.94
2026-01-0110015.06134.5363.43044.31044.310.075NoneNone1465.6900519.250519.25
2026-02-010.009514.3159.460500.750500.750.075NoneNone10980.00001020.0001020.00
\n", "
" ], "text/plain": [ " Balance Principal Interest Prepayment Default Recovery \\\n", "Date \n", "2025-02-01 12000.00 0.00 0.00 0 0.00 0 \n", "2025-03-01 11820.92 131.96 74.70 0 47.12 0 \n", "2025-04-01 11637.33 132.21 73.55 0 51.38 0 \n", "2025-05-01 11455.90 132.48 72.42 0 48.95 0 \n", "2025-06-01 11273.38 132.73 71.28 0 49.79 0 \n", "2025-07-01 11092.97 132.99 70.16 0 47.42 0 \n", "2025-08-01 10911.50 133.25 69.02 0 48.22 0 \n", "2025-09-01 10730.58 133.49 67.90 0 47.43 0 \n", "2025-10-01 10551.68 133.76 66.78 0 45.14 0 \n", "2025-11-01 10371.81 134.01 65.66 0 45.86 0 \n", "2025-12-01 10193.90 134.28 64.55 0 43.63 0 \n", "2026-01-01 10015.06 134.53 63.43 0 44.31 0 \n", "2026-02-01 0.00 9514.31 59.46 0 500.75 0 \n", "\n", " Loss WAC BorrowerNum PrepayPenalty CumPrincipal CumPrepay \\\n", "Date \n", "2025-02-01 0.00 0.075 None None 0.00 0 \n", "2025-03-01 47.12 0.075 None None 131.96 0 \n", "2025-04-01 51.38 0.075 None None 264.17 0 \n", "2025-05-01 48.95 0.075 None None 396.65 0 \n", "2025-06-01 49.79 0.075 None None 529.38 0 \n", "2025-07-01 47.42 0.075 None None 662.37 0 \n", "2025-08-01 48.22 0.075 None None 795.62 0 \n", "2025-09-01 47.43 0.075 None None 929.11 0 \n", "2025-10-01 45.14 0.075 None None 1062.87 0 \n", "2025-11-01 45.86 0.075 None None 1196.88 0 \n", "2025-12-01 43.63 0.075 None None 1331.16 0 \n", "2026-01-01 44.31 0.075 None None 1465.69 0 \n", "2026-02-01 500.75 0.075 None None 10980.00 0 \n", "\n", " CumDelinq CumDefault CumRecovery CumLoss \n", "Date \n", "2025-02-01 0 0.00 0 0.00 \n", "2025-03-01 0 47.12 0 47.12 \n", "2025-04-01 0 98.50 0 98.50 \n", "2025-05-01 0 147.45 0 147.45 \n", "2025-06-01 0 197.24 0 197.24 \n", "2025-07-01 0 244.66 0 244.66 \n", "2025-08-01 0 292.88 0 292.88 \n", "2025-09-01 0 340.31 0 340.31 \n", "2025-10-01 0 385.45 0 385.45 \n", "2025-11-01 0 431.31 0 431.31 \n", "2025-12-01 0 474.94 0 474.94 \n", "2026-01-01 0 519.25 0 519.25 \n", "2026-02-01 0 1020.00 0 1020.00 " ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mortgagePoolAssump = (\"Pool\"\n", " ,(\"Mortgage\",{\"DefaultAtEndByRate\":(0.05,0.05)} ,None, None, None)\n", " ,None\n", " ,None)\n", "\n", "p = localAPI.runAsset(\"2021-02-01\"\n", " ,[mortgage]\n", " ,poolAssump=mortgagePoolAssump\n", " ,read=True)\n", "p[0]" ] }, { "cell_type": "code", "execution_count": null, "id": "10b3d811", "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.11.9" } }, "nbformat": 4, "nbformat_minor": 5 }