← back
data · analysis · problem solving

Data & Problem Solving

Signals in messy real world systems turned into results.

Voter Signature Verification Pipeline

Data Engineer / Analyst · 3-day turnaround, May 2026
A line map of New York City

Finding 5,000 in a pool of 13.5 million

The challenge

A political campaign had thousands of petition signatures challenged by the Board of Elections and needed to demonstrate, on a tight court-ordered deadline, that enough of those signatures belonged to real, eligible voters. I was brought in to build the system that checked each disputed signature against New York's official voter records and produced a clear, defensible spreadsheet the legal team could submit.

The core problem: messy names vs. official records

The hard part was not the volume of data, it was the messiness of it. People sign petitions by hand. The same person might write "Abbie" while the state has them on file as "Abigail." Someone might list a new address after moving, use a maiden name, drop a middle name, or simply make a typo. Meanwhile, the official New York voter database holds 13.5 million records, including thousands of people who genuinely share the same name.

So the real question for every signature was deceptively simple but technically tricky: is this handwritten name actually a registered, eligible voter in New York, and can we tell which specific person it is and not someone else with the same name?

My approach: several methods, layered for confidence

Rather than relying on one rule, I matched each signature using a ladder of verification methods, from strongest evidence to weakest, and labeled every result with a confidence level:

  1. Exact identity match using the voter's name and state-issued voter ID together.
  2. Unique-name matching, where an uncommon name appears only once in the state and can stand on its own.
  3. Address-based tiebreaking for common names, so two different "Maria Rivera" records get separated by matching the petition address to the address on file.
  4. Fuzzy matching to catch nicknames, misspellings, and dropped middle names that an exact match would miss.
  5. Borough and location narrowing to resolve ambiguous cases down to the most likely individual.

Crucially, anything I could not confidently confirm was never silently dropped. It went into a clearly labeled review queue so the legal team retained full visibility and made the final calls themselves.

Contested signatures 11,863 Submitted to court 5,379 Review queue returned to legal team 6,484 Exact identity name + voter ID 2,732 Voter ID resolved name differs 461 Name & fuzzy match unique, address, typos 254 Borough narrowing resolved to borough 285 ZIP narrowing resolved to ZIP 268 Subject to further manual review 1,379 Could not confirm 6,484 SOURCE VERIFICATION LADDER OUTCOME
Documentary match Inferred · high confidence Inferred · low confidence Unresolved → review

Every contested signature ran down the ladder, strongest evidence first. Nothing was silently dropped.

The result

Skills: Large-scale data processing · Entity resolution and record matching · Fuzzy / approximate string matching · Data cleaning and normalization · Building defensible, auditable outputs for non-technical stakeholders · Delivering under a hard deadline.

· · ·

Spatial Equity at the GSD

Financial modeling & scenario analysis · Harvard GSD, VIS 2478 · Spring 2026
The interior of Gund Hall in 1970: open concrete steps and studio trays with a single potted tree, spacious and uncrowded.

Gund 1970; before space was a luxury

A financial model demonstrating a sustainable path for the GSD to create a better student experience.

Read the full analysis →