Actually I was pretty careful in my suggested implementation.
The problem with your suggestion is that the rand will be recomputed each times it's looked at. Looking at it more than twice will make it appear to literally spin.
Instead, I has suggested that the amount of random offset is a constant which is set as a property on the object, and recomputed on a periodic interval, like once every 15 minutes or so. Yes, it could be off by different amounts for different levels, 0 for green, more the lower you go, but most importantly, the 'amount off' will be consistent when looking at it from one minute to the next, yet drift wildly from hour to hour.
This will prevent you from looking at it and seeing, "1 minute", "soon", "3 minutes", "1 minute", "2 minutes", "soon".
Instead, you'll see "3 minutes, "3 minutes", "2 minutes", "2 minutes", "soon".
That way, on green, the train will arrive on time, but on red, it could be stuck on soon for 3 minutes. Or the train could arrive when it still says it has 2 minutes left to go. But everyone standing in the station will all see the same 'wrong' value.