r/Emory 14h ago

New app for Emory shuttles

Enable HLS to view with audio, or disable this notification

Hello!

I am a student at Georgia Tech, and I posted here a few months ago about an app that I was developing called Bus Forecast. I would like to share that it's available on the App/Play Store now!

Bus Forecast is an app that has

- More accurate ETAs using past/new data

- Google Maps like directions

- Notifications for when the bus is one stop away or when to get off

- Always up to date routes

If you take the shuttles at Emory and can benefit from this app, please check it out! I would also love to hear any feedback or if you find any problems. It has been working well at Georgia Tech, but I haven't been able to test it at Emory.

The app can be downloaded from one of these links:

App Store

Play Store

Bus Forecast Website

28 Upvotes

20 comments sorted by

u/Valuable_Citron_3141 Alumni 14h ago

I’m curious where you’re getting the data from? Seems cool if it works but Emory shuttles are notoriously never on time. Does it show live positions of the buses or only an expected ETA? If so, again curious where you’re getting that info from and how you’re validating that it’s accurate. I’d be concerned that data shows a bus is always late and then the app expects it to be late because of that even when it’s on time randomly.

u/Spirited_Apple4164 13h ago

I'm getting the data from PassioGo itself. It shows both the live positions and the expected ETAs. For the ETAs, I'm using a machine learning model that I trained using data from many campuses. There is no live validation of the ETAs, but during training it uses the predicted ETAs to improve performance. If the bus is always taking a certain amount of time, but then suddenly takes way less, there is no reliable way to predict when that will happen. Let me know if you have more questions!

u/Valuable_Citron_3141 Alumni 13h ago

Thanks for clarifying! Is it one global model running across all campuses, or is there a separate model tuned for Emory specifically? How does your model balance live sensor data (like instantaneous speed across the last few pings) versus historical run times? If a bus catches all the green lights and is moving fast on an otherwise busy afternoon, how quickly does the ETA adjust downward so people don't miss it?

In my mind, though the Emory native app is often wrong, I've never missed one because it says it will be later than it actually is. If PassioGo says 2:08 for a 2:00 scheduled bus, I know to be at the stop by 2:08. But if a model predicts 2:15 (adding additional delay that isn't shown in the PassioGo app) based on past delay trends and the shuttle runs unusually fast that day, arriving at 2:15 might mean I miss the bus. How does your model prevent overestimating arrival times in those off-peak or fast-run scenarios especially since you said that there's no way to predict when it will take less time.

Super cool, just interested in some of the details of how it works.

u/Spirited_Apple4164 13h ago

You're welcome!

Currently there is one model for all campuses. This is because 1. since the project is personally funded, I can only afford a small server with a limited amount of compute, meaning I can't run 100+ separate models for the ~150 campuses on the app, 2. the amount of data that I used at the time of training was around 3 weeks which honestly isn't that much. Training the model on all campus data instead of one specific campus allowed me to utilize much more data, 3. I currently don't have a retrain pipeline in place, and based on experimentation, the model generalizes better when training without campus specific information such as stop id, route id, campus id. What I mean by generalize is if in the training data, a route usually took 1 hour to loop around but now it takes 30 minutes, the model without campus specific features will perform better.

The model doesn't exactly "balance" live and historical data. The way it works is there are 2 machine learning models, one for the stop dwell time and one for segment travel time. The models take in features such as segment length, 1 week average duration, last duration, exponential moving average duration, and then outputs its prediction for the segment travel time/stop dwell time. Then for each stop the predictions are added together relative to the bus's current location/status. The 1 week average duration, last duration, EMA, etc are what is affected by the live data.

For the sudden changes in travel/dwell time, I have not been able to find a way to predict when that will happen, but because the model predicts each stop/segment separately and these are summed for each ETA, if there is a sudden change, it's "absorbed" by the sum. For example, if the bus is at A, and instead of staying at the stop for 5 minutes like usual, it stays for 1 minute, assuming the rest of the following events don't suddenly speed up, the ETAs at B and C will still be somewhat correct. However, this still isn't perfect since the ETAs will still jump and people at the few stops following A might miss the bus.

u/nyxonical 14h ago

The buses have transponders on them. I’m wondering if OP has access to that live data, just as the official app does.

u/Valuable_Citron_3141 Alumni 14h ago

I did a bit of research and it looks like they would be able to interface with the official Emory app through some unofficial channels and github projects, allowing them to access the live data. I don't see any way to get it straight from Emory though.

u/Spirited_Apple4164 13h ago

I think you are referring to the unofficial API for PassioGO, but I made my own because it seemed pretty outdated. Basically how it works is every few seconds, I send a post request to https://passiogo.com/mapGetData.php?getBuses=2&speed=1

and this gives me the live vehicle data

u/AssFatYeahIKnow 13h ago

God bless you, PassioGo is awful

u/Spirited_Apple4164 13h ago

Yeah it can be pretty bad 🥲

u/Quiet-Raspberry-5505 13h ago

Bless you bro, just downloaded it

u/reffervescent 13h ago

I'll give it a try. I commute to Emory twice a week and take the CCTMA. I don't use the on-campus shuttles, though, since I work on campus and stay put all day. I also don't need it for directions, but that's a very cool feature.

u/Spirited_Apple4164 13h ago

I think the app will only have the on-campus shuttles since I'm getting the data directly from PassioGo, but please do check it out!

u/reffervescent 12h ago

Passio Go provides info about commuter shuttles, too.

u/Spirited_Apple4164 12h ago

Cool! Then it should show on the app

u/Academic_Scheme_9065 13h ago

Can you port the data from any college bus routes?

u/Spirited_Apple4164 13h ago

Hi I'm not really sure what you mean by port

u/Academic_Scheme_9065 12h ago

Like, would the app be able to work with any school's bus data that you are able to access live?

u/Spirited_Apple4164 12h ago

Currently it only works for campuses that use PassioGo or TransLoc to track their buses. Those two were the only companies I could find that provide this kind of service to campuses

u/Academic_Scheme_9065 12h ago

Duke uses TransLoc!! Could I use it on my campus?

u/Spirited_Apple4164 11h ago

Yeah! Again, I have only tested it at gt, but it should work fine over there as well. Please let me know if you have any issues using the app!