Skip to content

Market research model: Absorption

Paul Sohn edited this page Mar 30, 2017 · 1 revision

Market research model: Absorption

User stories

  • As a modeler, I want information about housing supply absorption in a given year to factor into the calculation of feasibility for potential developments in the same simulation year.
  • As a modeler, I want to be able to control the extent to which housing supply affects the calculation of feasibility for potential developments in the same simulation year.

Basic mechanics

  • Calculate absorption
  • Add absorption as an input to the feasibility step
  • Add absorption to calculations in the feasibility step
  • Revise developer process to select developments using a different metric

Detailed mechanics

Calculate absorption

What is absorption? (from Real Estate Market Analysis, page 20):

The pace at which the proposed project will be able to lease or sell space. Depending on the property type, the absorption rate could be expressed as:

  • the number of apartments that will be leased or homes that will be sold each month;
  • the length of time it will take to sell building sites in an industrial park; or
  • the number of months until an office building or shopping center is fully leased.

A useful set of absorption related metrics for urbansim would be:

  • Square footage absorbed for every simulation year, for every use. Save the absolute numbers (e.g. 50000 sq. ft. absorbed out of 100000 new and previously vacant) and the percentage (50% absorption).
  • (Derived from above) Average % absorption for the last X (5?) years.
  • (Derived from above) Rate of change in % or absolute absorption for the last X years.

As noted above, it will be useful to disaggregate absorption into uses: residential, office, industrial, etc. Residential and non-residential absorption will have to be calculated separately at the very least. The time period over which absorption is calculated is also important: this should be user-specified, but a good range would be 3-5 years.

Square footage is an easier unit than "units" or "job spaces" for now, since that's what the developer and pro forma models use.

Implementation, for every simulation year:

  • After location choice step:
    • Calculate vacant square footage for this year (for each subgroup)
    • If last year's vacancy + new building information exists, calculate absorption
  • After developer step: calculate new square footage for this year (for each subgroup)

Save absorption for every simulation year. Feasibility step can decide which records to use.

Add absorption to the feasibility step

Absorption for all previous simulation years is now an input. The current calculation of projected building revenue is as follows:

building_revenue = (building_bulks *
                    (1 - parking_sqft_ratio) *
                    self.building_efficiency *
                    df.weighted_rent.values /
                    self.cap_rate)

The simplest intervention could be to subtract some amount from this:

building_revenue = (building_bulks *
                    (1 - parking_sqft_ratio) *
                    self.building_efficiency *
                    df.weighted_rent.values /
                    self.cap_rate)

# calculate absorption discount

building_revenue -= absorption_discount

How absorption_discount is generated from the absorption table can be an injected function, similar to the "profit to percentage" function in the developer model. One simple calculation could be:

  • Treat the % not absorbed as the number of years it will take to fill the square footage. (absorption_years)
  • Discount that number of years of revenue (requires using the cap rate):
absorption_discount = self.cap_rate * building_revenue * absorption_years