How you might save on rental lease using linear regression/forecasting
By: Shu Ming Peh
Tags: Linear Regression, Data Science, Real Estate, Learning, Forecasting

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 time and month

and time : count of months of the first lease_month to the starting lease_month . The purpose of this variable is to proxy time trend for monthly lease.

: count of months of the first to the starting . 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.

: , 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

: 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.

Using linear regression to understand the seasonality of rental prices and find the months with the lowest and highest rent for each district. 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. 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