Subway delay model

Can a computer guess the next subway delay?

We tried. It can, a little. Here's what we did and what we found, plus the real model so you can test it yourself.

Tap a line to jump to the model.

What we tried

Every hour, on every subway line, the MTA might post an alert that says "delays" or "service suspended." We asked a simple question: can a computer look at what already happened and guess whether an alert like that is coming in the next hour?

We gave the computer only things it could know ahead of time: which line it is, what time it is, and how much trouble that line has had lately. Then we showed it 1,052,867 hours of history, every line and every hour from 2021-01-01 to 2026-04-27, and let it look for patterns.

The rule we asked it to learn: a line-hour counts as a "bad hour" if an unplanned delay or suspension alert for that line starts inside the next 60 minutes. Planned work, like weekend track repairs, does not count.

To be fair, we tested it on months it had never seen. Everything below comes from that test: the last 15% of the timeline, starting in July 2025.

Try the model

This is the actual model, running in your browser. Move the three controls and watch the train.

Which line?

Starts at the line's real average. Dragging it changes the line's recent alert count, its 30-day disruption rate, and how long since its last problem, all together.

What kind of day?

The model's score on a line from quiet to alarm

What we found

It catches most bad hours…

When we used the model's alarm line, it noticed of the real disruptions in the test months. To catch that many by guessing, you'd have to flag most of the day.

Out of 100 real disruptions, the dark squares are the ones the model flagged ahead of time.

…but it cries wolf a lot.

Of every 100 hours the model raised an alarm for, only about turned into a real disruption. That's better than the you'd get by picking hours at random, but not by enough to send riders alerts.

Out of 100 alarms, the dark squares are the ones that were right.

Mostly it just remembers who's been having a bad month.

We gave the A train two versions of the same hour. One used its real recent history. The other pretended its history was the same as an average line. The score fell from the alarm zone to the middle of the meter. The line's name matters a little. What happened to it lately matters more.

Why we wouldn't put this in an app

What it is good for: helping someone decide where to look first. That's a smaller job than predicting the future, and one it can actually do.

Want the details?

The full research brief has the exact numbers, the charts, every threshold, and the sliders for all eighteen inputs. The code rebuilds everything from the public MTA data with one command.