Studying Data to Predict Housing Prices in Ames

, and
Posted on Mar 7, 2019
The skills the author demoed here can be learned through taking Data Science with Machine Learning bootcamp with NYC Data Science Academy.

Kaggle Competition: Housing Dataset from Ames, IA

Advanced Regression Techniques

by The Bench Initiative

  • Eric Adlard
  • Ryan Essner
  • Sabbir Mohammed
The code for this project can be found here.


The Ames Housing dataset was compiled by Dean De Cock and is commonly used in data science education, it has 1460 observations with 79 explanatory variables describing (almost) every aspect of residential homes in Ames, Iowa. This dataset is part of an ongoing Kaggle competition which challenges you to predict the final price of each home. The goal of our project was to utilize supervised machine learning techniques to predict the housing prices for each home in the dataset. It became clear that the high number of features, with most of them being categorical was going to be a challenge. Our steps towards creating a highly accurate model were as follows:

  1. Data exploration and cleaning
  2. Feature engineering
  3. Modeling



1. Data exploration and cleaning

The dataset was obviously very complex and detailed. This required careful attention to detail and a thorough examination of the many feature variables. The following table demonstrates a summary of our work for this initial step:

Studying Data to Predict Housing Prices in Ames

Another graphical view of our analysis is the following correlation plot from all the quantitative variables identified. Although this might not necessarily provide directly actionable or inferential information, it definitely aided in our exploration of the data.

Studying Data to Predict Housing Prices in Ames

Sale price is the value we are looking to predict in our project, so it made sense to examine this variable first. The sale price exhibited a right-skewed distribution which was corrected by taking the log. Once the log was taken, we were no longer violating the normality assumption for regressions.

Sale Price without any transformations:

Studying Data to Predict Housing Prices in Ames

Sale Price with log transformation:

Missingness and imputation

Next, we decided to look at missing values by feature in the train and test dataset. As you can see above there was significant missingness by feature across the train and test datasets. Most of the missing data corresponded to the absence of a feature. For example, the Garage features, mentioned in the above table, showed up as "NA" if the house did not have a garage. These were imputed as 0 or "None" depending on the feature type. Below is a breakdown of how we handled imputation across all the features.



2. Feature Engineering

The specific points that were addressed in our feature engineering are as follows:

  • GarageYear  → There was an observation with a GarageYear of 2207. After confirming with YearBuilt, we concluded that this should be changed to 2007.
  • MSSubClass → Converted to String-type as this is really a categorical variable.
  • "Zero" inflated features (such as PoolArea, OpenPorchSF, EnclosedPorch, 3SsnPorch, ScreenPorch) →  Converted to ordinal features reflecting whether or not the feature exists for a given observation
  • Ordinal Categorical features were encoded into Numerical-type
  • Nominal Categorical features were Dummified
  • Outliers → Removed observations with GrLivArea >  4500
  • Standardized numerical features
  • Log transformation applied to the response variable, "Sale Price"

As a demonstration, the following is a snapshot of the encoding that was implemented on ordinal categorical features:

Newly Created Features:

As part of our feature engineering, we analyzed the set of features to craft new, additional features that combine information from existing variables, thus reducing model complexity. These include the following:

  • PorchSF → Reflects the total square feet of all porch areas: OpenPorchSF + EnclosedPorch + 3SsnPorch + ScreenPorch
  • TotalBath → Reflects the total number of baths the house has: BsmtFullBath + 0.5*BsmtHalfBath + FullBath + 0.5*HalfBath
  • TotalSF → Total Square feet of house
  • MultiFloor → New Ordinal feature that reflects whether or not the house had multiple stories



3. Data on Models

We approached the regression problem of predicting the final Sale Price of houses in Ames, IA using fundamental, supervised machine learning techniques. Namely, we used penalized regression techniques such as Ridge, Lasso, and their composite, ElasticNet. As an additional effort, we also attempted Stacking and Random Forest techniques in the hope of generating different results.

The general pipeline for building our models included:

  1. Standardization of numerical features
  2. Hyperparameter tuning using gridsearch and k-folds,
  3. K-folds for model selection utilizing cross_val_score, and
  4. Retraining models on the entire training set, using the optimized  hyperparameters.

The ridge model appeared to perform the best, with an RMSE score of 0.12116 as reported from the kaggle site.

"Reduced" Models

Model complexity was definitely a concern for a data set of this width. In an attempt to introduce a reduced data set, so that the model results could be more interpretable as well as addressing the potential for high variance due to a large number of features - we simply removed features and reduced the data set to include, mainly variables involving housing size and location. This newly modified data set included:

  • 26 original features, plus new variables aggregating living area, number of bathrooms  & porch areas (shown below)
  • A final count of 88 feature variables including dummified variables

We decided to build Ridge, Lasso and ElasticNet models on this reduced data set to test whether lowering the complexity of the data let led to simplified results. We employed k-folds cross validation to optimize our choice of hyper-parameters(using k=3). Visually, the number of features were still too high to reveal any insight into the penalized reduction of cefficients.

Ridge Regression Model:

Lasso Regression Model:

Very predictably however, in seeking the right balance within the bias-variance tradeoff by reducing complexity, we very clearly removed features that contained within them, valuable predictive information. In essence, while we may have reduced variance, we increased bias and overshot our model accuracy. As such, the Root Mean Squared Error (RMSE) as measured by the kaggle site against a test data set was significantly increased.

"Reduced" model performance:




This was definitely a rewarding project and our participation in this competition exposed us to the challenges of machine learning projects in general and on a larger scope, the mindset needed to approach data science problems.

Focusing on future efforts to improve our models in this project, or even to develop our own individual styles going forward, we have compiled a list of improvements. The lesson from the "reduced" data set is simply that we need to apply more refined feature engineering in order to work towards the optimal balance between bias and variance. The importance of domain expertise is something that also became very apparent.

Additionally, as we hone our craft and expand our skills, one aspect we would have liked to explore is the use of more models and different approaches to identify the best solution for this problem. We choose to keep our methods simple and robust in order to learn and ensure our understanding, but perhaps being able to apply newer methods and models will yield better results. 

Another consideration that would actually expand the scope of the problem and its solution, is to include and analyze external data involving local policy changes and economic trends in the housing market specific to Ames, IA. Perhaps, adding even more data such as school zoning or transportation and commercial information would produce models with more predictive power.



Thank you for viewing our project!

-  We welcome all comments and suggestions  -


About Authors

Sabbir Mohammed

Sabbir is an aspiring data scientist with a recent certification from the NYC Data Science Academy. He obtained his BS in Mechanical Engineering from Rensselaer Polytechnic Institute and has since spent several years in logistics and procurement for...
View all posts by Sabbir Mohammed >

Eric Adlard

Eric is an aspiring data scientist with a track record of using data to drive business insights in financial services. He has hands-on experience in R and Python in web-scraping, data visualization, supervised and unsupervised machine learning, as...
View all posts by Eric Adlard >

Related Articles

Leave a Comment

No comments found.

View Posts by Categories

Our Recent Popular Posts

View Posts by Tags

#python #trainwithnycdsa 2019 2020 Revenue 3-points agriculture air quality airbnb airline alcohol Alex Baransky algorithm alumni Alumni Interview Alumni Reviews Alumni Spotlight alumni story Alumnus ames dataset ames housing dataset apartment rent API Application artist aws bank loans 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 boston safety Bundles cake recipe California Cancer Research capstone car price Career Career Day citibike classic cars classpass clustering Coding Course Demo Course Report covid 19 credit credit card crime frequency crops D3.js data data analysis Data Analyst data analytics data for tripadvisor reviews data science Data Science Academy Data Science Bootcamp Data science jobs Data Science Reviews Data Scientist Data Scientist Jobs data visualization database Deep Learning Demo Day Discount disney dplyr drug data e-commerce economy employee employee burnout employer networking environment feature engineering Finance Financial Data Science fitness studio Flask flight delay gbm Get Hired ggplot2 googleVis H20 Hadoop hallmark holiday movie happiness healthcare frauds higgs boson Hiring hiring partner events Hiring Partners hotels housing housing data housing predictions housing price hy-vee Income Industry Experts Injuries Instructor Blog Instructor Interview insurance italki Job Job Placement Jobs Jon Krohn JP Morgan Chase Kaggle Kickstarter las vegas airport lasso regression Lead Data Scienctist Lead Data Scientist leaflet league linear regression Logistic Regression machine learning Maps market matplotlib Medical Research Meet the team meetup methal health miami beach movie music Napoli NBA netflix Networking neural network Neural networks New Courses NHL nlp NYC NYC Data Science nyc data science academy NYC Open Data nyc property NYCDSA NYCDSA Alumni Online Online Bootcamp Online Training Open Data painter pandas Part-time performance phoenix pollutants Portfolio Development precision measurement prediction Prework Programming public safety PwC python Python Data Analysis python machine learning python scrapy python web scraping python webscraping Python Workshop R R Data Analysis 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 seafood type Selenium sentiment analysis sentiment classification Shiny Shiny Dashboard Spark Special Special Summer Sports statistics streaming Student Interview Student Showcase SVM Switchup Tableau teachers team team performance TensorFlow Testimonial tf-idf Top Data Science Bootcamp Top manufacturing companies Transfers tweets twitter videos visualization wallstreet wallstreetbets web scraping Weekend Course What to expect whiskey whiskeyadvocate wildfire word cloud word2vec XGBoost yelp youtube trending ZORI