Forecasting Zillow Rent Index

Avatar
Jack Schiavone
and
Posted on Oct 21, 2020

GitHub

In working with our partner company, our objective was to create a model to forecast the Zillow Rent Index (ZRI) for multifamily homes in the United States. Multi-Family homes are buildings with 5 or more housing units. The motivation for this project is to provide an accurate model for what rent prices will be in 1 to 3 years. Clients are interested in this information to decide if they should raise/lower rent prices or offer move-in specials. Rent price forecasting of specific zip codes is also important to real estate developers and investors who have to determine if they will be able to recoup their investment. 

Data Overview

We utilized five data sources to build our models. We used data from the American Community Service (ACS), 5-year aggregate zip code level data on demographics, income information, rental housing units, and education level. We also used IRS data on the zip code level, labor force data by county, mortgage delinquency data from consumer finance monthly by county, and the United States Geological Survey’s Natural amenity Index.

Preprocessing

Two zip codes were not represented in the data we gathered and were dropped. The zip codes that had missing rent for the month were removed. One more zip code, that of Riverhead, NY, was dropped because of outlier rent prices.

Feature Engineering

When we were doing our exploratory data analysis, we saw the need to engineer several features. Population change, income per capita change, rental vacancy rate and supply change were all created by comparing the change from the previous year’s ACS data, to the current year ACS data. Education was created using the ACS data by creating a weighted average of type of degree. Season was created by looking at which season had the lowest median rent price, with a 1 assigned to the lowest median rent season and a 4 to the season with the highest median rent.

Tree Models

Using this data, we started with tree base models. In trying to predict future rent, we wanted to look at feature importance. With and without using the previous year’s ZRI we can see how well just our public data features are performing. As seen in the table, there is not surprisingly, a huge increase in the R2

When including ZRI as a predictor, it overwhelmingly dominates feature importance and does not allow us to look at differences between the rest of the features. We decided to look at the feature importance of Random Forest without ZRI as a predictor. We can see in the graph below that TotTaxes (which is the total amount of taxes paid, divided by the population) is the most important feature. That is closely followed by zip code and the USGS’s natural amenity rank, a ranking that the United States Geological Service created to rank areas based on their natural beauty. This graph guides our decision on where we would start with our linear models. 

Feature importance of Random Forrest Model

Our best performing tree model was an XGBoost model. The above chart shows the residuals of our model that are mostly randomly distributed. There is a horn-shaped area of errors around 2500 to 2700 predicted value range that we will look into later to try to determine why our model performed poorly there.

Linear Models

We decided to use linear regression in rent forecasting for its advantage of interpretability. As part of the preprocessing for the linear model, we took the log transformation of rent prices to obtain a normal distribution and dropped outliers.

Our first model, with 15 features, was overfitted so we ran a penalized regression model with Lasso. Lasso zeroed out the education, Hispanic pop, unemployment rate, population change, and median age, features that were dropped in the next model. 

Our final model has a train accuracy score of 96% and a test score of 95%. We checked for multicollinearity by checking VIF, variance inflation factor, and we found no issues with multicollinearity between the features so we kept all 10 in the final model. 

We looked at the correlation between the 10 features and ZRI. Interesting to note here, the 'vacant housing units for rent' feature was negatively correlated with rent prices. This is to be expected as when the supply of rental units is greater than demand, prices will drop.

When we checked the residuals of our final linear model we saw no real pattern in our residuals, except for a slight horn in the upper end. 

We decided to explore this horn further by splitting our dataset between high and low populations. The population was cut at the median; anything above 36k was classified as high, and anything at or below it as low. Both the linear model and the XGBoost model performed slightly better with the low population data and the MSE error improved by $2 in both. 

You can see this change much more clearly in the residual plot for each. In the high pop dataset, the horn still persists but in the low pop, the horn pattern completely disappears. 

Further examining the population, we broke the dataset into 4 quartiles. The top quartile performs the worst in our XGBoost model but the performance between different population quartiles was not significant. 

Because the model didn’t perform drastically differently in two population or 4 quartiles models or the quartiles population model we decided to explore the zip codes of the residuals closer.

A closer look at the residuals 

We then investigated the worst residuals in our model to see what those observations had in common. This graph shows us the zip codes with the worst residuals. We graphed their ZRI value over time to look for a pattern. The group of lines with the higher ZRI are all from the Los Angeles metro area but the other zip codes are from upstate New York. They all show a steep decline in ZRI between 2016 and 2019. It is not surprising that our model performed poorly given that previous ZRI is the strongest predictor of future ZRI, and the model was trained on 2015 data to predict 2018 zri. So from here, we wanted to investigate what was happening in these places.

We wanted to see what in these missing zip codes could cause such a drastic decline, but nothing stood out. One possibility is the lack of rental units in these zip codes on Zillow. Searching these areas on zip codes show only a few listings and a few rental properties could possibly have thrown the ZRI off. 

The above graphs show our model performance before and after dropping those zip codes that our model was bad at predicting. There is a slight improvement in the model but nothing really of note. The main takeaway is that if ZRI happened to have a large decrease, our model was unable to capture that effect.

Conclusion & Future Work

Not surprisingly, the previous ZRI was the best predictor of future rent. The problem our model had was that since ZRI almost always increased, a decrease in ZRI was hard to capture. The number of vacant housing units had a negative correlation with ZRI. Finding a better data source for this feature may be helpful in predicting decreasing rent prices. Nevertheless, all this information would have never been able to predict a pandemic and the effect it has had on the housing market as people look to leave rental properties in urban areas. 

Future work could include implementing a time series model to see how that would perform, especially with our zip codes that our model performed poorly on. We would also like to explore creating a model that forecasts the Zillow Observed Rent Index (ZORI) which is a new measure of rent. Zillow has begun using ZORI to fix issues they have come across with ZRI. This could explain some of the large decreases in rent that we came across with ZRI and could contribute to a model with better predictive power.

About Authors

Avatar

Isabel Alvarez de Lugo

Isabel Alvarez de Lugo is an experienced data professional having worked in the Life Sciences and Real Estate sectors. As a data analyst at a fast-paced biotech accelerator, she led end-to-end development efforts to provide program outcomes and...
View all posts by Isabel Alvarez de Lugo >
Jack Schiavone

Jack Schiavone

Education: Mathematics, B.S. Stony Brook University Mathematics Education, M.Ed Mercy College Fields of Interest: Finance, Education, Tech, Environment Work Experience: Mathematics Teacher (5yrs) Computer Science Teacher (2yrs)
View all posts by Jack Schiavone >

Leave a Comment

No comments found.

View Posts by Categories


Our Recent Popular Posts


View Posts by Tags

#python #trainwithnycdsa 2019 airbnb Alex Baransky alumni Alumni Interview Alumni Reviews Alumni Spotlight alumni story Alumnus API Application artist aws beautiful soup Best Bootcamp Best Data Science 2019 Best Data Science Bootcamp Best Data Science Bootcamp 2020 Best Ranked Big Data Book Launch Book-Signing bootcamp Bootcamp Alumni Bootcamp Prep Bundles California Cancer Research capstone Career Career Day citibike clustering Coding Course Demo Course Report D3.js data Data Analyst data science Data Science Academy Data Science Bootcamp Data science jobs Data Science Reviews Data Scientist Data Scientist Jobs data visualization Deep Learning Demo Day Discount dplyr employer networking feature engineering Finance Financial Data Science Flask gbm Get Hired ggplot2 googleVis Hadoop higgs boson Hiring hiring partner events Hiring Partners Industry Experts Instructor Blog Instructor Interview Job Job Placement Jobs Jon Krohn JP Morgan Chase Kaggle Kickstarter lasso regression Lead Data Scienctist Lead Data Scientist leaflet linear regression Logistic Regression machine learning Maps matplotlib Medical Research Meet the team meetup Networking neural network Neural networks New Courses nlp NYC NYC Data Science nyc data science academy NYC Open Data NYCDSA NYCDSA Alumni Online Online Bootcamp Online Training Open Data painter pandas Part-time Portfolio Development prediction Prework Programming PwC python python machine learning python scrapy python web scraping python webscraping Python Workshop R R language R Programming R Shiny r studio R Visualization R Workshop R-bloggers random forest Ranking recommendation recommendation system regression Remote remote data science bootcamp Scrapy scrapy visualization seaborn Selenium sentiment analysis Shiny Shiny Dashboard Spark Special Special Summer Sports statistics streaming Student Interview Student Showcase SVM Switchup Tableau team TensorFlow Testimonial tf-idf Top Data Science Bootcamp twitter visualization web scraping Weekend Course What to expect word cloud word2vec XGBoost yelp