Introduksi

Mumpung lagi hangat masalah struktur dan skala upah karena aturan yang baru, saya akan coba menyodorkan alternatif solusi mengenai Regresi Support vector. Tulisan ini ditujukan untuk memperkaya pengetahuan bahwa tidak selamanya data upah atau gaji yang kita miliki cocok digunakan dengan pendekatan regresi linier.

Dalam tulisan ini saya akan memperlihatkan cara dan teknik penggunaan regresi Support Vector dengan basis R. Pertama kali kita akan memperlihatkan bagaimana mengerjakan kasus penyusunan skala penggajian atau skala upah dengan teknik yang biasa digunakan yakni regresi linier sederhana, kemudian kita akan bandingkan hasilnya dengan Regresi Support Vector, Anda akan melihat perbedaan antara keduanya dengan basis data yang sama.

Disini kita akan bicara akurasi dari model skala upah yang kita susun.

Ini contoh sebaran data dari nilai bobot jabatan dan besarnya gaji di perusahaan MMM (Ilustrasi) Data=Hanya Contoh ilustrasi saja

Tahap I Mengerjakan dengan Regresi Sederhana

Kita ragu apakah garis upah yang berwarna hitam sudah cukup baik untuk digunakan sebagai “garis kecenderungan upah atau gaji”? Tentunya kita memerlukan pengukuran yang lebih akurat, mari kita lihat :

Dari plot di atas tampak titik biru yang ada masih kurang rapat dengan garis kecenderungannya, maka kita akan hitung Root Mean Squared Error (RMSE) sebagai indikator untuk melihat penyimpangan antara nilai prediksi garis kecenderungan dengan data yang sesungguhnya

## [1] 85556.67

Nilai RMSE : 866656.67 masih terlalu besar. Mari kita coba perbaiki nilai ini dengan SVR.

Tahap II: Membuktikan grafik Model Linier

library(e1071)
plot(data, pch=16)
model <- svm(TotalRem ~ BobotJabatan , data)
predictedY <- predict(model, data)
points(data$BobotJabatan, predictedY, col = "red", pch=4)

Kita lihat Plot di atas data yang sudah mendekati trend line upah yang kita buat dengan SVR, mari kita hitung RMSEnya

## [1] 47374.95

Nilai RMSEnya turun drastis dari yang pertama ke :47374.95, hampir 50%nya. Pertanyaannya selanjutnya modelnya yang terbaik trendlinenya seperti apa?

Tahap III: Penalaan (tuning) Model Regresi SV yang paling cocok

Kita akan coba dengan model defaultnya agar tidak terjadi “over fitting” dengan parameter epsilon : 0.1 (default) dan tidak merubah parameter cost maka hasilnya :

tuneResult <- tune(svm, TotalRem ~ BobotJabatan,  data = data,
                   ranges = list(epsilon = seq(0,1,0.1), cost = 2^(2:9))
)
print(tuneResult)
## 
## Parameter tuning of 'svm':
## 
## - sampling method: 10-fold cross validation 
## 
## - best parameters:
##  epsilon cost
##        0    4
## 
## - best performance: 1676716187
plot(tuneResult)

Yang terbaik menurut hasil penalaan pada grafik yang biru gelap menunjukkan pada epsilon 0.0 hingga 0.2, maka kita akan menala lagi dengan parameters ini.

tuneResult <- tune(svm, TotalRem ~ BobotJabatan,  data = data,
                   ranges = list(epsilon = seq(0,0.2,0.01), cost = 2^(2:9))
) 

print(tuneResult)
## 
## Parameter tuning of 'svm':
## 
## - sampling method: 10-fold cross validation 
## 
## - best parameters:
##  epsilon cost
##        0  512
## 
## - best performance: 2031518769
plot(tuneResult)

Perubahan biru gelap pada grafiknya bergerak pada e= 0.05 - 0.10, dan pada cost =100 - 200.

Oleh karenanya kita coba dengan penalaan terbaik yang dilakukan model SVR dengan menggunakan sistem grid dimana proses perhitungan dilakukan untuk mendapat model yang optimum.

tuneResult2 <- tune(svm, TotalRem ~ BobotJabatan,  data = data,
                   ranges = list(epsilon = seq(0,1,0.1), cost = 2^(2:9))
)
print(tuneResult2)
## 
## Parameter tuning of 'svm':
## 
## - sampling method: 10-fold cross validation 
## 
## - best parameters:
##  epsilon cost
##        0    4
## 
## - best performance: 1961773607
plot(tuneResult2)

hasil diatas adalah yang terbaik menurut model. dan kita lihat parameter e=0 hingga 0.2 dan cost 4

tuneResult1 <- tune(svm, TotalRem ~ BobotJabatan,  data = data,
                   ranges = list(epsilon = seq(0,0.2,0.01), cost = 2^(2:9))
) 

print(tuneResult1)
## 
## Parameter tuning of 'svm':
## 
## - sampling method: 10-fold cross validation 
## 
## - best parameters:
##  epsilon cost
##     0.08   64
## 
## - best performance: 1977065957
plot(tuneResult1)

Penalaan Model terbaik

Inilah Model terbaiknya dengan RMSE terkecil yakni sebesar :

## [1] 29606.35
## 
## Call:
## best.tune(method = svm, train.x = TotalRem ~ BobotJabatan, data = data, 
##     ranges = list(epsilon = seq(0, 0.2, 0.01), cost = 2^(2:9)))
## 
## 
## Parameters:
##    SVM-Type:  eps-regression 
##  SVM-Kernel:  radial 
##        cost:  512 
##       gamma:  1 
##     epsilon:  0 
## 
## 
## Number of Support Vectors:  20

Jika kita plot gambar model regresi terbaiknya adalah sebagai berikut :

Nilai RMSE model diatas adalah sebesar yang terbaik untuk model trendline yang merah adalah sebesar :

error <- data$TotalRem - tunedModelY  
svrPredictionRMSE <- rmse(error)  
svrPredictionRMSE 
## [1] 29606.35

Hikmah yang kita ambil dari kajian diatas adalah bahwa tidak semuanya data bisa diperlakukan regresi linier apalagi skala upah, akurasi prediksi dari garis upah sangat ditentukan bentuk garis tersebut yang tidak selalu garis lurus linier. Penyimpangan prediksi hasil garis regresi dengan nilai nyatanya dinyatakan dengan Root Mean Squared Error atau RMSE. RMSE yang kecil adalah model yang terbaik.

Dari paparan diatas regresi Support Vector memberikan akurasi yang lebih baik dalam menyusun skala upah dilihat dai nilai RMSE dan bentuk grafik yang cenderung mengakomodasi nilai nilai nyata dalam garis trend linenya.

Sudahkah anda memeriksa skala upah anda cocok dengan regresi linier atau support vector?

Heru Wiryanto

heruwiryanto@gmail.com

Depok, 19-04-17

tatkala DKI persiapan untuk pilkada