#

Forecasting Modellierung

In meiner Diplomarbeit hatte ich mich mit Prognosemodellen beschäftigt und dabei ein eigenes Modell erstellt. Das Modell wurde jedoch durch mehrere Anwendungen hindurch evaluiert, darunter Maple und Java. Die mühselige Arbeit des hin und her Schiebens und Debuggens der Daten und des Codes hat dort schon den Wunsch in mir geweckt, ein einheitliches Werkzeug zu programmieren, welches das Erstellen und Testen verschiedener Prognosemodelle ermöglicht.

Mit dem vorliegenden Projekt möchte ich Ãberlegungen sammeln, um ein solches Werkzeug zu erstellen. Hier meine ersten Vorstellungen zum Programm.

  • GUI basiertes Erstellen von Modellen auf Basis einfacher Komponenten
    Die GUI soll es ermöglichen einfache Komponenten, wie Datenquellen, Verarbeitungsschritte, grafische Darstellung von Zahlenreihen etc. durch einen Workflowgraf zu einem Prognosemodell zusammenzustellen.
    Existierende GUIs dieser Art sind z.B. Java Bean Editor und Joone neuronale Netze GUI.
  • Support für verschiedene Datenquellen
    Primär hierbei: Comma separated values (CSV), Plain text, JDBC
  • Elementare Verarbeitungskomponenten
    Gleitende Durchschnitte, lineare und polynomiale Regressionen, multiple Regressionen, künstliche neuronale Netze (KNN), einfache und saisonale Differenzierungen, Phasendurchschnittsverfahren, AusreiÃer Behandlung (Box Plot, Interpolation), Fehlerberechnungen, Lag Erzeugung,
    Fourierfilter, Wiener / Kalman Filter, Kovarianzen, Korrelationen, Autokorrelationen, Principal Component Analysis (PCA), Skalierungen
    Einige der Komponenten sind voneinander Abhängig. So benötigt z.B. die PCA eine Kovarianzmatrix.
  • Visualisierungskomponenten
    Scatterplot, einfache Zeitgrafen, mehrere Datengrafen auf einem Blick, Lernkurven für KNN, saisonale Indexplots, Korrelationsgrafen
  • Optimierungskomponenten
    Zur Optimierung der Parameter von verarbeitenden Komponenten, wie z.B. optimale Lagauswahl, optimale Netzstruktur für KNN
  • Komponenten API
    Einfache Erweiterung um weitere Komponenten (Plugin Konzept). Auch soll es möglich sein mehrere Komponenten zu einer neuen Komponente zusammenzufügen. Bsp.: PCA Komprimierung durch Kovarianz, Ermitteln der Eigenvektoren, Transformation. Oder einfache saisonale Bereinigung durch polynomiale Regression + Phasendurchschnittsverfahren.
    Schleifenfreier Workflow, um Endlosschleifen zu vermeiden.
    Komponenten können mehrere Ausgänge und Eingänge besitzen, über die sie verschiedene Daten vermitteln. Bsp.: Eine einfache lineare Skalierungskomponente hat mind. zwei Ausgänge: Die skalierten Daten sowie die Skalierungsparameter. Eine weitere Komponente, welche die Skalierung am Ende des Modells rückgängig machen soll, benötigt die Skalierungsparameter als Eingabe. Bsp.: Eine Datenquelle kann von mehreren Komponenten angezapft werden.
  • Automatische Generierung von GUI-Elementen
    Ãhnlich dem Java Bean Editor zur Eingabe von Parametern für Komponenten
  • Evaluierung der Modelle ausserhalb der GUI
    Die Erstellten und optimierten Modelle sollen nach dem Speichern auch ausserhalb der GUI eingesetzt werden können, z.B. in anderen Java-Anwendungen. Ein ähnliches Konzept besitzt z.B. Joone.
  • Unterstützung von verschiedenen Saisonalitäten
    Es soll möglich sein, verschiedene saisonale Datenquellen zu benutzen (monatliche Daten, tägliche Daten, Quartalsdaten, etc).
  • Die Implementierung dieser hohen Anforderungen hat mich dazu bewegt, zuerst eine sinnvolle API für die Komponenten und ihre Zusammenarbeit zu entwickeln. Nach Möglichkeit sollen soviele Bestandteile wie nur möglich durch bereits vorhandene Open Source Projekte abgedekt werden, vor allem im Bereich der GUI. In diesem Sinne habe ich mich bereits nach einsetzbaren Bestandteilen umgeschaut. Wenn jemand Anregungen hierzu hat, bitte ich um Comments :)

  • Neuronale Netze APIs
    Für diese müssten Wrapper geschrieben werden, um sie als Komponenten einzubinden

  • joone
  • mscNeuralNet API
  • GUI Generatoren
    Diese sollen es ermöglichen, die Darstellung der GUI einfacher zu gestallten. Bevorzugt werden Factorymodelle, die als Eingabe eine XML-Definition erhalten. Es muss geprüft werden, in wie weit diese GUIs z.B. Eingabefelder mit Constrains erlauben.

  • Swixml
  • Swingml
  • GUI Komponenten

  • Workflow
    GUI Komponenten, die den Workflow darstellen können (Grafenwerkzeuge). Verbinden von Komponenten.

  • GEF (konnte kein Tutorial finden)
  • JGraph (kein Manual)
  • OpenJGraph (simpel)
  • JGraphT
  • GVF
  • Charts
    Darstellung von Grafen in verschiedenen Farben. Darstellung von Boxplots.

  • JFreeChart (ohne Manual)
  • JOpenChart

  • Mathematische Komponenten
    APIs mit Unterstützung für statistische Berechnungen. Grundlage sind jedoch Matrizen, welche zumindest die Berechnung von Eigenwerten und -vektoren und least squares unterstützen.

  • Jama (Eigenwerte, Cholsky, Least Squares)
  • JMathTools (???)
  • COLT (gilt als eines der schnellsten Java Mathematik Bibliotheken, Eigenwerte, Cholsky, LS, etc…)
  • Jakarta Commons Math (unterstützt teilweise die Berechnung von statistsichen Eckdaten on the fly, ohne alle Daten zu laden)
  • Für jegliche Unterstützung bei der Planung, Umsetzung oder Tips bin ich sehr dankbar. Sollte ich ein gutes Konzept auf die beine Kriegen, wird auch ein Projekt unter Sourceforge eingerichtet.

    4 Responses to “Forecasting Modellierung” »»

    1. Comment by Andrej | 18:20 16.09.05|X

      also zum einen ist mir nicht so ganz klar, was im endeffekt deine software ist? ist es ein komponentenbasiertes statistik und reporting programm? zumindest so hört es sich an. also quasi erweiterbares SPSS?

    2. Comment by Secco | 20:30 16.09.05|X

      Tatsächlich ist die meiste Funktionalität, die ich machen möchte in SPSS vorhanden. Es soll aber mehr auf das Testen von experimentellen Modellen eingehen. Es soll ein komponentenbasiertes Programm werden, aber kein generelles statistik Programm, sondern speziell abgestimmt um Zeitreihen zu prognostizieren. Daher Forecasting. Sowas wie Clustering ist nicht vorgesehen. Einsatzgebiet können Wertpapierprognosen, Wetterprognosen und andere Zeitreihen sein. Auch ist wichtig, dass man damit gut rumexperimentieren kann. Daher das Komponentenmodell und eine starke GUI.

    3. Comment by Jannis | 15:38 16.03.06|X

      Mit JGraph kommt ein Manual für JGraph und JGraph Layout Pro :-)

    4. Comment by Secco | 17:48 16.03.06|X

      Ich habe mir die Beispiele zu JGraph angeschaut und mich dazu entschieden, auf die schnelle eine eigene Graphendarstellung zu programmieren. Die ist zwar nicht so komfortabel, aber dafür einfacher und (für mich) übersichtlicher 😉

    Leave a Reply »»

    Note: All comments are manually approved to avoid spam. So if your comment doesn't appear immediately, that's ok. Have patience, it can take some days until I have the time to approve my comments.