Sering kali kita dihadapkan pada pepatah “Jangan Membandingkan apel dan jeruk” dalam proses pengukuran. Ini adalah sebuah analogi yang bagus untuk mengartikulasikan bahwa dua hal tidak dapat dibandingkan karena terdapat perbedaan mendasar di antara keduanya. Sebagai seorang HR analis, kita akan menghadapi perbedaan seperti itu dan harus memahaminya setiap hari.
Mari kita ambil contoh dan pahami beberapa cara untuk membandingkan apel dan jeruk.
Kita akan mencoba untuk memahami cara membandingkan apel dan jeruk dengan mengubah data dan ukuran yang utamanya. Silakan baca artikel ini, jika Anda perlu membandingkan hubungan berbagai jenis variabel secara visual.
Kita akan mulai dengan variabel numerik. Pertimbangkan kita memiliki dataset di bawah ini dan kita perlu membandingkan variabelnya:
data<-read.csv("/home/peopleanalytics/compensation.csv", header=TRUE, sep=",")
print(data)
## Gaji Pengalaman Usia
## 1 25414000 3 24
## 2 29737000 5 32
## 3 53172900 6 38
## 4 33680100 8 33
## 5 34453000 7 39
## 6 55229600 9 40
## 7 16178500 0 27
## 8 23763400 2 25
## 9 26920500 4 28
## 10 48797500 5 35
Hal pertama yang kita hadapi adalah 3 variabel dalam dataset dalam bentuk yang berbeda. akan tetapi, tugas kita sebagai seorang analis adalah membuat ketertiban dalam kekacauan dengan membuat data menjadi masuk akal. Beberapa pertanyaan yang mungkin muncul di benak kita:
Variabel mana yang paling bervariasi nilainya?
Seberapa keterkaitan antar variabelnya?
Dapatkah saya menggunakan variabel-variabel ini untuk menyusun model prediksi saya secara langsung?
Mari kita telaah pertanyaan di atas satu per satu dan mencoba menjawabnya.
Kita terbiasa menjawab persoalan ini dengan menghitung varians atau standard deviasi, seperti ini
sd<-round(apply(data,2,sd),3)
print(sd)
## Gaji Pengalaman Usia
## 13319068.130 2.767 5.896
var<-round(apply(data,2,var),0)
print(var)
## Gaji Pengalaman Usia
## 1.773976e+14 8.000000e+00 3.500000e+01
Apakah angka varians dan standar deviasi menjawab pertanyaan diatas? tentu TIDAK, karena kita sadar bahwa ketiga variabel tersebut memiliki skala atau unit pengukuran yang berbeda tentunya.
Dapatkah kita membuat beberapa modifikasi pada rmumus standar deviasi agar bisa sebanding antar variabel? Bagaimana jika kita membuat standar deviasi dengan mengabaikan satuan ukur? Ini adalah tempat yang berarti untuk menyelamatkan kita. Mean diukur dalam unit yang sama dengan Standar Deviasi. Membagi standar deviasi dengan mean mencapai tujuan kita dan hasilnya dikenal dengan Koefisien Variasi.
library(raster)
## Loading required package: sp
cv<-round(apply(data,2,cv),3)
print(cv)
## Gaji Pengalaman Usia
## 38.345 56.467 18.369
Dari Hasil perhitungandi atas, nampaknya Variabel Pengalaman menunjukkan variasi lebih besar daripada variabel lainnya. Koefisien variasi telah memungkinkan kita untuk membandingkan tingkat variasi dalam variabel meskipun memiliki cara dan skala yang berbeda.
Kita terbiasa menghitung Koefisien korelasi yang dihitung dengan batas bawah -1 dan batas atas +1. Semakin dekat hasil ukur adalah kedua batas, semakin tinggi pergerakan variabel bersama-sama atau saling bertentangan. Jika koefisien korelasi mendekati -1 (berkorelasi negatif), variabel bergerak berbanding terbalik terhadap masing-masing. Demikian juga, jika koefisien korelasi mendekati 1 (berkorelasi positif), variabel bergerak berbanding lurus yaitu jika sebuah variabel bergerak ke atas, maka variael yang lainnya akan mengikutinya.
#Correlation
corr <- cor(data)
print(corr)
## Gaji Pengalaman Usia
## Gaji 1.0000000 0.7502695 0.8335470
## Pengalaman 0.7502695 1.0000000 0.8247679
## Usia 0.8335470 0.8247679 1.0000000
Sesuai dengan tabel di atas, nampaknya ada hubungan positif yang kuat antara semua variabel dengan tingkat tertinggi antara Gaji dan Usia sebesar 0.833, karena koefisien korelasi positif untuk semua dan mendekati +1.
Bila Anda membandingkan beberapavariabel, Anda melihat satuan ukur relatif dan bukan satuan ukur absolut. Anda tidak akan melihat koefisien variasi gaji dalam insolation tapi akan membandingkannya dengan 2 variabel lainnya. 2 pertanyaan pertama mencoba membandingkan satuan ukur variabel secara individual. Tapi, bagaimana jika tujuannya adalah untuk membandingkan pengamatan keseluruhan dataset daripada satuan ukur individu dari variabel. Membangun model prediktif memerlukan keseluruhan dataset sebagai masukan.
Dapatkah Anda menggunakan variabel dalam dataset sebagai masukan secara langsung, terutama jika Anda menggunakan algoritma pembelajaran mesin (Machine Learning)? Apakah Anda ingin algoritma yangAnda susun memberi arti penting pada variabel hanya karena nilainya relatif tinggi daripada variabel lainnya? Dalam contoh kita, Gaji berada pada skala tertinggi. Jadi, jika kita memberikan semua variabel dalam dataset kita sebagai masukan untuk K-means, algoritma pembelajaran mesin yang populer, algoritma akan cenderung memberi arti lebih penting pada ‘Gaji’ dan kluster yang dihasilkan akan terbentuk, mungkin hanya menyegmentasikan Gaji dan Bukan variabel lain dalam hubungannya. Ini karena algoritma hanya melihat nilai dari variabel. Jadi jika K-means mengelompokkan observasi berdasarkan jarak numerik antara pengamatan, adalah logis bahwa Gaji mendapatkan bobot yang lebih tinggi dalam menentukan bagaimana pengamatan dikelompokkan karena nilainya jauh lebih tinggi daripada 2 variabel lainnya.
Apa jalan keluarnya? kita telah melihat standarisasi satuan ukur individual sampai sekarang dan bukan keseluruhan data. Mari kita lihat sebuah metode untuk membakukan seluruh data variabel menggunakan nilai z.
data<-data.frame(data)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:raster':
##
## intersect, select, union
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
data2 <- data %>% mutate_each_(funs(scale(.) %>% as.vector), vars=c("Gaji","Pengalaman","Usia"))
print(data2)
## Gaji Pengalaman Usia
## 1 -0.69979746 -0.68669715 -1.37373667
## 2 -0.37522520 0.03614196 -0.01695971
## 3 1.38434985 0.39756151 1.00062301
## 4 -0.07917596 1.12040061 0.15263741
## 5 -0.02114637 0.75898106 1.17022013
## 6 1.53876756 1.48182017 1.33981725
## 7 -1.39320182 -1.77095581 -0.86494531
## 8 -0.82372505 -1.04811670 -1.20413955
## 9 -0.58668894 -0.32527760 -0.69534819
## 10 1.05584339 0.03614196 0.49183165
Tabel di sebelah diatas menunjukkan nilai z untuk data dari variabel
summary(data2)
## Gaji Pengalaman Usia
## Min. :-1.3932 Min. :-1.77096 Min. :-1.37374
## 1st Qu.:-0.6715 1st Qu.:-0.59634 1st Qu.:-0.82255
## Median :-0.2272 Median : 0.03614 Median : 0.06784
## Mean : 0.0000 Mean : 0.00000 Mean : 0.00000
## 3rd Qu.: 0.7866 3rd Qu.: 0.66863 3rd Qu.: 0.87343
## Max. : 1.5388 Max. : 1.48182 Max. : 1.33982
Tabel di sebelah diatas menunjukkan rangkuman untuk data dari variabel
Perhitungan Rerata dan Standard Deviasi Standard Deviasi
sd1<-round(apply(data2,2,sd),3)
print(sd1)
## Gaji Pengalaman Usia
## 1 1 1
Rerata
mean<-round(apply(data2,2,mean),3)
print(mean)
## Gaji Pengalaman Usia
## 0 0 0
Seperti yang terlihat dari tabel di atas, nilai z untuk variabel telah mengubah rerata data mereka menjadi nol dan standar deviasi menjadi 1.
Situasi di mana Anda memerlukan standardisasi seperti diatas, terutama saat kita menggunakan teknik pembelajaran mesin seperti PCA, K-means, dll. Namun, pada saat yang sama, Anda mungkin diminta untuk mengubah data menjadi rentang tertentu seperti pada pemrosesan gambar, di mana intensitas piksel harus Dinormalisasi agar sesuai dengan rentang tertentu (yaitu 0 sampai 255 untuk kisaran warna RGB). Selain itu, algoritma jaringan syaraf tiruan dapat menggunakan data yang berada pada skala 0-1 dengan cara untuk menghindari bias. Bias ini mungkin timbul karena pengamatan yang berada pada ujung yang paling ekstrem dari range atau disebut outlier. Untuk menghindari masalah tersebut, teknik transformasi, yang membatasi data dalam kisaran, diperlukan. Hal ini dapat dihadapi dengan melakukan Normalisasi.
Sama seperti standarisasi, data yang dinormalisasi juga tidak memiliki satuan. Mari lihat seperti apa dataset orisinal yang kita miliki setelah proses normalisasi.
data<-data.frame(data)
x<-data
normalize <- function(x) {
x <- as.matrix(x)
minAttr=apply(x, 2, min)
maxAttr=apply(x, 2, max)
x <- sweep(x, 2, minAttr, FUN="-")
x=sweep(x, 2, maxAttr-minAttr, "/")
attr(x, 'normalized:min') = minAttr
attr(x, 'normalized:max') = maxAttr
return (x)
}
y<-normalize(x)
print(y)
## Gaji Pengalaman Usia
## [1,] 0.2364978 0.3333333 0.0000
## [2,] 0.3471989 0.5555556 0.5000
## [3,] 0.9473331 0.6666667 0.8750
## [4,] 0.4481718 0.8888889 0.5625
## [5,] 0.4679638 0.7777778 0.9375
## [6,] 1.0000000 1.0000000 1.0000
## [7,] 0.0000000 0.0000000 0.1875
## [8,] 0.1942301 0.2222222 0.0625
## [9,] 0.2750755 0.4444444 0.2500
## [10,] 0.8352902 0.5555556 0.6875
## attr(,"normalized:min")
## Gaji Pengalaman Usia
## 16178500 0 24
## attr(,"normalized:max")
## Gaji Pengalaman Usia
## 55229600 9 40
summary(y)
## Gaji Pengalaman Usia
## Min. :0.0000 Min. :0.0000 Min. :0.0000
## 1st Qu.:0.2461 1st Qu.:0.3611 1st Qu.:0.2031
## Median :0.3977 Median :0.5556 Median :0.5312
## Mean :0.4752 Mean :0.5444 Mean :0.5062
## 3rd Qu.:0.7435 3rd Qu.:0.7500 3rd Qu.:0.8281
## Max. :1.0000 Max. :1.0000 Max. :1.0000
Kita lihat nilai reratanya tidak sama dengan 0
sd4<-round(apply(y,2,sd),3)
print(sd4)
## Gaji Pengalaman Usia
## 0.341 0.307 0.369
Dan nilai standar deviasinya juga tidak sama dengan 1
Tabel di atas menunjukkan nilai normal variabel dan tabel di bawahnya menunjukkan ringkasan data dari variabel, setelah dilakukantransformasi. Semua variabel dibatasi antara 0 dan 1.
Jadi, bagaimana Anda memilih antara Standardisasi dan Normalisasi? Bergantung pada tujuan teknik ini, salah satu metode harus dipilih. Untuk teknik seperti PCA atau K-means, Anda ingin mempertahankan sifat tak terbatas dan variasi data sementara pada saat yang sama harus membuat data tidak bergerak dan relatif sama skala (kisaran nilai variabel yang berubah). Dalam kasus seperti itu, Standardisasi adalah pilihan terbaik Anda. Ada kalanya Anda tidak ingin data Anda tidak terbatas seperti dalam kasus Standardisasi sehingga teknik Anda tidak memberikan bias terhadap pengamatan, yang mengarah ke sisi yang lebih tinggi / lebih rendah dari jangkauan (potensi outlier). Normalisasi mengurangi dampak outlier karena kisaran data sangat ketat antara 0 dan 1.
Untuk Membandingkan variabel yang memiliki satuan ukur yang berbeda pertama-tama harus melibatkan identifikasi tujuan perbandingan semacam itu tergantung pada teknik yang tepat untuk mengubah variabel atau satuan ukur kunci yang harus dipilih. Dengan bantuan sebuah contoh, kita melihat koefisien variasi, korelasi, standardisasi dan normalisasi sebagai beberapa cara dan metode untuk membandingkan dan menggunakan variabel numerik yang berbeda untuk proses analisis dan membangun model prediksi.
Depok 21 Agustus 2017