Rental Yields

Rental yields in London used to be 5.5% back in 2005-7 but have now fallen down to just 4%. Studio properties and 1 bed have higher rental yields than 2 beds.

Intro

This is an ongoing series on the London property market. Today, I will be looking at rental yields in Central London. As before, I define Central London as postcodes EC1, EC2, EC3, EC4 and WC1, WC2.

Rental yields are important for investors since it measures the return on owning a property (in addition to capital gains). We will be looking at gross annual yield which is defined simply as:

$$ RentalYield = \frac{Annual Rent}{Value Property}$$

The full code for this blog post can be found on my GitHub.

The data for prices and rents are derived using the same procedure as my previous post on property listings.

Data

We prepare sale and rent datasets separately

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# prices_data_sum is our table of sales and rents

# sale_prices is a table of all sale prices
sale_prices <- prices_data_sum %>% 
  filter(!str_detect(status_clean,"Rent")) %>% # get all non rental listings
  select(sale_price=price_num, saledate=saledate_date, property_id, beds, postalCode, area) %>% 
  arrange(saledate) %>% 
  distinct %>% 
  mutate(postalCode = str_extract(postalCode,"[A-Z]+\\d+"))

# rent_prices is a table of all rental prices
rent_prices <- prices_data_sum %>% filter(str_detect(status_clean,"Rent")) %>% 
  select(rent_price=price_num, saledate=saledate_date, property_id)

# remove sales where we dont know the rent
sale_prices <- semi_join(sale_prices, rent_prices, by="property_id")

This leads 2016 properties (out of a total of 15k in the dataset) where rent and a sale prices is available. You can use estimate sales and rents based on an econometric model but I wanted to use the actual data where available.

To calculate rental yied at time of sale, I want to get the closest rental listing to the sale. Eg if the data looked like below

status date price
rent 2014 1000
sale 2019 100000
rent 2020 1110

Then, I want to match the rent of £1110 with the sale price of £100,000.

The below loop over all sale listings does just that.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# get the closest "rent" date for each listing
sale_prices$saledate_rent <- Sys.Date()
for(i in 1:nrow(sale_prices)) {
  rent_prices_prop <- rent_prices %>% filter(property_id==sale_prices$property_id[i])
  closest_rent_date <- which.min(rent_prices_prop$saledate-sale_prices$saledate[i])
  sale_prices$saledate_rent[i] <- as.Date(rent_prices_prop$saledate[closest_rent_date], origin="1990-01-01")
}

# join rent prices on `saledate_rent` enforcing a MAX of +/- 2 years between sale and rent.
rental_yields <- sale_prices %>% 
  left_join(rent_prices, by=c("saledate_rent"="saledate", "property_id")) %>% 
  mutate(date_diffs = abs(saledate-saledate_rent)) %>% filter(date_diffs<365*2) %>% 
  mutate(
    rental_yield = rent_price*12/sale_price,
    postalCode=ifelse(postalCode %in% c("EC2","EC3","EC4"),"EC2.3.4", postalCode),
    postalCode=ifelse(postalCode %in% c("WC2","WC1"),"WC1.2", postalCode)
  )

As you can see above I enforce that the difference between the sale date and the rental date is less than 2 years. The bigger the difference the more variance in my estimate for rental yield since rents can move over time.

We get 5365 pairs of rental yields with a median diff between sales and rent of 311 days.

Rental yield per year per bedroom

The plot below hows the distribution of rental yields over time (per year) and of different sized houses (based on bedrooms). We start at the earliest year at the top, and the latest year as you scroll down. The further the lines and histograms to the right, the higher the rental yield.

Commentary

  1. Average rental yields have collapsed from 5.5 - 6% in late 2000s to just 4 - 5% in 2017 - 2020.
  2. Over the years, 1 and 2 bedroom properties have given higher yield than 3 bedroom properties.
  3. The gap between 3 and 1 bedroom properties has widened. 3 bedroom property rental yields have come down to just 3.5% between 2018-2020.
updatedupdated2023-04-092023-04-09