Parcaster

Analysis and ML based prediction of free parking spaces in St. Gallen.

⛶  Open fullscreen

ParCaster

Ausgangslage

Die Suche nach einem Parkplatz hat viele negative Auswirkungen, wie z. B. Zeit-, Treibstoff- und Emissionsverschwendung, überhöhte Parkgebühren usw. Um die Parkplatzsuche zu erleichtern, ist das Ziel dieses Projekts durch die Anwendung von maschinellem Lernen die Verfügbarkeit von Parkplätzen in der Stadt St. Gallen zur geschätzten Ankunftszeit der Nutzer vorherzusagen. Der Nutzer erhält eine personalisierte Parkplatzempfehlung.

Beschreibung ParCaster

ParCaster ist eine künstliche Intelligenz, welche freie Parkplätze in der Stadt St. Gallen vorhersagt. Das zugrundeliegende Modell erstellt aufgrund von Inputs wie z.B. der Wetterprognose, von Feiertagen und Veranstaltungen oder auch Schulferien entsprechende Prognosen. Der Nutzer kann auf der Website die voraussichtliche Parkzeit eingeben, worauf ParCaster die Anzahl freie Parkplätze je Parkgarage in der Stadt St. Gallen vorhersagt. Der Nutzer spart Zeit und Geld.

Website ParCaster

https://parcaster.github.io/

Vorgehen und Implementierung

Die Entwicklung des ParCasters kann in die Schritte Data-preprocessing, Modellentwicklung und Erstellung des Web-Services unterteilt werden. Die einzelnen Schritte werden nachfolgend kurz erläutert:

Data und Datapreprocessing

Die Daten, welche dem entwickelten Modell zugrunde liegen, werden vom Open-Data-Portal der Stadt St. Gallen (https://daten.stadt.sg.ch/explore/dataset/freie-parkplatze-in-der-stadt-stgallen-pls/table/?disjunctive.phid&disjunctive.phname) öffentlich zur Verfügung gestellt. In den Daten wird dargestellt, wie viele Parkplätze zu einem bestimmten Zeitpunkt in den Parkgaragen der Stadt St. Gallen frei sind. Die zur Verfügung stehenden Daten sind aus dem Zeitraum zwischen Oktober 2019 und November 2023. Bevor die Daten für die Kalibrierung des Modells verwendet werden, werden sie bereinigt. U.a. werden Ausreisser entfernt. Zudem werden die Daten normalisiert und neue Features generiert.

Modellentwicklung

Mit den vorbereiteten Daten wird ein LSTM (https://de.wikipedia.org/wiki/Long_short-term_memory) in Python trainiert. Dabei werden unterschiedliche Werte für diverse Parameter (u.a. Anzahl Layer, Batch-Size, Optimizer) ausprobiert. Als Loss-Function wird der MSE verwendet. Die Resultate werden mit Weigths & Bias getrackt. Die Ergebnisse können auf der folgenden Homepage eingesehen werden: https://wandb.ai/parcaster/pp-sg-lstm/sweeps/zx34brsw

Das entsprechende Jupyter Notebook ist unter folgenden Link zu finden: https://github.com/parcaster/parcaster/blob/master/model/W%26B_PPSG_LSTM.ipynb

Die untenstehenden Grafiken zeigen beispielhaft den Vergleich der Vorhersage mit den effektiven Werten nach dem Training. Dabei sind die Vorhersagen für Testdaten gemacht worden, welche das Modell während des Trainings nicht gesehen hat:

Vorhersage vs. effektive Werte für den 01-03-2023 00:11 Uhr

Prediction 1

Vorhersage vs. effektive Werte für den 01-03-2023 02:27 Uhr

Prediction 2

Erstellung Web-Service

Das trainierte Modell wird über eine API auf Heroku deployed. Damit der Nutzer für den benötigten Zeitpunkt eine Prognose zu den freien Parkplätzen abfragen kann, wird ihm ein User Interface zur Verfügung gestellt. Das Userinterface wird mit Github Pages erstellt.

Nächste Schritte

  • Verbesserung des Modells (LSTM)
  • Weitere Modelle testen (statistische Modelle, Transformer)
  • Preprocessing der Daten verfeinern (z.B. weitere Features entwickeln)

Mögliche Weiterentwicklungen

  • Vorteile der einzelnen Parkmöglichkeiten in User Interface darstellen (z.B. überdacht vs. nicht-überdacht)
  • Distanz zum Zielort in Vorschlag einarbeiten
  • Parkplatz über User Interface vorreservieren für gewünschten Zeitpunkt
This content is a preview from an external site.
 

Event finished

03.12.2023 10:00

Repository updated

02.12.2023 20:15 ~ gaston_wey

Edited content version 19

02.12.2023 20:15 ~ gaston_wey

Edited content version 17

02.12.2023 20:11 ~ gaston_wey

Merge pull request #18 from parcaster/fix_model

Fix model (@ritahaffter)

Get

02.12.2023 20:08

Edited content version 16

02.12.2023 20:08 ~ gaston_wey

Edited content version 15

02.12.2023 20:07 ~ rita_haffter

Edited content version 14

02.12.2023 20:07 ~ jan_frei

Edited content version 13

02.12.2023 20:03 ~ rita_haffter

Edited content version 12

02.12.2023 20:03 ~ rita_haffter

Edited content version 11

02.12.2023 20:03 ~ rita_haffter

Edited content version 10

02.12.2023 20:03 ~ rita_haffter

prooooofread readme (@mr-perseus)

Get

02.12.2023 19:45

Edited content version 9

02.12.2023 19:45 ~ rita_haffter

Edited content version 8

02.12.2023 19:45 ~ rita_haffter

Update model training (@mr-perseus)

ReadMe - Teil 2 (@ritahaffter)

ReadMe (@ritahaffter)

add images (@mr-perseus)

Get

02.12.2023 18:04

Edited content version 7

02.12.2023 18:04 ~ jan_frei

Edited content version 6

02.12.2023 18:02 ~ jan_frei

ParCaster: Deine persönliche Parkplatzempfehlung für die Stadt St. Gallen.

02.12.2023 17:59 ~ jan_frei

Find

02.12.2023 17:58

Edited content version 4

02.12.2023 17:58 ~ jan_frei

Edited content version 3

02.12.2023 17:57 ~ jan_frei

Edited content version 2

02.12.2023 17:34 ~ rita_haffter

cleanup (@mr-perseus)

Round predictions (@mr-perseus)

Improve output (@mr-perseus)

Download model from wandb (@mr-perseus)

add model scaler for now (@mr-perseus)

Add scaler to transform (@mr-perseus)

Merge remote-tracking branch 'origin/fixmodel' into fixmodel (@mr-perseus)

Fix (@mr-perseus)

Allow all for CORS for now (@mr-perseus)

Add / improve scalers (@mr-perseus)

Fix (@mr-perseus)

Add scaler (@mr-perseus)

Fix visualization (@mr-perseus)

Merge remote-tracking branch 'origin/master' into fix_model (@mr-perseus)

Add plotting and stuff (@mr-perseus)

get model to run with new feature function (@mr-perseus)

Merge pull request #17 from parcaster/usefeaturesfrom_timestamp

Use features from timestamp (@ritahaffter)

fix import (@mr-perseus)

Find

02.12.2023 08:20

Joined the team

02.12.2023 08:20 ~ jan_frei

Repository updated

02.12.2023 08:20 ~ rita_haffter

Joined the team

02.12.2023 08:20 ~ rita_haffter

Challenge posted

02.12.2023 08:20 ~ rita_haffter

Fix procfile path (@mr-perseus)

cleanup (@mr-perseus)

Fix non-working app. (@mr-perseus)

change to class (@mr-perseus)

add predict class (@mr-perseus)

Event started

01.12.2023 16:00

use build_dataframe from function (@mr-perseus)

 
Contributed 3 months ago by rita_haffter for Open Data Hack St.Gallen
All attendees, sponsors, partners, volunteers and staff at our hackathon are required to agree with the Hack Code of Conduct. Organisers will enforce this code throughout the event. We expect cooperation from all participants to ensure a safe environment for everybody.

Creative Commons LicenceThe contents of this website, unless otherwise stated, are licensed under a Creative Commons Attribution 4.0 International License.

Open Data Hack St.Gallen