LONG STORY SHORT
I turned rigid dispatch filters into personalized rider–driver matching.
Onward Rides coordinates non-emergency medical transportation for 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 can determine eligibility, but not compatibility.
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.
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.
FEATURE ANALYSIS
Let’s break it down.

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 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
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.
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!




