Saya sedang mencari beberapa teknik yang kuat untuk menghapus outlier dan kesalahan (apa pun penyebabnya) dari data time-series keuangan (yaitu tickdata).
Tick-by-tick data time-series keuangan sangat berantakan. Ini berisi kesenjangan (waktu) yang sangat besar ketika pertukaran ditutup, dan membuat lompatan besar ketika pertukaran dibuka kembali. Ketika pertukaran terbuka, semua jenis faktor memperkenalkan perdagangan pada tingkat harga yang salah (tidak terjadi) dan / atau tidak mewakili pasar (lonjakan karena tawaran yang dimasukkan secara salah atau harga permintaan misalnya). Makalah ini oleh tickdata.com (PDF) melakukan pekerjaan dengan baik menguraikan masalah, tetapi menawarkan beberapa solusi konkret.
Sebagian besar makalah yang saya temukan online yang menyebutkan masalah ini, abaikan saja (tickdata dianggap disaring) atau sertakan penyaringan sebagai bagian dari beberapa model perdagangan besar yang menyembunyikan langkah penyaringan yang bermanfaat.
Adakah yang tahu tentang pekerjaan yang lebih mendalam di bidang ini?
Pembaruan: pertanyaan ini tampaknya serupa di permukaan tetapi:
- Rangkaian waktu finansial (setidaknya pada level tick) non-periodik.
- Efek pembukaan adalah masalah besar karena Anda tidak bisa hanya menggunakan data hari terakhir sebagai inisialisasi meskipun Anda benar-benar ingin (karena kalau tidak, Anda tidak punya apa-apa). Peristiwa eksternal dapat menyebabkan pembukaan hari baru berbeda secara dramatis baik di tingkat absolut, dan dalam volatilitas dari hari sebelumnya.
- Frekuensi data yang masuk sangat tidak teratur. Dekat buka dan tutup hari, jumlah datapoints / detik dapat 10 kali lebih tinggi dari rata-rata pada siang hari. Pertanyaan lain berkaitan dengan data sampel secara teratur.
- "Pencilan" dalam data keuangan menunjukkan beberapa pola spesifik yang dapat dideteksi dengan teknik spesifik yang tidak berlaku di domain lain dan saya -dalam bagian- mencari teknik spesifik tersebut.
- Dalam kasus yang lebih ekstrim (mis. Flash crash) outlier mungkin berjumlah lebih dari 75% dari data dalam interval yang lebih lama (> 10 menit). Selain itu, frekuensi (tinggi) dari data yang masuk berisi beberapa informasi tentang aspek outlier dari situasi tersebut.
sumber
Jawaban:
Masalahnya pasti sulit .
Aturan mekanis seperti +/- N1 kali standar deviasi, atau + / N2 kali MAD, atau +/- N3 IQR atau ... akan gagal karena selalu ada beberapa seri yang berbeda seperti misalnya:
Pernah ke sana, melakukan itu, ... di pekerjaan sebelumnya. Anda dapat mencoba mengurung setiap seri menggunakan kapal hubungan arbitrase ( mis. Mengasumsikan USD / EUR dan EUR / JPY dianggap baik, Anda dapat menghitung band sekitar USD / JPY seharusnya; demikian juga untuk turunan dari dasar dll hlm.
Vendor data komersial memperluas upaya ini, dan mereka yang menggunakan klien mereka tahu ... masih tidak mengecualikan kesalahan.
sumber
Saya akan menambahkan beberapa referensi kertas ketika saya kembali ke komputer, tetapi berikut adalah beberapa saran sederhana:
Mulai dengan bekerja dengan pengembalian. Ini sangat penting untuk menangani jarak tidak teratur di mana Anda secara alami bisa mendapatkan kesenjangan harga yang besar (terutama di akhir pekan). Kemudian Anda dapat menerapkan filter sederhana untuk menghapus pengembalian jauh di luar norma (mis. Vs sejumlah standar deviasi). Pengembalian akan menyesuaikan ke level absolut baru sehingga perubahan nyata yang besar akan menghasilkan hilangnya hanya satu centang. Saya sarankan menggunakan filter dua-pass dengan pengembalian yang diambil dari 1 langkah dan n langkah untuk menangani kelompok outlier.
Sunting 1: Mengenai penggunaan harga daripada pengembalian: harga aset cenderung tidak stasioner, sehingga IMO yang dapat menimbulkan beberapa tantangan tambahan. Untuk menjelaskan efek ketidakberesan dan kekuatan hukum, saya akan menyarankan beberapa jenis penyesuaian jika Anda ingin memasukkannya dalam filter Anda. Anda dapat mengukur perubahan harga berdasarkan interval waktu atau volatilitas. Anda dapat merujuk ke bukaan "volatilitas yang direalisasikan" untuk beberapa diskusi tentang ini. Juga dibahas dalam Dacorogna et. Al.
Untuk memperhitungkan perubahan volatilitas, Anda dapat mencoba mendasarkan perhitungan volatilitas Anda dari waktu yang sama hari selama seminggu terakhir (menggunakan musiman).
sumber
Saya telah (dengan beberapa penundaan) mengubah jawaban saya untuk mencerminkan kekhawatiran Anda tentang kurangnya 'kemampuan beradaptasi' dari orang gila / median tanpa syarat.
Anda dapat mengatasi masalah volatilitas yang bervariasi waktu dengan kerangka kerja statistik yang kuat. Ini dilakukan dengan menggunakan estimator kuat dari varian bersyarat (bukan estimasi kuat dari varian tak bersyarat yang saya sarankan sebelumnya): estimasi-M dari model GARCH. Maka Anda akan memiliki perkiraan waktu yang kuat dan beragam( μ^t, σ^t) yang tidak sama dengan yang diproduksi oleh GARCH fit biasa. Secara khusus, mereka tidak didorong oleh beberapa outlier yang jauh. Karena estimasi ini tidak digerakkan oleh mereka, Anda dapat menggunakannya untuk menandai outlier dengan andal menggunakan distribusi historis
Anda dapat menemukan informasi lebih lanjut (dan tautan ke paket R) dalam makalah ini :
sumber