← Back to projects
Summary

The verification problem behind Turf is: given only a phone, can you tell a genuine on-foot route from someone who drove it, biked it, or faked GPS from home? I'm building the answer as an on-device classifier that fuses the phone's sensors into a single score for P(genuine on-foot activity). What makes it tractable is the data strategy — I generate my own labeled training data by running real routes, the same self-improving-pipeline pattern I built for Lustr's vision model. This is an in-progress build; the sensor design and staged training plan below are what I'm actively working on.

Stack

What it's built with.

Modeling

  • Time-Series Classification
  • Sensor Fusion
  • Adversarial / Anti-Fraud Framing

Signals

  • GPS + Dead Reckoning
  • Pedometer / Gait (IMU)
  • Barometric Elevation

Data & Serving

  • Self-Generated Labels
  • Active-Learning Loop
  • On-Device (Core ML)
Details

How it works.

Why verification is the core problem

The whole platform hinges on one question: did this activity really happen on foot? It's a hard question because the obvious signal — a GPS track — is the easiest one to fake. Location alone can't tell a walk from a slow drive or a replayed trace.

The verification model turns 'did this person really walk these stops?' from an unanswerable trust question into a number the system computes. That score is the precondition for trusting field activity you didn't directly witness.

The training data

The model is only as good as its labels, and good labels for this problem are nearly impossible to buy — there's no public dataset of 'genuine vs. spoofed on-foot traces.' I generate them as a byproduct of operating: walking real routes yields positive labels, and deliberately driving, biking, or spoofing the same routes yields matched negatives.

That's the same self-improving-pipeline shape I built for Lustr's vision model — do the work, capture the outcome, feed it back as training data — applied to a different signal. The further the platform runs, the more labeled data it accumulates. It's a compounding data advantage, not a one-time training run.

Highlights

The things I'm proudest of.

  • Sensor fusion: combines GPS, the pedometer (step count + cadence), the accelerometer/gyroscope (gait + heading), and the barometer (elevation) into one feature stream, so the model sees far more than a GPS track that's trivial to fake.
  • Genuine-activity signature: walking 1 km logs ~1,300 steps while a car logs ~0 — the hardest-to-fake tell; a human gait waveform in the accelerometer (vs. an engine's vibration or a phone resting on a seat) and a stop-and-resume dwell cadence further separate real on-foot activity from impostors.
  • Self-generated labels (the data flywheel): I walk real routes for genuine positive labels, then deliberately drive, bike, and spoof the same routes to generate negatives — a clean supervised training set for a problem with no public dataset.
  • Staged build: Phase A ships heuristic guardrails (step-count-vs-distance thresholds) that also auto-label data for the Phase B learned time-series model; Phase C is continuous adversarial hardening as new spoofing methods appear.
  • Per-stop detection: a companion 'slow → turn → pause → resume' micro-pattern detector gives per-stop confidence, trained on logged ground truth captured while walking.