Rata-Rata Pergerakan Sederhana, Rata-Rata Pergerakan Tertimbang, Rata-Rata Pergerakan Eksponensial, digunakan dalam pembelajaran mesin dan algoritma pengoptimalan, matematika

Rata-rata bergerak adalah teknik statistik yang digunakan untuk menganalisis data deret waktu dengan menghitung rata-rata jendela geser dari titik-titik data yang berurutan. Rata-rata bergerak dapat digunakan untuk menghaluskan fluktuasi data dan membantu mengurangi dampak fluktuasi jangka pendek dan gangguan pada data, sehingga memudahkan untuk mengidentifikasi tren dan pola. Mereka juga mampu mengidentifikasi tren dan membantu mengidentifikasi arah tren data secara keseluruhan, apakah meningkat, menurun, atau datar. Rata-rata bergerak dapat digunakan sebagai cara yang sederhana dan efisien dalam membuat prakiraan data deret waktu. Berdasarkan pernyataan di atas, rata-rata bergerak dapat digunakan dalam analisis teknis pasar (saham) atau pembelajaran mesin.

Konfigurasi dan batasan

Namun, setiap teknik rata-rata bergerak memerlukan konfigurasi ukuran jendela. Ukuran jendela, juga dikenal sebagai rentang, menentukan jumlah titik data yang digunakan dalam penghitungan rata-rata bergerak. Ukuran jendela yang lebih besar menghasilkan rata-rata yang lebih halus, namun juga dapat menyebabkan respons yang lebih lambat terhadap perubahan data. Ukuran jendela yang lebih kecil akan memberikan respons yang lebih sensitif, namun juga dapat meningkatkan dampak fluktuasi jangka pendek pada data. Keterbatasannya terletak pada lambatnya respons terhadap perubahan data dan mungkin tertinggal dari nilai sebenarnya. Selain itu, rata-rata pergerakan mungkin sensitif terhadap outlier dalam data dan mungkin tidak secara akurat mewakili pola dasar data.

Setelah menentukan semua parameter dan batasan yang diperlukan, dalam artikel ini kita akan melihat rata-rata pergerakan sederhana (SMA), rata-rata pergerakan tertimbang (WMA), dan rata-rata pergerakan eksponensial (EMA).

Rata-Rata Pergerakan Sederhana (SMA)

Ini adalah bentuk rata-rata bergerak paling sederhana di mana rata-rata dihitung pada jendela tetap (ukuran jendela) titik data dan merupakan alat analisis teknikal yang umum digunakan untuk menghitung harga rata-rata instrumen keuangan selama sejumlah periode masa lalu. Rumus untuk menghitung Simple Moving Average (SMA) didefinisikan sebagai:

Di mana:

  • n adalah jumlah periode yang digunakan untuk menghitung rata-rata,
  • Σ mewakili jumlah data masukan x_i selama jumlah periode tertentu,
  • x adalah masukan data pada periode i.

Sekarang mari kita lihat implementasi singkat SMA dalam bahasa pemrograman python.

def SMA(J, n):
    T = len(J)
    J_avg = [0] * n
    SMA = []
    
    for t in range(1, T):
        J_avg.pop(0)
        J_avg.append(J[t])
        SMA.append(sum(J_avg) / n)
    
    return SMA

# Example usage
J = [100, 105, 103, 110, 115, ...]
n = 11
SMA_values = SMA(J, n)

Rata-Rata Pergerakan Tertimbang (WMA)

Rata-Rata Pergerakan Tertimbang (WMA) adalah alat analisis teknikal yang umum digunakan untuk menghitung harga rata-rata suatu instrumen keuangan selama beberapa periode terakhir. WMA memberikan bobot pada setiap titik harga dalam penghitungan, dengan harga terkini diberi bobot paling besar. Ini sering digunakan untuk mengidentifikasi tren dan menghasilkan sinyal beli atau jual, mirip dengan Simple Moving Average (SMA) dan Exponential Moving Average (EMA). Rumus untuk menghitung WMA didefinisikan sebagai:

Di mana:

  • w1 hingga wn adalah bobot yang ditetapkan ke n titik data di jendela. Bobot biasanya dipilih sehingga titik data terbaru memiliki bobot lebih tinggi.
  • x adalah masukan data pada periode i.

Setelah menentukan rumus untuk menghitung WMA, sekarang kita dapat mendalami implementasi WMA dalam bahasa pemrograman Python.

T = 50
J = [100, 105, 103, 110, 115, ...]
n = 11
w = [1, 2, 3, 4, 5, ..., 11]
sum_weights = sum(w)
values = list()

for t in range(1, T):
    WMA = 0
    for i in range(n):
        WMA += J[t-i] * w[i]
    WMA /= sum_weights
    values.append(WMA)

Rata-Rata Pergerakan Eksponensial (EMA)

Rata-rata Pergerakan Eksponensial (EMA) adalah jenis rata-rata pergerakan yang memberikan bobot lebih pada titik data terkini dan lebih sedikit bobot pada titik data lama. Penghitungan EMA didasarkan pada peluruhan eksponensial dari bobot yang diberikan pada titik data, dengan titik data terbaru memiliki bobot tertinggi. Rumus matematika EMA adalah:

Di mana:

  • ini adalah titik waktunya,
  • Xt adalah titik data saat ini,
  • alpha (α) adalah faktor pemulusan (nilai antara 0 dan 1),
  • EMA(t-1) adalah nilai EMA sebelumnya,
  • dan EMA(t) adalah nilai saat ini yang sedang dihitung.

Faktor penghalusan menentukan bobot yang diberikan pada titik data saat ini dalam penghitungan EMA. Nilai alpha yang lebih besar memberi bobot lebih pada titik data saat ini dan nilai α yang lebih kecil memberi bobot lebih pada nilai EMA sebelumnya. Nilai α biasanya diatur antara 0,8 dan 0,98, dengan nilai yang lebih besar digunakan untuk hasil yang lebih responsif dan nilai yang lebih kecil digunakan untuk penghalusan yang lebih baik. EMA memiliki beberapa keunggulan dibandingkan rata-rata pergerakan sederhana (SMA) dan rata-rata pergerakan tertimbang (WMA). EMA merespons lebih cepat terhadap perubahan data dan tidak terlalu terpengaruh oleh lag dan sensitivitas terhadap outlier yang mungkin ada di SMA dan WMA. Namun, penghitungan EMA lebih kompleks dibandingkan SMA dan WMA, dan pilihan faktor pemulusan dapat berdampak signifikan pada hasil yang diperoleh. Setelah semua teori yang diperlukan, kita akan melihat implementasi EMA dalam bahasa pemrograman Python.

def exponential_moving_average(values, alpha):
    ema = [values[0]]
    for i in range(1, len(values)):
        ema.append(alpha * values[i] + (1 - alpha) * ema[i-1])
    return ema

Rata-rata Pergerakan dan Algoritma Optimasi dalam Pembelajaran Mesin

Dalam pembelajaran mesin, tujuannya adalah menemukan parameter optimal suatu model yang meminimalkan kesalahan antara prediksi model dan nilai target sebenarnya. Kesalahan ini biasanya diukur dengan fungsi tujuan, yang merupakan ekspresi matematika yang merangkum performa model. Algoritma optimasi digunakan untuk menyesuaikan parameter model guna meminimalkan fungsi tujuan.

Salah satu tantangan dalam pengoptimalan adalah menemukan kecepatan pembelajaran yang sesuai, yang menentukan besarnya langkah yang diambil dalam setiap iterasi. Solusi umum terhadap tantangan ini adalah dengan menggunakan rata-rata bergerak untuk menjadwalkan kecepatan pemelajaran.

Pendekatan rata-rata bergerak melibatkan penghitungan rata-rata pergerakan tertimbang secara eksponensial dari fungsi tujuan dari waktu ke waktu. Misalkan J(t) adalah fungsi tujuan pada waktu iterasi t, dan J_avg(t) menjadi rata-rata pergerakan pada waktu iterasi t. Rata-rata pergerakan diperbarui di setiap iterasi menggunakan persamaan berikut:

J_avg(t+1) = beta * J_avg(t) + (1 - beta) * J(t+1)

Di mana:

  • Beta merupakan parameter yang menentukan bobot yang diberikan terhadap rata-rata sebelumnya. Jika beta mendekati 1, rata-rata pergerakan akan berubah sangat lambat, memberi bobot lebih pada masa lalu. Jika beta mendekati 0, rata-rata pergerakan akan berubah dengan sangat cepat, memberikan bobot lebih pada iterasi saat ini. Pemilihan beta akan mempengaruhi perilaku moving average dan proses optimasi.

Kecepatan pemelajaran (η) diatur berbanding terbalik dengan akar kuadrat dari rata-rata bergerak, sehingga lebih kecil ketika rata-ratanya besar, yang menunjukkan bahwa modelnya mendekati nilai minimum, dan lebih besar ketika rata-ratanya kecil, yang menunjukkan bahwa model tersebut jauh dari minimum. Kecepatan pembelajaran (η) dihitung menggunakan persamaan berikut:

learning_rate = alpha / sqrt(J_avg(t))

Di mana:

  • Alpha adalah faktor konstan yang menentukan kecepatan pembelajaran awal.

Setelah menentukan semua parameter yang diperlukan, kami siap mengimplementasikan contoh algoritma moving average dalam bahasa pemrograman Python.

import numpy as np

def moving_average_schedule(x_0, gradient, J, T, alpha, beta):
    J_avg = J(x_0)
    x = x_0
    for t in range(T):
        learning_rate = alpha / np.sqrt(J_avg)
        x = x - learning_rate * gradient(x)
        J_avg = beta * J_avg + (1 - beta) * J(x)
    return x

Dalam contoh ini, x_0 adalah parameter pengoptimalan awal, gradien(x) adalah fungsi yang mengembalikan gradien fungsi tujuan di x, J(x) adalah fungsi yang mengembalikan nilai fungsi tujuan di x, T adalah jumlah iterasi, alpha adalah faktor konstan yang menentukan awal >kecepatan pembelajaran, dan beta adalah parameter rata-rata pergerakan. Hasil akhir x adalah parameter yang dioptimalkan setelah T iterasi.

Kesimpulannya, pendekatan rata-rata bergerak adalah cara sederhana dan efektif untuk menjadwalkan kecepatan pembelajaran dalam algoritma optimasi. Dengan menggunakan rata-rata bergerak dari fungsi tujuan, kecepatan pembelajaran dapat disesuaikan secara dinamis berdasarkan konvergensi proses pengoptimalan, sehingga membantu meningkatkan stabilitas dan efisiensi pengoptimalan.

Jika Anda menyukai artikel ini, pastikan untuk mengikuti saya untuk melihat artikel baru saya.

Konten lainnya di . Daftar ke >kami. Ikuti kami di "Twitter", "LinkedIn", "YouTube", dan "Discord" .

Tertarik untuk meningkatkan skala startup perangkat lunak Anda? Lihat "Sirkuit".