Research

Validation & known limitations

How well does TripLibre reconstruct a day? This page separates three kinds of evidence: what has been observed in everyday use, what the automated tests guarantee, and the formal benchmarking that has not been done yet.

!

All accuracy numbers so far come from one person's phone over 17 days, scored against that person's own corrected diary. They describe that sample, not TripLibre in general. Please don't cite them as a general accuracy figure.

Three kinds of evidence

EvidenceWhat it showsWhat it doesn'tStatus
Everyday useWhich situations the app handles and which it gets wrong, seen in the developer's daily use since development began in late September 2026.Rates. These are observations, not measurements.Available
Automated testsThe engine behaves as specified on synthetic days, every time, and edits survive rebuilds.How often real days look like the synthetic ones.Available
Personal calibration studyAgreement with a hand-corrected diary on 17 real days, with held-out validation days.Other people, other phones, other cities.Available, small sample
Formal benchmarkAccuracy, completeness and battery use across participants and devices, against independent ground truth.—Planned

Observed in real-world use

Situations the developer has lived through and checked in the diary, mostly in Philadelphia:

ScenarioUsually worksKnown to go wrong
Walking between buildingsWalks over a few hundred metres become their own trip.Buildings under about 100 m apart, with no fix in between, merge into one stay.
Indoor GPS driftOrdinary drift at home or the office is filtered out.Large venues can drift hundreds of metres and produce duplicate stays 200–500 m apart.
SubwayInferred from a signal blackout with vehicle motion, or from coarse fixes at the two stations.Fast above-ground rail with clean GPS can read as car.
BusUsually right at group level (transit).Often labelled subway or car: bus and road traffic look the same without transit schedules.
Rideshare / taxiRead as car (taxi is never predicted; it counts as car at group level).Before round 2, periodic GPS holes made many of these look like subway.
Short stopsStops of five minutes or more become visits; shorter ones can be stamped.Unstamped short stops are missed.

Automated tests

Run on every push and pull request (.github/workflows/ci.yml). None of them use real location data.

Personal calibration study

Issue #46 replayed one phone's raw data through the engine and compared it with the same person's corrected diary. The days were split into calibration days (for tuning) and validation days (scored once) before any tuning. The full protocol, metrics and adverse tradeoffs are in docs/research/inference-calibration.md.

Metric (round 1, 5 validation days)BeforeAfter
Whole-day time agreement0.8270.939
Visit F10.850.86
Trip F10.860.86
Visit departure error, mean absolute32.0 min5.6 min

Round 2 tuned mode detection. On the 17 calibration days (in-sample), group-level mode accuracy on human-labelled trips rose from 0.51 to 0.82; exact mode accuracy rose from 0.39 to 0.54. The held-out check for round 2 is still pending, because no new days had been recorded after the cutoff.

The study publishes aggregates only. The raw data and per-day reports stay on the developer's machine.

Planned benchmarking

Planned Nothing in this section has been done yet. It defines what a formal evaluation should report, so that results can be compared across versions and studies.

Metrics

AreaMetric
Stays and tripsPrecision, recall and F1 under the one-to-one matching rules of the calibration study; split and merge counts.
TimingSigned and absolute arrival and departure error (median, mean, p90).
Whole dayShare of minutes where the diary and the truth agree on "at a place" versus "travelling".
ModeExact and group-level accuracy, and a confusion matrix, on independently labelled trips.
CompletenessShare of each day with collection running; days with gaps over 15 minutes; trips flagged has_gap.
BatteryBattery drain per day attributable to TripLibre, by collection profile and device model.
Correction burdenEdits per person-day and time spent correcting.

Ground truth

The calibration study used the user's own corrections as truth, which risks agreeing with itself. A formal benchmark should use an independent reference: a researcher-kept log, a scripted route with timestamps, or a second device. It should also report uncertainty (for example, day-level bootstrap intervals) and keep a held-out set.

Reproducible fixtures

Real GPS logs can't be shared without exposing the people in them. Planned fixtures are synthetic or carefully de-identified (shifted, rotated, time-offset) traces that reproduce a failure class, stored as SQLite files that hht-calibrate replay can read. See proposing an inference test case.

Known limitations