Profile matching adalah sebuah mekanisme pengambilan keputusan dengan mengasumsikan bahwa terdapat tingkat variabel prediktor yang ideal yang harus dipenuhi oleh subyek yang diteliti, bukannya tingkat minimal yang harus dipenuhi atau dilewati
author : cahya dsn
,
published on : November 16th, 2014
updated on : October 13th, 2018
Profile matching adalah sebuah mekanisme pengambilan keputusan dengan mengasumsikan bahwa terdapat tingkat variabel prediktor yang ideal yang harus dipenuhi oleh subyek yang diteliti, bukannya tingkat minimal yang harus dipenuhi atau dilewati. (Kusrini, 2007
).
Menurut Rachma (2003:101)
,Profile matching merupakan suatu proses yang sangat penting dalam manajemen SDM dimana terlebih dahulu ditentukan kompetensi (kemampuan) yang diperlukan oleh suatu jabatan. Kompetensi/kemampuan tersebut haruslah dapat dipenuhi oleh pemegang/calon pemegang jabatan.
Contoh penerapannya :
Dalam proses profile matching secara garis besar merupakan proses membandingkan antara kompetensi individu kedalam kompetensi jabatan sehingga dapat diketahui perbedaan kompetensinya (disebut juga gap), semakin kecil gap yang dihasilkan maka bobot nilainya semakin besar yang berarti memiliki peluang lebih besar untuk karyawan menempati posisi tersebut.
Untuk menganalisis karyawan yang sesuai dengan jabatan tertentu dilakukan dengan metode profile matching, dimana dalam proses ini terlebih dahulu menentukan kompetensi (kemampuan) yang diperlukan oleh suatu jabatan. Dalam proses profile matching secara garis besar merupakan proses membandingkan antara kompetensi individu ke dalam kompetensi jabatan sehingga dapat diketahui perbedaan kompetensinya (disebut juga gap)
Layaknya sebuah analisis, Profile Matching tentu juga memiliki kekurangan dan kelebihan di dalam sistem analisisnya antara lain :
Evaluasi kinerja karyawan untuk promosi jabatan yang diambil dari 5 karyawan yang akan dipromosikan. Akan dipilih satu orang terbaik berdasarkan kriteria-kriteria yang telah ditentukan. Konsepnya adalah Mencari orang yang memiliki profil sedekat mungkin dengan jabatan yang sedang kosong.
PT Prima Teknologi sedang memerlukan seorang Senior Programmer di bidang web application. Saat ini ada 5 karyawan yang berstatus Junior Programmer, yaitu Bella, Tantri, Wawan, James, dan Enrico. Dari ke 5 orang Junior Programmer tersebut akan dipilih satu orang untuk dipromosikan menjadi Senior Programmer.
Langkah-langkah pada metode profil matching yaitu :
Hal yang penting dalam proses Metoda Profile Matching (dan juga pada semua implementasi Sistem Pengambilan Keputusan/SPK (Decision Support System/DSS) adalah menentukan variabel-variabel dan besarannya yang berperan dalam permasalahan yang akan diselesaikan.
Pada umumnya kriteria/aspek yang diukur dan nilai pembobotan yang digunakan adalan satu set variabel yang sudah ditentukan oleh pakar atau orang/lembaga yang berwenang. (Jenis kriteria, aspek,faktor, bobot, skala penilaian, dan besaran-besaran lain yang diperhitungkan BUKAN kewenangan/ditentukan oleh pemrogram). Untuk kasus-kasus yang lain, jenis kriteria,aspek, skala penilaian, pembototan dan lainya bisa berbeda; sebaiknya konsultasikan dengan pakar/orang/lembaga yang berwenang atau dari literatur yang sudah menjadi standar acuan.
Hal yang sangat penting dalam penggunaan metode Profile Matching adalah penentuan aspek-aspek apa saja yang akan digunakan sebagai perbandingan. Dalam kasus ini, dicontohkan 3 aspek penilaian yang digunakan, yaitu:
Berdasarkan aspek-aspek dan faktor-faktor yang telah ditentukan sebelumnya, selanjutnya adalah menentukan nilai target untuk masing-masing point penilaian tersebut. Berikut ini adalah nilai-nilai yang diharapkan/target pada contoh kasus ini:
Aspek | Faktor Penilaian | Nilai Target | Tipe |
---|---|---|---|
Kecerdasan | Common Sense | 3/td> | Secondary Factor |
Verbalisasi Ide | 3/td> | Secondary Factor | |
Sistematika Berpikir | 4/td> | Core Factor | |
Penalaran dan Solusi Real | 4/td> | Core Factor | |
Konsentrasi | 3/td> | Secondary Factor | |
Logika Praktis | 4/td> | Core Factor | |
Fleksibilitas Berpikir | 4/td> | Core Factor | |
Imajinasi Kreatif | 5/td> | Core Factor | |
Antisipasi | 3/td> | Secondary Factor | |
Potensi Kecerdasan | 4/td> | Core Factor | |
Sikap Kerja | Energi Psikis | 3/td> | Secondary Factor |
Ketelitian dan tanggung jawab | 4/td> | Core Factor | |
Kehati-hatian | 2/td> | Secondary Factor | |
Pengendalian Perasaan | 3/td> | Secondary Factor | |
Dorongan Berprestasi | 3/td> | Secondary Factor | |
Vitalitas dan Perencanaan | 5/td> | Core Factor | |
Perilaku | Dominance (Kekuasaan) | 3/td> | Secondary Factor |
Influences (Pengaruh) | 3/td> | Secondary Factor | |
Steadiness (Keteguhan Hati) | 4/td> | Core Factor | |
Compliance (Pemenuhan) | 5/td> | Core Factor |
Besarnya nilai target yang ditentukan tersebut dapat bervariasi tergantung kebutuhan dan posisi jabatan yang ditawarkan. Penilaian diukur dalam skala penilaian yang sudah ditentukan sebelumnya.
Tahap berikutnya adalah pemilihan kandidat yang akan dilakukan penilaian. Masing-masing kandidat dinilai berdasarkan point-point faktor dalam aspek-aspek yang telah ditentukan sebelumnya
Sebagai contoh diperoleh data kandidat beserta penilaiannya dalam tabel-tabel sebagai berikut:
No | Nama | I1 | I2 | I3 | I4 | I5 | I6 | I7 | I8 | I9 | I10 |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | Bella | 4 | 4 | 3 | 3 | 4 | 3 | 2 | 3 | 3 | 2 |
2 | Tantri | 3 | 5 | 4 | 3 | 4 | 4 | 3 | 5 | 4 | 3 |
3 | Wawan | 3 | 4 | 3 | 3 | 2 | 3 | 4 | 2 | 4 | 4 |
4 | James | 5 | 3 | 2 | 4 | 2 | 2 | 4 | 2 | 3 | 4 |
5 | Enrico | 2 | 4 | 3 | 3 | 2 | 2 | 4 | 3 | 2 | 3 |
Keterangan
I1 : Common Sense
I2 : Verbalisasi Ide
I3 : Sistematika Berpikir
I4 : Penalaran dan Solusi Real
I5 : Konsentrasi
I6 : Logika Praktis
I7 : Fleksibilitas Berpikir
I8 : Imajinasi Kreatif
I9 : Antisipasi
I10 : Potensi Kecerdasan
No | Nama | S1 | S2 | S3 | S4 | S5 | S6 |
---|---|---|---|---|---|---|---|
1 | Bella | 4 | 2 | 2 | 4 | 5 | 2 |
2 | Tantri | 1 | 5 | 5 | 5 | 5 | 2 |
3 | Wawan | 4 | 5 | 5 | 1 | 4 | 1 |
4 | James | 2 | 3 | 3 | 3 | 4 | 2 |
5 | Enrico | 3 | 4 | 3 | 1 | 3 | 1 |
Keterangan
S1 : Energi Psikis
S2 : Ketelitian dan tanggung jawab
S3 : Kehati-hatian
S4 : Pengendalian Perasaan
S5 : Dorongan Berprestasi
S6 : Vitalitas dan Perencanaan
No | Nama | P1 | P2 | P3 | P4 |
---|---|---|---|---|---|
1 | Bella | 4 | 5 | 5 | 2 |
2 | Tantri | 3 | 3 | 4 | 5 |
3 | Wawan | 4 | 3 | 4 | 4 |
4 | James | 3 | 4 | 5 | 3 |
5 | Enrico | 4 | 4 | 4 | 4 |
Keterangan
P1 : Dominance (Kekuasaan)
P2 : Influences (Pengaruh)
P3 : Steadiness (Keteguhan Hati)
P4 : Compliance (Pemenuhan)
Setelah proses pemilihan kandidat, proses berikutnya adalah menentukan kandidat mana yang paling cocok menduduki jabatan yang diajukan oleh perusahaan. Dalam kasus ini penulis menggunakan perhitungan pemetaan gap kompetensi dimana yang dimaksud dengan gap disini adalah beda antara profil jabatan dengan profil karyawan atau dapat ditunjukkan pada rumus di bawah ini:
Dengan menggunakan persamaan [GAP-01], dapat ditentukan nilai-nilai pemetaan GAP Kompetensi untuk tiap aspek dan alternatif yang diberikan.
Sebagai contoh dengan data kandidat Bella untuk aspek Kecerdasan pada faktor Common Sense mempunyai nilai
ProfilKaryawan
= 4 , sedangkan nilai target yang diharapkan/ditetapkan adalah ProfilJabatan
= 3. Sehingga dari [GAP-01] diperoleh nilai gap sebesar : 4 - 3 = 1
Perhitungan untuk faktor-faktor dan kandidat yang lain secara lengkap dapat dilihat dalam tabel-tabel berikut ini :
No | Nama | I1 | I2 | I3 | I4 | I5 | I6 | I7 | I8 | I9 | I10 |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | Bella | (4-3) = 1 | (4-3) = 1 | (3-4) = -1 | (3-4) = -1 | (4-3) = 1 | (3-4) = -1 | (2-4) = -2 | (3-5) = -2 | (3-3) = 0 | (2-4) = -2 |
2 | Tantri | (3-3) = 0 | (5-3) = 2 | (4-4) = 0 | (3-4) = -1 | (4-3) = 1 | (4-4) = 0 | (3-4) = -1 | (5-5) = 0 | (4-3) = 1 | (3-4) = -1 |
3 | Wawan | (3-3) = 0 | (4-3) = 1 | (3-4) = -1 | (3-4) = -1 | (2-3) = -1 | (3-4) = -1 | (4-4) = 0 | (2-5) = -3 | (4-3) = 1 | (4-4) = 0 |
4 | James | (5-3) = 2 | (3-3) = 0 | (2-4) = -2 | (4-4) = 0 | (2-3) = -1 | (2-4) = -2 | (4-4) = 0 | (2-5) = -3 | (3-3) = 0 | (4-4) = 0 |
5 | Enrico | (2-3) = -1 | (4-3) = 1 | (3-4) = -1 | (3-4) = -1 | (2-3) = -1 | (2-4) = -2 | (4-4) = 0 | (3-5) = -2 | (2-3) = -1 | (3-4) = -1 |
No | Nama | S1 | S2 | S3 | S4 | S5 | S6 |
---|---|---|---|---|---|---|---|
1 | Bella | (4-3) = 1 | (2-4) = -2 | (2-2) = 0 | (4-3) = 1 | (5-3) = 2 | (2-5) = -3 |
2 | Tantri | (1-3) = -2 | (5-4) = 1 | (5-2) = 3 | (5-3) = 2 | (5-3) = 2 | (2-5) = -3 |
3 | Wawan | (4-3) = 1 | (5-4) = 1 | (5-2) = 3 | (1-3) = -2 | (4-3) = 1 | (1-5) = -4 |
4 | James | (2-3) = -1 | (3-4) = -1 | (3-2) = 1 | (3-3) = 0 | (4-3) = 1 | (2-5) = -3 |
5 | Enrico | (3-3) = 0 | (4-4) = 0 | (3-2) = 1 | (1-3) = -2 | (3-3) = 0 | (1-5) = -4 |
No | Nama | P1 | P2 | P3 | P4 |
---|---|---|---|---|---|
1 | Bella | (4-3) = 1 | (5-3) = 2 | (5-4) = 1 | (2-5) = -3 |
2 | Tantri | (3-3) = 0 | (3-3) = 0 | (4-4) = 0 | (5-5) = 0 |
3 | Wawan | (4-3) = 1 | (3-3) = 0 | (4-4) = 0 | (4-5) = -1 |
4 | James | (3-3) = 0 | (4-3) = 1 | (5-4) = 1 | (3-5) = -2 |
5 | Enrico | (4-3) = 1 | (4-3) = 1 | (4-4) = 0 | (4-5) = -1 |
Setelah diperoleh Gap pada masing-masing karyawan, setiap profil karyawan diberi bobot nilai sesuai ketentuan pada Tabel Bobot Nilai Gap seperti yang ditunjukkan pada Tabel 8 berikut ini
Selisih | Bobot Nilai | Keterangan |
---|---|---|
0 | 5 | Tidak ada selisih (kompetensi sesuai dgn yg dibutuhkan) |
1 | 4.5 | Kompetensi individu kelebihan 1 tingkat |
-1 | 4 | Kompetensi individu kekurangan 1 tingkat |
2 | 3.5 | Kompetensi individu kelebihan 2 tingkat |
-2 | 3 | Kompetensi individu kekurangan 2 tingkat |
3 | 2.5 | Kompetensi individu kelebihan 3 tingkat |
-3 | 2 | Kompetensi individu kekurangan 3 tingkat |
4 | 1.5 | Kompetensi individu kelebihan 4 tingkat |
-4 | 1 | Kompetensi individu kekurangan 4 tingkat |
Dari data-data pada Tabel 5,Tabel 6,Tabel 7, dan Tabel 8 dapat ditentukan nilai pembobotan untuk tiap faktor untuk masing-masing kandidat.
Sebagai contoh, dari Tabel 5 kandidat Bella untuk aspek Kecerdasan pada faktor Common Sense mempunayi nilai gap/selisih sebesar 1 yang jika dipetakan dengan data pada Tabel 8 maka akan mendapatkan nilai bobot sebesar 4.5 (Kompetensi individu kelebihan 1 tingkat)
Dengan perhitungan yang sama diperoleh nilai pembobotan untuk semua kandidat seperti dalam tabel-tabel di bawah ini
No | Nama | I1 [s] | I2 [s] | I3 [c] | I4 [c] | I5 [s] | I6 [c] | I7 [c] | I8 [c] | I9 [s] | I10 [c] |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | Bella | 4.5 | 4.5 | 4 | 4 | 4.5 | 4 | 3 | 3 | 5 | 3 |
2 | Tantri | 5 | 3.5 | 5 | 4 | 4.5 | 5 | 4 | 5 | 4.5 | 4 |
3 | Wawan | 5 | 4.5 | 4 | 4 | 4 | 4 | 5 | 2 | 4.5 | 5 |
4 | James | 3.5 | 5 | 3 | 5 | 4 | 3 | 5 | 2 | 5 | 5 |
5 | Enrico | 4 | 4.5 | 4 | 4 | 4 | 3 | 5 | 3 | 4 | 4 |
No | Nama | S1 [s] | S2 [c] | S3 [s] | S4 [s] | S5 [s] | S6 [c] |
---|---|---|---|---|---|---|---|
1 | Bella | 4.5 | 3 | 5 | 4.5 | 3.5 | 2 |
2 | Tantri | 3 | 4.5 | 2.5 | 3.5 | 3.5 | 2 |
3 | Wawan | 4.5 | 4.5 | 2.5 | 3 | 4.5 | 1 |
4 | James | 4 | 4 | 4.5 | 5 | 4.5 | 2 |
5 | Enrico | 5 | 5 | 4.5 | 3 | 5 | 1 |
No | Nama | P1 [s] | P2 [s] | P3 [c] | P4 [c] |
---|---|---|---|---|---|
1 | Bella | 4.5 | 3.5 | 4.5 | 2 |
2 | Tantri | 5 | 5 | 5 | 5 |
3 | Wawan | 4.5 | 5 | 5 | 4 |
4 | James | 5 | 4.5 | 4.5 | 3 |
5 | Enrico | 4.5 | 4.5 | 5 | 4 |
Setelah menentukan bobot nilai gap untuk ketiga aspek yaitu aspek kapasitas intelektual, sikap kerja dan perilaku dengan cara yang sama. Kemudian tiap aspek dikelompokkan menjadi 2 (dua) kelompok yaitu kelompok Core Factor dan Secondary Factor.
Core factor merupakan aspek (kompetensi) yang paling menonjol atau paling dibutuhkan oleh suatu jabatan yang diperkirakan dapat menghasilkan kinerja optimal. Core factor dapat dirumuskan dalam persamaan berikut:
Keterangan
Secondary factor adalah item-item selain aspek yang ada pada core factor atau bisa juga disebut sebagai faktor pendukung. Secondary factor dapat dituliskan dalam rumusan sebagai berikut:
Keterangan
Dari hasil perhitungan dari tiap aspek tersebut kemudian dihitung nilai total berdasarkan presentase dari core factor dan secondary factor yang diperkirakan berpengaruh terhadap kinerja tiap-tiap profil.
Perhitungan Nilai Total dapat dilihat pada rumus di bawah ini:
Keterangan
Berdasarkan persamaan-persamaan [GAP-02],[GAP-03] dan [GAP-04] dapat dihitung nilai total untuk setiap aspek untuk masing-masing kandidat sebagai berikut :
Hasil akhir dari proses Profile Matching adalah ranking dari kandidat yang dapat dijadikan karyawan yang dapat mengisi suatu jabatan tertentu. Perangkingan ditentukan dari nilai total penilaian yang diurutkan dari nilai terbesar sampai dengan yang terkecil, dimana alternatif dengan nilai total terbesar yang dipilih sebagai hasil akhirnya.
Penentuan ranking mengacu pada hasil perhitungan tertentu, sebagai berikut:
Keterangan
Berdasarkan persamaan [GAP-05] dapat dihitung nilai total dari masing-masing alternatif sebagai berikut:
Nilai Akhir Bella | = 30% * $N_I$ + 30% * $N_S$ + 40% * $N_P$ = 0.3 * 3.89375 + 0.3 * 3.25 + 0.4 * 3.5875 = 3.578125 |
Nilai Akhir Tantri | = 30% * $N_I$ + 30% * $N_S$ + 40% * $N_P$ = 0.3 * 4.45625 + 0.3 * 3.2 + 0.4 * 5 = 4.296875 |
Nilai Akhir Wawan | = 30% * $N_I$ + 30% * $N_S$ + 40% * $N_P$ = 0.3 * 4.175 + 0.3 * 3.1 + 0.4 * 4.6125 = 4.0275 |
Nilai Akhir James | = 30% * $N_I$ + 30% * $N_S$ + 40% * $N_P$ = 0.3 * 4.0229166666667 + 0.3 * 3.6 + 0.4 * 4.2 = 3.966875 |
Nilai Akhir Enrico | = 30% * $N_I$ + 30% * $N_S$ + 40% * $N_P$ = 0.3 * 3.9354166666667 + 0.3 * 3.55 + 0.4 * 4.5 = 4.045625 |
Sehingga diperoleh hasil perangkingan dengan mengurutkan nilai data hasil perhitungan dari yang terbesar ke yang terkecil sebagai berikut :
Rangking | Alternatif | Nilai Total |
---|---|---|
1 | Tantri | 4.296875 |
2 | Enrico | 4.045625 |
3 | Wawan | 4.0275 |
4 | James | 3.966875 |
5 | Bella | 3.578125 |
Dari hasil perhitungan dengan method Profile Matching tersebut maka diperoleh hasil keputusan alternatif Tantri dengan nilai 4.296875 yang terpilih
Untuk melengkapi artikel ini, berikut ini akan diberikan gambaran implementasi Metode Profile Matching dengan menggunakan PHP.
Uraian diberikan secara langkah per langkah agar memudahkan pemahaman dalam pembuatan aplikasinya. Dimulai dari rancangan schema database-nya hingga langkah-langkah implemantasi proses sesuai Metode Profile Matching yang sudah dijelaskan sebelumnya.
Pada contoh aplikasi implementasi Metode Profile Matching yang akan diberikan, untuk memudahkan pemahaman data yang diolah akan dimasukkan dalam variabel PHP (dalam hal ini berupa array), meskipun sebenarnya data bisa diolah dengan lebih cepat di sisi database server dengan memanfaatkan sintak SQL. Untuk implementasi dengan perhitungan di sisi database akan disampaikan di bagian terpisah
Bagian ini sebenarnya tidak termasuk dalam proses pembuatan aplikasi Metode Profile Matching dengan PHP, namun untuk keperluan menjelaskan proses perhitungannya dengan memakai database server MySQL/MariaDB dan bahasa pemrograman PHP dalam artikel ini maka perlu disiapkan satu buah database. Sebagai contoh disini digunakan database bernama db_dss
yang dibuat dengan sintak SQL 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;
pm_aspek
Dari data pada fakta di atas, dapat di representasikan aspek-aspek yang berperan dalam permasalahan ini dalam bentuk tabel database, yaitu tabel pm_aspek
sebagai berikut:
DROP TABLE IF EXISTS pm_aspek; CREATE TABLE IF NOT EXISTS pm_aspek( id_aspek TINYINT(3) UNSIGNED AUTO_INCREMENT, aspek VARCHAR(100) NOT NULL, prosentase FLOAT NOT NULL, bobot_core FLOAT NOT NULL, bobot_secondary FLOAT NOT NULL, PRIMARY KEY(id_aspek) )ENGINE=MyISAM; INSERT INTO pm_aspek(id_aspek,aspek,prosentase,bobot_core,bobot_secondary) VALUES (1,'Kecerdasan',30,65,35), (2,'Sikap Kerja',30,60,40), (3,'Perilaku',40,55,45); SELECT * FROM tbl_aspek; +----------+-------------+------------+------------+-----------------+ | id_aspek | aspek | prosentase | bobot_core | bobot_secondary | +----------+-------------+------------+------------+-----------------+ | 1 | Kecerdasan | 30 | 65 | 35 | | 2 | Sikap Kerja | 30 | 60 | 40 | | 3 | Perilaku | 40 | 55 | 45 | +----------+-------------+------------+------------+-----------------+ 3 rows in set (0.00 sec)
pm_faktor
Faktor-faktor dari masing-masing aspek yang sudah diberikan sebelumnya, direpresentasikan dalam bentuk tabel pm_faktor
sebagai berikut :
DROP TABLE IF EXISTS pm_faktor; CREATE TABLE IF NOT EXISTS pm_faktor( id_faktor TINYINT(3) UNSIGNED AUTO_INCREMENT, id_aspek TINYINT(3) UNSIGNED NOT NULL, faktor VARCHAR(30) NOT NULL, target TINYINT(3) NOT NULL, type SET('core','secondary'), PRIMARY KEY(id_faktor) )ENGINE=MyISAM; INSERT INTO pm_faktor(id_aspek,faktor,target,type) VALUES (1,'Common Sense',3,'secondary'), (1,'Verbalisasi Ide',3,'secondary'), (1,'Sistematika Berpikir',4,'core'), (1,'Penalaran dan Solusi Real',4,'core'), (1,'Konsentrasi',3,'secondary'), (1,'Logika Praktis',4,'core'), (1,'Fleksibilitas Berpikir',4,'core'), (1,'Imajinasi Kreatif',5,'core'), (1,'Antisipasi',3,'secondary'), (1,'Potensi Kecerdasan',4,'core'), (2,'Energi Psikis',3,'secondary'), (2,'Ketelitian dan tanggung jawab',4,'core'), (2,'Kehati-hatian',2,'secondary'), (2,'Pengendalian Perasaan',3,'secondary'), (2,'Dorongan Berprestasi',3,'secondary'), (2,'Vitalitas dan Perencanaan',5,'core'), (3,'Dominance (Kekuasaan)',3,'secondary'), (3,'Influences (Pengaruh)',3,'secondary'), (3,'Steadiness (Keteguhan Hati)',4,'core'), (3,'Compliance (Pemenuhan)',5,'core');
pm_bobot
Tabel pm_bobot
digunakan untuk menyimpan nilai-nilai yang digunakan untuk pembobotan nilai gap dari tiap faktor untuk masing-masing kandidat/alternatif. Tabel ini mengacu pada nilai yang ada pada bagian pembobotan dalam contoh kasus di atas.
DROP TABLE IF EXISTS pm_bobot; CREATE TABLE IF NOT EXISTS pm_bobot( selisih TINYINT(3) NOT NULL, bobot FLOAT NOT NULL, keterangan VARCHAR(100) NOT NULL, PRIMARY KEY(selisih) )ENGINE=MyISAM; INSERT INTO pm_bobot(selisih,bobot,keterangan) VALUES (0,5,'Tidak ada selisih (kompetensi sesuai dgn yg dibutuhkan)'), (1,4.5,'Kompetensi individu kelebihan 1 tingkat'), (-1,4,'Kompetensi individu kekurangan 1 tingkat'), (2,3.5,'Kompetensi individu kelebihan 2 tingkat'), (-2,3,'Kompetensi individu kekurangan 2 tingkat'), (3,2.5,'Kompetensi individu kelebihan 3 tingkat'), (-3,2,'Kompetensi individu kekurangan 3 tingkat'), (4,1.5,'Kompetensi individu kelebihan 4 tingkat'), (-4,1,'Kompetensi individu kekurangan 4 tingkat'); SELECT * FROM pm_bobot; +---------+-------+------------------------------------------------------------+ | selisih | bobot | keterangan | +---------+-------+------------------------------------------------------------+ | 0 | 5 | Tidak ada selisih (kompetensi sesuai dgn yg dibutuhkan) | | 1 | 4.5 | Kompetensi individu kelebihan 1 tingkat | | -1 | 4 | Kompetensi individu kekurangan 1 tingkat | | 2 | 3.5 | Kompetensi individu kelebihan 2 tingkat | | -2 | 3 | Kompetensi individu kekurangan 2 tingkat | | 3 | 2.5 | Kompetensi individu kelebihan 3 tingkat | | -3 | 2 | Kompetensi individu kekurangan 3 tingkat | | 4 | 1.5 | Kompetensi individu kelebihan 4 tingkat | | -4 | 1 | Kompetensi individu kekurangan 4 tingkat | +---------+-------+------------------------------------------------------------+ 9 rows in set (0.01 sec)
pm_alternatif
Data kandidat/alternatif dimasukkan dalam tabel pm_alternatif
. Pada contoh ini hanya menyimpan data Nama saja, untuk keperluan/kebutuhan yang lain bisa ditambahkan atribut-atribut lain semisal jabatan, tempat/tanggal lahir, alamat, nomor telepon dan sebagainya dengan menambahkan field/column pada tabel pm_alternatif
yang diperlukan. Pembuatan tabel pm_alternatif
dan pengisian nilai record-nya (sesuai dengan contoh kasus di atas) adalah sebagai berikut:
DROP TABLE IF EXISTS pm_alternatif; CREATE TABLE IF NOT EXISTS pm_alternatif( id_alternatif TINYINT(3) UNSIGNED AUTO_INCREMENT, alternatif VARCHAR(100) NOT NULL, PRIMARY KEY(id_alternatif) )ENGINE=MyISAM; INSERT INTO pm_alternatif(alternatif) VALUES ('Bella'), ('Tantri'), ('Wawan'), ('James'), ('Enrico');
pm_sample
Semua data penilaian untuk setiap faktor dari masing-masing kandidat/alternatif di simpan pada tabel pm_sample
. Proses pembuatan dan pengisian data record sesuai dengan data kandidat dalam contoh kasus di atas dituliskan dalam query sebagai berikut:
DROP TABLE IF EXISTS pm_sample; CREATE TABLE IF NOT EXISTS pm_sample( id_sample INT(11) UNSIGNED AUTO_INCREMENT, id_alternatif TINYINT(3) UNSIGNED NOT NULL, id_faktor TINYINT(3) UNSIGNED NOT NULL, value TINYINT(3) UNSIGNED NOT NULL, PRIMARY KEY(id_sample) )ENGINE=MyISAM; INSERT INTO pm_sample(id_alternatif,id_faktor,value) VALUES (1,1,4),(1,2,4),(1,3,3),(1,4,3),(1,5,4),(1,6,3),(1,7,2),(1,8,3),(1,9,3),(1,10,2),(1,11,4),(1,12,2),(1,13,2),(1,14,4),(1,15,5),(1,16,2),(1,17,4),(1,18,5),(1,19,5),(1,20,2),(2,1,3),(2,2,5),(2,3,4),(2,4,3),(2,5,4),(2,6,4),(2,7,3),(2,8,5),(2,9,4),(2,10,3),(2,11,1),(2,12,5),(2,13,5),(2,14,5),(2,15,5),(2,16,2),(2,17,3),(2,18,3),(2,19,4),(2,20,5),(3,1,3),(3,2,4),(3,3,3),(3,4,3),(3,5,2),(3,6,3),(3,7,4),(3,8,2),(3,9,4),(3,10,4),(3,11,4),(3,12,5),(3,13,5),(3,14,1),(3,15,4),(3,16,1),(3,17,4),(3,18,3),(3,19,4),(3,20,4),(4,1,5),(4,2,3),(4,3,2),(4,4,4),(4,5,2),(4,6,2),(4,7,4),(4,8,2),(4,9,3),(4,10,4),(4,11,2),(4,12,3),(4,13,3),(4,14,3),(4,15,4),(4,16,2),(4,17,3),(4,18,4),(4,19,5),(4,20,3),(5,1,2),(5,2,4),(5,3,3),(5,4,3),(5,5,2),(5,6,2),(5,7,4),(5,8,3),(5,9,2),(5,10,3),(5,11,3),(5,12,4),(5,13,3),(5,14,1),(5,15,3),(5,16,1),(5,17,4),(5,18,4),(5,19,4),(5,20,4);
Dari database 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.
Sebelum dilakukan perhitungan-perhitungan menggunakan metoda Profile Matching dengan menggunakan PHP, maka terlebih dahulu kita menyiapkan data yang akan diolah dengan mengambil (fetching) data dari database, dan disimpan (assign) ke dalam variabel-variabel PHP.
Data-data yang diambil tersebut meliputi data-data primer -- yaitu data aspek, faktor, dan data bobot -- serta data-data sekunder yaitu data kandidat/alternatif beserta data penilaiannya (sample)
Data kriteria aspek yang tersimpan pada tabel pm_aspek
dan data faktor pada tabel pm_faktor
, masing-masing di-fetching dan di-assign ke variabel array dua dimensi $aspek
dan $faktor
. Pengkodean dalam bahasa pemrograman PHP-nya seperti berikut ini :
<?php
//-- query untuk mendapatkan semua data aspek di tabel pm_aspek
$sql = 'SELECT * FROM pm_aspek';
$result = $db->query($sql);
//-- menyiapkan variable penampung berupa array
$aspek=array();
//-- melakukan iterasi pengisian array untuk tiap record data yang didapat
foreach ($result as $row) {
$aspek[$row['id_aspek']]=array($row['aspek'],$row['prosentase'],$row['bobot_core'],$row['bobot_secondary']);
}
//-- query untuk mendapatkan semua data faktor di tabel pm_faktor
$sql = 'SELECT * FROM pm_faktor';
$result = $db->query($sql);
//-- menyiapkan variable penampung berupa array
$faktor=array();
//-- melakukan iterasi pengisian array untuk tiap record data yang didapat
foreach ($result as $row) {
$faktor[$row['id_faktor']]=array($row['id_aspek'],$row['faktor'],$row['target'],$row['type']);
}
?>;
Kita dapat menggabung dua routine tersebut dengan memakai klausa JOIN
tabel dalam query sehingga cukup memakai satu request query ke database server, contohnya adalah sebagai berikut:
<?php
//-- query untuk mendapatkan semua data aspek dan faktor di tabel pm_aspek/pm_faktor
$sql = 'SELECT * FROM pm_aspek a JOIN pm_faktor b USING(id_aspek) ORDER BY a.id_aspek';
$result = $db->query($sql);
//-- menyiapkan variable penampung berupa array
$aspek=$faktor=array();
//-- melakukan iterasi pengisian array untuk tiap record data yang didapat
foreach ($result as $row) {
$aspek[$row['id_aspek']]=array($row['aspek'],$row['prosentase'],$row['bobot_core'],$row['bobot_secondary']);
$faktor[$row['id_faktor']]=array($row['id_aspek'],$row['faktor'],$row['target'],$row['type']);
}
?>
Data bobot yang yang digunakan dalam perhitungan pembobotan nilai gap dan tersimpan pada tabel pm_bobot
di-fetching dan di-assign ke variabel array $bobot
dengan menggunakan script PHP seperti di bawah ini :
<?php
//-- query untuk mendapatkan semua data bobot di tabel pm_bobot
$sql = 'SELECT * FROM pm_bobot';
$result = $db->query($sql);
//-- menyiapkan variabel penampung berupa array
$bobot=array();
//-- melakukan iterasi pengisian array untuk tiap record data yang didapat
foreach ($result as $row) {
//-- $row['selisih'] merupakan nilai gap/selisih
$bobot[$row['selisih']] = $row;
}
?>
Index/key dari variabel $bobot
adalah merupakan nilai gap/selisih; sebagai contoh $bobot[-1]
adalah berisi data bobot untuk nilai gap/selisih sebesar -1 yang dalam hal ini berisi data array [-1,4,'Kompetensi individu kekurangan 1 tingkat']
. Dari data array tersebut dapat dibaca bahwa untuk nilai gap/selisih = -1 mempunyai nilai bobot = 4 dan memiliki makna : 'Kompetensi individu kekurangan 1 tingkat'.
Data sample yang tersimpan pada tabel pm_sample
di-fetching dan di-assign ke variabel array dua dimensi $sample
. Kode script PHP-nya adalah seperti berikut ini :
<?php
//-- query untuk mendapatkan semua data sample di tabel pm_sample
$sql = 'SELECT * FROM pm_sample a JOIN pm_alternatif b USING(id_alternatif) ORDER BY a.id_alternatif,a.id_faktor';
$result = $db->query($sql);
//-- menyiapkan variable penampung berupa array
$sample=array();
//-- melakukan iterasi pengisian array untuk tiap record data yang didapat
foreach ($result as $row) {
//-- jika array $sample[$row['alternatif']] belum ada maka buat baru
//-- $row['alternatif'] adlah nama kandidat/alternatif
if (!isset($sample[$row['alternatif']])) {
$sample[$row['alternatif']] = array();
}
$sample[$row['alternatif']][$row['id_faktor']] = $row['value'];
}
?>
Index/key dari dimensi array $sample
yang pertama adalah menunjukan nama dari alternatif/kandidat sedangkan yang kedua adalah id dari faktor-nya. Sebagai contoh $sample['Bella'][1]
menunjukkan nilai dari hasil penilaian dari alternatif/kandidat Bella untuk faktor ke-1 (Common Sense).
Bagian utama dari proses metoda Profile Matching adalah perhitungan nilai gap, pembobotan berdasarkan nilai gap, mencari nilai rata-rata core factor dan secondary factor serta nilai totalnya untuk tiap-tiap aspek; dan perangkingan dari nilai akhirnya.
Setelah proses pengambilan nilai-nilai primer dan sekunder dari database dilakukan pada proses sebelumnya, bagian ini akan menjelaskan proses perhitungan metode Profile Matching dengan menggunakan PHP. Data-data variabel yang dideklarasikan pada proses sebelumnya akan digunakan kembali dalam proses-proses berikut.
Dalam menghitung nilai GAP, kita mengacu pada persamaan [GAP-01], variabel yang diolah adalah $sample
dibandingkan dengan data target yang ada di variabel $faktor
. Perhitungan dalam PHP adalah sebagai berikut :
<?php
//-- menyiapkan variable penampung berupa array
$gap=array();
//-- melakukan iterasi perhitungan gap untuk tiap data $sample yang ada
foreach ($sample as $id_alternatif=>$data) {
//-- inisialisai variabel $gap[$id_alternatif]
$gap[$id_alternatif] = array();
//-- lakukan iterasi untuk menghitung gap dari setiap faktor yang ada
foreach ($faktor as $id_faktor=>$value) {
$gap[$id_alternatif][$id_faktor] = $data[$id_faktor]-$value;
}
}
?>
Proses selanjutnya setelah nilai gap dari tiap faktor untuk masing-masing kandidat/alternatif diperoleh adalah menetapkan pembobotan untuk tiap-tiap nilai gap tersebut. Nilai yang sudah dilakukan pembobotan disimpan dalam variabel $terbobot
. Nilainya diambil dari array $bobot
dengan index/key sesuai dengan nilai gap-nya. Kode PHP-nya dituliskan dalam script di bawah ini :
<?php
//-- menyiapkan variable penampung berupa array
$terbobot=array();
//-- melakukan iterasi pembobotan untuk tiap data $gap yang ada
foreach ($gap as $id_alternatif=>$data) {
//-- inisialisai variabel $terbobot[$id_alternatif]
$terbobot[$id_alternatif] = array();
//-- lakukan iterasi untuk pembobotan gap dari setiap faktor yang ada
foreach ($data as $id_faktor=>$value) {
$terbobot[$id_alternatif][$id_faktor] = $bobot[$value];
}
}
?>
Nilai total tiap Aspek dihitung dari penjumlahan perkalian nilai rata-rata core factor dan secondary factor dengan bobot-nya masing-masing. Perhitungan nilai rata-rata core factor dan secondary factor mengacu pada persamaan [GAP-02] dan [GAP-03], sedangkan untuk menghitung Nilai Totalnya menggunakan persamaan [GAP-04]. Perhitungan-perhitungan tersebut dapat di tuliskan dalam bahasa pemrograman PHP sebagai berikut:
<?php
//-- menyiapkan variable penampung berupa array $hasil
$hasil=array();
//-- lakukan iterasi untuk tiap alternatif/kandidat
foreach($terbobot as $nm_alternatif=>$data){
$core=$secondary=array();
//-- lakukan iterasi untuk setiap faktor
foreach($data as $id_faktor=>$value){
//-- ambil id_aspek-nya
$id_aspek = $core[$faktor[$id_faktor][0]];
//-- cek apakah $core[$id_aspek] sudah ada atau belum
//-- jika belum ada maka buat baru
if(!isset($core[$id_aspek])){
$core[$id_aspek]=array();
$secondary[$id_aspek]=array();
}
//-- cek datanya apakah core atau secondary factor
if($faktor[$id_faktor][3]=='core'){
$core[$id_aspek][]=$value;
} else {
$secondary[$id_aspek][]=$value;
}
}
//-- menghitung nilai total tiap aspek utk masing-masing alternatif/kandidat
foreach($aspek as $id_aspek=>$value) {
$hasil[$nm_alternatif][$id_aspek]=array_sum($core[$id_aspek])/count($core[$id_aspek]) * $value[2]/100
+ array_sum($secondary[$id_aspek])/count($secondary[$id_aspek]) * $value[3]/100;
}
}
?>
Proses perangkingan dilakukan dengan menjumlahkan perkalian Nilai Total dengan bobot prosentasenya masing-masing dari tiap Aspek unntuk semua kandidat/alternatif yang ada(lihat persamaan [GAP-05]). Hasilnya ($ranking
) kemudian diurutkan berdasarkan besar nilainya, dari yang terbesar sampai dengan yang terkecil; dimana kandidat/alternatif dengan nilai ranking yang terbesar adalah yang terpilih. Proses perangkingan ini dituliskan dalam PHP seperti berikut ini :
<?php
//-- menyiapkan variabel penampung data ranking
$ranking=array();
//-- melakukan iterasi penghitungan ranking utk tiap alternatif
foreach ($hasil as $nm_alternatif=>$data_nilai) {
if (!isset($ranking[$nm_alternatif])) {
$ranking[$nm_alternatif]=0;
}
//-- penjumlahan secara akumulatif nilai total dengan prosentasenya utk tiap aspek
foreach($data_nilai as $id_aspek=>$nilai_total) {
$ranking[$nm_alternatif] += $nilai_total * $aspek[$id_aspek][1] / 100;
}
}
//--mengurutkan data secara descending dengan tetap mempertahankan key/index array-nya
arsort($ranking);
//-- mendapatkan key/index item array yang pertama
$index=key($ranking);
//-- menampilkan hasil akhir:
echo "Hasilnya adalah kandidat <b>{$index}</b> dengan nilai akhir <b>{$ranking[$index]}</b> yang terpilih";
?>
Hasil akhir dari aplikasi PHP ini adalah berupa teks :
'Hasilnya adalah kandidat Tantri dengan nilai akhir 4.296875 yang terpilih
'.
Beberapa simpulan yang bisa diperoleh adalah