Multifamily Portfolio Risk & Capital Allocation Engine
A simulated real-estate portfolio system that turns property financials, debt, valuations, and capital project data into risk scores, stress-test results, concentration analysis, and capital-prioritization recommendations.
Executive readout
The report answers which properties are adding risk, what happens under downside scenarios, and where capital should be prioritized first.
Largest geographic exposure by current property value.
Share of debt balance modeled as CMHC-insured financing.
Debt maturing through 2028, where rate changes matter most.
Selected from a $2.0M capital budget based on return and risk reduction.
System architecture
The project is structured like a small internal portfolio infrastructure layer rather than a one-off spreadsheet.
Property data
Properties, monthly financials, debt, valuations, and capital projects are stored as separate tables.
Analytical dataset
Joins, CTEs, aggregations, and window functions assemble current and trailing measures.
Risk engine
pandas calculates NOI, DSCR, LTV, YoY trends, cash flow, exposure, and risk scores.
Report
Stress scenarios, risk rankings, concentration views, and capital recommendations are published.
Property risk matrix
Lower DSCR and higher LTV move a property toward the vulnerable zone. Bubble size represents property value.
Highest risk properties
| Property | Market | Risk | DSCR | LTV | NOI YoY |
|---|---|---|---|---|---|
| Barton Square | London | 64.1 | 0.90x | 71.4% | -7.0% |
| Huron House | Kitchener | 61.8 | 0.95x | 96.4% | -8.1% |
| Elm Street Flats | Ottawa | 57.6 | 1.10x | 63.0% | -6.5% |
| Albion Gardens | London | 57.3 | 0.78x | 72.2% | -5.5% |
| Cedar Place | Toronto | 56.7 | 1.01x | 88.3% | -3.1% |
| Queenston Court | Toronto | 55.4 | 1.21x | 79.4% | -3.8% |
Scenario stress testing
Each scenario recalculates revenue, NOI, value, debt service, DSCR, and LTV so vulnerable assets surface quickly.
Scenario comparison
| Scenario | Value | Value change | Annual NOI | DSCR < 1.10 |
|---|---|---|---|---|
| Base | $991.3M | -0.0% | $47.7M | 10 |
| Occupancy Downside | $893.3M | -9.9% | $43.0M | 15 |
| Expense Pressure | $907.7M | -8.4% | $43.7M | 13 |
| Refinancing Shock | $991.3M | -0.0% | $47.7M | 12 |
| Combined Downside | $670.0M | -32.4% | $38.9M | 18 |
Downside value impact
Portfolio concentration
Risk is not only property-level. The engine also checks exposure by market, maturity year, and debt structure.
Geographic exposure
Debt maturity schedule
Capital allocation recommendations
The model ranks projects by expected NOI lift, value lift, risk reduction, and fit within a limited capital budget.
| Rank | Property | Project | Capital | NOI lift | Value lift | Return on capital |
|---|---|---|---|---|---|---|
| 1 | Barton Square | Debt paydown | $748k | $91k | $1.9M | 12.1% |
| 2 | Barton Square | Energy retrofit | $839k | $69k | $1.4M | 8.3% |
| 3 | Park Lane | Debt paydown | $214k | $21k | $468k | 9.8% |
| 4 | Huron House | Energy retrofit | $183k | $19k | $424k | 10.5% |
Validation checks
The engine includes tests around formulas and scenario behavior so the analysis is reviewable.
Core calculations are checked against direct expected values.
Occupancy drops cannot increase revenue, and cap-rate expansion reduces value when NOI is held constant.
Market exposure sums to 100%, and selected capital projects remain within budget.