
MACHINE LEARNING INTERN
DATA ANALYSIS
HEALTHCARE
Onward Rides
Built a machine-learning recommendation system for more personalized healthcare ride matching.
TIMELINE
June - Sept 2026
TEAM
Engineering Lead,
Product Lead + Me
ROLE
Machine Learning
Intern
TOOLS
Python, SQL
LONG STORY SHORT
I turned rigid dispatch filters into personalized rider–driver matching.
Onward Rides coordinates non-emergency medical transportation for older adults and individuals with mobility needs. Working alongside a product manager and engineer, I developed a recommendation system that learned from historical ride behavior to identify stronger rider–driver matches, improving customer satisfaction.
01
Data Foundation
Cleaned and analyzed 400k+ historical ride records to identify the rider, driver, and trip characteristics.
02
Model Development
Built and evaluated a machine-learning matching model that achieved a 0.994 AUC and 96.9% accuracy.
03
Product Impact
Improved match accuracy by 15% and reduced booking time by 30% across an app supporting 10,000+ monthly rides.
THE PROBLEM
Dispatch filters could determine eligibility, but not compatibility.
THE PROBLEM: Rigid, one-size-fits-all filters
Onward Rides is a rideshare company focusing in non-emergency medical transport. Its existing dispatch process relied on fixed constraints, which could identify available drivers but could not learn which eligible driver was most compatible with each rider.


RIDER
DRIVER
ABSOLUTE FILTERS

THE ISSUE:
All riders, with and without history, are treated the same.
Why it mattered:
Ride Experience
Riders felt mismatched with drivers who didn’t meet their preferences (i.e. language, gender, etc).
Driver Utilization
Without personalization, high-quality drivers weren’t being matched to the riders who valued their skills most.
Business Impact
The one-size-fits-all approach slowed bookings, reduced retention, and limited trust in Onward.
SOLUTION
One matching system, two recommendation pathways.
THE SOLUTION: A learning system that adapts over time
Although rider Susie may not have previous ride history, maybe rider Tom does, or rider Ana and so on, and so forth. I realized that we could find general patterns in the preferences of each of the 400K rides completed. Using this, I could create a general formula that we could apply to new riders to create a more accurate, tailored recommendation.
In other words, the system selects a recommendation strategy based on the amount of rider history available. For returning riders, it learns from previous ride outcomes and preferences. For new riders, it uses patterns from similar historical trips until enough individual data exists to personalize their results.
With every completed ride, the system gains more behavioral context, gradually moving riders from generalized recommendations toward individualized matching.


NO HISTORY
DRIVER
GENERAL PREFERENCES

New riders are matched using broad preferences


WITH HISTORY
DRIVER
LEARNED PREFERENCES

As history builds, matches get smarter and more personalized
FEATURE ANALYSIS
Let’s break it down.
I defined a successful match using explicit rider feedback (including tips, favorited drivers, and five-star ratings) then evaluated which contextual, driver, and operational factors were associated with those outcomes.

Context
A combined target riders who favorited, tipped, or gave 5 stars, then compared feature means.
Ignoring Biases
I had to make sure that the traits I prioritized would not be regressive or exclusive to new drivers.
Findings
Matching language, matching gender, and a higher number of rides are the most influential parameters.
RESULTS
Compatible drivers move up, not just available ones.
Consider a rider who prefers a Spanish-speaking driver. Before personalization, a highly compatible driver could appear near the bottom of the eligible-driver queue. After scoring each candidate across rider preferences, driver attributes, and operational constraints, the model moves the stronger match to the top.
BEFORE
1.
Driver 1 (F)
English | 4.9 ☆
2.
Driver 2 (M)
English | 4.8 ☆
3.
Driver 3 (M)
Mandarin | 4.9 ☆
4.
Driver 4 (M)
Spanish | 4.8 ☆
5.
Driver 5 (F)
Spanish | 4.8 ☆
AFTER
1.
Driver 5 (F)
Spanish | 4.8 ☆
2.
Driver 1 (F)
English | 4.9 ☆
3.
Driver 2 (M)
English | 4.8 ☆
4.
Driver 4 (M)
Spanish | 4.8 ☆
5.
Driver 3 (M)
Mandarin | 4.9 ☆
The system preserves eligibility while improving ranking.
The recommendation model does not replace Onward’s operational constraints. It reranks already-eligible drivers based on predicted compatibility, helping dispatchers make more personalized decisions without sacrificing availability, distance, or capacity.
ACCURACY OF MODEL
Data Records Analyzed
Reduction in Time Bookings
REFLECTION
What I learned
Meaningful models start with messy data
I came in knowing the basics of data science, but had little experience turning incomplete, biased real-world data into a working recommendation model. Building one showed me how much thought goes into the data before a model can be useful.
Technology can be used to humanize solutions
This project showed me how technology can humanize business problems, and it left me excited to keep learning. Matching riders and drivers on preferences like language meant walking a line between personalization and bias, and getting that line wrong would have meant a model that quietly discriminated. Working through that taught me that the technical part is rarely the hard part; the judgment calls around it are. I left this project far more interested in that side of the field, and I can't wait to learn more!