WEIGHTED PRODUCT (WP)

Contoh implementasi DSS (Decision Support System) dengan metode Weighted Product (WP) menggunakan PHP dan MySQL untuk pemilihan karyawan baru pada posisi Senior Web Developer

Metode Weighted Product merupakan salah satu metode untuk menyelesaikan masalah Multi-Attribute Decision Making (MADM) yang menggunakan perkalian untuk menghubungkan rating atribut.

[ author : cahya dsn, published on : February 4, 2015 updated on : August 20, 2018 ]

minerva minerva donasi donation

Mau lihat artikel lainya? Dapatkan artikel-artikel lain seputar pemrograman website di sini, dan dapatkan ide-ide baru

Penerapan Metode Weighted Product (WP) diharapkan mampu untuk membantu dalam menentukan Senior Web Developer baru dari beberapa kandidat pelamar yang diajukan, untuk menjadi karyawan di departemen IT

Sebuah perusahaan IT membutuhkan seorang senior web application programmer yang menguasai bahasa pemrograman PHP, database Mysql, menguasai HTML5, javascript dan CSS3. Ada 9 kandidat yang akan dipilih dari hasil interview yang sudah dilakukan oleh tim HRD dan IT yang akan dijadikan alternatif; yaitu A1: Zaki, A2: Oscar, A3: Nina, A4: Usman, A5: Intan, A6: Dewi, A7: Firza, A8: Shinta, dan A9: Wawan .

Ada 5 kriteria dasar yang menjadi acuan dalam pengambilan keputusan, yaitu:

  • C1: Penguasaan Aspek teknis (skala 1-10)
  • C2: Pengalaman Kerja (dalam tahun)
  • C3: Interpersonal Skill (skala 1-10)
  • C4: Usia (dalam tahun)
  • C5: Status Perkawinan (5:blm menikah, 8:menikah tanpa tanggungan, 10: menikah dgn tanggungan)

2.1. Rating Kecocokan Alternatif dan Kriteria

Tabel 1 menunjukkan rating kecocokan dari setiap alternatif dengan setiap kriteria. Nilai setiap alternatif pada setiap atribut diberikan berdasarkan data riil.

TABEL 1: Rating kecocokan dari setiap alternatif pada setiap kriteria
Alternatif Kriteria
C1C2C3C4C5
A1 Zaki6.548.5265
A2 Oscar7.557.5308
A3 Nina7.51.56.5295
A4 Usman8183710
A5 Intan6692810
A6 Dewi8863410
A7 Firza67.56.54110
A8 Shinta6.53.573910
A9 Wawan938.5248

2.2. Bobot Kriteria

Pengambil keputusan memberi bobot preferensi dari setiap kriteria sebagai: W=(5,4,5,1.5,2.5) dengan masing-masing jenisnya (keuntungan/benefit atau biaya/cost) seperti dalam tabel 2 berikut:

TABEL 2: Kriteria yang ditentukan
Kriteria Deskripsi Bobot Atribut
C1 Penguasaan Aspek teknis 5 benefit
C2 Pengalaman Kerja 4 benefit
C3 Interpersonal Skill 5 benefit
C4 Usia 1.5 cost
C5 Status Perkawinan 2.5 cost

2.3. Perhitungan Manual

Pada bagian ini akan dijelaskan mengenai perhitungan normalisasi bobot (W), penentuan nilai preferensi (S), penentuan nilai preferensi realtif (V), dan perangkingan dari data alternatif yang diberikan. Penjelasannya sendiri disajikan secara langkah per langkah agar mudah dipahami.

2.3.1. Normalisasi Bobot (W)

Berdasarkan data-data tabel kriteria di atas, bobot awal yang ada adalah W=(5,4,5,1.5,2.5) akan diperbaiki sehingga total bobot seperti dalam persamaan [WP-02], dengan cara

.. [WP-04]

Dari persamaan [WP-04] diperoleh hasil sebagai berikut:

w1= 5 /(5+4+5+1.5+2.5) = 5 / 18
 = 0.27777777777778
w2= 4 /(0.27777777777778+4+5+1.5+2.5) = 4 / 18
 = 0.22222222222222
w3= 5 /(0.27777777777778+0.22222222222222+5+1.5+2.5) = 5 / 18
 = 0.27777777777778
w4= 1.5 /(0.27777777777778+0.22222222222222+0.27777777777778+1.5+2.5) = 1.5 / 18
 = 0.083333333333333
w5= 2.5 /(0.27777777777778+0.22222222222222+0.27777777777778+0.083333333333333+2.5) = 2.5 / 18
 = 0.13888888888889

Sehingga diperoleh bobot ternormalisasi w=(0.27777777777778,0.22222222222222,0.27777777777778,0.083333333333333,0.13888888888889)

2.3.2. Menghitung Nilai Vektor S

Nilai vektor preferensi S dihitung berdasarkan persamaan [WP-01], sehingga diperoleh hasil:

S1=(6.50.27777777777778)(40.22222222222222)(8.50.27777777777778)(26-0.083333333333333)(5-0.13888888888889)
= 2.528
S2=(7.50.27777777777778)(50.22222222222222)(7.50.27777777777778)(30-0.083333333333333)(8-0.13888888888889)
= 2.4714
S3=(7.50.27777777777778)(1.50.22222222222222)(6.50.27777777777778)(29-0.083333333333333)(5-0.13888888888889)
= 1.9457
S4=(80.27777777777778)(10.22222222222222)(80.27777777777778)(37-0.083333333333333)(10-0.13888888888889)
= 1.7066
S5=(60.27777777777778)(60.22222222222222)(90.27777777777778)(28-0.083333333333333)(10-0.13888888888889)
= 2.4812
S6=(80.27777777777778)(80.22222222222222)(60.27777777777778)(34-0.083333333333333)(10-0.13888888888889)
= 2.5188
S7=(60.27777777777778)(7.50.22222222222222)(6.50.27777777777778)(41-0.083333333333333)(10-0.13888888888889)
= 2.3075
S8=(6.50.27777777777778)(3.50.22222222222222)(70.27777777777778)(39-0.083333333333333)(10-0.13888888888889)
= 2.0417
S9=(90.27777777777778)(30.22222222222222)(8.50.27777777777778)(24-0.083333333333333)(8-0.13888888888889)
= 2.448

2.3.3. Menghitung Nilai Vektor V

Perhitungan nilai vektor V mengacu pada persamaan [WP-03]. Dari persamaan tersebut dapat disederhanakan menjadi persamaan sebagai berikut:

.. [WP-05]

Dari persamaan [WP-05] tersebut kita peroleh:

V1= 2.528/(2.528 + 2.4714 + 1.9457 + 1.7066 + 2.4812 + 2.5188 + 2.3075 + 2.0417 + 2.448)
 = 0.1236
V2= 2.4714/(2.528 + 2.4714 + 1.9457 + 1.7066 + 2.4812 + 2.5188 + 2.3075 + 2.0417 + 2.448)
 = 0.1209
V3= 1.9457/(2.528 + 2.4714 + 1.9457 + 1.7066 + 2.4812 + 2.5188 + 2.3075 + 2.0417 + 2.448)
 = 0.0951
V4= 1.7066/(2.528 + 2.4714 + 1.9457 + 1.7066 + 2.4812 + 2.5188 + 2.3075 + 2.0417 + 2.448)
 = 0.0835
V5= 2.4812/(2.528 + 2.4714 + 1.9457 + 1.7066 + 2.4812 + 2.5188 + 2.3075 + 2.0417 + 2.448)
 = 0.1213
V6= 2.5188/(2.528 + 2.4714 + 1.9457 + 1.7066 + 2.4812 + 2.5188 + 2.3075 + 2.0417 + 2.448)
 = 0.1232
V7= 2.3075/(2.528 + 2.4714 + 1.9457 + 1.7066 + 2.4812 + 2.5188 + 2.3075 + 2.0417 + 2.448)
 = 0.1128
V8= 2.0417/(2.528 + 2.4714 + 1.9457 + 1.7066 + 2.4812 + 2.5188 + 2.3075 + 2.0417 + 2.448)
 = 0.0998
V9= 2.448/(2.528 + 2.4714 + 1.9457 + 1.7066 + 2.4812 + 2.5188 + 2.3075 + 2.0417 + 2.448)
 = 0.1197

2.3.4. Perankingan Nilai Vektor V

Dari hasil perhitungan nilai vektor V di atas dapat diurutkan secara descending (dari nilai terbesar ke nilai terkecil) sebagai berikut:

No Alternatif Nilai Akhir
1 A1 Zaki 0.12362569173504
2 A6 Dewi 0.12317314642309
3 A5 Intan 0.12133543355487
4 A2 Oscar 0.12085907334136
5 A9 Wawan 0.11971526013608
6 A7 Firza 0.11283996807849
7 A8 Shinta 0.099842437218363
8 A3 Nina 0.095147550364694
9 A4 Usman 0.083459224013324

Sehingga dari 9 orang kandidat, diperoleh hasil yang terpilih untuk diterima sebagai Senior Web Developer di departemen IT adalah Zaki dengan total nilai perhitungan akhir sebesar 0.12362569173504.

3. Aplikasi PHP

Sebagai pelengkap artikel Metode Weighted Product (WP) pada bagian ini akan dibahas langkah-langkah dalam implementasinya dengan bahasa pemrograman PHP dan database MySQL/MariaDB.

3.1. Persiapan Database

Sebagai bahan pembelajaran aplikasi WP ini; dibuat database (dalam hal ini menggunakan MySQL/MariaDB Database server) sebagai berikut:

CREATE DATABASE IF NOT EXISTS db_dss;
USE db_dss;

Awalnya membuat dulu database dengan nama db_dss jika belum ada database dengan nama tersebut, kemudian gunakan database tersebut dengan memakai sintak USE db_dss;

Dalam hal ini, pembuatan database memakai command console dari database server yang bersangkutan

3.1.1. Membuat Data Tabel Kriteria

Berdasarkan contoh kasus di atas dibuatkan tabel untuk data-data kriteria sebagai berikut:

DROP TABLE IF EXISTS wp_criterias;
CREATE TABLE IF NOT EXISTS wp_criterias(
  id_criteria TINYINT(3) UNSIGNED NOT NULL,
  criteria VARCHAR(100) NOT NULL,
  weight FLOAT NOT NULL,
  attribute SET('benefit','cost'),
  PRIMARY KEY(id_criteria)
)ENGINE=MyISAM;

INSERT INTO wp_criterias(id_criteria,criteria,weight,attribute)
VALUES
(1,'Penguasaan Aspek teknis',5,'benefit'),
(2,'Pengalaman Kerja',4,'benefit'),
(3,'Interpersonal Skill',5,'benefit'),
(4,'Usia',1.5,'cost'),
(5,'Status Perkawinan',2.5,'cost');

3.1.2. Membuat Data Tabel Alternatif

Data-data mengenai kandidat yang akan dievaluasi seperti yang tertera pada contoh kasus di atas dapat di representasikan dalam tabel database sebagai berikut:

DROP TABLE IF EXISTS wp_alternatives;
CREATE TABLE IF NOT EXISTS wp_alternatives(
  id_alternative SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT,
  name VARCHAR(30) NOT NULL,
  PRIMARY KEY(id_alternative)
) ENGINE=MyISAM;

INSERT INTO wp_alternatives(name)
VALUES
('Zaki'),
('Oscar'),
('Nina'),
('Usman'),
('Intan'),
('Dewi'),
('Firza'),
('Shinta'),
('Wawan');

Dalam tabel wp_alternatives tersebut hanya disimpan id dan nama alternatif-nya; dalam pengembangannya dapat ditambahkan atribut/properti data lainnya, semisal alamat, nomor telepon, email, dan sebagainya sesuai kebutuhan. Namun dalam contoh ini hanya diperlukan namanya saja.

3.1.3. Membuat Data Tabel Hasil Evaluasi

Berikutnya adalah membuat tabel yang berisi hasil evaluasi dari tiap-tiap kandidat(alternatif) terhadap kriteria-kriteria yang diberikan. Data-data yang ada pada contoh kasus di atas dapat di representasikan dalam tabel relasi antara tabel wp_criterias dengan tabel wp_alternatives sebagai berikut:

DROP TABLE IF EXISTS wp_evaluations;
CREATE TABLE IF NOT EXISTS wp_evaluations(
  id_alternative SMALLINT(5) UNSIGNED NOT NULL,
  id_criteria TINYINT(3) UNSIGNED NOT NULL,
  value FLOAT NOT NULL,
  PRIMARY KEY (id_alternative,id_criteria)
)ENGINE=MyISAM;

INSERT INTO wp_evaluations(id_alternative,id_criteria,value)
VALUES
(1,1,6.5)(1,2,4)(1,3,8.5)(1,4,26)(1,5,5),
(2,1,7.5)(2,2,5)(2,3,7.5)(2,4,30)(2,5,8),
(3,1,7.5)(3,2,1.5)(3,3,6.5)(3,4,29)(3,5,5),
(4,1,8)(4,2,1)(4,3,8)(4,4,37)(4,5,10),
(5,1,6)(5,2,6)(5,3,9)(5,4,28)(5,5,10),
(6,1,8)(6,2,8)(6,3,6)(6,4,34)(6,5,10),
(7,1,6)(7,2,7.5)(7,3,6.5)(7,4,41)(7,5,10),
(8,1,6.5)(8,2,3.5)(8,3,7)(8,4,39)(8,5,10),
(9,1,9)(9,2,3)(9,3,8.5)(9,4,24)(9,5,8);

3.2. Koneksi Ke Database Server

Dari databse yang sudah dibuat, kita bisa membuat script php untuk membuat koneksi ke database server dengan extension mysqli secara sederhana sebagai berikut:

<?php
//-- konfigurasi database
$dbhost 'localhost';
$dbuser 'root';
$dbpass '';
$dbname 'db_dss';
//-- koneksi ke database server dengan extension mysqli
$db = new mysqli($dbhost,$dbuser,$dbpass,$dbname);
//-- hentikan program dan tampilkan pesan kesalahan jika koneksi gagal
if ($db->connect_error) {
    die(
'Connect Error ('.$db->connect_errno.')'.$db->connect_error);
}
?>

Sesuaikan nilai-nilai $dbhost,$dbuser,$dbpass dan $dbname dengan konfigurasi database yg digunakan.

Secara umum dalam WP, langkah-langkah yang dilakukan dalam pengambilan keputusan adalah sebagai berikut:

3.3.1 Pengambilan Data

Untuk keperluan perhitungan berikutnya, terlebih dahulu dengan PHP diambil data dari database MySQL/MariaDB yang sudah dibuat sebelumnya dan disimpan dalam variabel array, sebagai berikut:

<?php
//--- query mengambil nilai data-data kriteria 
$sql="SELECT id_criteria,criteria,weight 
      FROM wp_criterias 
      ORDER BY id_criteria"
;
$result=$db->query($sql);
//--- inisialisasi array kriteria 'C'
$C=array();
//--- inisialisasi array weight/bobot 'W'
$W=array();
//--- inisialisasi jumlah kriteria 'n'
$n=0
while(
$criteria=$result->fetch_assoc()){
  
$W[$id_criteria]=$criteria['weight'];
  
$C[]=$criteria;
  ++
$n;
}
$result->free();

//--- query mengambil nilai data-data hasil evaluasi 
$sql="SELECT id_criteria,criteria,weight 
      FROM wp_evaluations 
      ORDER BY id_alternative,id_criteria"
;
$result=$db->query($sql);
//--- inisialisasi array X
$X=array();
$alternative='';
//--- inisialisasi jumlah alternative 'm'
$m=0;
while(
$row=$result->fetch_assoc()){
  if(
$row['id_alternative']!=$alternative){
    
$X[$row['id_alternative']]=array();
    
$alternative=$row['id_alternative'];
    ++
$m;
  }
  
$X[$row['id_alternative']][$row['id_criteria']]=$row['value'];
}
$result->free();
?>

3.3.2. Normalisasi Bobot (W)

Script PHP yang digunakan untuk mengimplementasikan perhitungan normalisasi bobot dapat dituliskan sebagai berikut:

<?php
//--- menghitung total jumlah bobot
$sigma_w=array_sum($W);
//--- membagi masing-masing bobot dengan total jumlah bobot
foreach($W as $j=>$w){
  
$W[$j]=$w/$sigma_w;
}
?>

3.3.3. Menghitung Nilai Vektor S

Perhitungan nilai vektor preferensi S dengan PHP dapat dilakukan dengan script berikut:

<?php
//--- inisialisasi array 'S'
$S=array();
//--- menghitung nilai preferensi S untuk tiap-tiap alternatif
foreach($X as $i=>$x){
  
//--- inisialisasi nilai S untuk alternatif ke-i
  
$S[$i]=1;
  
//--- lakukan iterasi untuk tiap-tiap data hasil evaluasi X
  
foreach($x as $j=>$value){
    
//--- kalikan dengan pangkat negatif dari nilai untuk kriteria ke j
    //--- jika merupakan kriteria biaya/cost
    
if($criterias[$j]['attribute']=='cost')
      
$S[$i]*=pow($value,-$W[$j]);
    
//--- kalikan dengan pangkat positif dari nilai untuk kriteria ke j
    //--- jika merupakan kriteria keuntungan/benefit
    
else  
      
$S[$i]*=pow($value,$W[$j]);
  }
}
?>

3.3.4. Menghitung Nilai Vektor V

Nilai dari Vektor V adalah nilai dari masing-masing nilai preferensi S dibagi dengan jumlah total nilai vektor S. Perhitungan tersebut dapat direpresentasikan dalam kode-kode PHP sebagai berikut:

<?php
//--- inisialisasi vektor V
$V=array();
//--- menghitung total jumlah nilai preferensi S
$sigma_s=array_sum($S);
//--- membagi masing-masing bobot dengan total jumlah nilai preferensi S
foreach($S as $j=>$s){
  
$V[$j]=$s/$sigma_s;
}
?>

3.3.5. Perankingan Nilai Vektor V

Proses perankingan nilai vektor V dalam PHP dapat dilakukan dengan perintah berikut:

<?php
//--- mengurutkan data nilai vektor V secara descending
arsort($V);
//--- menampilkan data secara terurut dari yang terbesar
$rank=0;
foreach(
$V as $i=>$v){
    echo ++
$rank." V5 =  <br>";
}    
?>

Konfigurasi aplikasi

Masukkan jumlah Kriteria (n) dan jumlah Alternatif (m) yang akan disimulasikan. Pada simulasi ini dibatasi nilai masukkannya masing-masing hanya bilangan bulat antara 3 s.d 7 saja