{"id":8587,"date":"2021-10-26T09:00:00","date_gmt":"2021-10-26T07:00:00","guid":{"rendered":"urn:uuid:1871863a-4dde-4f67-90d2-b9492faf1d58"},"modified":"2021-10-21T11:45:14","modified_gmt":"2021-10-21T09:45:14","slug":"vorhersage-von-freien-parkplaetzen-mittels-machine-learning","status":"publish","type":"post","link":"https:\/\/blog.fhgr.ch\/blog\/vorhersage-von-freien-parkplaetzen-mittels-machine-learning\/","title":{"rendered":"Vor\u00adher\u00adsa\u00adge von freien Park\u00adpl\u00e4t\u00adzen mittels Machine Learning"},"content":{"rendered":"\n

Die Studierenden des Studiengangs Digital Business Management konnten das Wahlmodul Data Science & Machine Learning besuchen und in die Welt der datengetriebenen Analyse eintauchen.<\/p>\n\n\n\n\n

Mein Name ist Elia Perenzin<\/a> und ich studiere Digital Business Management. Ich hatte das Vergn\u00fcgen das Wahlmodul Data Science & Machine Learning bei Ingmar Baetge zu besuchen. Im Modul erhielten wir einen breiten Einblick in die Techniken, welche f\u00fcr das maschinelle Lernen verwendet werden. Die Themen reichten von \"supervised learning\", \"unsupervised learning\" bis hin zu \"reinforcement learning\" mit neuronalen Netzen. Da die Welt des maschinellen Lernens sehr komplex und zu umfangreich f\u00fcr einen Kurs \u00fcber sechs Tage ist, erhielten wir nur einen oberfl\u00e4chlichen Einblick in die einzelnen Themen. Ebenfalls wurde ein eigenes Semesterprojekt durchgef\u00fchrt, welches ich hier in diesem Blogbeitrag vorstellen m\u00f6chte. <\/p>\n\n\n\n Die Aufgabe<\/span><\/h3>\n \n\n\n

Der Auftrag f\u00fcr das Semesterprojekt war sehr offengehalten. In Teams von zwei bis drei Personen sollte ein kleines Data-Science-Projekt durchgef\u00fchrt werden. Dazu konnten eigenst\u00e4ndig Daten gesucht und analysiert werden. Das Ziel war es anhand der Daten ein passendes Modell zu trainieren. Das Projekt f\u00fchrte ich mit Jessica Nigg<\/a> und Dominic Kunz<\/a> durch.<\/p>\n\n\n\n Die Daten<\/span><\/h3>\n \n\n\n

F\u00fcr das Projekt w\u00e4hlten wir keinen Standartdatensatz aus dem Internet, denn wir wollten nicht etwas analysieren, was bereits zuvor in unz\u00e4hligen Tutorials behandelt wurde. Wir entschieden uns, einen eigenen Datensatz zu verwenden. Ein Skript, welches auf einem Raspberry-Pi l\u00e4uft, sammelte w\u00e4hrend dem Zeitraum von 11 Monaten alle 5 Minuten die freien Parkpl\u00e4tze von allen Parkh\u00e4usern in Z\u00fcrich. Die Idee f\u00fcr das Skript entstand in einem fr\u00fcheren Semester an der Fachhochschule und sammelte seither die Daten. Der Datensatz enthielt \u00fcber drei Millionen Datenpunkte, welche sich perfekt f\u00fcr dieses Projekt eigneten.<\/p>\n\n\n\n Die Features<\/span><\/h3>\n \n\n\n

Im originalen Datensatz war nur ein Zeitstempel vorhanden. Zu Beginn mussten wir deshalb weitere Felder (Features) berechnen, um ein gutes Modell zu trainieren. Die Features, welche aus dem Zeitstempel berechnet wurden, waren zum Beispiel der Monat, Wochentag, Stunde und Tageszeit.<\/p>\n\n\n\n Die Analyse<\/span><\/h3>\n \n\n\n

Aus den Daten wurde eine Grafik generiert, damit wurde versucht zu erkennen, ob \u00fcberhaupt eine Regelm\u00e4ssigkeit in den Daten vorhanden ist. Zus\u00e4tzlich wollten wir \u00fcberpr\u00fcfen, ob die Auswirkungen der Jahreszeiten oder der Einfluss der Corona-Pandemie in den Daten ersichtlich sind. So konnten Parkh\u00e4user identifiziert werden, bei denen es Sinn macht, ein Modell zu trainieren, weil sie eine gewisse Regelm\u00e4ssigkeit aufzeigen.<\/p>\n\n\n\n\n

Im Diagramm \"Feldegg\" kann man gut die Regelm\u00e4ssigkeit in den Daten erkennen. Das Parkhaus ist jeweils in der Nacht und am Morgen nicht stark ausgelastet. Am Tag steigt die Auslastung (durch die dunkel schattierten Felder zu erkennen). Im Beispiel \"Accu\" ist keine solche Regelm\u00e4ssigkeit erkennbar, deshalb eignet sich dieses Parkhaus nicht um ein Modell zu trainieren.<\/p>\n\n\n\n\t\n \n\t \t\t \t\t\t\t\t\n\n\"\"\n\t\t\t<\/picture>\n\t <\/div>\n\n\n\n

In dieser Grafik sieht man die durchschnittliche Auslastung eines Parkhauses pro Stunde anhand der Schattierung. In einer Zeile sind die Monate abgebildet. Die Spalten repr\u00e4sentieren die Tage im Monat, die einzelnen Pixel repr\u00e4sentieren jeweils den durchschnittlichen Wert innerhalb einer Stunde. Ein dunkler Pixel bedeutet dabei eine hohe Auslastung, ein heller Pixel eine niedrige Auslastung des Parkhauses.<\/p>\n\n\n\n Das Model<\/span><\/h3>\n \n\n\n

Das Trainieren eines guten Modelles war die gr\u00f6sste Herausforderung des Projektes. Zus\u00e4tzlich sollte nicht nur ein Modell trainiert werden, sondern f\u00fcr jedes Parkhaus der Stadt ein individuell angepasstes Modell. Um Erfahrungen zu sammeln, trainierten wir eine Reihe verschiedener Modelle mit Hilfe verschiedener Lernalgorithmen. Zun\u00e4chst experimentierten wir mit einer linearen Regression, aber es wurde schnell festgestellt, dass ein solches Modell nicht erfolgreich sein kann, da die Daten keine rein lineare Abh\u00e4ngigkeit zueinander haben. In weiteren Experimenten probierten wir das \"decision tree\"-Modell und landeten dann schlussendlich beim \"random forest\"-Modell.<\/p>\n\n\n\n\n

Die Modelle, welche mit einem \"random forest\" trainiert wurden, zeigten eine sehr hohe Performance. Scores von \u00fcber 90 % waren keine Seltenheit und wir waren begeistert von den Resultaten. Doch leider tr\u00fcbten die ersten Resultate und wir mussten feststellen, dass wir es mit einem klassischen \"overfitting\" zu tun hatten. Die Trainings- und Testdaten waren nicht sinnvoll aufgeteilt. Wir arbeiteten mit einem klassischen 80-20-Split. Was bedeutet, dass 80 Prozent der Daten f\u00fcr das Training und die anderen 20 Prozent f\u00fcr die Validierung verwendet werden. Da dieser Split zuf\u00e4llig generiert wird, hatte das Modell zum Beispiel einen Datenpunkt f\u00fcr den 28. Januar 2021 um 8:00 Uhr und als versucht wurde, eine Vorhersage f\u00fcr den 28. Januar 2021 um 8:05 Uhr zu machen, hatte das Modell leichtes Spiel da der Datenpunkt bis auf 5 Minuten bereits bekannt war.<\/p>\n\n\n\n\n

So mussten die Daten mit einer anderen Technik aufgeteilt werden, wir versuchten es mit dem \"K-Fold\". \"K-Fold\" liefert Train\/Test-Indizes, um die Daten in Train- und Test-Sets aufzuteilen. Es teilt den Datensatz in k aufeinanderfolgende Folds auf. Die Folds waren in unserem Fall die 10 Monate des Datensatzes. Mit diesen 10 Folds wurden 10 verschiedene Modelle trainiert, dabei wurde das Modell jeweils mit einem anderen Monat validiert. Mit dieser Variante erreichten wir realistischere Werte f\u00fcr unser Modell.<\/p>\n\n\n\n Fazit<\/span><\/h3>\n \n\n\n

Das ganze Projekt war f\u00fcr uns eine Achterbahnfahrt, mit vielen vermeintlichen Erfolgen und einigen harten R\u00fcckschl\u00e4gen. Zum Schluss konnten wir als Team ein Modell trainieren, welches gute Resultate produziert und gleichzeitig auch f\u00fcr verschiedene Zeitr\u00e4ume generalisiert. Wir konnten sehr viel lernen durch das praktische Anwenden des gelernten Unterrichtsstoffes und durch den regelm\u00e4ssigen Austausch mit dem Dozenten konnte individuell auf Probleme im Projekt eingegangen werde.<\/p>\n\n\n\n\n

Der ganze Sourcecode ist \u00f6ffentlich auf GitHub<\/a> ersichtlich.<\/p>\n\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":57,"featured_media":8588,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[221],"tags":[],"acf":[],"yoast_head":"\nVor\u00adher\u00adsa\u00adge von freien Park\u00adpl\u00e4t\u00adzen mittels Machine Learning - FHGR Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.fhgr.ch\/blog\/vorhersage-von-freien-parkplaetzen-mittels-machine-learning\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Vor\u00adher\u00adsa\u00adge von freien Park\u00adpl\u00e4t\u00adzen mittels Machine Learning - FHGR Blog\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.fhgr.ch\/blog\/vorhersage-von-freien-parkplaetzen-mittels-machine-learning\/\" \/>\n<meta property=\"og:site_name\" content=\"FHGR Blog\" \/>\n<meta property=\"article:published_time\" content=\"2021-10-26T07:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-10-21T09:45:14+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.fhgr.ch\/wp-content\/uploads\/2021\/10\/titelbild-1200x0-c-default.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"675\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/blog.fhgr.ch\/wp-content\/uploads\/2021\/10\/titelbild-1200x0-c-default.png\" \/>\n<meta name=\"twitter:label1\" content=\"Gesch\u00e4tzte Lesezeit\">\n\t<meta name=\"twitter:data1\" content=\"4 Minuten\">\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https:\/\/blog.fhgr.ch\/#organization\",\"name\":\"FH Graub\\u00fcnden\",\"url\":\"https:\/\/blog.fhgr.ch\/\",\"sameAs\":[],\"logo\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/blog.fhgr.ch\/#logo\",\"inLanguage\":\"de-DE\",\"url\":\"https:\/\/blog.fhgr.ch\/wp-content\/uploads\/2019\/09\/fhgr_rgb_granit.png\",\"width\":7512,\"height\":1182,\"caption\":\"FH Graub\\u00fcnden\"},\"image\":{\"@id\":\"https:\/\/blog.fhgr.ch\/#logo\"}},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.fhgr.ch\/#website\",\"url\":\"https:\/\/blog.fhgr.ch\/\",\"name\":\"FHGR Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/blog.fhgr.ch\/#organization\"},\"inLanguage\":\"de-DE\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/blog.fhgr.ch\/blog\/vorhersage-von-freien-parkplaetzen-mittels-machine-learning\/#primaryimage\",\"inLanguage\":\"de-DE\",\"url\":\"https:\/\/blog.fhgr.ch\/wp-content\/uploads\/2021\/10\/titelbild.png\",\"width\":2560,\"height\":1440},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.fhgr.ch\/blog\/vorhersage-von-freien-parkplaetzen-mittels-machine-learning\/#webpage\",\"url\":\"https:\/\/blog.fhgr.ch\/blog\/vorhersage-von-freien-parkplaetzen-mittels-machine-learning\/\",\"name\":\"Vor\\u00adher\\u00adsa\\u00adge von freien Park\\u00adpl\\u00e4t\\u00adzen mittels Machine Learning - FHGR Blog\",\"isPartOf\":{\"@id\":\"https:\/\/blog.fhgr.ch\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blog.fhgr.ch\/blog\/vorhersage-von-freien-parkplaetzen-mittels-machine-learning\/#primaryimage\"},\"datePublished\":\"2021-10-26T07:00:00+00:00\",\"dateModified\":\"2021-10-21T09:45:14+00:00\",\"inLanguage\":\"de-DE\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.fhgr.ch\/blog\/vorhersage-von-freien-parkplaetzen-mittels-machine-learning\/\"]}]},{\"@type\":\"Article\",\"@id\":\"https:\/\/blog.fhgr.ch\/blog\/vorhersage-von-freien-parkplaetzen-mittels-machine-learning\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blog.fhgr.ch\/blog\/vorhersage-von-freien-parkplaetzen-mittels-machine-learning\/#webpage\"},\"author\":{\"@id\":\"https:\/\/blog.fhgr.ch\/#\/schema\/person\/7eeff53375f68d87b9cff1c307e13ce8\"},\"headline\":\"Vor\\u00adher\\u00adsa\\u00adge von freien Park\\u00adpl\\u00e4t\\u00adzen mittels Machine Learning\",\"datePublished\":\"2021-10-26T07:00:00+00:00\",\"dateModified\":\"2021-10-21T09:45:14+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blog.fhgr.ch\/blog\/vorhersage-von-freien-parkplaetzen-mittels-machine-learning\/#webpage\"},\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/blog.fhgr.ch\/#organization\"},\"image\":{\"@id\":\"https:\/\/blog.fhgr.ch\/blog\/vorhersage-von-freien-parkplaetzen-mittels-machine-learning\/#primaryimage\"},\"articleSection\":\"Studierendenprojekte\",\"inLanguage\":\"de-DE\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blog.fhgr.ch\/blog\/vorhersage-von-freien-parkplaetzen-mittels-machine-learning\/#respond\"]}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.fhgr.ch\/#\/schema\/person\/7eeff53375f68d87b9cff1c307e13ce8\",\"name\":\"tgetgellucinda\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","_links":{"self":[{"href":"https:\/\/blog.fhgr.ch\/wp-json\/wp\/v2\/posts\/8587"}],"collection":[{"href":"https:\/\/blog.fhgr.ch\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.fhgr.ch\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.fhgr.ch\/wp-json\/wp\/v2\/users\/57"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.fhgr.ch\/wp-json\/wp\/v2\/comments?post=8587"}],"version-history":[{"count":6,"href":"https:\/\/blog.fhgr.ch\/wp-json\/wp\/v2\/posts\/8587\/revisions"}],"predecessor-version":[{"id":8595,"href":"https:\/\/blog.fhgr.ch\/wp-json\/wp\/v2\/posts\/8587\/revisions\/8595"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.fhgr.ch\/wp-json\/wp\/v2\/media\/8588"}],"wp:attachment":[{"href":"https:\/\/blog.fhgr.ch\/wp-json\/wp\/v2\/media?parent=8587"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.fhgr.ch\/wp-json\/wp\/v2\/categories?post=8587"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.fhgr.ch\/wp-json\/wp\/v2\/tags?post=8587"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}