Dalam dunia bisnis dan teknologi yang kompleks, pengambilan keputusan seringkali bukan hanya tentang memilih opsi terbaik berdasarkan satu kriteria saja, melainkan berdasarkan berbagai faktor yang saling bertentangan. Di sinilah metode Multi-Criteria Decision Making (MCDM) seperti TOPSIS (Technique for Order Preference by Similarity to Ideal Solution) menjadi sangat relevan. TOPSIS adalah salah satu metode MCDM yang populer karena kemampuannya dalam mengevaluasi dan merangking alternatif berdasarkan jarak relatifnya terhadap solusi ideal positif dan solusi ideal negatif.
Implementasi TOPSIS menggunakan Python memberikan kekuatan komputasi dan fleksibilitas untuk menangani set data yang besar dan skenario keputusan yang beragam. Artikel ini akan memandu Anda melalui konsep dasar TOPSIS dan langkah-langkah detail untuk mengimplementasikannya dalam Python, menjadikannya alat yang ampuh untuk analisis keputusan yang lebih objektif dan terstruktur.
Memahami Metode TOPSIS
TOPSIS pertama kali diperkenalkan oleh Hwang dan Yoon pada tahun 1981. Ide utamanya adalah bahwa alternatif terbaik harus memiliki jarak terpendek dari solusi ideal positif (PIS – Positive Ideal Solution) dan jarak terjauh dari solusi ideal negatif (NIS – Negative Ideal Solution). PIS mewakili kombinasi nilai kriteria terbaik yang mungkin, sedangkan NIS mewakili kombinasi nilai kriteria terburuk yang mungkin.
Metode ini sangat intuitif dan mudah dipahami, menjadikannya pilihan yang baik untuk berbagai aplikasi, mulai dari pemilihan proyek investasi, evaluasi kinerja karyawan, hingga pemilihan vendor teknologi. Dengan TOPSIS, kita tidak hanya mengidentifikasi alternatif terbaik, tetapi juga memahami seberapa jauh setiap alternatif dari kondisi "terbaik" dan "terburuk" yang ideal.
Prinsip Dasar TOPSIS
Prinsip inti TOPSIS berpusat pada perbandingan setiap alternatif dengan dua solusi hipotetis:
- Solusi Ideal Positif (PIS): Sebuah alternatif hipotetis yang terdiri dari nilai kriteria terbaik yang diamati dari semua alternatif yang ada. PIS mewakili "yang terbaik dari yang terbaik."
- Solusi Ideal Negatif (NIS): Sebuah alternatif hipotetis yang terdiri dari nilai kriteria terburuk yang diamati dari semua alternatif yang ada. NIS mewakili "yang terburuk dari yang terburuk."
Tujuan TOPSIS adalah menemukan alternatif yang paling mirip dengan PIS dan paling tidak mirip dengan NIS secara bersamaan. Pendekatan ini memastikan bahwa pilihan yang dibuat tidak hanya "baik" tetapi juga "tidak buruk" pada saat yang sama, memberikan keseimbangan yang lebih baik dalam pengambilan keputusan.
Langkah-Langkah Implementasi TOPSIS
Untuk mengimplementasikan TOPSIS, ada serangkaian langkah matematis yang harus diikuti. Mari kita bedah satu per satu:
1. Normalisasi Matriks Keputusan
Langkah pertama adalah menormalisasi matriks keputusan awal untuk menghilangkan efek unit pengukuran kriteria yang berbeda. Normalisasi biasanya dilakukan menggunakan normalisasi vektor, di mana setiap elemen matriks dibagi dengan akar kuadrat dari jumlah kuadrat elemen dalam kolom yang sama. Rumusnya adalah:
$$ r_{ij} = \frac{x_{ij}}{\sqrt{\sum_{i=1}^{m} x_{ij}^2}} $$
Di mana $x_{ij}$ adalah nilai alternatif $i$ pada kriteria $j$, dan $r_{ij}$ adalah nilai ternormalisasi.
2. Pembobotan Matriks Ternormalisasi
Setelah normalisasi, matriks ternormalisasi dikalikan dengan bobot kriteria yang telah ditentukan. Bobot ini mencerminkan kepentingan relatif dari setiap kriteria dalam proses pengambilan keputusan. Rumusnya adalah:
$$ v_{ij} = w_j \times r_{ij} $$
Di mana $w_j$ adalah bobot untuk kriteria $j$, dan $v_{ij}$ adalah nilai matriks ternormalisasi yang dibobot.
3. Menentukan Solusi Ideal Positif (PIS) dan Solusi Ideal Negatif (NIS)
PIS dan NIS ditentukan dari matriks ternormalisasi yang dibobot. Untuk kriteria "benefit" (semakin besar semakin baik), PIS akan mengambil nilai maksimum dari setiap kolom, dan NIS akan mengambil nilai minimum. Untuk kriteria "cost" (semakin kecil semakin baik), berlaku sebaliknya.
- PIS ($A^+$): $$ A_j^+ = \begin{cases} \max(v_{ij}) & \text{jika kriteria benefit} \\ \min(v_{ij}) & \text{jika kriteria cost} \end{cases} $$
- NIS ($A^-$): $$ A_j^- = \begin{cases} \min(v_{ij}) & \text{jika kriteria benefit} \\ \max(v_{ij}) & \text{jika kriteria cost} \end{cases} $$
4. Menghitung Jarak ke Solusi Ideal
Selanjutnya, hitung jarak Euclidean setiap alternatif dari PIS dan NIS. Ini akan menghasilkan dua set jarak: satu untuk PIS ($S_i^+$) dan satu lagi untuk NIS ($S_i^-$).
- Jarak ke PIS ($S_i^+$): $$ S_i^+ = \sqrt{\sum_{j=1}^{n} (v_{ij} - A_j^+)^2} $$
- Jarak ke NIS ($S_i^-$): $$ S_i^- = \sqrt{\sum_{j=1}^{n} (v_{ij} - A_j^-)^2} $$
5. Menghitung Kedekatan Relatif ke Solusi Ideal
Langkah terakhir sebelum perangkingan adalah menghitung kedekatan relatif setiap alternatif terhadap solusi ideal. Ini dihitung dengan membagi jarak ke NIS dengan jumlah jarak ke PIS dan NIS.
$$ C_i = \frac{S_i^-}{S_i^+ + S_i^-} $$
Nilai $C_i$ akan selalu berada di antara 0 dan 1. Semakin tinggi nilai $C_i$, semakin baik alternatif tersebut.
6. Merangking Alternatif
Alternatif dengan nilai $C_i$ tertinggi adalah alternatif terbaik. Urutkan alternatif berdasarkan nilai $C_i$ secara menurun untuk mendapatkan urutan preferensi.
Implementasi TOPSIS dengan Python
Mari kita terapkan langkah-langkah di atas dalam Python. Kita akan menggunakan library `numpy` untuk operasi matriks yang efisien. Misalkan kita ingin memilih laptop terbaik berdasarkan kriteria seperti Harga, Performa, Daya Tahan Baterai, dan Berat. Kriteria 'Harga' dan 'Berat' adalah kriteria 'cost', sedangkan 'Performa' dan 'Daya Tahan Baterai' adalah 'benefit'.
Persiapan Data Awal
Kita akan merepresentasikan data dalam bentuk matriks NumPy. Setiap baris adalah alternatif, dan setiap kolom adalah kriteria.
import numpy as np
# Matriks keputusan (alternatif vs kriteria)
# Baris: Alternatif (Laptop A, B, C, D)
# Kolom: Kriteria (Harga, Performa, Baterai, Berat)
# Contoh data:
# Harga (IDR Juta) | Performa (Skor) | Baterai (Jam) | Berat (Kg)
# Laptop A: 12 70 8 1.5
# Laptop B: 15 85 10 1.8
# Laptop C: 10 60 7 1.2
# Laptop D: 13 75 9 1.6
data = np.array([
[12, 70, 8, 1.5],
[15, 85, 10, 1.8],
[10, 60, 7, 1.2],
[13, 75, 9, 1.6]
])
# Bobot untuk setiap kriteria
# Harga (0.3), Performa (0.4), Baterai (0.2), Berat (0.1)
weights = np.array([0.3, 0.4, 0.2, 0.1])
# Jenis kriteria: 1 untuk benefit (semakin tinggi semakin baik), -1 untuk cost (semakin rendah semakin baik)
criteria_type = np.array([-1, 1, 1, -1]) # Harga=cost, Performa=benefit, Baterai=benefit, Berat=cost
# Nama alternatif untuk hasil yang lebih mudah dibaca
alternatives = ['Laptop A', 'Laptop B', 'Laptop C', 'Laptop D']
Fungsi TOPSIS Utama
Sekarang, mari kita buat fungsi Python yang mengimplementasikan semua langkah TOPSIS.
def topsis(data, weights, criteria_type):
# Memastikan input valid
if data.ndim != 2:
raise ValueError("Data harus berupa matriks 2 dimensi.")
if len(weights) != data.shape[1]:
raise ValueError("Jumlah bobot harus sesuai dengan jumlah kriteria.")
if len(criteria_type) != data.shape[1]:
raise ValueError("Jumlah jenis kriteria harus sesuai dengan jumlah kriteria.")
if not np.all(np.isin(criteria_type, [-1, 1])):
raise ValueError("Jenis kriteria hanya boleh 1 (benefit) atau -1 (cost).")
m, n = data.shape # m = jumlah alternatif, n = jumlah kriteria
# Langkah 1: Normalisasi Matriks Keputusan
# Hitung pembagi untuk normalisasi vektor untuk setiap kolom (kriteria)
divisor = np.sqrt(np.sum(data2, axis=0))
normalized_matrix = data / divisor
# Langkah 2: Pembobotan Matriks Ternormalisasi
weighted_normalized_matrix = normalized_matrix * weights
# Langkah 3: Menentukan Solusi Ideal Positif (PIS) dan Solusi Ideal Negatif (NIS)
pis = np.zeros(n) # Positive Ideal Solution
nis = np.zeros(n) # Negative Ideal Solution
for j in range(n):
if criteria_type[j] == 1: # Benefit criteria (semakin besar semakin baik)
pis[j] = np.max(weighted_normalized_matrix[:, j])
nis[j] = np.min(weighted_normalized_matrix[:, j])
else: # Cost criteria (semakin kecil semakin baik)
pis[j] = np.min(weighted_normalized_matrix[:, j])
nis[j] = np.max(weighted_normalized_matrix[:, j])
# Langkah 4: Menghitung Jarak ke Solusi Ideal
# Jarak Euclidean dari setiap alternatif ke PIS
distance_to_pis = np.sqrt(np.sum((weighted_normalized_matrix - pis)2, axis=1))
# Jarak Euclidean dari setiap alternatif ke NIS
distance_to_nis = np.sqrt(np.sum((weighted_normalized_matrix - nis)2, axis=1))
# Langkah 5: Menghitung Kedekatan Relatif ke Solusi Ideal
# Hindari pembagian dengan nol jika S_i+ dan S_i- keduanya nol (kasus ekstrem)
# Ini dapat terjadi jika ada alternatif yang persis sama dengan PIS dan NIS secara bersamaan,
# atau jika semua kriteria memiliki nilai yang sama untuk semua alternatif.
# Dalam praktiknya, ini jarang terjadi dengan data nyata.
closeness_score = distance_to_nis / (distance_to_pis + distance_to_nis)
# Handle kasus dimana distance_to_pis + distance_to_nis = 0
closeness_score = np.nan_to_num(closeness_score, nan=0.0, posinf=1.0, neginf=0.0)
# Mengembalikan skor kedekatan relatif
return closeness_score
Contoh Penggunaan dan Hasil
Dengan fungsi yang sudah didefinisikan, kita bisa langsung menggunakannya dengan data yang telah disiapkan:
# Jalankan fungsi TOPSIS
scores = topsis(data, weights, criteria_type)
# Langkah 6: Merangking Alternatif
# Gabungkan nama alternatif dengan skor dan urutkan
ranked_alternatives = sorted(zip(alternatives, scores), key=lambda x: x[1], reverse=True)
print("--- Hasil Perangkingan TOPSIS ---")
for rank, (alt, score) in enumerate(ranked_alternatives):
print(f"Rank {rank+1}: {alt} (Skor Kedekatan: {score:.4f})")
Output dari kode di atas akan menampilkan daftar laptop yang diurutkan dari yang terbaik hingga terburuk berdasarkan skor kedekatan relatif TOPSIS. Alternatif dengan skor tertinggi adalah yang paling direkomendasikan.
Aplikasi TOPSIS dalam Dunia Nyata
Implementasi TOPSIS dengan Python membuka pintu untuk berbagai aplikasi praktis di berbagai industri:
- Keuangan dan Investasi: Memilih portofolio investasi, mengevaluasi kinerja saham, atau menentukan peringkat risiko kredit.
- Manajemen Proyek: Memilih proyek terbaik untuk diinvestasikan, mengevaluasi kinerja vendor, atau mengalokasikan sumber daya.
- Sistem Informasi dan Teknologi: Memilih sistem perangkat lunak atau hardware terbaik, mengevaluasi platform cloud, atau merangking opsi keamanan siber.
- Manajemen Rantai Pasok: Memilih pemasok terbaik, mengevaluasi rute logistik, atau menentukan lokasi gudang.
- Pemasaran: Memilih strategi pemasaran yang paling efektif atau mengevaluasi kinerja kampanye iklan.
Keunggulan dan Keterbatasan TOPSIS
Seperti metode lainnya, TOPSIS memiliki keunggulan dan keterbatasan:
Keunggulan:
- Logika Intuitif: Konsep PIS dan NIS sangat mudah dipahami.
- Efisiensi Komputasi: Relatif sederhana dan cepat untuk dihitung, bahkan dengan banyak alternatif dan kriteria.
- Mampu Menangani Banyak Kriteria: Efektif untuk masalah pengambilan keputusan dengan banyak atribut yang saling bertentangan.
- Hasil yang Jelas: Menghasilkan skor kedekatan relatif yang memungkinkan perbandingan dan perankingan yang jelas.
Keterbatasan:
- Sensitivitas terhadap Bobot Kriteria: Hasil bisa sangat sensitif terhadap perubahan kecil pada bobot kriteria.
- Ketergantungan pada Skala: Meskipun normalisasi membantu, sifat data awal dapat mempengaruhi hasil.
- Membutuhkan Data Numerik: Sulit digunakan untuk kriteria kualitatif murni tanpa proses kuantifikasi terlebih dahulu.
- Tidak Menangani Interdependensi Kriteria: TOPSIS mengasumsikan kriteria independen, yang mungkin tidak selalu terjadi di dunia nyata.
Implementasi TOPSIS dalam Python adalah keterampilan yang sangat berharga bagi siapa pun di bidang data science, manajemen, atau sistem informasi. Dengan pemahaman yang kuat tentang dasar-dasar metode ini dan kemampuan untuk mengkodekannya, Anda dapat membuat keputusan yang lebih cerdas, lebih cepat, dan lebih terinformasi dalam menghadapi kompleksitas data modern.