{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "### Installment" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "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.26.4, server:0.27.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;32m26.4\u001b[0m\u001b[1;32m, server:\u001b[0m\u001b[1;32m0.27\u001b[0m\u001b[1;32m.\u001b[0m\u001b[1;32m17\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from absbox import API,EnginePath\n", "\n", "localAPI = API(EnginePath.DEV,lang='english',check=False)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "installment = [\"Installment\"\n", " ,{\"originBalance\": 1000.0\n", " ,\"feeRate\": [\"fix\",0.01]\n", " ,\"originTerm\": 12\n", " ,\"freq\": \"Monthly\"\n", " ,\"type\": \"f_p\"\n", " ,\"originDate\": \"2022-01-01\"}\n", " ,{\"status\": \"Current\"\n", " ,\"currentBalance\":1000\n", " ,\"remainTerm\":8}]" ] }, { "cell_type": "code", "execution_count": 3, "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", "
BalancePrincipalInterestPrepaymentDefaultRecoveryLossWACCumPrincipalCumPrepayCumDelinqCumDefaultCumRecoveryCumLoss
Date
2022-05-011000.000.000.0000000.010.0000000
2022-06-01875.01124.9914.9900000.01124.9900000
2022-07-01750.02124.9914.9900000.01249.9800000
2022-08-01625.03124.9914.9900000.01374.9700000
2022-09-01500.04124.9914.9900000.01499.9600000
\n", "
" ], "text/plain": [ " Balance Principal Interest Prepayment Default Recovery Loss \\\n", "Date \n", "2022-05-01 1000.00 0.00 0.00 0 0 0 0 \n", "2022-06-01 875.01 124.99 14.99 0 0 0 0 \n", "2022-07-01 750.02 124.99 14.99 0 0 0 0 \n", "2022-08-01 625.03 124.99 14.99 0 0 0 0 \n", "2022-09-01 500.04 124.99 14.99 0 0 0 0 \n", "\n", " WAC CumPrincipal CumPrepay CumDelinq CumDefault CumRecovery \\\n", "Date \n", "2022-05-01 0.01 0.00 0 0 0 0 \n", "2022-06-01 0.01 124.99 0 0 0 0 \n", "2022-07-01 0.01 249.98 0 0 0 0 \n", "2022-08-01 0.01 374.97 0 0 0 0 \n", "2022-09-01 0.01 499.96 0 0 0 0 \n", "\n", " CumLoss \n", "Date \n", "2022-05-01 0 \n", "2022-06-01 0 \n", "2022-07-01 0 \n", "2022-08-01 0 \n", "2022-09-01 0 " ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "r = localAPI.runAsset(\"2022-01-02\"\n", " ,[installment]\n", " ,poolAssump=(\"Pool\"\n", " ,(\"Installment\", None, None, None, None)\n", " ,None\n", " ,None)\n", " ,read=True)\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Installment : Default" ] }, { "cell_type": "code", "execution_count": 4, "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", "
BalancePrincipalInterestPrepaymentDefaultRecoveryLossWACCumPrincipalCumPrepayCumDelinqCumDefaultCumRecoveryCumLoss
Date
2022-05-011000.000.000.0000.0000.000.010.00000.0000.00
2022-06-01874.27124.8814.9800.8500.850.01124.88000.8500.85
2022-07-01748.77124.7814.9700.7200.720.01249.66001.5701.57
2022-08-01623.47124.6714.9600.6300.630.01374.33002.2002.20
2022-09-01498.38124.5614.9400.5300.530.01498.89002.7302.73
\n", "
" ], "text/plain": [ " Balance Principal Interest Prepayment Default Recovery Loss \\\n", "Date \n", "2022-05-01 1000.00 0.00 0.00 0 0.00 0 0.00 \n", "2022-06-01 874.27 124.88 14.98 0 0.85 0 0.85 \n", "2022-07-01 748.77 124.78 14.97 0 0.72 0 0.72 \n", "2022-08-01 623.47 124.67 14.96 0 0.63 0 0.63 \n", "2022-09-01 498.38 124.56 14.94 0 0.53 0 0.53 \n", "\n", " WAC CumPrincipal CumPrepay CumDelinq CumDefault CumRecovery \\\n", "Date \n", "2022-05-01 0.01 0.00 0 0 0.00 0 \n", "2022-06-01 0.01 124.88 0 0 0.85 0 \n", "2022-07-01 0.01 249.66 0 0 1.57 0 \n", "2022-08-01 0.01 374.33 0 0 2.20 0 \n", "2022-09-01 0.01 498.89 0 0 2.73 0 \n", "\n", " CumLoss \n", "Date \n", "2022-05-01 0.00 \n", "2022-06-01 0.85 \n", "2022-07-01 1.57 \n", "2022-08-01 2.20 \n", "2022-09-01 2.73 " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "r = localAPI.runAsset(\"2022-01-02\"\n", " ,[installment]\n", " ,poolAssump=(\"Pool\"\n", " ,(\"Installment\", {\"CDR\":0.01}, None, None, None)\n", " ,None\n", " ,None)\n", " ,read=True)\n", "\n", "r[0].head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Installment: Prepayment" ] }, { "cell_type": "code", "execution_count": 5, "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", "
BalancePrincipalInterestPrepaymentDefaultRecoveryLossWACCumPrincipalCumPrepayCumDelinqCumDefaultCumRecoveryCumLoss
Date
2022-05-011000.000.000.000.000.0000.000.010.000.0000.0000.00
2022-06-01873.53124.7714.970.850.8500.850.01124.770.8500.8500.85
2022-07-01747.52124.5714.940.720.7200.720.01249.341.5701.5701.57
2022-08-01621.90124.3614.920.630.6300.630.01373.702.2002.2002.20
2022-09-01496.70124.1414.890.530.5300.530.01497.842.7302.7302.73
\n", "
" ], "text/plain": [ " Balance Principal Interest Prepayment Default Recovery Loss \\\n", "Date \n", "2022-05-01 1000.00 0.00 0.00 0.00 0.00 0 0.00 \n", "2022-06-01 873.53 124.77 14.97 0.85 0.85 0 0.85 \n", "2022-07-01 747.52 124.57 14.94 0.72 0.72 0 0.72 \n", "2022-08-01 621.90 124.36 14.92 0.63 0.63 0 0.63 \n", "2022-09-01 496.70 124.14 14.89 0.53 0.53 0 0.53 \n", "\n", " WAC CumPrincipal CumPrepay CumDelinq CumDefault CumRecovery \\\n", "Date \n", "2022-05-01 0.01 0.00 0.00 0 0.00 0 \n", "2022-06-01 0.01 124.77 0.85 0 0.85 0 \n", "2022-07-01 0.01 249.34 1.57 0 1.57 0 \n", "2022-08-01 0.01 373.70 2.20 0 2.20 0 \n", "2022-09-01 0.01 497.84 2.73 0 2.73 0 \n", "\n", " CumLoss \n", "Date \n", "2022-05-01 0.00 \n", "2022-06-01 0.85 \n", "2022-07-01 1.57 \n", "2022-08-01 2.20 \n", "2022-09-01 2.73 " ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "r = localAPI.runAsset(\"2022-01-02\"\n", " ,[installment]\n", " ,poolAssump=(\"Pool\"\n", " ,(\"Installment\", {\"CDR\":0.01}, {\"CPR\":0.01}, None, None)\n", " ,None\n", " ,None)\n", " ,read=True)\n", "\n", "r[0].head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Installment: Fee-Free / Interest Free for first N period\n", "\n", "Let's use new `Weekly` frequency " ] }, { "cell_type": "code", "execution_count": 35, "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", "
BalancePrincipalInterestPrepaymentDefaultRecoveryLossWACCumPrincipalCumPrepayCumDelinqCumDefaultCumRecoveryCumLoss
Date
2022-01-081100100000000.0110000000
2022-01-151000100000000.0120000000
2022-01-229001001200000.0130000000
2022-01-298001001200000.0140000000
2022-02-057001001200000.0150000000
\n", "
" ], "text/plain": [ " Balance Principal Interest Prepayment Default Recovery Loss \\\n", "Date \n", "2022-01-08 1100 100 0 0 0 0 0 \n", "2022-01-15 1000 100 0 0 0 0 0 \n", "2022-01-22 900 100 12 0 0 0 0 \n", "2022-01-29 800 100 12 0 0 0 0 \n", "2022-02-05 700 100 12 0 0 0 0 \n", "\n", " WAC CumPrincipal CumPrepay CumDelinq CumDefault CumRecovery \\\n", "Date \n", "2022-01-08 0.01 100 0 0 0 0 \n", "2022-01-15 0.01 200 0 0 0 0 \n", "2022-01-22 0.01 300 0 0 0 0 \n", "2022-01-29 0.01 400 0 0 0 0 \n", "2022-02-05 0.01 500 0 0 0 0 \n", "\n", " CumLoss \n", "Date \n", "2022-01-08 0 \n", "2022-01-15 0 \n", "2022-01-22 0 \n", "2022-01-29 0 \n", "2022-02-05 0 " ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "installment2 = [\"Installment\"\n", " ,{\"originBalance\": 1200.0\n", " ,\"feeRate\": [\"fix\",0.01]\n", " ,\"originTerm\": 12\n", " ,\"freq\": \"Weekly\"\n", " ,\"type\": (\"PO_FirstN\", 2)\n", " ,\"originDate\": \"2022-01-01\"}\n", " ,{\"status\": \"Current\"\n", " ,\"currentBalance\":1200\n", " ,\"remainTerm\":12}]\n", "\n", "\n", "r = localAPI.runAsset(\"2021-12-01\"\n", " ,[installment2]\n", " ,read=True)\n", "\n", "r[0].head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Same with default with `None`" ] }, { "cell_type": "code", "execution_count": 36, "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", "
BalancePrincipalInterestPrepaymentDefaultRecoveryLossWACCumPrincipalCumPrepayCumDelinqCumDefaultCumRecoveryCumLoss
Date
2022-01-0112000000000.01000000
2022-01-081100100000000.0110000000
2022-01-151000100000000.0120000000
2022-01-229001001200000.0130000000
2022-01-298001001200000.0140000000
\n", "
" ], "text/plain": [ " Balance Principal Interest Prepayment Default Recovery Loss \\\n", "Date \n", "2022-01-01 1200 0 0 0 0 0 0 \n", "2022-01-08 1100 100 0 0 0 0 0 \n", "2022-01-15 1000 100 0 0 0 0 0 \n", "2022-01-22 900 100 12 0 0 0 0 \n", "2022-01-29 800 100 12 0 0 0 0 \n", "\n", " WAC CumPrincipal CumPrepay CumDelinq CumDefault CumRecovery \\\n", "Date \n", "2022-01-01 0.01 0 0 0 0 0 \n", "2022-01-08 0.01 100 0 0 0 0 \n", "2022-01-15 0.01 200 0 0 0 0 \n", "2022-01-22 0.01 300 0 0 0 0 \n", "2022-01-29 0.01 400 0 0 0 0 \n", "\n", " CumLoss \n", "Date \n", "2022-01-01 0 \n", "2022-01-08 0 \n", "2022-01-15 0 \n", "2022-01-22 0 \n", "2022-01-29 0 " ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "r = localAPI.runAsset(\"2021-12-01\"\n", " ,[installment2]\n", " ,poolAssump=(\"Pool\"\n", " ,(\"Installment\", None, None, None, None)\n", " ,None\n", " ,None)\n", " ,read=True)\n", "\n", "r[0].head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Default Stress" ] }, { "cell_type": "code", "execution_count": 37, "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", "
BalancePrincipalInterestPrepaymentDefaultRecoveryLossWACCumPrincipalCumPrepayCumDelinqCumDefaultCumRecoveryCumLoss
Date
2022-01-011200.000.000.0000.0000.000.010.00000.0000.00
2022-01-081099.7999.980.0000.2300.230.0199.98000.2300.23
2022-01-15999.6299.960.0000.2100.210.01199.94000.4400.44
2022-01-22899.4999.9411.9900.1900.190.01299.88000.6300.63
2022-01-29799.4099.9211.9900.1700.170.01399.80000.8000.80
\n", "
" ], "text/plain": [ " Balance Principal Interest Prepayment Default Recovery Loss \\\n", "Date \n", "2022-01-01 1200.00 0.00 0.00 0 0.00 0 0.00 \n", "2022-01-08 1099.79 99.98 0.00 0 0.23 0 0.23 \n", "2022-01-15 999.62 99.96 0.00 0 0.21 0 0.21 \n", "2022-01-22 899.49 99.94 11.99 0 0.19 0 0.19 \n", "2022-01-29 799.40 99.92 11.99 0 0.17 0 0.17 \n", "\n", " WAC CumPrincipal CumPrepay CumDelinq CumDefault CumRecovery \\\n", "Date \n", "2022-01-01 0.01 0.00 0 0 0.00 0 \n", "2022-01-08 0.01 99.98 0 0 0.23 0 \n", "2022-01-15 0.01 199.94 0 0 0.44 0 \n", "2022-01-22 0.01 299.88 0 0 0.63 0 \n", "2022-01-29 0.01 399.80 0 0 0.80 0 \n", "\n", " CumLoss \n", "Date \n", "2022-01-01 0.00 \n", "2022-01-08 0.23 \n", "2022-01-15 0.44 \n", "2022-01-22 0.63 \n", "2022-01-29 0.80 " ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "r = localAPI.runAsset(\"2021-12-01\"\n", " ,[installment2]\n", " ,poolAssump=(\"Pool\"\n", " ,(\"Installment\", {\"CDR\":0.01}, None, None, None)\n", " ,None\n", " ,None)\n", " ,read=True)\n", "\n", "r[0].head()" ] } ], "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.12.3" } }, "nbformat": 4, "nbformat_minor": 2 }