| File | What it holds |
|---|---|
| lyft-rides-export | Lyft's own export: accept, pickup and drop-off times and the driver's position at accept for all 226 rides. |
| lyft-gps-endpoints-v4 | Pickup and drop-off points reconstructed from the phone's GPS trail at the true pickup and drop-off times; six rides on Oct 19 have no trail and carry only the accept point. |
| lyft-table-compact-v4 | One row per Lyft ride with miles, duration and pay. Its time column is the accept time (see Corrections). |
| uber-trip-data | Uber's trip table: product, fare, promotion, tip, customer fare and addresses for 70 trips, plus one Prop 22 adjustment row that is not a trip. |
| per-ride-gps-export | Both platforms merged, 297 rows, with endpoints and their provenance. |
| per-ride-routes (GeoJSON) | 275 GPS traces from the earlier export, matched to rides by platform, date and start time. |
| Earnings sheet, Prop 22 statements | Daily totals per platform, tips, charging costs; the Lyft (Oct 5–19) and Uber (Sep 28–Oct 12) guarantee statements. |
| Method | Rides | Rule |
|---|---|---|
| GPS trace | 229 | A trace from the same platform and day starting within 30 minutes of the accept time and within 2.5 miles of the pickup, and ending within half a mile of the drop-off. |
| Road-routed | 61 | No usable trace. Shortest driving route on OpenStreetMap (OSRM) between the reconstructed pickup and drop-off. All 49 originally untraced rides came back between 0.78× and 1.26× of the billed distance, median 1.01×; 13 more were routed after their trace proved to belong to a different ride. |
| Trace with gaps filled | 6 | Trace cut out mid-ride (Laurel Canyon, the 110, a Hacienda Heights start). The missing stretch is road-routed from where the trace ends to the drop-off. |
| Driver-recalled | 7 | The driver supplied the pickup, drop-off and, where it mattered, the roads taken; routed through those points. |
Time columns are accept times. The handoff brief described the Lyft compact table's time as the pickup time. Comparing it row by row against Lyft's own export shows it equals the accept time on 226 of 226 rides (and the pickup time on one). All time-of-day figures are therefore on an accept-time basis and say so; the median accept-to-pickup gap of 7 minutes moves the hour bands only slightly, and the Patterns page shows both.
Thirteen traces were attached to the wrong ride by the time-window matcher, mostly on Oct 7 and Oct 11 where rides were stacked minutes apart. Each was caught the same way: the trace ended 10 to 26 miles from the ride's actual drop-off. Those traces were discarded and the rides road-routed. One loop ride with identical pickup and drop-off addresses kept its original trace, since there is nothing to route between the same point twice.
The Oct 19 GPS blackout. The phone's location trail stops around 5 PM on Oct 19 on the drive up from Hawthorne. The last Uber trip with a real trace that day ends near Hawthorne Blvd and Rosecrans, nowhere near its Koreatown drop-off; the next two Uber trips are plotted from geocoded street names, and the five Lyft rides after 5:41 PM have only accept points. Lyft's export is complete for those rides (times, fares, accept positions); only the phone trail is missing. All six affected rides, plus the truncated Uber trip, were drawn from the driver's recollection.
Earnings reconciliation. The per-ride record under-reports Lyft by about $219 against the earnings sheet. Lyft's Prop 22 statement resolved it: eligible base pay of $2,541.15 plus tips of $335.22 matches the per-ride total within $15, so the remainder is bonus money Lyft pays outside the ride record. Uber reconciles to the penny on every day.
| Ride | As recalled |
|---|---|
| 2026-10-19 16:54 Uber | I-110 north, exit Pico, Koreatown, ended 8th & Vermont |
| 2026-10-19 17:41 Lyft | pickup Wilshire & Carondelet, dropped at Grocery Outlet, 6th & Bixel |
| 2026-10-19 18:01 Lyft | pickup 600 block of St Paul Ave, Downtown; dropped at Main St & Avenue 20, Lincoln Heights |
| 2026-10-19 18:22 Lyft | pickup 1900 block of Zonal Ave, LAC+USC campus, dropped at Union Station East rideshare zone |
| 2026-10-19 18:36 Lyft | pickup St Louis St & New Jersey St, Boyle Heights (accepted while near Union Station), dropped at Wabash Ave & Evergreen Ave |
| 2026-10-19 19:26 Lyft | pickup 700 block of E Las Tunas Dr, San Gabriel (same passenger as the Union Station Uber, second stop); dropped at Hawaiian Supermarket, Valley Blvd & Del Mar Ave |
| 2026-10-08 07:38 Lyft | pickup 2800 block of S Bedford St, Beverlywood, dropped at LAX Terminal 3 |
Five of the seven route within 0.3 miles of the billed distance. The two that don't (Las Tunas → Valley & Del Mar, 2.53 routed vs 2.13 billed; Bedford → LAX T3, 7.78 vs 8.37) are ordinary route-choice differences.
Six rides have identical pickup and drop-off addresses with 0.8 to 5.9 billed miles (round trips or endpoint reuse). Two Oct 19 Uber rows carry geocoded endpoints whose straight-line distance exceeds the billed miles. Uber's trip-data timestamps run two to nine minutes before its compact-table times (request versus a later event). Three sub-1.4-mile Lyft rides paid $9 to $13, likely wait time or priority pricing; three rides over 12 miles paid under $0.90 a mile. Thirty-one GPS traces from the earlier export remain unmatched to any ride and are not drawn.
This site is one track of a multi-model comparison on the same files: the same two stages (pattern summary, geospatial script) were run by two Claude Code tracks and by local models on the driver's own server, with a question round (the Findings page) and a scorecard to follow. The geospatial script behind the Patterns page is geo_analysis.py; its full output is preserved in the comparison record.