Inspiration

Two of the (in our opinion) most important UN Sustainability initiatives are point 1: No Poverty, and point 4: Quality Education. In addition to education and wealth being cornerstones to a good life, they also often go hand in hand: one of the best ways to get out of poverty is to have good quality education. However, the best public schools tend to be in the most expensive areas to live across the country. We created SchoolAssist so that people looking to move to a new area can find the best schools possible in areas where they can afford to either buy a home or rent a place to live.

What it does

SchoolAssist allows for the user to enter their name, household income, desired state/ city/ county to live in, and their school type (high, middle, elementary). Once they have entered this, it directs them to a screen with all schools within a 50-mile radius of the location they entered. They can sort this table by a school’s rating, the median rent / predicted rent, or the median value / predicted value. This streamlines and connects the cost of living and education quality information about an area, and allows for the user to understand all of the options for schools they have in this area. SchoolAssist also recommends the best schools that are in areas that users can either rent or buy a place to live, running calculations on the predicted median house price and predicted median rent along with the users income to determine what areas around a city are affordable. This allows the user to find the best possible school at an affordable price.

How we built it

For the Machine Learning portion of the project, we utilized the ASDI census tract data from 2012-2019. This data comprises about 70,000 tracts, which are areas of land that encompass about 4,000 people. We wanted to forecast a 2020 prediction for two values, median rent and median home value. After testing different possible models using the values we have for 2012-2019, We decided to construct an individual ARIMA time-series model to predict the 2020 rent and home value for each tract. Since so many models were created, we needed an intuitive way to tune the hyperparameters for each model. I found the number of significant partial autocorrelations to determine the lags for each model, we used the Augmented Dickey Fuller Test to determine if each tract’s values were stationary, and we used the number of significant autocorrelations to the number of time steps to include for the moving average. Utilizing this tuned model, we were able to forecast the 2020 values for median rent and median home value.

The application was built with create-react-app, using React JS for the front-end and Python for the backend. The application back-end was built entirely on AWS Amplify’s BaaS. We begin by displaying a page with a form allowing users to input name, income, location, and school type. The location selector was built using the country-state-city library, and allows the user to select any city or county in the United States. The user’s location is then converted into a latitude and longitude, which is sent to the GreatSchools API. This API returns a list of schools within a 50 mile radius. The list of schools is then run through a loop that calls the Geo FCC Area API, to append a FIPS GeoID to each school. The object is then sent to our AWS Lambda through AWS API Gateway, where the Lambda calls our DynamoDB table and appends the rent and housing prices and displays them in the table.

Challenges we ran into

One challenge that was run into during the machine learning portion of the project was that there were only 8 years of available data which limits the effectiveness of time-series models. Another challenge was that it was hard to optimize models for 70,000 different census tracts. To solve these problems, I used the aforementioned tests to optimize the models on my own so that the models could be built quicker. The challenges for the application were related mostly to the use of the different API’s we had as well as navigating the relationship between the different AWS services we used. Initially, for example, we couldn’t make any public API calls due to problems with CORS policy. To solve it, we had to use cors-anywhere to run a proxy server through which to make the API calls. We were also having a variety of permission errors with our Lambda function, as well as when we were attempting to write to our DynamoDB with the SageMaker StudioLab notebooks. To solve such permission errors, we had to work around the IAM service and undergo a rigorous trial and error processing involving roles and role-permissioning.

Accomplishments that we're proud of

We are proud that we were able to create a full stack application as rising college Juniors. This project was so time-consuming and holistic, so it was a great success to even get to the finish line we are at now. We’re so happy about how the project turned out.

What we learned

We learned a lot about how many different design options exist within AWS, and we learned how to fit all of these building blocks together into a full stack application. We learned a lot about teamwork as each one of us constantly relied upon each other to keep working. We also learned that there are far more options to access public data, such as ASDI, that we have access to for future projects. This project has made us both better coders and given us more vision on how code can change the world for the better.

What's next for SchoolAssist

We want to add more factors that go into cost of living, such as food costs. We also want to be able to host SchoolAssist so that the public can have free access to it. We would also like access to more powerful APIs that would allow us to get more info on schools besides just their rating. Finally, we would love to add a feature that allows parents to connect directly to schools so they can get a better understanding of how the school functions before they choose to pick up their life and move to a new area.

Share this project:

Updates