Onward Rides
PYTHON
SQL
MACHINE LEARNING
RECOMMENDATION SYSTEMS
During my time as a Data Science and ML intern for Onward Rides, I had one goal in mind: to humanize the technology we used to improve user experience. I worked on improving their recommendation system to better match riders and drivers, enabling the model to factor in rider preferences, not just absolute filters.
DATA SCIENCE & ML INTERN
JUNE - SEPT 2026
1 ENGINEER, 1 PM, AND ME:)
ONWARD-DASHBOARD.JPG

001 THE PROBLEM
Recommendation systems need to be humanized.
THE PROBLEM: Rigid, one-size-fits-all filters
Onward Rides is a rideshare company focusing in non-emergency medical transport. However, traditional dispatch matching use hard filters over optimizing for more human factors, like behavior.


RIDER
DRIVER
ABSOLUTE FILTERS

THE ISSUE:
All riders, with and without history, are treated the same.
So what?
Riders felt mismatched with drivers who didn’t meet their preferences (i.e. language, gender, etc).
Rider Experience

Without personalization, high-quality drivers weren’t being matched to the riders who valued their skills most.

Driver Utilization
The one-size-fits-all approach slowed bookings, reduced retention, and limited trust in Onward.

Business Impact
002 SOLUTION OVERVIEW
The two-pathway approach:
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.
THE SOLUTION:


DRIVER
GENERAL
PREFERENCES

RIDER
W/OUT HISTORY


DRIVER
LEARNED
PREFERENCES

RIDER
WITH HISTORY
New riders are matches using broad preferences
As history builds, matches get smarter and more personalized
Riders without history become riders with history after 1 ride, creating a cycle that gets smarter with each ride.
THE IMPACT: Smarter matches. Happier riders. More efficient operations.
003 FEATURE ANALYSIS
Let’s break it down.
The end goal was to determine whether a rider preferred their driver. Riders were treated as satisfied if they tipped, favorited their driver, or gave a 5 star rating- which pointed to three feature groups worth exploring.
Rider Context
Language
Gender Preference
Comfort Needs
Driver Attributes
Rider x ride count interaction
Vehicle year
Vehicle make
Operational Factors
Distance
Availability
Capacity
A combined target riders who favorited, tipped, or gave 5 stars, then compared feature means.

Context
Ignoring Biases
Matching language, matching gender, and a higher number of rides are the most influential parameters.
Findings
I had to be careful when accounting for things like weight, vehicle year, or ethnicity. I had to make sure that the traits we picked to prioritize would not be regressive or exclusive to new drivers.
004 THE RESULTS
The model gives “boosts” to drivers that align with rider preferences.
Sophia orders a Spanish-speaking driver. Before, Driver 5 was buried in the queue despite a near-perfect language and comfort match. After: he moves to the top, and the ride happens.
1.
1.
BEFORE
Driver 1 (F)
1.
English | 4.9
Driver 2 (M)
2.
English | 4.8
Driver 3 (M)
3.
Mandarin | 4.9
Driver 4 (M)
4.
Spanish | 4.8
Driver 5 (F)
5.
Spanish | 4.8
Driver 5 (F)
5.
Spanish | 4.8
Driver 2 (M)
3.
English | 4.8
Driver 1 (F)
2.
English | 4.9
Driver 4 (M)
4.
Spanish | 4.8
Driver 5 (F)
1.
Spanish | 4.8
Driver 3 (M)
5.
Mandarin | 4.9
AFTER
THIS IS SIGNIFICANT BECAUSE
In the current model, Driver 5’s alignment score of 0.68 kept him buried in position five, despite matching Sophia’s language and gender preference. In the new model, that alignment score directly boosts his rank- increasing the odds Sophia gets a ride she’s comfortable in (and would likely rebook).
ACCURACY OF
MODEL
REDUCTION IN BOOKING TIMES
DATA
RECORDS
ANALYZED
005 REFLECTION
Working on this project has given me one of the most meaningful applied learning experiences I've ever had and has given me more perspective in the field. I came into the role with a basic understanding of data science and a very surface-level recognition of machine learning, but I had limited real-world exposure to converting data into something meaningful. Learning how to transform incomplete, biased data and create a working ML recommendation model from it was such a fulfilling experience, and it taught me how technology can be used to humanize. 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!
Thanks for staying awhile, until next time!