JUDGING ZOOM LINK
https://utexas.zoom.us/j/99859020775
Inspiration
With all the doom and gloom in the news these days, sometimes even the weather can be demoralizing.
Imagine you've spent weeks upon weeks indoors, quarantining to the best of your ability, and finally one day deciding to carefully venture outdoors - but upon checking your trusty weather app, it greets you with images of thunderclouds, gusty winds, and maybe a flood or two.
This indeed is surely a terrible, sad situation that has greeted many of us over the past several months and counting.
What if, instead, you had a "fairweather friend" - one who will faithfully stick by your side when they have good news to deliver, but dodges your question when things aren't looking so great?
You would never again have to hear about how the great state of Texas has somehow graced you with 115 degree weather and hailstorms at the same time.
That's why we built fairweatherfriend.online, a website where your fairweather friend is always online to help you find out (or not) what the weather has in store for you today.
(awesome domain name registered through domain.com!)
What it does
With a clean and simple web interface, users can see either the weather forecast (if our ML algorithms predict the user will like the forecast) or amusing puns that vaguely allude to what the current weather situation is. Users give feedback to our site by noting if they like, dislike, or are neutral about the weather today using our very intuitive UI.
How we built it
On the backend, we've implemented several key features to make this work.
The first is a get_weather function, which uses the openweather API to take a city name and return a dictionary of key weather parameters of interest.
Another function, learn_preferences, is used to query our users database to find historical data and associated ratings for a particular user, which is used to train a binary classifier for predicting the user's response to the current weather. If the known training set is too small, it can be augmented by data from similar users.
Several other utilities are then combined to produce the final output: weather data if we predict the user will like it, current-weather-related puns if predict the user wouldn't like it.
Challenges we ran into
We registered our domain with domain.com (fairweatherfriend.online), but since we were hosting our app on Heroku, we needed to link the custom domain name with our externally hosted application. This involved updating DNS records, which can take 24 - 48 hours to actually update, which means that our custom domain is not yet linked to our application :(
The learning curve for Django was steeper than expected - we had no idea just how many different types of errors we could run into over the course of developing a full-stack app.
Additionally, it turns out running a 5-fold CV grid search over 30 parameters every time your DB is updated is quite expensive.
Accomplishments that we're proud of
This is pretty much a fully functioning product! As we hoped, the website actually works (updates DB by taking user input, shows the output that we want), and the model is being appropriately updated. Of course, we are proud of having overcome the many hurdles associated with trying to make a full-stack product for the first time.
What we learned
How to use Heroku, Django, and also that getting weather data is actually way easier than expected. Also gained familiarity with cookies.
What's next for Fairweather Friend
There's definitely potential room to add to the robustness/power of the predictive model. In this case, we pretrained the model to get a good sense of the regularization strength, and deployed without on-the-fly cross validation. The model itself was also fairly cheap (logistic regression). With a better understanding of the operating conditions of web stacks, we could definitely apply more advanced or clever methods to allow for more robust and accurate on the fly model updates and prediction. There's also lots of potential for the output of Fairweather Friend. It could output things like snarky comments about why you shouldn't go outside, or be a terrible influence and suggest you watch TV all day. The framework we've developed here can be very generalizable to lots of different desired behaviors.
Log in or sign up for Devpost to join the conversation.