Gibt es in Python einen einfachen Weg, Datenpunkte in die Zukunft zu extrapolieren?

8

Ich habe ein einfaches Nummernfeld, für jedes Datum gibt es einen Datenpunkt. Etwas wie das:

%Vor%

Gibt es eine einfache Möglichkeit, Datenpunkte auf die Zukunft zu extrapolieren: Datum (2008, 5, 1), Datum (2008, 5, 20) usw.? Ich verstehe, dass es mit mathematischen Algorithmen gemacht werden kann. Aber hier suche ich nach etwas tief hängenden Früchten. Eigentlich mag ich, was numpy.linalg.solve macht, aber es scheint nicht anwendbar für die Extrapolation. Vielleicht liege ich absolut falsch.

Um genauer zu sein, baue ich ein Burn-Down-Diagramm (xp term): "x = Datum und y = Volumen der Arbeit zu tun", so habe ich die bereits durchgeführten Sprints und ich möchte visualisieren, wie Die zukünftigen Sprints werden fortgesetzt, wenn die aktuelle Situation anhält. Und schließlich möchte ich das Veröffentlichungsdatum vorhersagen. Die Art von "zu bewältigender Arbeitsmenge" ist also immer auf Burn-Down-Charts zurückzuführen. Außerdem möchte ich das extrapolierte Veröffentlichungsdatum erhalten: Datum, an dem das Volumen zu Null wird.

Dies ist alles, um dem Entwicklerteam zu zeigen, wie es läuft. Die Genauigkeit ist hier nicht so wichtig :) Die Motivation des Entwicklerteams ist der Hauptfaktor. Das bedeutet, dass mir die approximative Extrapolationstechnik absolut recht ist.

    
maplpro 21.10.2009, 09:42
quelle

4 Antworten

16

Es ist allzu einfach für die Extrapolation, Müll zu erzeugen; Versuche dies. Viele verschiedene Extrapolationen sind natürlich möglich; einige produzieren offensichtlichen Müll, manche nicht offensichtlichen Müll, viele sind schlecht definiert.

Alternativtext http://i39.tinypic.com/am62wp.png

%Vor%

Hinzugefügt: Ein Scipy-Ticket sagt: "Das Verhalten der FITPACK Klassen in scipy.interpolate ist viel komplexer, als die Dokumente glauben lassen würden "- imho wahr andere Software-doc zu.

    
denis 23.10.2009, 15:15
quelle
4

Eine einfache Art, Extrapolationen zu machen, ist die Verwendung interpolierender Polynome oder Splines. Dafür gibt es viele Routinen in scipy.interpolate , und es gibt ziemlich einfach zu bedienen (geben Sie einfach die (x, y) Punkte, und Sie erhalten eine Funktion [eine aufrufbar, genau]).

Nun, wie in diesem Thread gezeigt, können Sie nicht erwarten, dass die Extrapolation immer aussagekräftig ist (insbesondere wenn Sie weit von Ihren Datenpunkten entfernt sind), wenn Sie kein Modell für Ihre Daten haben. Ich ermutige Sie jedoch, mit den Polynom- oder Spline-Interpolationen von scipy.interpolate zu spielen, um zu sehen, ob die Ergebnisse, die Sie erhalten, zu Ihnen passen.

    
EOL 21.10.2009 13:04
quelle
3

Die mathematischen Modelle sind in diesem Fall der richtige Weg. Wenn Sie beispielsweise nur drei Datenpunkte haben, können Sie absolut keinen Hinweis darauf haben, wie sich der Trend entwickeln wird (könnte eine von zwei Parabeln sein.)

Holen Sie sich Statistikkurse und versuchen Sie, die Algorithmen zu implementieren. Probieren Sie Wikibooks aus.

    
ty812 21.10.2009 09:47
quelle
1

Sie müssen angeben, über welche Funktion Sie eine Extrapolation durchführen möchten. Dann können Sie die Regression Ссылка verwenden, um Parameter für die Funktion zu finden. Und extrapoliere das in Zukunft.

Zum Beispiel: übersetze Daten in x-Werte und verwende den ersten Tag als x = 0 für dein Problem, die Werte sollten ungefähr sein (0,1,2), (400,1,8), (900,5,3)

Jetzt entscheiden Sie, dass seine Punkte auf der Funktion des Typs liegen a + b x + c x ^ 2

Verwenden Sie die Methode der kleinsten Squers, um a, b und c zu finden Ссылка (Ich werde volle Quelle zur Verfügung stellen, aber später, weil ich keine Zeit dafür habe)

    
Luka Rahne 21.10.2009 10:39
quelle