Teile und herrsche (Nr. 1)
Was sich erstmal einfach anhört, hat bei näherer Betrachtung unzählige Facetten. Wie soll die Gesamtarchitektur aussehen? Lieber klassische Serverapplikation oder Serverless? Wie sieht die Datenbank im Hintergrund aus? In welcher Programmiersprache soll es geschrieben werden, und welche Frameworks nutzt man? Wie kann ich als Nutzer über ein ansprechendes Frontend die ganze Funktionalität am besten nutzen?
Die einzelnen Funktionen werden von mir als (Micro-)Services entwickelt, wofür ich in Java auf Quarkus zurückgreife. Viele davon sind aber noch gar nicht fertig implementiert, da es ein umfangreiches Unterfangen ist. Deshalb liegt der Artikelfokus auf dem für mich spannendsten Teil, dem maschinellen Lernen und damit insbesondere dem Training und der Inferenz der Spritpreisprognose. Denn wann eine Tankstelle ihren Preis ändern wird, ist nicht direkt bekannt, sondern das Verhalten muss anhand von Daten gelernt werden, um es vorhersagen zu können.
Dabei entsteht schon die erste Frage: Woher kommen eigentlich die Spritpreisdaten? Seit Ende 2013 gibt es die Markttransparenzstelle für Kraftstoffe (MTS-K), an die alle öffentlichen Tankstellen in Deutschland innerhalb eines kurzen Zeitfensters ihre Spritpreisänderungen melden müssen. Die MTS-K bietet dafür eine kostenfreie API an, die überraschenderweise gut dokumentiert und die Grundlage nahezu jeder heutigen Tank-App ist.
Ärgerlicherweise bekommt man den API-Zugriff aber erst nach einer recht umfassenden, tiefgehenden Beschreibung des geplanten Vorhabens, in der es auch um Wirtschaftlichkeitsaspekte geht. Für mein Hobbyprojekt ist das zu viel bürokratischer Aufwand. Jedoch gibt es mit Tankerkoenig.de auch einen Spritpreisvergleich, der die Daten als Open Data unter einer Creative-Commons-Lizenz zur Verfügung stellt – sowohl in Form täglicher Datenbankdumps als auch mit begrenztem Echtzeitzugriff über eine eigene API. Gegen Geld sind dort auch unbeschränkte API-Zugriffe möglich.
Datenbank aufsetzen
Ausgangspunkt meiner Software ist eine zentrale Datenhaltung in Form einer Datenbank. Klar, ich könnte jetzt die ungewöhnlichsten Datenbanksysteme der Welt ausprobieren, aber am Ende entscheide ich mich für PostgreSQL.
Zum einen ist das relationale Datenbankschema ziemlich simpel: Es gibt eine Relation Tankstelle, die die Daten jeder Tankstelle speichert, und eine Relation Preise, die alle Preisänderungen mit der Tankstellen-ID als Fremdschlüssel sowie einem Zeitstempel speichert. Zum anderen hat PostgreSQL eine für mich bessere Open-Source-Lizenz, wohingegen der frühere Marktführer MySQL bei einer möglichen kommerziellen Nutzung lizenztechnisch kniffliger ist.
Ein weiteres Schmankerl von PostgreSQL ist die Geospatial-Erweiterung PostGIS. Da Nutzer aufgrund einer Ortsangabe Tankstellen in der Nähe finden wollen, braucht die Software eine effiziente Möglichkeit, diese zu finden. Die Tankstellen sind mit Adressangaben sowie Geokoordinaten in der Datenbank gespeichert. Dank des in PostGIS integrierten R-Baums als Geospatial-Index können so schnell und effizient die Tankstellen rund um eine Geokoordinate gefunden werden, so dass ich mir jedes Mal einen aufwendigen Full Table Scan sparen kann.
Um die Datenbank zu befüllen, schreibe ich mir zwei Services. Der eine importiert regelmäßig die Datenbankdumps von Tankerkoenig.de, der andere nutzt die kostenfreie Echtzeit-API, um alle fünf Minuten für die Tankstellen um meinen Wohn- und Arbeitsort die Preise abzufragen.
Auch um den Entwicklungsaufwand beherrschbar zu halten, konzentriere ich mich damit erst mal auf 44 Tankstellen. Da ich zumindest einen Teil davon kenne, kann ich auch leichter gelernte Muster validieren.
Die Abbildung 2 zeigt die Entwicklung der Anzahl der bei der MTS-K registrierten Tankstellen. Diese scheint interessanterweise nicht abzunehmen, sprich auch nicht mehr existente Tankstellen verbleiben in der Datenbank. Aber man erkennt, dass selbst innerhalb eines Monats regelmäßig neue Tankstellen entstehen. Das wird noch von hoher Bedeutung sein.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
- ohne Werbung
- mit ausgeschaltetem Javascript
- mit RSS-Volltext-Feed
Benzinpreise vorhersagen: Effizientes, maschinelles Lernen für Sparfüchse | Warum Deep Learning diesmal keine gute Idee ist |
Danke für die ausführliche und erhellende Antwort. Der Punkt mit den Standortfaktoren ist...
Aber solange sein Hobby jedes mal bei mir übers Grundstück geht nervt mich das schon...
Ich danke dir für die Warnung, allerdings glaube ich, dass mein Motor das mit seinen...
Die Deutschen sind Sparfüchse, die wollen das. Man kauft im Angebot - im Supermarkt...
Kommentieren