Membangun Portofolio Aset Kripto yang Kuat dengan Strategi Multi-Faktor: Preprocessing Data

Pembukaan

Di bagian terakhir buku ini, kami menerbitkan artikel pertama dalam seri “Membangun Portofolio Aset Kripto yang Kuat dengan Strategi Multi-Faktor” - Fundamental Teoritis, dan ini adalah artikel kedua - Preprocessing Data.

Data perlu diproses sebelum / sesudah perhitungan data faktor, dan sebelum validitas faktor tunggal diuji. Preprocessing data spesifik melibatkan pemrosesan nilai duplikat, outlier / nilai yang hilang / nilai ekstrim, normalisasi, dan frekuensi data.

I. Nilai duplikat

Definisi terkait data:

  • Key: Menunjukkan indeks unik. misalnya. Untuk data dengan semua tanggal semua token, kuncinya adalah “token_id/contract_address - date”
  • Nilai: Objek yang diindeks oleh kunci disebut “nilai”.

Mendiagnosis nilai duplikat dimulai dengan memahami seperti apa data “seharusnya”. Biasanya data tersebut berupa:

  1. Data Time Series. Kuncinya adalah “Waktu”. misalnya 5 tahun data harga untuk satu token
  2. Data Cross Section. Kuncinya adalah “individu”. mis.2023.11.01 Data harga semua token di pasar kripto pada hari itu
  3. Panel. Kuncinya adalah kombinasi dari “individu-waktu”. misalnya, data harga semua token dari 01/01/2019 - 01/11/2023 selama empat tahun.

Prinsip: Setelah Anda menentukan indeks (kunci) data, Anda dapat mengetahui pada tingkat apa data tidak boleh memiliki nilai duplikat.

Periksa metode:

  1. PD. DataFrame.duplicated(subset=[key1, key2, …])

    1. Periksa jumlah nilai duplikat: pd. DataFrame.duplicated(subset=[key1, key2, …]). jumlah()
    2. Contoh untuk melihat sampel duplikat: df[df.duplicated(subset=[…])]. sample(), dan kemudian gunakan df.loc untuk memilih semua sampel duplikat yang sesuai dengan indeks
  2. pd.merge(df1, df2, on=[key1, key2, …], indicator=True, validate=‘1:1’)

    1. Tambahkan parameter indikator ke fungsi penggabungan horizontal, dan bidang _merge akan dibuat, dan Anda dapat menggunakan dfm[‘_merge’].value_counts() untuk memeriksa jumlah sampel dari sumber yang berbeda setelah penggabungan
    2. Tambahkan parameter validasi untuk memeriksa apakah indeks dalam himpunan data gabungan seperti yang diharapkan (1 banding 1, 1 ke banyak, atau banyak ke banyak, kasus terakhir sebenarnya tidak divalidasi). Jika hasilnya tidak seperti yang diharapkan, kesalahan akan dilaporkan dan eksekusi akan dibatalkan.

2. Pencilan/Nilai yang Hilang/Nilai Ekstrim

Penyebab umum pencilan:

  1. Kasus Ekstrim. Misalnya, jika harga token adalah 0,000001$ atau token dengan nilai pasar hanya $500.000, sedikit perubahan akan memiliki tingkat pengembalian puluhan kali lipat.
  2. Karakteristik Data. Misalnya, jika data harga token diunduh dari 1 Januari 2020, maka secara alami tidak mungkin untuk menghitung data pengembalian pada 1 Januari 2020, karena tidak ada harga penutupan hari sebelumnya.
  3. Kesalahan Data. Penyedia data pasti akan membuat kesalahan, seperti mencatat 12 yuan per token sebagai 1,2 yuan per token.

Prinsip penanganan untuk pencilan dan nilai yang hilang:

  1. Hapus. Pencilan yang tidak dapat diperbaiki atau diperbaiki secara wajar dapat dipertimbangkan untuk dihapus.
  2. Ganti. Ini sering digunakan untuk menangani nilai-nilai ekstrem, seperti Winsorizing atau logaritma (yang tidak umum digunakan).
  3. Mengisi. Untuk nilai yang hilang, Anda juga dapat mempertimbangkan untuk mengisi dengan cara yang masuk akal, metode umum termasuk nilai rata-rata (atau rata-rata bergerak), interpolasi, mengisi 0 df.fillna(0), forward df.fillna(‘ffill’)/backward filling df.fillna(‘bfill’), dll., untuk mempertimbangkan apakah asumsi yang menjadi dasar padding sudah benar.

Pembelajaran mesin harus digunakan dengan hati-hati untuk mengisi ulang dan mengambil risiko bias melihat ke depan

Penanganan nilai ekstrem:

  1. Metode persentil.

Dengan mengatur urutan dari terkecil hingga terbesar, ganti data yang melebihi proporsi minimum dan maksimum dengan data kritis. Untuk data dengan data historis yang melimpah, metode ini relatif kasar dan tidak berlaku, dan menghapus secara paksa proporsi data yang tetap dapat menyebabkan persentase kerugian tertentu.

2.3Σ / Metode Simpangan Baku Tiga Kali Lipat

Standar deviasi σfactor mencerminkan tingkat dispersi distribusi data faktor, yaitu volatilitas. Rentang μ±3×σ digunakan untuk mengidentifikasi dan mengganti pencilan dalam himpunan data, dan sekitar 99,73% data jatuh ke dalam kisaran. Premis dari metode ini adalah bahwa data faktor harus mematuhi distribusi normal, yaitu, X∼N(μ,σ2).

di mana μ=∑ⁿi₌₁⋅Xi/N, σ²=∑ⁿi₌₁=(xi-μ)²/n, rentang nilai faktor yang wajar adalah [μ−3×σ, μ+3×σ].

Buat penyesuaian berikut untuk semua faktor dalam rentang data:

用多因子策略构建强大的加密资产投资组合 :数据预处理篇

Kerugian dari metode ini adalah bahwa data yang biasa digunakan dalam bidang kuantitatif, seperti harga saham dan harga token, sering menunjukkan lonjakan dan distribusi ekor tebal, yang tidak sesuai dengan asumsi distribusi normal, dan dalam hal ini, sejumlah besar data akan salah diidentifikasi sebagai pencilan dengan menggunakan metode 3σ.

3.绝对值差中位数法(Median Absolute Deviation, MAD)

Metode ini didasarkan pada bias median dan absolut, membuat data yang diproses kurang sensitif terhadap ekstrem atau outlier. Lebih kuat dari metode berdasarkan mean dan standar deviasi.

Median deviasi absolut MAD=median ( ∑ⁿi₌₁(Xi - Xmedian) )

Rentang nilai faktor yang wajar adalah [Xmedian-n×MAD, Xmedian + n×MAD]. Buat penyesuaian berikut untuk semua faktor dalam rentang data:

用多因子策略构建强大的加密资产投资组合 :数据预处理篇

Menangani kasus nilai ekstrim dari data faktor

kelas Ekstrim (objek): def init, ini_data): s.ini_data = ini_data

def three_sigma (s, n = 3):
    rata-rata = s.ini_data.mean()
    std = s.ini_data.std()
    rendah = rata-rata - n*std
    tinggi = rata-rata + n*std
    mengembalikan np.clip(s.ini_data,low,high)

def mad (s, n = 3):
    median = s.ini_data.median()
    mad_median = abs(s.ini_data - median).median()
    tinggi = median + n * mad_median
    rendah = median - n * mad_median
    mengembalikan np.clip(s.ini_data, rendah, tinggi)

Kuantil def (s, l = 0,025, h = 0,975):
    rendah = s.ini_data.quantile(l)
    high = s.ini_data.quantile(h)
    mengembalikan np.clip(s.ini_data, rendah, tinggi)

III. Standardisasi

  1. Standarisasi Z-score
  • Prasyarat: X N (μ, σ)
  • Karena penggunaan standar deviasi, metode ini sensitif terhadap pencilan dalam data

x’i=(x−μ)/σ=(X−mean(X)))/std(X)2.Penskalaan Min-Maks

Mengubah setiap faktor menjadi data dalam interval (0,1) memungkinkan perbandingan data dengan ukuran atau rentang yang berbeda, tetapi tidak mengubah distribusi dalam data dan tidak membuat jumlah 1.

  • Sensitif terhadap outlier karena pertimbangan minima maksimum Dimensi Terpadu, yang kondusif untuk membandingkan data dari dimensi yang berbeda.

x’i=(xi−min(x))/max(x)-min(x)3.排序百分位(Penskalaan Peringkat)

Ubah fitur data menjadi peringkat mereka, dan ubah peringkat tersebut menjadi skor antara 0 dan 1, biasanya persentil mereka dalam himpunan data. *

Karena peringkat tidak terpengaruh oleh pencilan, metode ini tidak sensitif terhadap pencilan. **

  • Alih-alih mempertahankan jarak absolut antara titik-titik dalam data, itu dikonversi ke peringkat relatif.

NormRanki=(Peringkatₓi−min(Peringkatₓi))/max(Peringkatₓ)−min(Peringkatₓ)=Peringkatₓi/N

min(Rankₓ)=0, di mana N adalah jumlah total titik data dalam interval.

Menormalkan data faktor

kelas Scale (objek): def init, ini_data, tanggal): s.ini_data = ini_data s.date = tanggal

def zscore(s):
    rata-rata = s.ini_data.mean()
    std = s.ini_data.std()
    mengembalikan s.ini_data.sub(mean).div(std)
  
def maxmin (s):
    min = s.ini_data.min()
    maks = s.ini_data.max()
    mengembalikan s.ini_data.sub(min).div(maks - mnt)

def normRank(s):
    # Beri peringkat kolom yang ditentukan, method = 'min' berarti bahwa nilai yang sama akan memiliki peringkat yang sama, bukan peringkat rata-rata
    peringkat = s.ini_data.rank(metode='min') 
    kembalikan ranks.div(peringkat.max())

Keempat, frekuensi data

Terkadang data yang diperoleh tidak sesering yang kita butuhkan untuk analisis kita. Misalnya, jika tingkat analisis bulanan dan frekuensi data mentah harian, Anda perlu menggunakan “downsampling”, yaitu, data agregat bulanan.

DOWNSAMPLING

Ini mengacu pada agregasi data dalam koleksi ke dalam deretan data, seperti menggabungkan data harian ke dalam data bulanan. Dalam hal ini, perlu untuk mempertimbangkan karakteristik masing-masing indikator agregat, dan operasi yang biasa adalah:

  • Nilai pertama / nilai terakhir
  • Rata-rata / median *standar deviasi

Upsample

Ini mengacu pada pemisahan baris data menjadi beberapa baris data, seperti data tahunan untuk analisis bulanan. Ini biasanya pengulangan sederhana, dan kadang-kadang perlu untuk mengumpulkan data tahunan secara proporsional setiap bulan.

Falcon (/) adalah generasi baru infrastruktur investasi Web3 yang didasarkan pada model multi-faktor yang membantu pengguna “memilih”, “membeli”, “mengelola”, dan “menjual” aset kripto. Falcon diinkubasi oleh Lucida pada Juni 2022.

Lebih banyak konten tersedia untuk dikunjungi

Lihat Asli
Halaman ini mungkin berisi konten pihak ketiga, yang disediakan untuk tujuan informasi saja (bukan pernyataan/jaminan) dan tidak boleh dianggap sebagai dukungan terhadap pandangannya oleh Gate, atau sebagai nasihat keuangan atau profesional. Lihat Penafian untuk detailnya.
  • Hadiah
  • Komentar
  • Posting ulang
  • Bagikan
Komentar
0/400
Tidak ada komentar
  • Sematkan
Perdagangkan Kripto Di Mana Saja Kapan Saja
qrCode
Pindai untuk mengunduh aplikasi Gate
Komunitas
Bahasa Indonesia
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)