Pengurangan dimensi seri untuk Input klasifikasi

8

Saya mencari untuk membangun model prediksi di mana variabel hasil adalah biner dan inputnya adalah deret waktu. Untuk membuatnya lebih konkret, model akan memprediksi jika pelanggan berputar (meninggalkan perusahaan; diberi kode 1 atau 0) berdasarkan jumlah yang mereka habiskan bersama perusahaan dalam 60 hari sebelumnya. Jadi, data adalah satu pelanggan per baris dan kolom adalah faktor hasil (1 atau 0) dan 60 kolom tambahan untuk jumlah yang dihabiskan dalam waktu t-1, t-2 .... t-60.

Berikut ini beberapa contoh data:

#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)

Model aktual mungkin memiliki banyak seri ini untuk setiap pelanggan, jadi saya perlu mengurangi dimensi data untuk seri tersebut, misalnya alih-alih menggunakan 60 nilai, saya perlu mengurangi ini hingga beberapa. Tentu saja, saya dapat menggunakan mean, min, max dll dari seri tapi saya telah membaca tentang menggunakan Transformasi Fourier Discrete.

Pertanyaan:

  1. Apakah DFFT dalam R adalah metode yang tepat untuk digunakan untuk tujuan saya? Setiap informasi tentang cara kerjanya akan dihargai.

  2. Dengan asumsi fungsi R ini benar, bagaimana Anda mengekstrak hanya koefisien yang paling bermakna untuk mencapai pengurangan dimensi?

TAMBAH: Tampaknya ada konsensus bahwa menggunakan DFFT untuk pengurangan dimensi bukanlah pilihan yang bijaksana, tetapi tampaknya dalam penambangan data, fungsi ini, DWT dan SVD semuanya umum digunakan: Penambangan Seri Waktu dimulai pada halaman 20.

B_Miner
sumber
komentar singkat yang akan saya miliki adalah bahwa Anda dapat mempertimbangkan FFT sebagai cara lain untuk mendapatkan fitur untuk setiap pelanggan. Dengan asumsi Anda memiliki vektor fitur yang berisi statistik ringkasan berdasarkan setiap seri waktu pelanggan dan data lainnya, Anda dapat melengkapi vektor fitur Anda dengan menambahkan fitur yang berasal dari FFT. Ingatlah bahwa ini hanya sesuai jika jendela tempat Anda berbicara FFT tidak bergerak. Kalau tidak, fitur waktu seperti turunan 1 dan 2 mungkin lebih tepat.
BGreene

Jawaban:

12

Saya tidak yakin bahwa saya akan mengklasifikasikan transformasi Fourier sebagai teknik reduksi dimensionalitas per se , meskipun Anda tentu bisa menggunakannya dengan cara itu.

Seperti yang mungkin Anda ketahui, transformasi Fourier mengubah fungsi domain waktu menjadi representasi domain frekuensi . Dalam fungsi aslinya, biasanya menunjukkan waktu: misalnya, f (1) mungkin menunjukkan saldo akun seseorang pada hari pertama, atau volume sampel pertama rekaman lagu, sementara f (2) menunjukkan saldo hari berikutnya / nilai sampel). Namun, argumen dalamf(t)F(ω)tωF(ω) biasanya menunjukkan frekuensi: F (10) menunjukkan sejauh mana sinyal berfluktuasi pada 10 siklus / detik (atau apa pun unit temporal Anda), sementara F (20) menunjukkan sejauh mana ia berfluktuasi dua kali lebih cepat. Transformasi Fourier "berfungsi" dengan merekonstruksi sinyal asli Anda sebagai jumlah sinusoid tertimbang (Anda benar-benar mendapatkan "bobot", biasanya disebut amplitudo, dan "shift", biasanya disebut fase, nilai untuk setiap komponen frekuensi). Artikel wikipedia agak rumit, tetapi ada banyak tutorial yang layak beredar di web.

Transformasi Fourier, dengan sendirinya, tidak membuat Anda mengurangi dimensi. Jika sinyal Anda panjang , Anda akan mendapatkan sekitar amplitudo dan fase kembali (1), yang jelas bukan penghematan besar. Namun, untuk beberapa sinyal, sebagian besar amplitudo mendekati nol atau apriori diketahui tidak relevan. Anda kemudian dapat membuang koefisien untuk frekuensi ini, karena Anda tidak perlu mereka untuk merekonstruksi sinyal, yang dapat menyebabkan penghematan ruang yang cukup besar (sekali lagi, tergantung pada sinyal). Inilah yang digambarkan oleh buku terkait sebagai "pengurangan dimensi."NN/2N/2

Representasi Fourier dapat bermanfaat jika:

  1. Sinyal Anda periodik, dan
  2. Informasi yang berguna dikodekan dalam periodisitas sinyal.

Misalnya, Anda merekam tanda vital pasien. Sinyal listrik dari EKG (atau suara dari stetoskop) adalah sinyal dimensi tinggi (katakanlah, 200+ sampel / detik). Namun, untuk beberapa aplikasi, Anda mungkin akan lebih tertarik pada hati subjek tingkat , yang kemungkinan akan menjadi lokasi puncak di FFT, dan dengan demikian representable oleh satu digit.

Keterbatasan utama FFT adalah ia menganggap seluruh sinyal sekaligus - ia tidak dapat melokalisasi perubahan di dalamnya. Misalnya, Anda melihat koefisien yang terkait dengan 10 siklus / detik. Anda akan mendapatkan nilai amplitudo yang serupa jika

  1. Ada yang konsisten, tetapi osilasi 10 Hz berukuran sedang dalam sinyal,
  2. Osilasi itu dua kali lebih besar di paruh pertama sinyal, tetapi sama sekali tidak ada di babak 2, dan
  3. Osilasi sama sekali tidak ada di babak pertama, tetapi dua kali lebih besar dari # 1 di babak kedua.
  4. (dan seterusnya)

Saya jelas tidak tahu banyak tentang bisnis Anda, tetapi saya membayangkan ini bisa menjadi fitur yang sangat relevan. Keterbatasan utama lainnya dari FFT adalah beroperasi pada skala waktu tunggal. Misalnya, misalkan satu pelanggan dengan religius mengunjungi bisnis Anda setiap hari: ia memiliki "frekuensi" 0,5 kunjungan / hari (atau periode 2 hari). Pelanggan lain mungkin juga secara konsisten datang selama dua hari berturut-turut, libur dua kali, dan kemudian berkunjung lagi untuk dua hari berikutnya. Secara matematis, pelanggan kedua "terombang-ambing" dua kali lebih lambat dari yang pertama, tetapi saya berani bertaruh bahwa keduanya sama-sama cenderung mengocok.

Pendekatan frekuensi waktu membantu mengatasi masalah ini dengan melokalisasi perubahan dalam frekuensi dan waktu. Salah satu pendekatan sederhana adalah FFT jangka pendek, yang membagi sinyal Anda menjadi jendela kecil, dan kemudian menghitung transformasi Fourier dari setiap jendela. Ini mengasumsikan bahwa sinyal itu diam di dalam jendela, tetapi perubahan di mereka. Analisis wavelet lebih kuat (dan pendekatan matematis yang ketat). Ada banyak tutorial Wavelet di sekitar - Wavelets for Kids yang dinamai apik adalah tempat yang baik untuk memulai, meskipun itu sedikit banyak untuk semua kecuali anak-anak aktual yang paling cerdas. Ada beberapa paket wavelet untuk R, tetapi sintaksnya cukup mudah (lihat halaman 3 dari paket waveletdokumentasi untuk satu). Anda harus memilih wavelet yang sesuai untuk aplikasi Anda - ini idealnya terlihat seperti fluktuasi minat pada sinyal Anda, tetapi wavelet Morlet mungkin merupakan titik awal yang masuk akal. Seperti FFT, transformasi wavelet itu sendiri tidak akan memberi Anda banyak pengurangan dimensi. Alih-alih, ini mewakili sinyal asli Anda sebagai fungsi dari dua parameter ("skala", yang analog dengan frekuensi, dan "terjemahan", yang mirip dengan posisi dalam waktu). Seperti koefisien FFT, Anda dapat dengan aman membuang koefisien yang amplitudo mendekati nol, yang memberi Anda beberapa pengurangan dimensi efektif.


Akhirnya, saya ingin menyimpulkan dengan bertanya apakah pengurangan dimensi benar-benar yang Anda inginkan di sini. Teknik-teknik yang telah Anda tanyakan tentang semua pada dasarnya cara untuk mengurangi ukuran data sambil mempertahankannya seiman mungkin. Namun, untuk mendapatkan kinerja klasifikasi terbaik, kami biasanya ingin mengumpulkan dan mengubah data untuk membuat fitur yang relevan sejelas mungkin, sambil membuang yang lainnya.

Kadang-kadang, analisis Fourier atau Wavelet adalah persis apa yang diperlukan (misalnya, mengubah sinyal EKG dimensi tinggi menjadi nilai detak jantung tunggal); di lain waktu, Anda akan lebih baik dengan pendekatan yang sama sekali berbeda (rata-rata bergerak, derivatif, dll). Saya mendorong Anda untuk memiliki pemikiran yang baik tentang masalah Anda yang sebenarnya (dan mungkin bahkan bertukar pikiran dengan staf retensi penjualan / pelanggan untuk melihat apakah mereka memiliki intuisi) dan menggunakan ide-ide itu untuk menghasilkan fitur, alih-alih secara membabi buta mencoba banyak transformasi.

Matt Krause
sumber
Hai Matt. Saya memposting tambahan dengan tautan. Sepertinya teknik ini digunakan untuk pengurangan dimensi. Apakah Anda tahu cara menggunakan transformasi wavelet diskrit di R untuk melakukan pengurangan dimensi?
B_Miner
Saya membuat beberapa perubahan besar; Saya sarankan membaca bit terakhir dulu!
Matt Krause
Ini bagus, Matt, terima kasih! Saya belum sempat membaca tanggapan Anda sepenuhnya, tetapi saya akan segera.
B_Miner
@MattKrause, Anda tampaknya memiliki pemahaman yang sangat baik tentang transformasi Fourier. Saya memiliki masalah yang sama, di mana saya (berdasarkan posting Anda di sini) berpikir masuk akal untuk melakukan transformasi Fourier sebagai teknik pengurangan dimensi. Namun, saya tidak dapat menemukan cara melakukannya dalam praktik. Bisakah Anda melihat stats.stackexchange.com/questions/176283/… ?
pir
Terima kasih, @felbo! Saya tersanjung tapi saya tidak yakin saya harus menambahkan banyak.
Matt Krause
2

Seperti yang Matt katakan, saya tidak yakin DFT akan menghasilkan fitur yang relevan untuk aplikasi Anda. Tetapi ketika Anda bertanya dalam pertanyaan ini , berikut ini adalah kode R untuk membangun fitur untuk kuantil DFT dari sinyal 1D x, menggunakan fungsi detrend(misalnya dengan paket pracma ).

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
sumber
1

Saya tidak akan menggunakan FFT di sini sama sekali kecuali Anda memiliki beberapa model yang menyarankan itu adalah hal yang benar untuk dilakukan, dan, dari informasi yang Anda berikan, saya tidak melihat alasan untuk percaya hanya melihat FFT dari data Anda sesuai. Saya menyarankan daripada melihat FFT, yang kemungkinan akan menjadi jalan buntu, pertimbangkan pendekatan lain.

Metode yang lebih tepat mungkin berupa filter rata-rata bergerak (misalnya, penjualan rata-rata dalam N hari terakhir) atau filter rata-rata bergerak tertimbang (sama kecuali lebih banyak bobot diberikan pada nilai yang diyakini lebih signifikan, baik karena Anda memiliki model / hipotesis yang mendukung hal ini, atau data aktual yang menunjukkan bahwa ini adalah keadaannya di masa lalu. Misalnya, Anda dapat mempertimbangkan angka yang lebih baru, atau Anda mungkin menimbang data dari hari Senin karena Anda memiliki data yang menunjukkan bahwa penjualan Senin dapat diprediksi untuk beberapa alasan).

Pendekatan lain mungkin dengan hanya menggunakan regresi (terutama regresi logistik). Ini mungkin terlihat tradisional dan membosankan, tetapi berhasil.

Bjorn Roche
sumber