Saya sedang mengerjakan masalah klasifikasi deret waktu di mana inputnya adalah data penggunaan suara deret waktu (dalam detik) selama 21 hari pertama dari akun ponsel. Variabel target yang sesuai adalah apakah akun tersebut dibatalkan atau tidak dalam rentang 35-45 hari. Jadi itu adalah masalah klasifikasi biner.
Saya mendapatkan hasil yang sangat buruk dari semua metode yang saya coba sejauh ini (untuk berbagai tingkat). Pertama saya mencoba klasifikasi k-NN (dengan berbagai modifikasi) dan mendapat hasil yang sangat buruk. Ini menuntun saya untuk mengekstrak fitur dari deret waktu - yaitu rata-rata, varians, maks, min, total nol hari, total tertinggal nol hari, perbedaan antara rata-rata paruh pertama dan rata-rata paruh kedua, dll. Dan fitur yang paling prediktif tampaknya total nol hari dan total jejak nol hari (menggunakan beberapa algoritma klasifikasi). Ini melakukan yang terbaik tetapi performanya masih tidak terlalu baik.
Strategi saya berikutnya adalah untuk terlalu banyak contoh negatif dalam set pelatihan saya karena ada begitu sedikit dari mereka. Ini menghasilkan prediksi pembatalan yang lebih tepat tetapi dengan mengorbankan lebih banyak false-positive.
Saya mulai berpikir bahwa mungkin data penggunaan seri waktu itu sendiri tidak terlalu prediktif (meskipun akal sehat mengatakan bahwa seharusnya). Mungkin ada beberapa variabel laten yang tidak saya pertimbangkan. Melihat data juga menunjukkan beberapa perilaku aneh. yaitu beberapa contoh menunjukkan sangat sedikit atau mengurangi penggunaan (atau terkadang tidak ada sama sekali) dan tidak membatalkan, dan beberapa menunjukkan peningkatan dalam penggunaan yang membatalkan. Mungkin perilaku kontradiktif ini tidak menghasilkan batas keputusan yang sangat jelas untuk classifier.
Sumber kesalahan lain yang mungkin adalah kenyataan bahwa banyak contoh pelatihan sangat jarang (yaitu berhari-hari dengan 0 penggunaan). Satu ide yang belum saya coba adalah untuk membagi deret waktu menjadi segmen dan menghasilkan beberapa fitur seperti itu, tetapi saya tidak memiliki harapan yang tinggi.
sumber
Jawaban:
Saya sudah cukup sukses menerapkan KNN dengan Dynamic Time warping sebagai metrik jarak.
Penelitian saya (pdf) menunjukkan bahwa pendekatan ini sangat sulit dikalahkan. Skema di bawah ini adalah dari implementasi python saya KNN dan DTW di github . Atau lihat di IPython Notebook
Jika Anda melatih kumpulan data sangat besar, saya sarankan melakukan pengelompokan hierarkis dari matriks jarak. Kemudian mengambil sampel dari kelompok yang diinginkan untuk menghasilkan kumpulan data pelatihan yang lebih kecil. Ini
hclust
akan memastikan Anda memiliki deret waktu yang mewakili berbagai karakteristik deret waktu dalam data Anda.sumber
Dua pendekatan untuk klasifikasi deret waktu
Ada dua cara tentang cara menangani input terstruktur temporal untuk tugas klasifikasi:
Saya juga berhasil menggunakan KNN dengan DTW di masa lalu. Namun, saya hampir selalu bisa mengalahkan akurasinya dengan model yang menggunakan fitur yang dirancang dengan baik. Juga, KNN dengan DTW untuk skala klasifikasi biner dengan O (n_t · m_ {train} · m_ {test}) dengan n_t menjadi panjang dari deret waktu, mtrain dan mtest menjadi jumlah perangkat di kereta dan set tes, masing-masing . Ini berarti perhitungannya cukup lama ..
Oleh karena itu, saya akan merekomendasikan untuk mengejar pendekatan berbasis fitur.
tsfresh menghitung sejumlah besar fitur
Paket python tsfresh menghitung sejumlah besar fitur seperti itu dari panda. DataFrame yang berisi deret waktu. Anda dapat menemukan dokumentasinya di http://tsfresh.readthedocs.io .
Anda dapat mencobanya untuk menghitung sejumlah besar fitur. Kemudian Anda dapat memfilter fitur untuk signifikansi mereka dan mengidentifikasi kandidat yang menjanjikan.
Penafian: Saya adalah salah satu penulis tsfresh.
sumber