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!