Artikel ini akan mencoba menjelaskan penerapan Dempster-Shafer Theory dalam aplikasi sistem pakar yang menggunakan PHP dan MySQL. Dimulai dari dasar-dasar teori mengenai Dempster-Shafer Theory, perancangan database sampai dengan pembuatan aplikasinya. Sebagai pelengkap untuk lebih memahami langkah-langkah penerapan Dempster-Shafer Theory ini disertakan juga simulasi aplikasi sistem pakar yang sudah jadi dengan mengambil contoh kasus pendeteksian jenis perilaku abnormal ADHD (Attention Deficit Hyperactivity Disorder) pada anak
author : cahya dsn,
published on : January 4th, 2017 updated on : May 29th, 2022
Ketidakpastian (Uncertainty) dapat dianggap sebagai suatu kekurangan informasi yang memadai untuk membuat suatu keputusan. Ketidakpastian merupakan suatu permasalahan karena menghalangi dalam membuat suatu keputusan yang terbaik bahkan dapat menghasilkan suatu keputusan yang buruk
Beberapa teori ketidakpastian antara lain probabilitas klasik, probabilitas Bayes, teori Hartley yang berdasar pada himpunan klasik, teori Shanon yang didasarkan pada peluang, teori Fuzzy Zadeh, dan teori Dempster-Shafer
Ada berbagai macam penalaran dengan model yang lengkap dan sangat konsisten, tetapi pada kenyataannya banyak permasalahan yang tidak dapat terselesaikan secara lengkap dan konsisten. Ketidakkonsistenan tersebut adalah akibat adanya penambahan fakta baru. Penalaran yang seperti itu disebut dengan penalaran non-monotonis. Untuk mengatasi ketidakkonsistenan tersebut maka dapat menggunakan penalaran dengan teori Dempster-Shafer.
Teori fungsi keyakinan, juga disebut sebagai teori bukti atau Dempster-Shafer Theory (DST), merupakan suatu kerangka umum untuk penalaran terhadap ketidakpastian, yang berhubungan dengan kerangka kerja lain seperti teori-teori probabilitas, posibilitas dan imprecise probability. Pertama kali diperkenalkan oleh Arthur P. Dempster (Dempster,1967) dalam konteks inferensi statistik, teori itu kemudian dikembangkan oleh Glenn Shafer menjadi kerangka umum untuk pemodelan epistemic uncertainty - sebuah Mathematical Theory of Evidence. (Shafer,1967) Teori ini memungkinkan seseorang untuk menggabungkan evidence dari sumber yang berbeda yang menuju pada suatu tingkat keyakinan tertentu (diwakili oleh objek matematika yang disebut fungsi keyakinan) dengan memperhitungkan semua evidence yang tersedia.
Dempster-Shafer Theory adalah generalisasi dari Bayesian theory of subjective probability. Fungsi kepercayaan berbasis derajat kepercayaan (atau keyakinan, atau jaminan) pada suatu masalah terhadap probabilitas untuk masalah terkait. Derajat kepercayaan itu sendiri mungkin atau mungkin tidak memiliki sifat probabilitas matematika; seberapa banyak perbedaannya tergantung pada seberapa dekat kedua permasalahan itu berkaitan.(Shafer,2002)
Sering digunakan sebagai metode sensor fusion, teori Dempster-Shafer didasarkan pada dua ide: memperoleh derajat kepercayaan untuk satu masalah dari probabilitas subjektif terhadap masalah yang berkaitan, dan aturan Dempster ini (Dempster,1968) untuk menggabungkan derajat seperti keyakinan ketika mereka didasarkan pada suatu bukti independen. Pada dasarnya, tingkat kepercayaan proposisi tergantung terutama pada jumlah solusi (atas masalah-masalah yang berkaitan) yang mengandung proposisi, dan probabilitas subjektif dari masing-masing solusi. Juga memberikan kontribusi aturan kombinasi yang mencerminkan asumsi umum tentang data.
Dalam formalisme ini tingkat kepercayaan (juga disebut sebagai mass -- massa) dipresentasikan sebagai fungsi keyakinan dibanding daripada distribusi probabilitas Bayesian. Nilai probabilitas diberikan untuk sekumpulan kemungkinan daripada suatu event tunggal.
Teori Dempster-Shafer memberikan massa untuk semua himpunan bagian tidak kosong dari proposisi yang membentuk sistem-dalam hal set-teori, power set dari proposisi. Sebagai contoh, asumsikan situasi di mana ada dua masalah terkait, atau proposisi, dalam suatu sistem. Dalam sistem ini, fungsi keyakinan memberikan massa untuk proposisi pertama, kedua, keduanya atau bahkan tidak kedua-duanya.
Teori Dempster Shafer adalah suatu teori matematika untuk pembuktian berdasarkan belief functions (fungsi kepercayaan) dan plausible reasoning (pemikiran yang masuk akal), yang digunakan untuk mengkombinasikan potongan informasi yang terpisah (bukti) untuk mengkalkulasi kemungkinan dari suatu peristiwa.
Secara umum teori Dempster-Shafer ditulis dalam suatu interval: [Belief,Plausibility]
Belief (Bel) adalah ukuran kekuatan evidence dalam mendukung suatu himpunan proposisi. Jika bernilai 0 (nol) maka mengindikasikan bahwa tidak ada evidence, dan jika bernilai 1 menunjukkan adanya kepastian. Menurut Giarratano dan Riley (Giarratano,Riley, 1989) fungsi belief dapat diformulasikan sebagai:
sedangkan Plausibility (Pls) dinotasikan sebagai :
Plausibility juga bernilai 0 sampai 1, jika kita yakin akan X' maka dapat dikatakan Belief (X') = 1 sehingga dari rumus di atas nilai Pls (X) = 0. Beberapa kemungkinan range antara Belief dan Plausibility adalah:
| Kemungkinan | Keterangan |
|---|---|
| [1,1] | Semua Benar |
| [0,0] | Semua Salah |
| [0,1] | Ketidakpastian |
| [Bel,1] untuk 0 < Bel < 1 | Cenderung Mendukung |
| [0,Pls] untuk 0 < Pls < 1 | Cenderung Menolak |
| [Bel,Pls] untuk 0 < Bel ≤ Pls < 1 | Cenderung Mendukung dan Menolak |
Pada teori Dempster-Shafer juga dikenal adanya frame of discernment (FOD) yang dinotasikan dengan $\theta$. FOD ini merupakan semesta pembicaraan dari sekumpulan hipotesis sehingga sering disebut dengan environment, dimana:
dimana:
Environment mengandung elemen-elemen yang menggambarkan kemungkinan sebagai jawaban dan hanya ada satu yang akan sesuai dengan jawaban yang dibutuhkan. Kemungkinan ini dalam teori Dempster-Shafer disebut dengan power set dan dinotasikan dengan $P(\theta)$, setiap elemen dalam power set ini memiliki nilai interval antara 0 sampai 1.
$m = P(\theta) \rightarrow [0,1]$
sehingga dapat dirumuskan:
Dengan $P(\theta)$ = power set dan $m(X)$ = mass function dari $(X)$
Sedangkan mass function $(m)$ dalam teori Dempster-Shafer adalah tingkat kepercayaan dari suatu evidence (gejala), sering disebut dengan evidence measure sehingga dinotasikan dengan ($m$).
Tujuannya adalah mengaitkan ukuran kepercayaan elemen-elemen $θ$. Tidak semua evidence secara langsung mendukung tiap-tiap elemen. Untuk itu perlu adanya probabilitas fungsi densitas ($m$). Nilai $m$ tidak hanya mendefinisikan elemen-elemen $θ$ saja, namun juga semua subsetnya. Sehingga jika $θ$ berisi $n$ elemen, maka subset $θ$ adalah $2n$. Jumlah semua $m$ dalam subset $θ$ sama dengan $1$. Apabila tidak ada informasi apapun untuk memilih hipotesis, maka nilai : $m\{θ\} = 1,0$
Pada aplikasi sistem pakar dalam satu masalah terdapat sejumlah evidence yang akan digunakan pada faktor ketidakpastian dalam pengambilan keputusan untuk diagnosa suatu masalah. Untuk mengatasi sejumlah evidence tersebut pada teori Dempster-Shafer menggunakan aturan yang lebih dikenal dengan Dempster's Rule of Combination
Apabila diketahui $X$ adalah subset dari $θ$, dengan $m_1$ sebagai fungsi densitasnya, dan $Y$ juga merupakan subset dari $θ$ dengan $m_2$ sebagai fungsi densitasnya, maka dapat dibentuk fungsi kombinasi $m_1$ dan $m_2$ ($m_1 \bigoplus m_2$) sebagai $m_3$, yaitu ditunjukkan pada persamaan (DST-05):
dimana:
secara umum formulasi untuk Dempster's Rule of Combination adalah:
dimana:
Besarnya jumlah evidential conflict (k) dirumuskan dengan:
sehingga bila persamaan [DST-07] disubstitusikan ke persamaan [DST-06] akan menjadi:
dimana:
Minimnya pengetahuan publik tentang perilaku abnormal berakibat perilaku-perilaku abnormal yang ada dan tampak sering dipahami secara keliru, bahkan tidak jarang penyandang perilaku abnormal diperlakukan secara tidak manusiawi. Salah satu bentuk perilaku abnormal tersebut adalah ADHD (Attention Deficit Hyperactivity Disorder) atau gangguan pemusatan perhatian pada anak. Pada aplikasi yang akan dibuat ini, sistem pakar untuk mendeteksi jenis perilaku ADHD memberikan kesimpulan tentang jenis penyakit yang diderita dan tingkat keyakinannya.
Digunakan metode Dempster Shafer sebagai metode untuk menghitung nilai kepercayaan atas gejala-gejala yang dipilih pasien. Dengan cara membandingkan setiap nilai bobot dari 2 gejala awal yang dipilih untuk seterusnya dibandingkan dengan nilai bobot gejala-gejala lain, sehingga menghasilkan gejala baru yang mengacu kepada suatu penyakit disertai dengan nilai keyakinannya
Ada beberapa data masukan yang dimasukkan kedalam sistem pakar ini antara lain: data gejala, data penyakit dan data gejala penyakit. Data-data tersebut yang sudah dimasukkan disimpan kedalam basis pengetahuan sistem pakar dan akan digunakan dalam proses diagnosa menentukan jenis penyakit ADHD serta tingkat kenyakinannya.
Hal yang pertama kali dilakukan dalam membangun sistem pakar adalah membuat struktur basis pengetahuan. Basis pengetahuan merupakan kumpulan- kumpulan fakta. Beberapa struktur basis pengetahuan pada sistem pakar ini adalah sebagai berikut:
Dalam kasus ini seorang user (pengguna) dapat mengetahui jenis penyakit dan nilai tingkat kenyakinnaya dengan cara memasukkan gejala-gejala yang diderita kedalam sistem sehingga sistem pakar dengan metode Dempster Shafer akan mencocokkan gejala-gejala yang dimasukkan dengan jenis penyakit yang berada pada basis pengetahuan dan juga sistem akan memberikan nilai kepastian jenis penyakit tersebut.
Pada basis pengetahuan berisikan tentang jenis penyakit, gejala-gejala, dan nilai densitas (Dempster Shafer) gejala terhadap penyakit. Pada tabel 2.1 berisikan basis pengetahuan yang berisikan semua gejala yang mendukung semua jenis perilaku ADHD (Attention Deficit Hyperactivity Disorder) pada anak
| Kode | Gejala |
|---|---|
| G1 | Sulit untuk disiplin |
| G2 | Sangat sensitif terhadap kritikan |
| G3 | Hanya memiliki sedikit teman |
| G4 | Menghindari atau tidak menyukai kegiatan yang membutuhkan usaha berkesinambungan, contohnya duduk diam |
| G5 | Mengalami kecemasan pada situasi baru atau yang tidak familiar |
| G6 | Memiliki kecenderungan untuk melamun |
| G7 | Sering merasa rendah diri dan tidak percaya diri |
| G8 | Banyak merasa khawatir dan takut |
| G9 | Menjawab tanpa berpikir,sementara pertanyaan belum selesai |
| G10 | Apabila bermain, lebih sering mondar-mandir dan sulit bermain dengan tenang |
| G11 | Bicara berlebihan |
| G12 | Sering menghentak-hentakkan kaki ketika duduk diam |
| G13 | Sering mengganggu anak-anak lain |
| G14 | Mengalami kesulitan menunggu gilirannya (tidak sabaran) |
| G15 | Sering mengambil mainan teman dengan paksa |
| G16 | Reaktif, sering merespon kembali apa yang dilakukan kepadanya |
| G17 | Sering mengulangi kata-kata yang diucapkan teman |
| G18 | Sering bertindak kasar dengan teman sebaya |
| G19 | Sikap menantang dan membangkang |
| G20 | Sering melanggar peraturan, bahkan peraturan yang sederhana |
| G21 | Selalu bermasalah dengan orang- orang yang memiliki otoritas |
| G22 | Mudah merasa terganggu, mudah marah |
| G23 | Terlihat sangat pemalu dan menarik diri |
| G24 | Mainan sering tertinggal |
| G25 | Mudah beralih perhatian (terutamarangsang suara) |
| G26 | Cenderung tidak mendengarkan ketika seseorang berbicara |
| G27 | Memiliki masalah dalam hal mengatur tugas / kegiatan sehari- hari |
| G28 | Sulit mengikuti petunjuk guru dan orang tua |
| G29 | Sulit menyelesaikan tugas atau kegiatan yang diberikan guru atau orang tua |
| G30 | Seringkali lupa dengan kebiasaan dan kegiatan sehari-hari |
| G31 | Selalu bergerak, seperti berjalan atau memanjat |
| G32 | Sering menggeliat |
| G33 | Sering membuat gaduh suasana |
| G34 | Selalu ingin memegang benda yang dilihat |
Pada Tabel 2.2 berikut merupakan basis pengetahuan yang berisikan semua jenis penyakit yang mendukung perilaku ADHD (Attention Deficit Hyperactivity Disorder) pada anak
| Kode | Nama Penyakit | Keterangan |
|---|---|---|
| P1 | Inatentif | Anak-anak yang masalah utamanya adalah rendahnya konsentrasi dan kurangnya kemampuan untuk memusatkan perhatian. |
| P2 | Hiperaktif | Anak-anak yang masalahnya terutama diakibatkan oleh perilaku yang tidak bisa diam. |
| P3 | Impulsif | Anak-anak yang mengalami kesulitan untuk menunda respon (dorongan untuk mengatakan sesuatu/melakukan sesuatu dengan tidak sabar) dan selalu terburu-buru. |
Tabel 2.3 berikut merupakan basis pengetahuan yang berisikan semua jenis gejala dan penyakit yang mendukung perilaku ADHD (Attention Deficit Hyperactivity Disorder) pada anak serta nilai bobot atau nilai tingkat kepercayaan (nilai belief) dan nilai plausability masing-masing gejala terhadap penyakit ADHD yang diderita anak.
| Kode | Nama Gejala | P1 | P2 | P3 | Belief | Plausibility |
|---|---|---|---|---|---|---|
| G1 | Sulit untuk disiplin | ✓ | ✓ | ✓ | 0.3 | 0.7 |
| G2 | Sangat sensitif terhadap kritikan | ✓ | ✓ | ✓ | 0.3 | 0.7 |
| G3 | Hanya memiliki sedikit teman | ✓ | ✓ | ✓ | 0.3 | 0.7 |
| G4 | Menghindari atau tidak menyukai kegiatan yang membutuhkan usaha berkesinambungan, contohnya duduk diam | ✓ | ✓ | 0.6 | 0.4 | |
| G5 | Mengalami kecemasan pada situasi baru atau yang tidak familiar | ✓ | ✓ | 0.6 | 0.4 | |
| G6 | Memiliki kecenderungan untuk melamun | ✓ | ✓ | ✓ | 0.6 | 0.4 |
| G7 | Sering merasa rendah diri dan tidak percaya diri | ✓ | ✓ | 0.6 | 0.4 | |
| G8 | Banyak merasa khawatir dan takut | ✓ | 0.6 | 0.4 | ||
| G9 | Menjawab tanpa berpikir,sementara pertanyaan belum selesai | ✓ | ✓ | 0.6 | 0.4 | |
| G10 | Apabila bermain, lebih sering mondar-mandir dan sulit bermain dengan tenang | ✓ | 0.7 | 0.3 | ||
| G11 | Bicara berlebihan | ✓ | ✓ | 0.6 | 0.4 | |
| G12 | Sering menghentak-hentakkan kaki ketika duduk diam | ✓ | ✓ | 0.6 | 0.4 | |
| G13 | Sering mengganggu anak-anak lain | ✓ | ✓ | 0.6 | 0.4 | |
| G14 | Mengalami kesulitan menunggu gilirannya (tidak sabaran) | ✓ | 0.85 | 0.15 | ||
| G15 | Sering mengambil mainan teman dengan paksa | ✓ | 0.4 | 0.6 | ||
| G16 | Reaktif, sering merespon kembali apa yang dilakukan kepadanya | ✓ | 0.85 | 0.15 | ||
| G17 | Sering mengulangi kata-kata yang diucapkan teman | ✓ | 0.75 | 0.25 | ||
| G18 | Sering bertindak kasar dengan teman sebaya | ✓ | 0.9 | 0.1 | ||
| G19 | Sikap menantang dan membangkang | ✓ | 0.9 | 0.1 | ||
| G20 | Sering melanggar peraturan, bahkan peraturan yang sederhana | ✓ | 0.75 | 0.25 | ||
| G21 | Selalu bermasalah dengan orang- orang yang memiliki otoritas | ✓ | ✓ | 0.6 | 0.4 | |
| G22 | Mudah merasa terganggu, mudah marah | ✓ | ✓ | 0.6 | 0.4 | |
| G23 | Terlihat sangat pemalu dan menarik diri | ✓ | ✓ | 0.6 | 0.4 | |
| G24 | Mainan sering tertinggal | ✓ | 0.7 | 0.3 | ||
| G25 | Mudah beralih perhatian (terutamarangsang suara) | ✓ | 0.85 | 0.15 | ||
| G26 | Cenderung tidak mendengarkan ketika seseorang berbicara | ✓ | 0.9 | 0.1 | ||
| G27 | Memiliki masalah dalam hal mengatur tugas / kegiatan sehari- hari | ✓ | 0.35 | 0.65 | ||
| G28 | Sulit mengikuti petunjuk guru dan orang tua | ✓ | 0.6 | 0.4 | ||
| G29 | Sulit menyelesaikan tugas atau kegiatan yang diberikan guru atau orang tua | ✓ | 0.75 | 0.25 | ||
| G30 | Seringkali lupa dengan kebiasaan dan kegiatan sehari-hari | ✓ | 0.95 | 0.05 | ||
| G31 | Selalu bergerak, seperti berjalan atau memanjat | ✓ | 0.95 | 0.05 | ||
| G32 | Sering menggeliat | ✓ | 0.45 | 0.55 | ||
| G33 | Sering membuat gaduh suasana | ✓ | 0.8 | 0.2 | ||
| G34 | Selalu ingin memegang benda yang dilihat | ✓ | 0.9 | 0.1 |
Referensi: Anggia Kargenti E.M, M.Si
Aturan Penalaran digunakan untuk menentukan proses pencarian atau menentukan kesimpulan untuk sebuah penyakit berdasarkan gejala-gejala yang diinputkan. Aturan penalaran yang digunakan di sini adalah Rule-Based Reasoning (penalaran berbasis aturan)
1. R1 : IF Sulit untuk disiplin THEN G1 R2 : IF Sangat sensitif terhadap kritikan THEN G2 R3 : IF Hanya memiliki sedikit teman THEN G3 R4 : IF Menghindari atau tidak menyukai kegiatan yang membutuhkan usaha berkesinambungan, contohnya duduk diam THEN G4 R5 : IF Mengalami kecemasan pada situasi baru atau yang tidak familiar THEN G5 R6 : IF Memiliki kecenderungan untuk melamun THEN G6 R7 : IF Sering merasa rendah diri dan tidak percaya diri THEN G7 R8 : IF Banyak merasa khawatir dan takut THEN G8 R9 : IF Menjawab tanpa berpikir,sementara pertanyaan belum selesai THEN G9 R10 : IF Mudah merasa terganggu, mudah marah THEN G22 R11 : IF Terlihat sangat pemalu dan menarik diri THEN G23 R12 : IF Mainan sering tertinggal THEN G24 R13 : IF Mudah beralih perhatian (terutamarangsang suara) THEN G25 R14 : IF Cenderung tidak mendengarkan ketika seseorang berbicara THEN G26 R15 : IF Memiliki masalah dalam hal mengatur tugas / kegiatan sehari- hari THEN G27 R16 : IF Sulit mengikuti petunjuk guru dan orang tua THEN G28 R17 : IF Sulit menyelesaikan tugas atau kegiatan yang diberikan guru atau orang tua THEN G29 R18 : IF Seringkali lupa dengan kebiasaan dan kegiatan sehari-hari THEN G30 2. R19 : IF Sulit untuk disiplin THEN G1 R20 : IF Sangat sensitif terhadap kritikan THEN G2 R21 : IF Hanya memiliki sedikit teman THEN G3 R22 : IF Menghindari atau tidak menyukai kegiatan yang membutuhkan usaha berkesinambungan, contohnya duduk diam THEN G4 R23 : IF Mengalami kecemasan pada situasi baru atau yang tidak familiar THEN G5 R24 : IF Memiliki kecenderungan untuk melamun THEN G6 R25 : IF Sering merasa rendah diri dan tidak percaya diri THEN G7 R26 : IF Apabila bermain, lebih sering mondar-mandir dan sulit bermain dengan tenang THEN G10 R27 : IF Bicara berlebihan THEN G11 R28 : IF Sering menghentak-hentakkan kaki ketika duduk diam THEN G12 R29 : IF Sering mengganggu anak-anak lain THEN G13 R30 : IF Selalu bermasalah dengan orang- orang yang memiliki otoritas THEN G21 R31 : IF Selalu bergerak, seperti berjalan atau memanjat THEN G31 R32 : IF Sering menggeliat THEN G32 R33 : IF Sering membuat gaduh suasana THEN G33 R34 : IF Selalu ingin memegang benda yang dilihat THEN G34 3. R35 : IF Sulit untuk disiplin THEN G1 R36 : IF Sangat sensitif terhadap kritikan THEN G2 R37 : IF Hanya memiliki sedikit teman THEN G3 R38 : IF Memiliki kecenderungan untuk melamun THEN G6 R39 : IF Menjawab tanpa berpikir,sementara pertanyaan belum selesai THEN G9 R40 : IF Bicara berlebihan THEN G11 R41 : IF Sering menghentak-hentakkan kaki ketika duduk diam THEN G12 R42 : IF Sering mengganggu anak-anak lain THEN G13 R43 : IF Mengalami kesulitan menunggu gilirannya (tidak sabaran) THEN G14 R44 : IF Sering mengambil mainan teman dengan paksa THEN G15 R45 : IF Reaktif, sering merespon kembali apa yang dilakukan kepadanya THEN G16 R46 : IF Sering mengulangi kata-kata yang diucapkan teman THEN G17 R47 : IF Sering bertindak kasar dengan teman sebaya THEN G18 R48 : IF Sikap menantang dan membangkang THEN G19 R49 : IF Sering melanggar peraturan, bahkan peraturan yang sederhana THEN G20 R50 : IF Selalu bermasalah dengan orang- orang yang memiliki otoritas THEN G21 R51 : IF Mudah merasa terganggu, mudah marah THEN G22 R52 : IF Terlihat sangat pemalu dan menarik diri THEN G23
Langkah selanjutnya setelah membuat basis pengetahuan adalah analisa metode inferensi. Metode inferensi atau teknik penelusuran yang digunakan dalam sistem pakar ini adalah dengan menggunakan metode inferensi forward chaining. Metode inferensi forward chaining menggunakan himpunan aturan kondisi-aksi, dimana dalam pengambilan kesimpulan berdasarkan fakta-fakta atau pernyataan yang dimulai dengan kondisi IF kemudian THEN untuk menyimpulkan perilaku yang diderita.
Untuk lebih memahami metode inferensi biasanya digunakan mesin inferensi. Mesin inferensi ini secara teori dapat berupa pohon keputusan (decision tree) atau disebut juga dengan pohon inferensi. Pohon inferensi merupakan gambaran berbentuk grafis dari basis pengetahuan dan aturan-aturan dalam mesin inferensi.
Salah satu bagian terpenting dari aplikasi adalah bagian representasi data. Pada bagian ini akan dijelaskan mengenai struktur data dan relasinya dalam mengimplementasikan metode Dempster Shafer sesuai contoh kasus yang ada pada bagian sebelumnya
Sebagai bahan pembelajaran aplikasi Sistem Pakar dengan DST ini; dibuat database (dalam hal ini menggunakan MySQL/MariaDB Database server) dengan nama db_expert sebagai berikut:
CREATE DATABASE IF NOT EXISTS db_expert; USE db_expert;
Tabel ds_evidences merupakan tabel untuk menyimpan data-data entitas gejala. Atribut-atribut dari gejala yang akan disimpan meliputi id,code (opsional), dan name. Struktur tabelnya adalah sebagai berikut :
-- menghapus tabel ds_evidences jika sudah ada DROP TABLE IF EXISTS ds_evidences; -- membuat tabel ds_evidences jika tidak ada CREATE TABLE IF NOT EXISTS ds_evidences( id INT AUTO_INCREMENT, code VARCHAR(3), name VARCHAR(30), PRIMARY KEY (id) ) ENGINE=MyISAM CHARSET=utf8;
Mengacu kepada daftar gejala yang ditunjukkan dalam contoh kasus (Tabel 2.1) dapat dimasukkan data-data tersebut dalam tabel ds_evidences seperti berikut ini:
INSERT INTO ds_evidences(code,name)
VALUES
('G1','Sulit untuk disiplin'),
('G2','Sangat sensitif terhadap kritikan'),
('G3','Hanya memiliki sedikit teman'),
('G4','Menghindari atau tidak menyukai kegiatan yang membutuhkan usaha berkesinambungan, contohnya duduk diam'),
('G5','Mengalami kecemasan pada situasi baru atau yang tidak familiar'),
('G6','Memiliki kecenderungan untuk melamun'),
('G7','Sering merasa rendah diri dan tidak percaya diri'),
('G8','Banyak merasa khawatir dan takut'),
('G9','Menjawab tanpa berpikir,sementara pertanyaan belum selesai'),
('G10','Apabila bermain, lebih sering mondar-mandir dan sulit bermain dengan tenang'),
('G11','Bicara berlebihan'),
('G12','Sering menghentak-hentakkan kaki ketika duduk diam'),
('G13','Sering mengganggu anak-anak lain'),
('G14','Mengalami kesulitan menunggu gilirannya (tidak sabaran)'),
('G15','Sering mengambil mainan teman dengan paksa'),
('G16','Reaktif, sering merespon kembali apa yang dilakukan kepadanya'),
('G17','Sering mengulangi kata-kata yang diucapkan teman'),
('G18','Sering bertindak kasar dengan teman sebaya'),
('G19','Sikap menantang dan membangkang'),
('G20','Sering melanggar peraturan, bahkan peraturan yang sederhana'),
('G21','Selalu bermasalah dengan orang- orang yang memiliki otoritas'),
('G22','Mudah merasa terganggu, mudah marah'),
('G23','Terlihat sangat pemalu dan menarik diri'),
('G24','Mainan sering tertinggal'),
('G25','Mudah beralih perhatian (terutamarangsang suara)'),
('G26','Cenderung tidak mendengarkan ketika seseorang berbicara'),
('G27','Memiliki masalah dalam hal mengatur tugas / kegiatan sehari- hari'),
('G28','Sulit mengikuti petunjuk guru dan orang tua'),
('G29','Sulit menyelesaikan tugas atau kegiatan yang diberikan guru atau orang tua'),
('G30','Seringkali lupa dengan kebiasaan dan kegiatan sehari-hari'),
('G31','Selalu bergerak, seperti berjalan atau memanjat'),
('G32','Sering menggeliat'),
('G33','Sering membuat gaduh suasana'),
('G34','Selalu ingin memegang benda yang dilihat');
Data-data mengenai penyakit/masalah disimpan dalam tabel ds_problems. Atribut-atribut yang disimpan diantaranya adalah id,code (optional),name, dan notes(optional. Selain itu bisa juga ditambahkan atribut-atribut lain semisal saran tindakan, cara pengobatan dan lain sebagainya. Struktur tabelnya kurang lebih adalah sebagai berikut :
DROP TABLE IF EXISTS ds_problems; CREATE TABLE IF NOT EXISTS ds_problems( id INT AUTO_INCREMENT, code VARCHAR(3), name VARCHAR(30), notes TEXT, PRIMARY KEY (id) ) ENGINE=MyISAM CHARSET=utf8;
Data-data penyakit pada Tabel 2.2 dapat dimasukkan ke dalam tabel ds_problems dengan query SQL sebagai berikut :
INSERT INTO ds_problems(code,name,notes)
VALUES
('P1','Inatentif','Anak-anak yang masalah utamanya adalah rendahnya konsentrasi dan kurangnya kemampuan untuk memusatkan perhatian.'),
('P2','Hiperaktif','Anak-anak yang masalahnya terutama diakibatkan oleh perilaku yang tidak bisa diam.'),
('P3','Impulsif','Anak-anak yang mengalami kesulitan untuk menunda respon (dorongan untuk mengatakan sesuatu/melakukan sesuatu dengan tidak sabar) dan selalu terburu-buru.');
Tabel ds_rules merupakan representasi dari data-data basis pengetahuan gejala penyakit. Tabel ini adalah tabel relasi antara entitas gejala (evidence ) dengan entitas penyakit (problem), dengan tambahan atribut certainly factor(cf) yang menunjukkan nilai tingkat kepercayaannya. Struktur tabelnya adalah sebagai berikut :
DROP TABLE IF EXISTS ds_rules; CREATE TABLE IF NOT EXISTS ds_rules( id_problem INT, id_evidence INT, cf float ) ENGINE=MyISAM CHARSET=utf8;
Berdasarkan daftar gejala penyakit ADHD serta nilai belief masing- masing gejala terhadap penyakit Tabel 2.3 dapat dimasukkan data-data tersebut dalam tabel ds_rules seperti berikut ini:
INSERT INTO ds_rules(id_problem,id_evidence,cf)
VALUES
('1','1','0.3'),
('2','1','0.3'),
('3','1','0.3'),
('1','2','0.3'),
('2','2','0.3'),
('3','2','0.3'),
('1','3','0.3'),
('2','3','0.3'),
('3','3','0.3'),
('1','4','0.6'),
('2','4','0.6'),
('1','5','0.6'),
('2','5','0.6'),
('1','6','0.6'),
('2','6','0.6'),
('3','6','0.6'),
('1','7','0.6'),
('2','7','0.6'),
('1','8','0.6'),
('1','9','0.6'),
('3','9','0.6'),
('2','10','0.7'),
('2','11','0.6'),
('3','11','0.6'),
('2','12','0.6'),
('3','12','0.6'),
('2','13','0.6'),
('3','13','0.6'),
('3','14','0.85'),
('3','15','0.4'),
('3','16','0.85'),
('3','17','0.75'),
('3','18','0.9'),
('3','19','0.9'),
('3','20','0.75'),
('2','21','0.6'),
('3','21','0.6'),
('1','22','0.6'),
('3','22','0.6'),
('1','23','0.6'),
('3','23','0.6'),
('1','24','0.7'),
('1','25','0.85'),
('1','26','0.9'),
('1','27','0.35'),
('1','28','0.6'),
('1','29','0.75'),
('1','30','0.95'),
('2','31','0.95'),
('2','32','0.45'),
('2','33','0.8'),
('2','34','0.9');
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_expert';
//-- 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);
}
?>
Sebagai tampilan awal dari aplikasi yang akan dibuat adalah berupa daftar input pilihan gejala. Karena dimungkinkan untuk memilih lebih dari satu gejala, maka jenis inputan yang cocok adalah berupa inputan checkbox (dalam HTML dengan sintak tag/element <input type='checkbox'>) -- dan sebagai alternatif lain bisa juga digunakan input <select> dengan menggunakan atribut multiple sehingga bisa dipilih lebih dari satu pilihan.
Pertama : query data semua gejala dari tabel ds_evidences, kemudian data yang diperoleh di-fetching dalam kalang(loop) while{} untuk ditampilkan semuanya. Scriptnya adalah sebagai berikut:
<form method="post">
<?php
//-- menampilkan daftar gejala
$sql="SELECT * FROM ds_evidences";
$result=$db->query($sql);
while($row=$result->fetch_object()){
echo "<input type='checkbox' name='evidence[]' value='{$row->id}'> {$row->code} {$row->name}<br/>";
}
?>;
<input type="submit" value="proses">;
</form>
Pada tag/element <input type='checkbox'> tersebut nilai atribute name-nya adalah 'evidence[]' sehingga memungkinkan untuk mengirimkan nilai dari beberapa checkbox (multiple value). Nilai tersebut akan dikirim berupa array. Yang perlu sedikit diperhatikan adalah karakteristik dari tag/element <input type='checkbox'> yang hanya akan mengirim nilainya jika dalam kondisi ter-check.
Pada saat form tersebut disubmit dengan menekan tombol proses maka data akan dikirim dengan HTTP POST method pada halaman itu sendiri (karena tidak dispesifikasikan nilai dari atribut action pada tag <form>-nya). Untuk mengambil nilai yang dikirimkan tersebut digunakan variable $_POST, sebagai berikut :
<?php
if(isset($_POST['evidence'])){
if(count($_POST['evidence'])<2){
echo "Pilih minimal 2 gejala";
}else{
$sql = "
SELECT GROUP_CONCAT(b.code), a.cf
FROM ds_rules a
JOIN ds_problems b ON a.id_problem=b.id
WHERE a.id_evidence IN(".implode(',',$_POST['evidence']).")
GROUP BY a.id_evidence";
$result=$db->query($sql);
$evidence=array();
while($row=$result->fetch_row()){
$evidence[]=$row;
}
//-- masukkan kode perhitungannya di sini
}
}
?>
Sebelum proses berlanjut di cek dahulu apakah ada nilai gejala yang diterima dengan if(isset($_POST['evidence')), jika tidak ada maka abaikan, sedangkan jika ada di cek kembali apakah jumlah gejala yang dikirimkan kurang dari 2 (if(count($_POST['evidence'])<2) ) maka tampilkan notifikasi/pemberitahuan untuk memilih 2 atau lebih gejala. Jika yang diterima ada 2 atau lebih gejala maka dapatkan list densitas awalnya dengan query seperti pada script di atas, kemudian masukkan nilainya ke dalam variabel array $evidence
Pada bagian yang bertuliskan:
//-- masukkan kode perhitungannya di sini
diisi dengan perintah-perintah yang akan dijelaskan pada bagian-bagian lain berikut ini.
Sebelum menuju ke proses perhitungan berikutnya, ditentukan dahulu semesta pembicaraan (frame of discernment FOD) atau environment-nya sebagai berikut:
<?php
//--- menentukan environment
$sql="SELECT GROUP_CONCAT(code) FROM ds_problems";
$result=$db->query($sql);
$row=$resul->fecth_row();
$fod=$row[0];
?>
Dengan menggunakan fungsi GROUP_CONCAT() maka nilai dari field code akan ditampilkan dalam bentuk serialized string dengan koma (,) sebagai pemisah antar code tersebut. (dalam contoh aplikasi ini akan menjadi 'P1,P2,P3'), sehingga nilai dari variable $fod adalah merupakan environment dari sistem aplikasi sistem pakar ini.
Inti dari aplikasi ini adalah dalam perhitungan untuk menentukan nilai densitas dari beberapa evidence yang diberikan. Dalam proesnya, dari setiap gejala yang diberikan akan dihitung satu per satu untuk densitasnya sampai semuanya habis diperhitungkan. Jika gejala yang pertama ada densitas ke-1 dan gejala kedua adalah densitas ke-2, maka dari perhitungan akan didapatkan densitas ke-3. Jika ada gejala ketiga maka akan dijadikan sebagai densitas ke-4 yang akan diperhitungkan dengan densitas ke-3 dari hasil sebelumnya untuk mendapatkan densitas baru yaitu densitas ke-5; demikian seterusnya sampai semua gejala yang diterima diperhitungkan. Dengan kata lain jika ada N buah gejala yang diberikan, maka hasilnya adalah densitas ke N+1.
Data gejala yang diterima ($evidence) akan diambil satu demi satu dengan fungsi array_shift() dalam kalang(loop) while() selama $evidence tersebut masih ada (!empty($evidence)). Gejala yang muncul, sesuai urutan akan dimasukkan ke dalam variabel $evidence[0], sedangkan plausability-nya dimasukkan ke variabel evidence[1]
Jika belum ada hasil perhitungan densitas sebelumnya (empty($densitas_baru)) maka gejala berikutnya (yang kedua) dimasukkan ke dalam $densitas2[0] sebagai densitas kedua; sedangkan jika sudah ada maka semua hasil perhitungan sebelumnya kecuali yang ber-index/key "θ" dimasukkan ke variabel array $densitas2 sebagai item array baru yang merepresentasikan suatu densitas baru
Selanjutnya menghitung nilai plausability dari densitas baru tersebut ($theta); yaitu 1 dikurangi jumlah total nilai kemungkinan dari masing-masing elemen densitas baru itu. Caranya dengan pertama-tama meng-inisialisai variable $theta=1; dan dilakukan pengurangan nilai kemungkinan masing-masing elemen densitas yang baru dengan perintah foreach($densitas2 as $d) $theta-=$d[1];. Hasilnya dimasukkan dalam item array baru dari variable array $densitas2.
<?php
//--- menentukan nilai densitas
$densitas_baru=array();
while(!empty($evidence)){
$densitas1[0]=array_shift($evidence);
$densitas1[1]=array($fod,1-$densitas1[0][1]);
$densitas2=array();
if(empty($densitas_baru)){
$densitas2[0]=array_shift($evidence);
}else{
foreach($densitas_baru as $k=>$r){
if($k!="θ"){
$densitas2[]=array($k,$r);
}
}
}
$theta=1;
foreach($densitas2 as $d) $theta-=$d[1];
$densitas2[]=array($fod,$theta);
$m=count($densitas2);
$densitas_baru=array();
for($y=0;$y<$m;$y++){
for($x=0;$x<2;$x++){
if(!($y==$m-1 && $x==1)){
$v=explode(',',$densitas1[$x][0]);
$w=explode(',',$densitas2[$y][0]);
sort($v);
sort($w);
$vw=array_intersect($v,$w);
if(empty($vw)){
$k="θ";
}else{
$k=implode(',',$vw);
}
if(!isset($densitas_baru[$k])){
$densitas_baru[$k]=$densitas1[$x][1]*$densitas2[$y][1];
}else{
$densitas_baru[$k]+=$densitas1[$x][1]*$densitas2[$y][1];
}
}
}
}
foreach($densitas_baru as $k=>$d){
if($k!="θ"){
$densitas_baru[$k]=$d/(1-(isset($densitas_baru["θ"])?$densitas_baru["θ"]:0));
}
}
print_r($densitas_baru);
}
?>
Proses selanjunya adalah menghitung jumlah iterasi, sesuai jumlah item array dari densitas yang baru dengan kode $m=count($densitas2);. Dalam kalang -- loopfor() dua dimensi dilakukan perhitungan untuk mendapatkan densitas yang baru.
Karena hasil perkalian antara nilai kemungkinan dari plausability dari densitas yang pertama dan kedua tidak diperhitungkan, maka dibatasi dengan if(!($y==$m-1 && $x==1)) perhitungan densitas yang baru dilakukan. Tiap elemen dari $densitas1 dan $densitas2 dikalikan nilai kemungkinannya, dan index/key-nya merupakan irisan --intersect dari kode penyakitnya (dalam hal ini memakai fungsi array_intersect()).
Dan akhirnya berdasarkan persamaan Dempster's Rule of Combination [DST-06] dihitung masing-masing nilai kemungkinan dari tiap elemen dari densitas yang baru tersebut
Pada proses perangkingan ini, pertama-tama hilangkan hasil sebelumnya yang mempunyai key/index="θ" dengan memakai kode unset($densitas_baru["θ"]);. Selanjunya data tersebut diurutkan dengan tetap mempertahankan associative keys-nya dengan pengurutan secara terbalik (reverse -- dari besar ke kecil) menggunakan fungsi arsort.
<?php
//--- perangkingan
unset($densitas_baru["θ"]);
arsort($densitas_baru);
print_r($densitas_baru);
?>
Perintah print_r($densitas_baru); digunakan untuk menampilkan hasil perhitungan terakhir yang sudah terurut dari yang terbesar nilainya hingga yang terkecil nilainya
Hasil akhir dari perhitungan ini adalah penyakit(atau beberapa penyakit) dengan nilai derajat kemungkinannya yang tertinggi. Hasil dari proses perangkingan sebelumnya adalah berupa array associative, dengan key-nya berupa kode penyakit dan nilai array-nya adalah nilai derajat kemungkinannya. Untuk mendapatkan key dari array tersebut maka digunakan fungsi array_keys(). Data daftar key (atau kode penyakit) tersebut kemudian dimasukkan ke dalam variable $codes.
<?php
//--- menampilkan hasil akhir
$codes=array_keys($densitas_baru);
$sql="
SELECT GROUP_CONCAT(name)
FROM ds_problems
WHERE code IN('{$codes[0]}')";
$result=$db->query($sql);
$row=$result->fetch_row();
echo "Terdeteksi penyakit<b>{$row[0]}</b>; dengan derajat kepercayaan ".round($densitas_baru[$codes[0]]*100,2)."%";
?>
Dengan menggunakan query SQL seperti pada script di atas, diambil nama (atau beberapa nama) penyakit yang codenya ada di $code[0] (kode penyakit dengan nilai kemungkinan tertinggi), untuk kemudian ditampilkan $row[0] beserta nilai kemungkinannya dalam prosentase (dikali 100, dibulatkan 2 angka dibelakang koma dengan fungsi round()).
Source code selengkapnya bisa dilihat di tautan ini source
Simulasi sistem pakar dengan menggunakan metode Dempster Shafer untuk mendeteksi jenis perilaku abnormal ADHD (Attention Deficit Hyperactivity Disorder)
Sebagai pelengkap artikel ini, berikut disertakan simulasi sistem pakar dengan metode Dempster Shafer untuk pendeteksian perilaku abnormal ADHD. Silakan pilih minimal 2 gejala dari daftar gejala berikut, kemudian klik tombol Proses untuk menampilkan hasil perhitungannya.
Dan seandainya pohon-pohon di bumi menjadi pena dan laut (menjadi tinta), ditambahkan kepadanya tujuh laut (lagi) sesudah (kering)nya, niscaya tidak akan habis-habisnya (dituliskan) kalimat Allah. Sesungguhnya Allah Maha Perkasa lagi Maha Bijaksana.