Reduzierung der Seriendimensionalität zur Klassifizierung Eingabe

8

Ich möchte ein Vorhersagemodell erstellen, bei dem die Ergebnisvariable binär und die Eingabe Zeitreihen sind. Um es konkreter zu machen, wird das Modell anhand des Betrags, den er in den letzten 60 Tagen für das Unternehmen ausgegeben hat, vorhersagen, ob ein Kunde abwandert (das Unternehmen verlassen hat; als 1 oder 0 codiert). Die Daten sind also ein Kunde pro Zeile und die Spalten sind ein Ergebnisfaktor (1 oder 0) und 60 zusätzliche Spalten für den Betrag, der in der Zeit t-1, t-2 .... t-60 verbracht wurde.

Hier einige Beispieldaten:

#create the data a series of length 60 and a class ID
sc <- read.table("http://kdd.ics.uci.edu/databases/synthetic_control/synthetic_control.data", header=F, sep="")

#binary class lable
classId <- as.factor(c(rep(0,300), rep(1,300)))
newSc <- data.frame(cbind(classId, sc))
newSc$ID<-seq(1,600,1)

Das tatsächliche Modell kann viele dieser Serien für jeden Kunden enthalten, daher muss ich die Dimensionalität der Daten für die Serie reduzieren, z. B. anstatt 60 Werte zu verwenden, muss ich diese auf eine Handvoll reduzieren. Natürlich kann ich den Mittelwert, das Minimum, das Maximum usw. der Reihe verwenden, aber ich habe über die Verwendung der diskreten Fourier-Transformation gelesen.

Fragen:

  1. Ist die DFFT in R eine geeignete Methode für meinen Zweck? Alle Informationen darüber, wie es funktioniert, wäre dankbar.

  2. Unter der Annahme, dass diese R-Funktion korrekt ist, wie extrahieren Sie nur die aussagekräftigsten Koeffizienten, um eine Verringerung der Dimensionalität zu erreichen?

HINZUFÜGEN: Es scheint ein Konsens darüber zu bestehen, dass die Verwendung von DFFT zur Dimensionsreduzierung keine gute Wahl ist, aber es scheint, dass beim Data Mining diese Funktion, DWT und SVD häufig verwendet werden: Time Series Mining ab Seite 20.

B_Miner
quelle
Ein kurzer Kommentar, den ich hätte, ist, dass Sie die FFT als ein weiteres Mittel betrachten könnten, um Funktionen für jeden Kunden zu erhalten. Angenommen, Sie haben einen Feature-Vektor mit zusammenfassenden Statistiken, die auf den Zeitreihen der einzelnen Kunden und anderen Daten basieren, können Sie Ihren Feature-Vektor durch Hinzufügen von Features ergänzen, die von einer FFT abgeleitet wurden. Denken Sie daran, dass dies nur angebracht ist, wenn das Fenster, über das Sie die FFT sprechen, stationär ist. Andernfalls sind Zeitmerkmale wie die 1. und 2. Ableitung möglicherweise besser geeignet.
BGreene

Antworten:

12

Ich bin mir nicht sicher, ob ich eine Fourier-Transformation per se als eine Technik zur Reduzierung der Dimensionalität klassifizieren würde , obwohl Sie sie auf diese Weise sicherlich verwenden können.

f(t)F(ω)tωF(ω) bezeichnet normalerweise die Frequenz: F (10) gibt an, inwieweit das Signal mit 10 Zyklen / Sekunde schwankt (oder was auch immer Ihre zeitlichen Einheiten sind), während F (20) angibt, inwieweit es doppelt so schnell schwankt. Die Fourier-Transformation "funktioniert", indem Ihr ursprüngliches Signal als gewichtete Summe von Sinuskurven rekonstruiert wird (Sie erhalten tatsächlich "Gewicht", üblicherweise als Amplitude bezeichnet, und eine "Verschiebung", normalerweise als Phasenwerte bezeichnet, für jede Frequenzkomponente). Der Wikipedia-Artikel ist etwas komplex, aber es gibt eine Reihe anständiger Tutorials im Internet.

NN/2N/2

Eine Fourier-Darstellung kann nützlich sein, wenn:

  1. Ihr Signal ist periodisch und
  2. Nützliche Informationen werden in der Periodizität des Signals codiert.

Angenommen, Sie zeichnen die Vitalfunktionen eines Patienten auf. Das elektrische Signal vom EKG (oder der Schall von einem Stethoskop) ist ein hochdimensionales Signal (z. B. mehr als 200 Abtastungen / Sekunde). Bei einigen Anwendungen interessiert Sie jedoch möglicherweise mehr die Herzfrequenz des Probanden, bei der es sich wahrscheinlich um den Ort des Peaks in der FFT handelt und die daher durch eine einzelne Ziffer dargestellt werden kann.

Eine wesentliche Einschränkung der FFT besteht darin, dass sie das gesamte Signal auf einmal berücksichtigt - sie kann keine Änderungen daran lokalisieren. Angenommen, Sie betrachten den Koeffizienten, der 10 Zyklen / Sekunde zugeordnet ist. Sie erhalten ähnliche Amplitudenwerte, wenn

  1. Das Signal weist eine gleichmäßige, aber mittelgroße 10-Hz-Schwingung auf.
  2. Diese Schwingung ist in der ersten Hälfte des Signals doppelt so groß, in der zweiten Hälfte jedoch völlig abwesend, und
  3. Die Schwingung fehlt in der ersten Hälfte völlig, ist aber in der zweiten Hälfte doppelt so groß wie # 1.
  4. (und so weiter)

Ich weiß natürlich nicht viel über Ihr Unternehmen, aber ich würde mir vorstellen, dass dies sehr relevante Funktionen sein könnten. Eine weitere wichtige Einschränkung der FFT besteht darin, dass sie auf einer einzigen Zeitskala arbeitet. Angenommen, ein Kunde besucht Ihr Unternehmen jeden zweiten Tag religiös: Er hat eine "Häufigkeit" von 0,5 Besuchen pro Tag (oder einen Zeitraum von 2 Tagen). Ein anderer Kunde kann auch regelmäßig zwei Tage hintereinander kommen, zwei abnehmen und dann für die nächsten zwei wieder besuchen. Mathematisch gesehen "oszilliert" der zweite Kunde doppelt so langsam wie der erste, aber ich würde wetten, dass diese beiden gleich wahrscheinlich abwandern.

Ein Zeit-Frequenz-Ansatz hilft, dieses Problem zu umgehen, indem Änderungen sowohl in der Häufigkeit als auch in der Zeit lokalisiert werden. Ein einfacher Ansatz ist die Kurzzeit-FFT, die Ihr Signal in kleine Fenster unterteilt und dann die Fourier-Transformation jedes Fensters berechnet. Dies setzt voraus, dass das Signal innerhalb eines Fensters stationär ist, sich jedoch über diese hinweg ändert. Die Wavelet-Analyse ist ein leistungsfähigerer (und mathematisch strengerer Ansatz). Es gibt viele Wavelet-Tutorials - das charmant benannte Wavelets for Kids ist ein guter Anfang, auch wenn es für alle außer den klügsten tatsächlichen Kindern ein bisschen viel ist. Es gibt mehrere Wavelet-Pakete für R, aber ihre Syntax ist ziemlich einfach (siehe Seite 3 des Wavelet-PaketsDokumentation für einen). Sie müssen ein geeignetes Wavelet für Ihre Anwendung auswählen - dies sieht im Idealfall wie eine Schwankung des Interesses an Ihrem Signal aus, aber ein Morlet-Wavelet kann ein vernünftiger Ausgangspunkt sein. Wie bei der FFT führt die Wavelet-Transformation selbst nicht zu einer starken Reduzierung der Dimensionalität. Stattdessen repräsentiert es Ihr ursprüngliches Signal als Funktion von zwei Parametern ("Skala", die der Frequenz analog ist, und "Translation", die der Position in der Zeit entspricht). Wie bei den FFT-Koeffizienten können Sie Koeffizienten mit einer Amplitude nahe Null sicher verwerfen, wodurch Sie eine effektive Reduzierung der Dimensionalität erzielen.


Abschließend möchte ich Sie fragen, ob die Reduzierung der Dimensionalität wirklich das ist, was Sie hier wollen. Die Techniken, nach denen Sie gefragt haben, sind alle im Wesentlichen Möglichkeiten, die Größe der Daten zu reduzieren und sie gleichzeitig so genau wie möglich zu erhalten. Um jedoch die beste Klassifizierungsleistung zu erzielen, möchten wir normalerweise die Daten erfassen und transformieren, um relevante Funktionen so explizit wie möglich zu gestalten und alles andere zu verwerfen.

Manchmal ist eine Fourier- oder Wavelet-Analyse genau das, was benötigt wird (z. B. Umwandlung eines hochdimensionalen EKG-Signals in einen einzelnen Herzfrequenzwert); In anderen Fällen sind Sie mit völlig anderen Ansätzen (gleitenden Durchschnitten, Derivaten usw.) besser dran. Ich möchte Sie ermutigen, über Ihr eigentliches Problem nachzudenken (und vielleicht sogar ein Brainstorming mit Vertriebs- / Kundenbindungsmitarbeitern durchzuführen, um festzustellen, ob sie Intuitionen haben) und diese Ideen zu verwenden, um Funktionen zu generieren, anstatt blindlings eine Reihe von Transformationen zu versuchen.

Matt Krause
quelle
Hallo Matt. Ich habe einen Zusatz mit einem Link gepostet. Es scheint, dass diese Techniken zur Dimensionsreduzierung verwendet werden. Wissen Sie zufällig, wie man eine diskrete Wavelet-Transformation in R verwendet, um eine Dimensionsreduktion durchzuführen?
B_Miner
Ich habe einige massive Änderungen vorgenommen; Ich würde jedoch empfehlen, das letzte Stück zuerst zu lesen!
Matt Krause
Das ist großartig, Matt, danke! Ich hatte noch keine Gelegenheit, Ihre Antwort vollständig zu lesen, werde es aber in Kürze tun.
B_Miner
@MattKrause, Sie scheinen ein wirklich gutes Verständnis der Fourier-Transformation zu haben. Ich habe ein ähnliches Problem, bei dem ich (basierend auf Ihrem Beitrag hier) der Meinung bin, dass es sinnvoll ist, die Fourier-Transformation als Technik zur Reduzierung der Dimensionalität durchzuführen. Ich kann jedoch nicht herausfinden, wie es in der Praxis geht. Könnten Sie einen Blick auf stats.stackexchange.com/questions/176283/… werfen ?
Pir
Danke, @felbo! Ich bin geschmeichelt, aber ich bin nicht sicher, ob ich noch viel hinzuzufügen habe.
Matt Krause
2

Wie Matt sagte, bin ich mir nicht sicher, ob die DFT relevante Funktionen für Ihre Anwendung bereitstellen wird. Wie Sie in dieser Frage stellen , finden Sie hier einen R-Code x, mit dem Sie mithilfe der Funktion detrend(z. B. mit dem Paket pracma ) Merkmale für die Quantile der DFT eines 1D-Signals erstellen können .

l <- length(x)
detrended <- detrend(x)
dft <- fft(detrended)/l
amplitude <- 2*abs(dft[1:l/2])
plot(amplitude, type='l')
quantiles <- quantile(amplitude)
Emile
quelle
1

Ich würde die FFT hier überhaupt nicht verwenden, es sei denn, Sie haben ein Modell, das darauf hinweist, dass es das Richtige ist, und nach den von Ihnen angegebenen Informationen sehe ich keinen Grund zu der Annahme, dass ich nur die FFT von betrachte Ihre Daten sind angemessen. Ich schlage vor, anstatt die FFT zu betrachten, die wahrscheinlich eine Sackgasse darstellt, andere Ansätze in Betracht zu ziehen.

Geeignete Methoden können ein Filter für den gleitenden Durchschnitt (z. B. der durchschnittliche Umsatz in den letzten N Tagen) oder ein Filter für den gewichteten gleitenden Durchschnitt sein (dasselbe, außer dass Werte, die als signifikanter angesehen werden, stärker gewichtet werden, entweder weil Sie ein Modell haben / Hypothese, die dies unterstützt, oder tatsächliche Daten, die darauf hinweisen, dass dies in der Vergangenheit der Fall war. Beispielsweise könnten Sie neuere Zahlen gewichten oder Daten von Montag gewichten, weil Sie Daten haben, die darauf hindeuten, dass die Verkäufe am Montag prädiktiv sind irgendein Grund).

Ein anderer Ansatz könnte darin bestehen, einfach die Regression zu verwenden (insbesondere die logistische Regression). Das mag traditionell und langweilig erscheinen, aber es funktioniert.

Björn Roche
quelle