How you might save on rental lease using linear regression/forecasting

Shu Ming Peh
uptick-blog

--

TLDR: You might potentially save up to ~$12,570 a year depending on the area you are interested.

Recently, I have been thinking on moving out and rent my own place, and wondered to myself: How am I able to save and get the best deal for the same place? These were my two main considerations:
1. Is there a seasonality effect such that there is a lowest month for rental lease?
2. How long should I sign my lease, 12 or 24 months?

Constraints of analysis
Perhaps before anything, a little context on Singapore’s properties. Singapore map is separated into districts as seen below:

Image is taken from: https://propertyinvestmentsingapore.sg/blog/singapore-district-map/

There are a few types of housing in Singapore: HDB (public housing), condominiums/executive-condominiums and landed (terrance, semi-detached and detached house). For simplicity, this post will only be looking at 1 bedroom (BR) condominiums/executive-condominiums for each district (2BR and 3BR can still be found in source code).

Summary
Seasonality
and lease duration problem is commonly solved using linear regression and time-series forecasting model respectively. As such, I have fitted the data in to a linear regression model using time and month to obtain its seasonality. Time refers to the count of number of months from the property first ever historical lease month to the lease starting month. Whereas month refers to the month number the lease started (example: July = 7).

There are a few districts: 7,1,2,21,9, that are most sensitive to seasonality; on average (across all districts) you save $2295 a year due to seasonality, and $830 a year due to lease extensions.

Dataset used
The dataset is programmatically pulled from URA, using a web scraping script to collect all the condos rental in Singapore. Below is an example of how the raw dataset looks like:

Example of the raw dataset. Gives information of which month the property start leasing (lease_month)

Data pre-processing
There are a few things that have to be processed before feeding the dataset into the model.

  • Introduce new variables that represent timeand month
  • time: count of months of the first lease_month to the startinglease_month. The purpose of this variable is to proxy time trend for monthly lease.
  • time_time: time * time, this is to create an x² effect for time trend, since I do not expect the monthly lease trend to be linear.
  • month(m1,m2,...,m12): binary variables (0 or 1) that indicate which month the data point belongs. The purpose of this variable is to check for seasonality from the model
  • monthly_rent averaged for each bedroom, district and lease month
Example of final dataset that is feed into the linear regression and forecasting model

Modeling approach
There are three parts to this problem.

  1. Using linear regression to understand the seasonality of rental prices and find the months with the lowest and highest rent for each district.
  2. Forecast (using time series forecasting models) the next 24 months of monthly rental lease, and see if the following year rental lease is higher (or lower) than current in each district.
  3. Combine the total savings from renting in the lowest month in 1 , and signing 24 months of lease (if applicable) in 2 .

Model results
The top 5 total savings districts are selected to display its results. The districts in descending order, are: 7,1,2,21,9

Summary of model results

Summary of the model results. Total savings per year is boxed up in red

Explanation of results for each district
Fig (a)

  • orange line: actual monthly_rent
  • blue line: fitted monthly_rent from linear regression model
  • green line: trend of the actual monthly_rent thus far, acts as a guide for forecast of monthly_rent
  • red line: forecast of monthly_rent from time-series forecasting model for the next 24 months

Fig (b):

  • This presents the seasonality of monthly_rent across the year, and dictates which is the lowest and highest month.

District 7
If I start renting in November, I will save a staggering $12570 a year compared to starting a lease in February. The (green) trend line suggests monthly lease will increase the following years, and should contract for 24 months lease instead. Seasonality will save me $9197 a year, and lease duration $3373 a year.

District 7

District 1
The trend line suggests a slight downtrend in the next couple of years. Here I am able to save $4911 a year, and should stick to 12 months lease too.

District 1

District 2
This is a clear downward trend of the monthly lease, and I should be looking at a 12 months lease contract. But I can still look to save a decent amount of $4324 a year, based on seasonality

District 2

District 21
This is quite a clear beginning of an uptrend from 2019 onwards, and I will want to sign a 24 months lease. I will save a total of $3922; $2487 due to seasonality and $1435 from lease duration.

District 21

District 9
Given how it is downward trend line for the following years, I will want to sign a 12 months lease. If so, I might save $3330 a year from seasonality.

District 9

Conclusion
Knowing the seasonality of each district can potentially save you thousands a year. Now that I have the information of each district, I can narrow down my property hunt lease search. It also helps me to decide if I should negotiate my lease contract from 12 to 24 months. One of our future posts, will be on predicting the trend of property sales in Singapore (for each district), so stay tuned for that when it’s up.

Some assumptions of this analysis were that:

  1. The linear regression or forecasting model assumes that the property market resumes the same throughout, and no cooling measures will be introduced. We did not account for this.
  2. This analysis looks at the district instead of the area (example: Clementi or Upper Bukit Timah), the monthly rental is averaged across the areas in their district. There might be some differences if zoomed into each area.

You may find my code and more detailed explanations of my model, here: GitHub

Give me a few claps and share this with friends who might find it useful! See you guys this weekend again!

--

--