Robust Regression

Suprapto van Plaosan
7 min readSep 20, 2023

--

Tujuan dari regresi adalah mengepaskan model persamaan linier ke data yang dianalisis. Persamaan regresi linier terdiri dari variable independen, slope atau kemiringan, intersept, dan variabel dependen. Persamaan umumnya adalah sebagai berikut:

y = m . X + b atau
y = m.T . Xn + b
untuk regresi linier dengan variabel independen lebih dari satu

Regresi Huber adalah contoh algoritma regresi yang kuat yang memberikan bobot yang lebih rendah pada pengamatan yang diidentifikasi sebagai outlier. Untuk melakukannya, algoritma ini menggunakan kerugian Huber dalam rutinitas optimisasi. Berikut adalah pandangan yang lebih baik tentang apa yang sebenarnya terjadi dalam model ini.

Regresi Huber meminimalkan fungsi kerugian berikut:

Huber

dimana

adalah simpangan baku,

prediktor atau estimator yang digunakan,

variabel respons,

koefisien regresi

parameter regularisasi.

Rumus ini juga mengindikasikan bahwa outlier diperlakukan secara berbeda dari pengamatan biasa berdasarkan kerugian Huber:

Huber loss mengidentifikasi outlier dengan mempertimbangkan residual, yang ditunjukkan oleh

Jika pengamatan dianggap sebagai pengamatan biasa (karena nilai absolut dari residual lebih kecil dari suatu ambang tertentu),

Kemudian diterapkan fungsi kerugian kuadrat. Sebaliknya, pengamatan dianggap sebagai outlier dan sehingga diterapkan kerugian absolut. Dengan demikian, kerugian Huber pada dasarnya adalah kombinasi dari fungsi kerugian kuadrat dan absolut.

Bila diperhatikan, persamaan pertama mirip dengan Ridge regression, yaitu, termasuk regularisasi L2. Perbedaan antara regresi Huber dan regresi Ridge terletak pada penanganan outlier.

Pendekatan terhadap fungsi kerugian saat menganalisis perbedaan antara dua metrik evaluasi regresi: mean squared error (MSE) dan mean absolute error (MAE) diimplikasikan oleh kerugian Huber, yang merekomendasikan menggunakan MAE ketika berurusan dengan outlier, karena tidak memberikan pinalti pengamatan seberat yang dilakukan oleh kerugian kuadrat.

Terkait dengan poin sebelumnya, fakta bahwa mengoptimalkan kerugian kuadrat menghasilkan estimator yang tidak bias di sekitar mean, sementara perbedaan absolut menghasilkan estimator yang tidak bias di sekitar median. Median jauh lebih tahan terhadap outlier daripada mean, jadi diharapkan ini memberikan perkiraan yang kurang bias.

Gunakan nilai default 1.35 untuk

,
yang menentukan sensitivitas regresi terhadap outlier. Huber (2004) menunjukkan bahwa ketika kesalahan mengikuti distribusi normal dengan

= 1 dan

= 1.35, efisiensi sebesar 95% tercapai dibandingkan dengan regresi OLS.

Direkomendasikan untuk menyetel hiperparameter alpha dan epsilon dengan menggunakan metode seperti grid search.

RANSAC regression

Random sample consensus (RANSAC) regression adalah algoritma non-deterministik yang berusaha memisahkan data pelatihan menjadi inlier (yang mungkin terkena noise) dan outlier. Kemudian, algoritma ini mengestimasi model akhir hanya menggunakan inlier.

RANSAC adalah algoritma iteratif di mana setiap iterasi terdiri dari langkah-langkah berikut:

  1. Pilih subset acak dari himpunan data awal.
  2. Sesuaikan model dengan subset acak yang dipilih tersebut. Secara default, model tersebut adalah model regresi linear; namun, hal itu dapat diubah menjadi model regresi lainnya.
  3. Gunakan model yang diestimasi untuk menghitung residual (selisih antara nilai prediksi dan nilai sebenarnya) untuk semua titik data dalam himpunan data awal. Semua pengamatan dengan residual absolut yang lebih kecil dari atau sama dengan ambang batas yang dipilih dianggap sebagai inlier dan membentuk himpunan konsensus yang disebut konsensus set. Secara default, ambang batasnya didefinisikan sebagai median absolute deviation (MAD) dari nilai target.
  4. Model yang disesuaikan disimpan sebagai yang terbaik jika sudah cukup banyak titik yang diklasifikasikan sebagai bagian dari konsensus set. Jika model yang diestimasi saat ini memiliki jumlah inlier yang sama dengan model terbaik saat ini, model tersebut hanya dianggap lebih baik jika memiliki skor yang lebih baik.

Langkah-langkah ini dilakukan secara iteratif, baik sejumlah maksimum iterasi yang ditentukan atau sampai kriteria berhenti khusus terpenuhi. Kriteria-kriteria tersebut dapat diatur menggunakan tiga hiperparameter khusus. Seperti yang saya sebutkan sebelumnya, model akhir diestimasi menggunakan semua sampel inlier.

Untuk mengestimasi model regresi RANSAC, dapat dilakukan fit pada data.

ransac = RANSACRegressor(random_state=42).fit(X, y)
fit_df["ransac_regression"] = ransac.predict(plotline_X)
ransac_coef = ransac.estimator_.coef_
coef_list.append(["ransac_regression", ransac.estimator_.coef_[0]])

Seperti yang ditunjukkan, prosedur untuk mendapatkan koefisien sedikit lebih kompleks, karena pertama-tama perlu mengakses estimator akhir dari model (yang dilatih menggunakan semua inlier yang diidentifikasi) menggunakan estimator_. Karena ini adalah objek LinearRegression, lanjutkan untuk mendapatkan koefisien seperti yang dilakukan sebelumnya. Kemudian, plot hasil regresi RANSAC (Gambar 4).

Dengan regresi RANSAC juga dapat memeriksa pengamatan yang dianggap sebagai inlier dan outlier oleh model. Pertama, periksa berapa banyak outlier yang diidentifikasi oleh model secara total, dan kemudian berapa banyak dari outlier yang secara manual dimasukkan yang tumpang tindih dengan keputusan model. 25 pengamatan pertama dari data pelatihan adalah outlier yang telah dimasukkan.

Untuk melakukannya dapat mengakses label inlier/outlier dari model RANSAC. Misalnya, jika menggunakan scikit-learn, dapat menggunakan estimator_.inlier_mask_ untuk mengakses label inlier atau outlier. Kemudian, dapat memeriksa sejauh mana pengamatan yang secara manual dimasukkan cocok dengan keputusan model.

inlier_mask = ransac.inlier_mask_
outlier_mask = ~inlier_mask
print(f"Total outliers: {sum(outlier_mask)}")
print(f"Outliers you added yourself: {sum(outlier_mask[:N_OUTLIERS])} / {N_OUTLIERS}")

Contoh tersebut akan mencetak ringkasan berikut:

Total outliers: 51
Outliers you added yourself: 25 / 25

Sekitar 10% data diidentifikasi sebagai outlier, dan semua pengamatan yang dimasukkan secara manual berhasil diklasifikasikan sebagai outlier. Visualisasi inlier dibandingkan dengan outlier dilakukan untuk melihat 26 pengamatan lain yang dicatat sebagai outlier. Ini akan membantu memahami sejauh mana model RANSAC mengidentifikasi outlier dalam data.

plt.scatter(X[inlier_mask], y[inlier_mask], color="blue", label="Inliers")
plt.scatter(X[outlier_mask], y[outlier_mask], color="red", label="Outliers")
plt.title("RANSAC - outliers vs inliers");

Gambar 5 menunjukkan bahwa pengamatan yang berjarak paling jauh dari garis best-fit hipotetis pada data asli dianggap sebagai outlier. Hal ini konsisten dengan cara kerja model RANSAC, di mana pengamatan yang jauh dari garis regresi yang dihasilkan diidentifikasi sebagai outlier.

Theil-Sen regression

Theil-Sen regression adalah metode regresi non-parametrik, yang berarti bahwa metode ini tidak membuat asumsi tentang distribusi data yang mendasarinya. Secara singkat, metode ini melibatkan penyesuaian beberapa model regresi pada subset data pelatihan dan kemudian menggabungkan koefisien pada langkah terakhir.

Inilah cara kerja algoritma tersebut. Pertama, algoritma menghitung solusi kuadrat terkecil (slope dan intercept) pada subset dengan ukuran ‘p’ (hiperparameter n_subsamples) yang dibuat dari semua pengamatan dalam himpunan data pelatihan ‘X’. Jika dihitung intercept (opsional), maka kondisi berikut harus dipenuhi: ‘p >= n_features + 1’. Slope akhir dari garis (dan mungkin intercept) didefinisikan sebagai median spasial dari semua solusi kuadrat terkecil.

Salah satu kekurangan mungkin dari algoritma ini adalah kompleksitas komputasinya, karena dapat mempertimbangkan jumlah solusi kuadrat terkecil yang sama dengan n_samples pilih n_subsamples, di mana n_samples adalah jumlah pengamatan dalam X. Mengingat jumlah ini dapat dengan cepat meningkat, ada beberapa hal yang dapat dilakukan:

  1. Gunakan algoritma ini hanya untuk masalah kecil dalam hal jumlah sampel dan fitur. Namun, karena alasan yang jelas, ini mungkin tidak selalu layak dilakukan.
  2. Penyetelan hiperparameter n_subsamples. Nilai yang lebih rendah membuat estimator lebih tahan terhadap outlier dengan biaya efisiensi yang lebih rendah, sementara nilai yang lebih tinggi mengurangi ketahanan dan meningkatkan efisiensi.
  3. Gunakan hiperparameter max_subpopulation. Jika total nilai n_samples pilih n_subsamples lebih besar dari max_subpopulation, algoritma hanya mempertimbangkan subpopulasi stokastik dengan ukuran maksimal tertentu. Secara alami, menggunakan hanya subset acak dari semua kombinasi yang mungkin mengakibatkan algoritma kehilangan beberapa properti matematikanya.

Selain itu, perlu diketahui bahwa ketahanan estimator berkurang dengan cepat dengan dimensionalitas masalah. Untuk melihat bagaimana hal itu berjalan dalam praktiknya, lakukan estimasi regresi Theil-Sen menggunakan contoh berikut ini:

theilsen = TheilSenRegressor(random_state=42).fit(X, y)
fit_df["theilsen_regression"] = theilsen.predict(plotline_X)
coef_list.append(["theilsen_regression", theilsen.coef_[0]])

Perbandingan Model

Sejauh ini, tiga algoritma regresi yang tahan terhadap outlier telah diterapkan pada data yang mengandung outlier, dan garis terbaik individu telah diidentifikasi. Sekarang saatnya untuk membandingkannya.

Mulailah dengan inspeksi visual pada Gambar 7. Untuk menghindari tampilan terlalu banyak garis, garis terbaik data asli tidak dicetak. Namun, cukup mudah untuk membayangkan seperti apa tampilannya, mengingat arah mayoritas titik data. Jelas bahwa regresi RANSAC dan Theil-Sen menghasilkan garis terbaik yang paling akurat.

Untuk lebih tepatnya, mari perhatikan koefisien yang diestimasi. Tabel 1 menunjukkan bahwa regresi RANSAC menghasilkan hasil yang paling mendekati dengan data asli. Juga menarik untuk melihat seberapa besar dampak 5% outlier pada regresi linier reguler.

Pertanyaan mengenai algoritma regresi tahan terhadap outlier terbaik adalah “Tergantung.” Seperti yang sering terjadi, jawabannya adalah, “Tergantung.” Berikut beberapa panduan yang mungkin membantu untuk menemukan model yang tepat untuk masalah spesifik.

  • Secara umum, fitting yang tahan terhadap outlier dalam pengaturan dimensi tinggi (high-dimensional setting) sulit.
  • Berbeda dengan Theil-Sen dan RANSAC, regresi Huber tidak mencoba sepenuhnya menghilangkan outlier. Sebaliknya, ia mengurangi efek outlier pada fitting.
  • Regresi Huber seharusnya lebih cepat daripada RANSAC dan Theil-Sen, karena yang terakhir ini mengikuti subset data yang lebih kecil.
  • Theil-Sen dan RANSAC mungkin tidak sekuat regresi Huber menggunakan hiperparameter default.
  • RANSAC lebih cepat daripada Theil-Sen dan lebih baik dalam penanganan jumlah sampel yang besar.
  • RANSAC seharusnya lebih baik dalam penanganan outlier besar dalam arah y, yang merupakan skenario paling umum.

Dengan mempertimbangkan semua informasi di atas, juga dapat melakukan eksperimen empiris dengan ketiga algoritma regresi tahan terhadap outlier ini dan melihat mana yang paling cocok dengan data.

--

--