Sebelum menulis satu baris kode pun, kita perlu memahami perbedaan mendasar antara program biasa dan program yang belajar. Machine learning adalah cabang kecerdasan buatan yang membangun program dengan cara mempelajari pola dari data, bukan dengan menulis aturan satu per satu. Pendekatan ini mengubah cara kita menyelesaikan masalah: alih-alih merumuskan aturan secara manual, kita menyediakan contoh beserta jawabannya, lalu algoritme menemukan pola yang menghubungkan keduanya.
Definisi Singkat #
Dalam literatur modern, machine learning didefinisikan sebagai sekumpulan teknik yang membuat komputer mampu meningkatkan kinerjanya pada suatu tugas melalui pengalaman berupa data, tanpa diprogram secara eksplisit untuk setiap kasus. Definisi klasiknya dirumuskan oleh Arthur Samuel pada tahun 1959 sebagai field of study that gives computers the ability to learn without being explicitly programmed.
Definisi tersebut memuat tiga unsur penting yang perlu kita pegang sepanjang Course ini:
- Tugas (task): masalah konkret yang ingin diselesaikan, misalnya mengklasifikasikan transaksi mencurigakan.
- Pengalaman (experience): data contoh yang menjadi bahan belajar, misalnya ribuan transaksi lama yang sudah dilabeli.
- Ukuran kinerja (performance measure): angka yang menilai seberapa baik program bekerja, misalnya persentase prediksi yang benar.
Ketiga unsur ini saling terkait: machine learning adalah proses memperbaiki ukuran kinerja pada suatu tugas dengan memanfaatkan pengalaman dari data.
Program Tradisional vs Program yang Belajar #
Mari kita lihat perbedaan kedua pendekatan ini secara konkret pada satu masalah yang sama: menyaring transaksi kartu yang perlu ditinjau manual. Cara tradisional menuntut kita merumuskan aturan eksplisit terlebih dahulu.
# Pendekatan tradisional: aturan eksplisit ditulis tangan oleh programmer.
# Program menentukan status transaksi hanya lewat kondisi if/else.
def klasifikasi_tradisional(jumlah, jam):
if jumlah > 5_000_000:
return "perlu tinjauan"
if jam >= 0 and jam <= 5:
return "perlu tinjauan"
return "aman"
# Data transaksi uji: (jumlah dalam rupiah, jam transaksi)
transaksi_uji = [
(450_000, 14),
(7_200_000, 13),
(300_000, 2),
]
for jumlah, jam in transaksi_uji:
status = klasifikasi_tradisional(jumlah, jam)
print(f"Rp{jumlah:>10,} jam {jam:02d} -> {status}")Output yang Dihasilkan:
Rp 450,000 jam 14 -> aman
Rp 7,200,000 jam 13 -> perlu tinjauan
Rp 300,000 jam 02 -> perlu tinjauanPerhatikan apa yang terjadi pada program di atas:
- Baris 5–10 (
def klasifikasi_tradisional): kita, sebagai programmer, memutuskan sendiri dua aturan: transaksi di atas Rp5.000.000 perlu ditinjau, dan transaksi antara pukul 00.00–05.00 juga perlu ditinjau. - Baris 13–17 (
transaksi_uji): data uji hanya menjadi objek pemeriksaan, bukan bahan pembelajaran. - Baris 19–21 (
for ... print): setiap hasil sepenuhnya ditentukan oleh aturan yang kita tulis.
Pendekatan tradisional ini bekerja dengan baik selama pola masalahnya sederhana dan stabil. Kesulitan muncul ketika batas antara transaksi wajar dan tidak wajar tidak lagi berbentuk garis tegas: transaksi Rp450.000 dari negara asing pukul 03.00 bisa jadi sah, sementara Rp3.000.000 dari pedagang baru bisa jadi tidak. Semua pengecualian harus kita tulis satu per satu.
Sekarang mari kita lihat pendekatan machine learning atas masalah yang sama. Kali ini aturannya tidak kita tulis; program belajar dari enam contoh transaksi yang sudah dilabeli.
# Pendekatan machine learning: aturan TIDAK ditulis tangan.
# Program menerima contoh transaksi berlabel, lalu pola dipelajari oleh model.
from sklearn.neighbors import KNeighborsClassifier
# Contoh data historis yang sudah dilabeli manusia.
# Fitur: [jumlah (juta rupiah), jam transaksi]
# Label: 0 = aman, 1 = perlu tinjauan
X = [
[0.45, 14],
[0.30, 10],
[0.80, 16],
[7.20, 13],
[0.30, 2],
[6.50, 3],
]
y = [0, 0, 0, 1, 1, 1]
# "Belajar" terjadi di sini: model menyimpan contoh dan cara mengukur jarak.
model = KNeighborsClassifier(n_neighbors=3)
model.fit(X, y)
# Transaksi baru yang belum pernah dilihat model.
transaksi_baru = [
[0.50, 15], # mirip transaksi aman siang hari
[7.00, 2], # mirip kombinasi jumlah besar dini hari
]
prediksi = model.predict(transaksi_baru)
for fitur, label in zip(transaksi_baru, prediksi):
status = "aman" if label == 0 else "perlu tinjauan"
print(f"Rp{fitur[0]:.2f} juta jam {fitur[1]:02d} -> {status}")Output yang Dihasilkan:
Rp0.50 juta jam 15 -> aman
Rp7.00 juta jam 02 -> perlu tinjauanMari kita telaah baris-baris kode yang berperan penting:
- Baris 5 (
from sklearn.neighbors import ...): kita meminjam implementasi algoritme k-nearest neighbors dari pustaka scikit-learn. Algoritme ini memutuskan label transaksi baru berdasarkan mayoritas label dari tetangga terdekatnya. - Baris 8–19 (
Xdany):Xberisi fitur yang menggambarkan tiap transaksi, danyberisi label yang ditetapkan manusia pada masa lalu. PasanganXdanyinilah “bahan belajar” program. - Baris 22–23 (
model = ...; model.fit(X, y)): pemanggilanfit()adalah momen pembelajaran. Model menyimpan contoh-contoh ini sebagai pengetahuan untuk dipakai nanti. - Baris 26–35 (
model.predict(...)): untuk transaksi baru, model mengukur kemiripan dengan contoh lama lalu mengambil mayoritas label tetangga terdekat. Transaksi Rp0,50 juta pukul 15 berdekatan dengan contoh transaksi aman, sedangkan kombinasi jumlah besar di dini hari berdekatan dengan contoh yang berlabel perlu tinjauan.
Perbedaan filosofisnya ringkas tetapi besar: pada program tradisional, aturan masuk lewat kode dan data keluar sebagai hasil; pada machine learning, data berlabel masuk sebagai input dan aturan keluar sebagai hasil — aturan itulah yang kita sebut model.
| Aspek | Program Tradisional | Machine Learning |
|---|---|---|
| Sumber aturan | Ditulis programmer | Dipelajari dari data |
| Cocok untuk | Masalah dengan aturan stabil | Masalah dengan pola kompleks dan berubah |
| Biaya perubahan | Edit kode, uji ulang manual | Kumpulkan data baru, latih ulang |
| Hasil kerja | Deterministik dan mudah dilacak | Bergantung kualitas data contoh |
| Contoh nyata | Validasi format email | Deteksi transaksi mencurigakan |
Kapan Machine Learning Tepat Dipakai #
Pengalaman industri menunjukkan machine learning memberi nilai ketika tiga kondisi berikut terpenuhi bersamaan. Pertama, pola pada masalah terlalu kompleks untuk dirumuskan sebagai aturan tegas — pengenalan wajah, prevalensi kata di dokumen, dan perilaku penipuan sulit ditangkap dengan kondisi if/else yang terbatas. Kedua, data contoh yang representatif tersedia dalam jumlah cukup; tanpa data yang baik, model tidak punya bahan untuk belajar. Ketiga, performa perlu meningkat seiring bertambahnya data — karakter improving with experience inilah yang membedakannya dari sekadar statistik deskriptif.
Sebaliknya, ada kondisi ketika machine learning justru pilihan yang buruk. Jika jawaban masalah bisa dihitung dengan rumus matematis yang pasti, menghitung pajak atau mengurutkan data misalnya, program biasa lebih tepat. Jika datanya sangat sedikit atau tidak merepresentasikan kondisi nyata, hasil model akan menyesatkan. Dan jika keputusan harus bisa dijelaskan aturan persisnya kepada regulator, model yang rumit bisa menghambat akuntabilitas.
Istilah Kunci Chapter Ini #
- Data berlabel (labeled data): contoh yang sudah disertai jawaban benar, seperti transaksi yang ditandai aman atau perlu ditinjau.
- Fitur (feature): variabel pengambar contoh, misalnya jumlah transaksi dan jam kejadian.
- Model: hasil pembelajaran yang menyimpan pola, siap dipakai untuk memprediksi contoh baru.
- Pelatihan (training): proses
fit()ketika model mempelajari data berlabel.
Keempat istilah tersebut akan kita bedah jauh lebih dalam pada Chapter Terminologi Inti Machine Learning. Sebelum sampai di sana, kita perlu melihat dulu posisi machine learning di dalam peta besar kecerdasan buatan — materi yang akan kita bahas pada Chapter Machine Learning, AI, dan Data Science.
Referensi Resmi #
- scikit-learn — machine learning in Python — dokumentasi resmi pustaka yang dipakai di seluruh Course ini.
- Nearest Neighbors — scikit-learn User Guide — penjelasan resmi algoritme k-nearest neighbors yang kita pakai pada contoh kedua.