Permasalahan sering yang dihadapi

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:

  1. Variabel mana yang paling bervariasi nilainya?

  2. Seberapa keterkaitan antar variabelnya?

  3. 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.

Variabel mana yang paling bervariasi nilainya?

Kita terbiasa menjawab persoalan ini dengan menghitung varians atau standard deviasi, seperti ini

Standard Deviasi

sd<-round(apply(data,2,sd),3)
print(sd)
##         Gaji   Pengalaman         Usia 
## 13319068.130        2.767        5.896

Varians

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.

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.

Seberapa keterkaitan antar variabelnya?

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.

Dapatkah saya menggunakan variabel-variabel ini untuk menyusun model prediksi saya secara langsung?

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.

Kesimpulan

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