Klasifikasi time-series - hasil yang sangat buruk

11

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.

pengguna1893354
sumber
1
Sebagai permulaan, saya sarankan Anda mencoba varian berikut.1. Gabungkan data penggunaan dengan jam / hari. 2. Dari data pelatihan Anda, overlay plot seri waktu ini untuk melihat pola di dalam kedua grup. 3. Jelajahi berbagai model deret waktu / regresi yang sesuai dengan data Anda dengan baik. 4. Gunakan koefisien model sebagai fitur untuk pengklasifikasi Anda.
ramhiser
Saya suka teknik ekstraksi fitur Anda. Saya akan mencobanya. Saya menjadi yakin bahwa data saya terlalu jarang untuk menemukan pola, tetapi siapa yang tahu. Terima kasih!
user1893354

Jawaban:

13

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

KNN dan DTW

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 hclustakan memastikan Anda memiliki deret waktu yang mewakili berbagai karakteristik deret waktu dalam data Anda.

Mark Regan
sumber
4
Bisakah Anda memperbarui tautan ke makalah penelitian Anda?
tilaprimera
10

Dua pendekatan untuk klasifikasi deret waktu

Ada dua cara tentang cara menangani input terstruktur temporal untuk tugas klasifikasi:

  1. Model Seri Waktu Khusus: Algoritma pembelajaran mesin menggabungkan seri waktu secara langsung. Saya menghitung KNN dengan model DTW dalam kategori ini.
  2. Pendekatan berbasis fitur: Di sini deret waktu dipetakan ke representasi lain yang mungkin lebih rendah. Ini berarti bahwa algoritma ekstraksi fitur menghitung karakteristik seperti nilai rata-rata atau maksimal dari deret waktu. Fitur-fitur tersebut kemudian diteruskan sebagai matriks fitur ke pembelajaran mesin "normal" seperti jaringan saraf, hutan acak atau mesin vektor dukungan. Pendekatan ini memiliki keuntungan dari keterjelasan hasil yang lebih baik. Lebih lanjut itu memungkinkan kita untuk menggunakan teori pembelajaran mesin yang diawasi dengan baik.

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 .

masukkan deskripsi gambar di sini

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.

MaxBenChrist
sumber
Terima kasih banyak untuk posting Anda yang luar biasa. Saya memiliki deret waktu yang sangat kecil (misalnya, 10 titik data per deret waktu). Dalam hal ini, apakah Anda akan merekomendasikan menggunakan tsfresh untuk dataset saya? Terima kasih :)
EmJ