Vitruvian: A simple and elegant mobile application to help doctors in developing areas to keep track of their patients and diagnose diseases
Add patients, keep track of their appointments/prescriptions, and levarage novel machine learning models to diagnose pathogens
VitruvianAssist: A swift mobile chatbot that can help patients diagnose and mitigate ailments via SMS through Twilio
The lack of centralization in medical data is a huge problem in the medical industry. Not only is most clinical data decentralized and stored in various different formats, ranging from digital to paper in filing cabinets, it is hard to transfer, takes a long time for a patient to view, and can never all be viewed in one place - something that can be a huge issue when dealing with time sensitive medical data.
Especially in rural areas, keeping track of medical files is seemingly impossible.
In third world countries, access to mobile phones is increasing. However, a small percentage of people have access to internet through either traditional providers or 3G/4G LTE as opposed to a large percentage of these people having SMS text capabilities (Pew Research Center http://www.pewglobal.org/2015/03/19/1-communications-technology-in-emerging-and-developing-nations/).
Additionally, people blessed with access to the internet have the simple option of googling symptoms to their diseases or googling simple treatment/quick plans of action. We believed that we could extend this useful option to people who only had access to SMS text messaging. Thus, we created the quick assist button which allows people to text a question such as “my symptoms are a red nose and a cough” or “my friend is choking, what do I do” to a phone number and receive quick and useful response through SMS.
Vitruvian: 3 main features
Centralized health data. By keeping a record of all patients a doctor has along with their medication and appointments makes the delivery of health care in the right time much easier. Our original idea was to create a fully centralized system for all healthcare data to increase patient mobility between clinics and decreasing paperwork. We soon realized that this would not be doable in 24 hours due to the sheer amount of data that would need to be stored. However, this is still our ultimate plan for Vitruvian.
Machine learning analysis for heart disease. We soon realized that with all of this centralized data, we could start using machine learning algorithms to predict the likelihood of patients having different medical problems such as heart diseases. We wrote a 1 dimensional convolutional neural network around the data we got from the Framingham Heart Study and were able to predict whether or not a patient would have a heart disease with around 72% accuracy. We also wrote a Flask python server around this algorithm which would take in a data text file with the data points the network needed and would run a prediction on it returning the risk of having a heart disease. This was a very fun process that involved a lot of optimization to get a relatively high accuracy. The next steps would be to use the data we receive from the doctors to further train the network to bolster its accuracy.
VitruvianAssist: Diagnosis and Steps through SMS. Text your symptoms or what is happening to a phone number, and a speedy response with detailed diagnosis or further instructions will follow. This not only potentially saves lives, but extends the reach of health data available online to the millions of people in developing countries who only have access to SMS and not to the Internet.
How we built it
Xcode with the Swift 3.0 programming language was used to build the iOS app. Sketch was used to design artwork and icons. Alamofire was used for networking with the web server hosting the heart disease classifier.
The neural network was built with Keras and Python. Keras is a very powerful deep learning library that is very modular and very simple to quickly build models.
The SMS VitruvianAssist was built with Twilio and Redis to route and manage multiple SMS conversations, NLP to find the important words in each sentence and characterize it as a diagnosis or a series of steps, and webscraping in Node.js to find the correct response.
We used Redis Pub/Sub in VitruvianAssist to actively monitor data tunnels from the Node.js server. While it was difficult to use since the documentation was dense with very technical concepts, we were able to learn a lot about memory persistence and dynamic data storage.
Challenges we ran into
Without a doubt, the most difficult part of building this app was effectively storing all of the data necessary to run diagnostic tests. As such, it was necessary that the app was carefully planned. We began by drawing the user interface on a piece of paper and then deciding what data features we would need to accurately diagnose heart disease, such as glucose levels, blood pressure, among other biomarkers.
The hardest challenge while coding this was to actually optimize the code to try to boost the accuracy. In the beginning the accuracy obtained was 32% but after countless trials we were able to reach an accuracy of 72%. This was a very promising result given the fact that we did not posses a lot of data. Writing the server around it was also relatively difficult because it involved trying to find files sent, reading the files, and preparing them for a prediction.
The hardest challenge while building the SMS VitruvianAssist was webscraping to gather the best response data. This starts off with an autonomous Google search, filters out unreliable websites and prefers reliable ones (.edu, webMD) by comparing them with a self-compiled list, and then finds the largest block of text on the website with the key word from the request and displays it to the user via SMS. This was extremely hard to implement simply because of the NLP involved in gathering the key words and the very general nature of each request.