Contributed by Kelly Mejia Breton. She is currently in the NYC Data Science Academy 12 week full time Data Science Bootcamp pr... taking place between April 11th to July 1st, 2016. This post is based on her third class project - Web Scraping, due on the 6th week of the program.
Oil prices have fallen sharply since the summer of 2014. Prices bottomed in February 2016, since then they have gradually increased. While the breakeven cost is a popular topic among investors, on the consumer side gasoline prices are very cheap. I recall buying gasoline at under $2/gallon in New Jersey for a bit. With energy prices trading at relatively low compared to 2014 prices, I wonder what consumers are doing with the extra cash they are saving?
WTI Price -- Chart Source Bloomberg
Knowing where the consumer is spending is normally not public information. Google Trends tracks the frequency of terms searched on their website and reports it as an index. Although web search terms are not a guarantee that a purchase was made, it’s a good insight into the consumer’s thoughts. And a great indication of when and where advertising companies should advertise.
Could there be a possible relationship between some web search terms and gasoline prices?
Using Beautiful Soup I retrieved daily prices from the U.S. Energy Information Administration (EIA) website and store them in a MongoDB database. The EIA updates their website daily with yesterdays close spot price. To automate the process, I created a crontab that runs the python code daily at 7:00 am and stores the data in a database.
My primary concern was pulling the correct data, since the order of the prices could change at anytime without my knowledge. To avoid this, I included the crude and product name as the lookup tool returning the position of the element.
Below is an example of the code I used for WTI:
WTI=[i for i, x in enumerate(WebScappedData) if x.text == 'WTI']
The code looks for the name of the price first, serving as a check, it adds the distance of price value from the name location, and uses this to update the database.
Here is an example of the data that I scrapped showed in a pandas dataframe with the name of each product along with the corresponding price per date. From this dataset I will focus on U.S. Retail Gasoline Prices.
My goal is to use historic gasoline prices along with the Google Trends data and see if there are any potential linear relationships. Ultimately fitting a simple regression model and using the scraped data to forecast consumer behavior.
I decided to take a closer look at a few web search terms to see if consumers are searching:
Starwood Hotels- possible vacations
Mercedes-Benz- luxury cars
Home Improvement- fixing up the house, or buying a house
Yoga- are they crude investors and considering some meditation to relax
Restaurant - eating out since they have more to spend
new borns- having babies
Taking a closer look at the charts at first glance it looks like Starwood Hotels has a spike in searches right around the time gasoline prices were at their lowest. Maybe flights were also cheaper with the cheaper fuel? Mercedes-Benz seem to also be near the highs when prices are at their lows. Home improvement appears to have a slight up tick at the end of 2015 beginning of 2016. While yoga web searches have been increasing over time, does not look like low gasoline prices affected the frequency of the search. Restaurants have an up tick in the middle of 2015 then drops then increases again, hard to tell from this chart if its around the time of low prices. New borns searches have an up tick at the end of 2015 beginning of 2016, could be related to low gasoline prices.
Looking at the scatter plots we can get a better idea if possible relationships exist between web search terms and low gasoline prices. Starwood Hotels do not seem to have much of a linear relationship but we can see that as prices were lower, searches reached new highs. Mercedes-Benz and Home Improvement both seem to have an indirect relationship with low gasoline prices, as prices decreased searches increased. However, Yoga and Restaurants do not appear to be affected by low gasoline prices, maybe they are part of consumers everyday life and not necessary something determined by extra cash they may have. Eating out and meditating may be part of the consumers everyday expense. Newborns appears to have a relationship with low gasoline prices, having some extra cash could make consumer thing about expanding their families.
I decided to produce some simple linear regressions just to show how the scrapped data could be used, although please keep in mind I did not perform any of the test to make sure a linear regression was suitable. As well as gasoline prices violate the assumption of independence since today's prices are related to yesterdays price.
Placing the US retail prices in the models these are the monthly forecast. Once I have more daily data collected I will take the month-to-date average and apply it to the model to get a better forecast, assuming all the requirements are met. Based on Friday’s gasoline prices Mercedes-Benz websearches are projected to be high in the 75% starwoods & home improvement are expected to be between the 50th and 75th Newborns seem to be slightly lower than the 75%.
To test the data for normal distribution, constant variance and independence, and apply time series analysis, possibly a lagged variable.