When I publish route analyses, they are usually of the heavyweights like the King and Queen streetcars, or major bus routes like those on Finch, Dufferin, Keele, or Don Mills.
Back on Saturday afternoon, October 5, 2019, I was watching my Twitter feed, and a message went by from someone complaining “where is my bus?” about 70 O’Connor. I looked at Nextbus and to my amazement, all four of the buses were running in a pack headed eastbound on O’Connor, and there was no service anywhere else on the route. I camped on to the route to see what would happen and this is how they evolved.
- 3:55 pm: Four buses headed outward on the common section of the route on O’Connor
- 4:00 pm: Two buses are headed east to Warden Station and two northeast to Eglinton
- 4:33 pm: All four buses are southbound on Coxwell
- 4:37 pm: All four buses are at Coxwell Station
To put this in context, here is the section from the TTC’s Scheduled Service Summary which describes the service as it should be on 70 O’Connor. (Click on the table to expand it.)
Before we go any further, there are a few important points here:
- 70 O’Connor is not the most important route in the TTC’s system, but it serves Toronto East General Hospital and one would hope that this connection to the subway would be reliable. This route carried 7,745 riders per weekday in December 2016, the date of the most recent route-level statistics published by the TTC on Toronto’s “Open Data” site. This puts it in the same league as 6 Bay and higher than the express service to University of Toronto Scarborough.
- When buses run together for an extended period with no visible effort to space out the service properly, this shows that nobody is “minding the store”. From a rider’s point of view, the long gaps in service are precisely why “TTC” means “Take The Car” when they cannot depend on service to show up. This theme was part of my recent exploration of the 41 Keele bus.
- Service that operates this erratically will not attract customers, and even worse, a lot of the space in that pack of four buses was probably empty. When the TTC looks at vehicle loads, they do this on an average basis, and will see low utilization, a possible incentive for a service cut.
Making routes like this work properly (not to mention the really big routes that carry tens of thousands daily) is important. This is central to making transit service attractive.
On Saturday afternoon, there are four buses providing, in theory, a combined service every 11 minutes on the common portion of the route, and every 22 minutes on the branches.
After seeing this, I thought, well, maybe it’s an oddity, something must be wrong, and surely the TTC will sort things out. But just for interest, I added route 70 to my request for vehicle tracking data to see how it behaved for the rest of the month, including the parts of October 5 I had not been watching online. The results were not at all pretty, and I let loose a blast on Twitter about the appalling state of service. It struck a nerve and sparked the most activity I have seen on a Tweet of mine for quite some time. Riders, and not just on O’Connor, see bad service every day.
There is a problem with NextBus (the source of all vehicle tracking seen outside of the TTC) in that it only tracks scheduled runs. Applications that use a route-based data feed from NextBus will not “see” any extra unscheduled buses because NextBus does not follow them. However, they should still exist in the TTC’s source data somewhere. The data I use comes from the TTC, not from NextBus, and should at least show all vehicles that are “signed on” to the route, not just the scheduled buses. If an extra is not signed on to route 70, it will not show up in the data I receive for that route.
The TTC’s position is that I do not have the portion of the tracking data showing unscheduled extras (also known as “RADs” or “Run As Directed” buses) that were used to fill gaps on the route due to construction. My response is that this is as much a face saving stance than an examination of the details. It is one thing to have an extra filling in for extra running time caused by construction, but quite another to have all of the scheduled buses in the same place at the same time with no evident attempt to sort out the service. If the TTC does have records of where the extra(s) operated on O’Connor, I would be happy to receive them and blend them into my analysis. After all, the TTC should be doing the same thing itself already.
Here is what I found, at least for the buses reported in the data provided by the TTC.
Updated 5:56 pm November 20, 2019
The CBC posted a story on their site about this today.
Saturday, October 5, 2019
Click on any of the charts below to expand them in a separate browser tab. Each page covering three hours starting at 7:00 am. The full set for the day is in a PDF linked below them.
An explanation of the format:
Coxwell Station is at the bottom of the page and travel north and east is upward. Because the route branches, there is a separate section to show vehicles on the O’Connor service to Eglinton. Vehicles on this branch will disappear from the lower part of the chart and reappear directly above.
In the morning, the service is well-behaved with buses departing regularly from Coxwell Station and merging properly on their return trips southbound at St. Clair & O’Connor.
By late morning, the even spacing has started to break up, and the Eglinton service is no longer properly meshed with the Warden Station branch. Pairs of buses leave Coxwell Station together starting at 11:40.
Order is restored briefly around 1 pm (13:00), but things really fall apart later with all four buses converging on Coxwell Station around 15:40. They leave together, and this is the cluster of buses we see above in the NextBus snapshots.
The two buses on the Warden Station branch remain close buddies for a few trips until one of them goes out of service just after 6:10 pm (18:10).
Meanwhile, the pair of buses on the Eglinton branch stay fairly close to each other until one of them goes out of service at 8:20 pm. Regular service then is restored with only two buses left on the route.
Full chart set: 70_20191005_Chart
In all of these charts, the slope of the lines is consistent showing that vehicles were not the victims of congestion. They were simply too friendly, and nobody sorted out the service.
And so, I wondered, was October 5 an abberation? What did the weekdays look like?
Tuesday, October 1, 2019
The AM peak of October 1 is not too badly behaved. Some congestion is visible westbound near St. Clair (note the change in the slope of the lines between 8:20 and 9:10), and by 10:00 some bunching is evident inbound to Coxwell Station.
The service gets sorted out, more or less, by 11 am, although one bus sits north of Eglinton. The delay logs for this date show that it was disabled.
In the early afternoon, service on both branches shows bunching. This is in part due to the scheduled swap of vehicles between branches at this time – a pair of buses runs together to Warden on one trip, and runs together to Eglinton on the next one. As we will see below, they were inseparable for hours.
By the PM peak, much of the service was running in a pack with five buses leaving Coxwell Station more or less together at about 3:30 (above) and again at 4:30 (below). The situation continues until after 7:00 pm.
A peculiar thing shows up in the late evening with the Eglinton and Warden Station branches shifting slightly on each trip relative to each other even though they are both supposed to be on a 30 minute headway giving a 15 minute blended service on the common part of the route. Headways between these services vary considerably from trip to trip.
I reviewed the data for the whole month, and this bunching behaviour in the late afternoon occurred to some degree almost every weekday in the month.
On Time Performance and the Embargo on Short Turns
One thing that is quite obvious in these charts is that if a few buses in those clumps were short-turned, something like regular service could be restored. There is no point in sending three buses together to Warden Station, for example, only to have them return in a pack carrying a long gap when at least one of them could have been short turned to fill it. That is what short turns are for.
However, TTC management avoid short turns because the count is reported in the monthly CEO’s report, and the constant decline over recent years gets them a gold star. Unfortunately, this “improvement” hides the problem with gaps and bunches which are not part of the monthly statistics.
The other metric reported by management is “on time performance” at terminals. The premise is that if buses leave terminals on time (define as no more than 1 minute early and up to 5 minutes late), then the rest of the line will take care of itself. As I have shown repeatedly in route analyses, most recently for 41 Keele, even when buses are regularly spaced at the terminal, this quickly degrades into bunched and gapped service because there is little effort to maintain even spacing between buses. However, the condition of service anywhere but the terminal is not reported.
The TTC used to publish an On Time Departure Report for all routes, but this practice stopped after August 2018. The stats for O’Connor were not particularly good, and this goes back to 2015.
Surface construction for the Eglinton Crosstown LRT only began recently, compared to the timeframe of this chart, and it cannot be blamed for the decline in performance shown above.
Headways Leaving Coxwell Station Northbound
Notes about chart formats for new readers:
- In the charts with the coloured dots, each dot represents one bus. Its y position is the interval in minutes to the next bus before it, and the x value is the time of day. Each day has its own colour, and the trend lines show the overall lie of the data through the day. Dots close to the x axis (values near zero) are buses that are closely following their leaders.
- In the “box and whisker” charts, the four sections of each hourly column represent quartiles within all of the data for that hour. The middle two (the box) account for half of the service, with the dividing line between the green and blue segments being the median value. The outer whiskers account for the other half of the service, the top and bottom 25% of trips. Ideally, we would see a box that is about 6 minutes wide (the TTC’s target) and fairly short tails on either side indicating that there is not much spread in the values around that target band.
The screenline for Coxwell Station is at Wolverleigh, one block north of the station. This ensures that arrivals and departures are not erroneously recorded for movements at the station.
The chart below shows the headways leaving Coxwell Station for Week 1 of October.
These values lie mainly in a 20-minute wide band, but many of them are close to zero (two or more buses in a bunch) and several are above the 20 minute line. One is over 50 minutes (Friday, October 4) and it is immediately followed by a bunch of four short headways. This is a five-bus bunch leaving the station.
The same data portrayed in box-and-whisker format showing the quartile distribution of values:
Saturdays do not fare much better as we saw in the example above. Saturday October 5th, the day that started me on this exploration, was particularly bad, but there is a lot of scatter in the data for Saturday October 12th as well
Sunday, which should be a quiet day, also has its problems, but not the extremes of other days. All the same, there are a lot of short headways, and the data values cannot possibly represent the TTC’s goal of a six-minute band within the scheduled departures.
The spike in the top quartile at 12:00 was caused by a gap in the Vision data.
Full chart set: 70_201910_NB_Wolverleigh_MonthHeadways
Headways Leaving Warden Station Westbound
The screenline for this service is at Herron Avenue, about 400m west of Warden. This location was chosen because there is a problem with the data reported from Warden Station – some buses never appear to actually cross Warden Avenue itself (in other words, they never report a location east of Warden). To ensure that all vehicles are captured in headway calculations, the screenline is set far enough west to catch all vehicles.
Mea culpa: When I tweeted about headways on this route, I had not caught this problem in the data which caused some very large values to appear at Warden. This has been fixed, but the maxima are still quite high. Those were “gaps” caused by data errors, but most of the gaps in service were caused by the buses, not by the monitoring system.
Data for the first week of October show a wide scatter in values. This service is supposed to operate every 17-18 minutes until the early evening, but there are many wider gaps, and several buses running at headways below 5 minutes.
Saturday is better, particularly in the morning and evening, but afternoons are very bad on the 5th and 12th of October. Remember that this is the branch of 70 O’Connor that is not affected by construction of the Crosstown at Eglinton and Victoria Park.
Sundays are better than Saturdays, but there is still a lot of scatter in the data especially on the 6th and 13th. Note that the service is scheduled to improve from every 30 to every 20 minutes in the afternoon, and that is why the points and trend lines drop down a bit after 12:00.
Full chart set: 70_201910_WB_Herron_MonthHeadways
Headways Leaving Eglinton Southbound
In order to be clear of any ad hoc diversions around construction at Eglinton as well as to account for the late evening 70B variant of the route, I placed the screenline at O’Connor and Sunrise. This allows buses to make whatever looping move they will at the north end of the route while giving headway measurements at the point where buses start their inbound journey on the main part of this branch.
Headways inbound at Sunrise show the same patterns as service from the other termini. The values are widely scattered and close-to-zero headways occur even on a service scheduled to run every 17-18 minutes.
Week 1 weekdays:
The trend lines on Sundays behave oddly because the data points do not begin at the y axis, and the big swing on Sunday the 6th is caused by the gap in Vision data mentioned above. On Thanksgiving Monday the 14th, the service begins at 6 am.
Full chart set: 70_201910_SB_Sunrise_MonthHeadways
Headways Southbound on Coxwell from O’Connor
By the time inbound service reaches Coxwell, the headway values are spread over a wide range. As on other routes, any bunching and gapping become more accentuated as one moves along the route as bunches close up and gaps get wider. Here is the service for Week 1.
Although the scheduled headway is under 10 minutes, values much in excess of this are quite common as are values near zero (bunches of two or more vehicles). The charts for other weeks and weekends look just like this.
Full chart set: 70_201910_SB_CoxwellOConnor_MonthHeadways
An important issue in a route’s ability to stay on time is the degree to which the schedules provide adequately for actual conditions on street. 70 O’Connor has not gone through the process of “reliability improvement” seen on many other routes. This could contribute to problems on the route, but it does not explain the abdication of responsibility to maintain regular service.
Wolverleigh to Herron Eastbound
For the Warden Station branch of the route (measured from screenlines just north of Coxwell Station at Wolverleigh, and west of Warden Avenue at Herron), the rise and fall of travel times, especially in the afternoon peak, is quite evident as is the variation in values from day to day. This is typical of weekdays (open the full chart sets below to view data for the whole month). Some buses make the trip within the allotted time, but not all of them, and this chart does not include terminal access or dwell times.
On Saturday, the change in travel times is not as marked, but October 5 does stand out showing that conditions on that day were unusual.
Full chart set: 70_201910_EB_Wolverleigh_Herron_MonthLinks
Herron to Wolverleigh Westbound
The westbound data, as one would expect, show longer travel times in the AM peak than the PM, but the difference is not as marked as for eastbound data.
Saturday data show that travel times were somewhat longer on both the 5th and 19th of October, but there were not wide swings in values.
Full chart set: 70_201910_WB_Herron_Wolverleigh_MonthLinks
Wolverleigh to Sunrise Northbound
As with the branch to Warden Station, the Eglinton branch shows much higher travel times outbound in the PM peak but with a considerable day-to-day variation. This is the week 1 chart.
On Saturdays, the travel times are more consistent, but as with the Warden branch, October 5 (red) shows a wider variation in values. What is intriguing here is that since there are only two buses on the route, the alternating high and low times represent the behaviour of two separate buses and drivers. There is a similar pattern on October 12 (yellow). (Note that this pattern does not exist on the Warden branch above.) What changed later in the month? A new schedule period with the same schedule, but likely with new operators. This is an example of how service analysis must deal with “data” that do not necessarily represent road conditions, but rather staff behaviour.
Full chart set: 70_201910_EB_Wolverleigh_Sunrise_MonthLinks
Sunrise to Wolverleigh Southbound
As with the Warden Station branch, the difference in peak running time is not as marked south/west bound on this route, but there are still days that are markedly different from others.
Saturday shows the same pattern for inbound trips with longer travel times on October 5th and 19th (red and green).
Full chart set: 70_201910_WB_Sunrise_Wolverleigh_MonthLinks
Sunrise to Eglinton Loop
These charts show the round trip time from O’Connor and Sunrise north to Eglinton, around the loop via Creighton and back to Sunrise and O’Connor. Where there are much shorter times (primarily in the evening) these are buses that took the much shorter turnback without going north of Eglinton (the 70B Eglinton Square routing). Some of these are daytime short turns.
The travel times vary over a wide range showing the effect of construction at Eglinton for the Crosstown LRT.
On Saturday, the travel times here are in a narrower band and with less variation throughout the day. Note that service runs through the loop via Creighton (the 70A routing) all evening and there is no cutback to the 70B Eglinton Square loop. The change in round trip times simply reflects better conditions during the evening.
There is a much more pronounced drop in travel times on Sunday when the 70B service does operate in the late evening.
Full chart set: 70_201910_Sunrise_To_Sunrise_TerminalMonthLinks
O’Connor Between Coxwell and St. Clair
Looking at the route in more detail, it turns out that the major source of congestion is on O’Connor itself in the common portion of the route. This is particularly so east/north bound, and the effect is not the same on every day. This could be due to spillover effects from construction at Eglinton shifting traffic south to St. Clair and O’Connor.
Full chart sets: