Old history piles up
The system keeps learning from every past week, even months-old ones, as if they mattered as much as last week. It's what happens when nobody cleans up a data pipeline.
Bad data quietly makes delivery promises wrong. We built a safeguard that fixes most of it.
When a courier picks up a package, the system tells the customer when it will arrive. That estimate comes from an AI model that relearns every week from recent deliveries. If the delivery records feeding it go bad, the promises go bad too, and nothing on screen warns anyone.
Backed by trained model updates across experiments on real deliveries from Chongqing, all scored against the real delivery times.
Each update retrains the models from scratch in about seconds, so they're easy to keep current as new data comes in.
Loading the prediction model…
Part 1 of 3
Old data wasn't the real problem. Unreliable sources were.
Nobody hacked anything. We recreated three ordinary ways delivery data goes bad and measured what each one did to the promises.
The system keeps learning from every past week, even months-old ones, as if they mattered as much as last week. It's what happens when nobody cleans up a data pipeline.
The courier and neighborhood averages the model reads stop refreshing at the end of June, and the model keeps using them. It's what happens when a nightly job fails and nobody notices.
couriers stop scanning at the door. They mark a whole stack delivered at the end of the shift, and their device uploads some records twice. To the model, their deliveries look hours slower than they really were.
Every change was applied to an in-memory copy of the LaDe Chongqing delivery data and written to a modification log. The untouched data is the reference. Scoring always uses the real delivery times.
Part 2 of 3
Three checks, placed where bad data gets in.
For each package, the prediction system gives the most likely delivery time and the promise: a time we expect to beat 4 times out of 5. It relearns from the last weeks of deliveries every week. The Guard wraps around that loop.
Every new record is screened for telltale signs: many packages marked delivered in the same minute, the same package uploaded twice, impossible times or distances.
Suspicious records aren't deleted. They count for only as much, so nothing is lost if the check is wrong.
Recent records count more than old ones. Couriers whose records keep disagreeing with others working the same area at the same hour count less.
Old stats are kept, because they were still useful. A person gets an alert instead.
The promise is tuned to be on time about of the time.
If a package is unusual, like a brand-new area or a prediction the model is very unsure about, a dispatcher decides instead of the system.
The prediction system is two LightGBM gradient-boosted regressors: a median model and an 80th-percentile (P80) model, predicting delivery duration in minutes. Both are refit from scratch every week on the previous weeks.
Gives customers the promise. Handles the packages the Guard flags.
Reviews suspicious records and couriers every week. Can restore a courier's trust.
Approves each weekly update before it goes live, and can roll it back.
Decides where the Guard runs and when to stop it.
Part 3 of 3
Yes. It undoes most of the damage and costs almost nothing when the data is clean.
We locked the Guard's settings first, then tested it once on four weeks it had never seen, including China's Golden Week holiday and a large surge in volume.
Average error per package, in minutes: how far the predicted delivery time was from the real one. Same packages, with and without the Guard, in the final test.
Extra error compared with clean data, in minutes per package. The yellow area is the error the Guard removes. Shaded weeks are the final test.
Sloppy scans, design weeks. Solid: without the Guard. Dashed: with it.
Controls and dose-response: development weeks, seed 0. Main results: mean over 3 seeds.
The check at the door is the one place the system makes a yes/no call: is this incoming record suspicious? Here's how often it got that right in the final test, across every run with sloppy scans, compared with the records we know we broke.
What it costs to run the Guard: