Linear ansteigende Daten durch manuelles Zurücksetzen

8

Ich habe einen linear ansteigenden Zeitreihendatensatz eines Sensors mit Wertebereichen zwischen 50 und 150. Ich habe einen einfachen linearen Regressionsalgorithmus implementiert , um eine Regressionslinie an solche Daten anzupassen, und ich sage das Datum voraus, an dem die Reihe erreicht werden würde 120.

Alles funktioniert gut, wenn sich die Serie nach oben bewegt. Es gibt jedoch Fälle, in denen der Sensor etwa 110 oder 115 erreicht und zurückgesetzt wird. in solchen Fällen würden die Werte beispielsweise bei 50 oder 60 von vorne beginnen.

Hier stelle ich Probleme mit der Regressionslinie fest, da sie sich nach unten bewegt und das alte Datum vorhersagt. Ich denke, ich sollte nur die Teilmenge der Daten berücksichtigen, von denen sie zuvor zurückgesetzt wurden. Ich versuche jedoch zu verstehen, ob Algorithmen verfügbar sind, die diesen Fall berücksichtigen.

Ich bin neu in der Datenwissenschaft und würde mich über Hinweise freuen, um mich weiterzuentwickeln.

Bearbeiten: Die Vorschläge von nfmcclure wurden angewendet

Vor dem Anwenden der Vorschläge

Geben Sie hier die Bildbeschreibung ein

Unten ist der Schnappschuss von dem, was ich nach dem Aufteilen des Datensatzes, in dem das Zurücksetzen erfolgt, und die Steigung von zwei Sätzen erhalten habe.

Geben Sie hier die Bildbeschreibung ein

Finden des Mittelwerts der beiden Steigungen und Zeichnen der Linie aus dem Mittelwert.

Geben Sie hier die Bildbeschreibung ein

Ist das ok?

ArunDhaJ
quelle
1
Sie haben die richtige Idee, außer wenn Sie sie zeichnen, sollten Sie dort beginnen, wo die Serie bei jedem Zurücksetzen beginnt. Um abzuschätzen, wo es treffen wird, sagen wir 120, siehe meine erste Bearbeitung in meiner Antwort.
nfmcclure

Antworten:

5

Ich dachte, dies sei ein interessantes Problem, also schrieb ich einen Beispieldatensatz und einen linearen Steigungsschätzer in R. Ich hoffe, es hilft Ihnen bei Ihrem Problem. Ich werde einige Annahmen treffen, die größte ist, dass Sie eine konstante Steigung schätzen möchten, die von einigen Segmenten in Ihren Daten angegeben wird. Eine andere Annahme, um die Blöcke linearer Daten zu trennen, ist, dass das natürliche "Zurücksetzen" gefunden wird, indem aufeinanderfolgende Unterschiede verglichen und solche gefunden werden, die X-Standardabweichungen unter dem Mittelwert liegen. (Ich habe 4 SDs gewählt, aber das kann geändert werden)

Hier ist eine grafische Darstellung der Daten, und der Code zum Generieren befindet sich unten. Beispieldaten

Für den Anfang finden wir die Pausen und passen jeden Satz von y-Werten an und zeichnen die Steigungen auf.

# Find the differences between adjacent points
diffs = y_data[-1] - y_data[-length(y_data)]
# Find the break points (here I use 4 s.d.'s)
break_points = c(0,which(diffs < (mean(diffs) - 4*sd(diffs))),length(y_data))
# Create the lists of y-values
y_lists = sapply(1:(length(break_points)-1),function(x){
  y_data[(break_points[x]+1):(break_points[x+1])]
})
# Create the lists of x-values
x_lists = lapply(y_lists,function(x) 1:length(x))
#Find all the slopes for the lists of points
slopes = unlist(lapply(1:length(y_lists), function(x) lm(y_lists[[x]] ~ x_lists[[x]])$coefficients[2]))

Hier sind die Pisten: (3.309110, 4.419178, 3.292029, 4.531126, 3.675178, 4.294389)

Und wir können einfach den Mittelwert nehmen, um die erwartete Steigung zu finden (3.920168).


Bearbeiten: Vorhersagen, wann die Serie 120 erreicht

Mir wurde klar, dass ich die Vorhersage nicht beendet habe, wenn die Serie 120 erreicht. Wenn wir die Steigung auf m schätzen und zum Zeitpunkt t einen Reset auf einen Wert x (x <120) sehen, können wir vorhersagen, wie lange es dauern würde, bis die Serie erreicht ist 120 durch eine einfache Algebra.

Geben Sie hier die Bildbeschreibung ein

Hier ist t die Zeit, die benötigt wird, um nach einem Zurücksetzen 120 zu erreichen, x ist das, worauf es zurückgesetzt wird, und m ist die geschätzte Steigung. Ich werde hier nicht einmal das Thema Einheiten ansprechen, aber es ist eine gute Praxis, sie auszuarbeiten und sicherzustellen, dass alles Sinn macht.


Bearbeiten: Erstellen der Beispieldaten

Die Beispieldaten bestehen aus 100 Punkten, zufälligem Rauschen mit einer Steigung von 4 (hoffentlich schätzen wir dies). Wenn die y-Werte einen Grenzwert erreichen, werden sie auf 50 zurückgesetzt. Der Grenzwert wird bei jedem Zurücksetzen zufällig zwischen 115 und 120 gewählt. Hier ist der R-Code zum Erstellen des Datensatzes.

# Create Sample Data
set.seed(1001)
x_data = 1:100 # x-data
y_data = rep(0,length(x_data)) # Initialize y-data
y_data[1] = 50 
reset_level = sample(115:120,1) # Select initial cutoff
for (i in x_data[-1]){ # Loop through rest of x-data
  if(y_data[i-1]>reset_level){ # check if y-value is above cutoff
    y_data[i] = 50             # Reset if it is and
    reset_level = sample(115:120,1) # rechoose cutoff
  }else {
    y_data[i] = y_data[i-1] + 4 + (10*runif(1)-5) # Or just increment y with random noise
  }
}
plot(x_data,y_data) # Plot data
nfmcclure
quelle
Ich denke, Ihre Antwort ist nützlich für das Problem. Nur ein paar Vorschläge: Ich würde den Datengenerierungscode nach unten oder sogar in einen externen Kern verschieben, da er nicht wirklich Teil der vorgeschlagenen Lösung ist. Und ich möchte noch etwas näher auf die Tatsache eingehen, dass Sie 4 Standardabweichungen verwenden, um Zurücksetzungen zu erkennen: Im Moment ist es nur ein Kommentar, der im Code verloren geht, und es ist der Kern Ihrer Lösung.
Logc
Gute Ideen. Wird besorgt.
nfmcclure
Hallo nfmcclure, ich habe Ihren Vorschlag angewendet und den Beitrag aktualisiert. Bitte geben Sie Ihre Kommentare.
ArunDhaJ
3

Ihr Problem ist, dass die Zurücksetzungen nicht Teil Ihres linearen Modells sind. Sie müssen Ihre Daten entweder beim Zurücksetzen in verschiedene Fragmente schneiden, damit in jedem Fragment kein Zurücksetzen erfolgt, und Sie können jedem Fragment ein lineares Modell anpassen. Oder Sie können ein komplizierteres Modell erstellen, das das Zurücksetzen ermöglicht. In diesem Fall muss entweder der Zeitpunkt des Auftretens der Zurücksetzungen manuell in das Modell eingegeben werden, oder der Zeitpunkt des Zurücksetzens muss ein freier Parameter im Modell sein, der durch Anpassen des Modells an die Daten bestimmt wird.

Paul
quelle