I'm a data scientist. I graduated from Colgate University with a degree in Neuroscience and earned my Master's in Information and Data Science at UC Berkeley.
Coursework: hypothesis testing, experimental design, statistics, data engineering, machine learning, natural language processing, deep learning, machine learning systems engineering, and deployment of machine learning models
johnvgalvin (at) gmail (dot) com
I'm interested in figuring out how to apply machine learning within contexts where it has traditionally not been exploited at scale. There is tremendous opportunity for machine learning models to disrupt sectors like finance, medicine, legal, and professional services industries.
When I'm not working or in class, I like to golf, ski, mountain bike, cook, and spend time with my family (including my dog).
Alzheimer's Disease (AD) is a complex neurodegenerative disease that severely affects quality of life and is expected to cost the US $1T by 2050. Forty percent of primary care physicians report that they are "never" or "only sometimes" comfortable diagnosing AD. Early detection can result in significantly improved outcomes. In fact, early diagnosis can lower yearly costs by up to twenty percent. We aim to improve health outcomes for Alzheimer's patients by enabling earlier diagnosis of the disease. Contrary to existing approaches which only use MRI data, we use genetic, cognitive, and MRI data to predict the probability of AD onset within the next five years. This project contains an API to access predictions from a neural network I trained, a UI intended for clinicians, and a database meant to mimic integration with an EHR system. All components have been containerized and deployed to Minikube. Additional details can be found in the link above or here.
I think the skills needed to deploy machine learning applications are becoming increasingly important. I used FastAPI to develop a sentiment classification app and deployed it in Kubernetes on Azure. The model was pulled from HuggingFace. I used Redis for caching requests and responses to improve performance, executed select load testing using K6, and analyzed testing results in Grafana on top of Prometheus.
With the rise in popularity of large language models (LLMs) like ChatGPT and GPT-4 comes advice on how best to interact with this form of artificial intelligence. My LinkedIn feed is full of posts about how to write prompts to get the desired output from ChatGPT and GPT-4. While these are likely well-intentioned and clearly topical, not a single one of them has actually been data-driven. They are purely anecdotes from a selection of users' experiences. The purpose of this project is to provide a framework for how one can evaluate the effect of altering a prompt on the output of such models. The intention is not to provide an exhaustive list of all the ways to alter a prompt or offer context - it's purely to provide some guardrails that I think will become increasingly useful and important as usage of ChatGPT and GPT-4 rises.
Sitting for prolonged periods of time with bad posture can result in serious spinal and health complications. While certain chairs and cushions promote good posture, they are expensive and not easily transported. We present four machine learning models that are capable of detecting good and bad posture from a user-facing webcam. We show that using existing pose estimation models to extract body keypoints from single frames and feeding these latent representations through a fully-connected classification head produces more accurate results than fine-tuning existing image recognition models. We also show that three dimensional feature extraction is more accurate than two dimensional extraction. Two of these models have been quantized, deployed on an NVIDIA Jetson Xavier NX device, and include a user-facing chime to correct sustained (60s) bad posture.
I wanted to gain more firsthand experience with Docker and Kubernetes, so I built a completely containerized face detection application. It captures a live video feed on an edge device and sends the individual frames to the cloud for processing and storage.
Everyone has a right to privacy. Several data sets, however, remain locked to researchers because they contain direct- (i.e., full name) and quasi-identifiers (i.e., the combination of gender, birthdate, and zip code). Manual redaction of such data sets is costly and time-consuming. I fine-tuned a Longformer to identify direct- and quasi-identifiers in large court documents and beat a current state-of-the-art baseline. Such a model has applications across verticals as a method of preserving individuals' right to privacy and unlocking data sets for researchers that would otherwise remain inaccessible.
I love French Bulldogs and am interested in computer vision. I fine-tuned ResNet50 to discriminate between images of my own Frenchie and images of other random Frenchies. I deployed this model as a web app using Flask.
This is part 1 of a 3 part series of projects about a fictitious business. I wrapped SQL with Python to query a database filled with fictitious data about a meal delivery company and analyzed the results. The end deliverable is a series of recommendations to business leaders about how they can increase sales and implement a new customer model.
As a result of analysis from part 1, business leaders considered a third party delivery company to increase sales. They wanted to conduct a proof of concept to determine whether or not this made good business sense. I parsed third party sales data, merged it with the meal delivery company's proprietary data, and analyzed it to provide business leaders with recommendations about forming a relationship with the delivery company.
Business leaders wanted to expand, but realized that forming a relationship with another delivery company wouldn't be profitable. I analyzed alternative ways of delivering meals by representing our network of customers as a graph in Neo4j. I used graph centrality and community detection algorithms to identify which new delivery options would be profitable for the business.
I love to cook and make cocktails ;). Sometimes, though, it's more work to figure out what to cook and shake than it is to whip them up! I created a program that recommends what to make based on the type of occasion or "mood" for the evening.
Bitcoin exploded a few years ago. Some people and organizations that hold an enormous share of the market, known as "whales," have the power to move the market based on their trading activity. I used an ensemble method to predict whether or not these whales would sell Bitcoin within the next 24 hours. Although I don't buy and sell Bitcoin myself, the idea is that this could be used to profit by shortselling Bitcoin.