urbansim / urbansim_parcels

New version of urbansim_defaults for compatibility with new developer model
0 stars 1 forks source link

Simple vacancy-based feedback loop for real estate development #19

Closed pksohn closed 7 years ago

pksohn commented 7 years ago

This PR implements a simple market research framework (#17) based on residential or non-residential vacancy by zone. Lots of changes here.

Basic logic in this vacancy-based model

  1. Before pro forma step: Add a print function to monitor the regional occupancy for residential and non-residential properties, optionally looking only at a subset of years.
  2. During pro forma step: In parcels table that is passed to the pro forma lookup() method, add one column for each use, in which values are the expected occupancy for each parcel. The current placeholder callback function calculates this as the mean occupancy for either residential units or non-residential square footage in that zone.
  3. During pro forma step: The lookup() method calculates profitability. Along with the latest changes to the developer model, we inject a couple of callbacks here: one to add a column to the DataFrame (weighted occupancy), and one to modify the revenue calculation. Specifically, we multiple weighted occupancy for each parcel by the revenue (so if occupancy is expected to be 80%, you only make 80% of revenue).
  4. During developer step: The pick() method selects buildings for development. Along with latest changes to the developer model, we now inject a custom selection function to pick buildings. The one included here selects all buildings that have above a certain threshold of profitability (per sq ft).

Implementation details

1. Informational occupancy table

This is not important, but if you're interested see model step here, and the underlying functions here.

2. In lookup(), calculate occupancy

See model code interacting with pro forma model here, and default callback function here.

3. Modifications to profit calculation

Callback functions are defined and passed here.

4. Modifications to building selection

Callback functions defined here.