Catatan Proyek Pertama Machine Learning yang Bikin Frustrasi dan Seru

Pembuka: konteks proyek pertama dan ekspektasi

Proyek machine learning pertama saya terasa seperti roller-coaster: penuh optimisme di awal, frustrasi di tengah, dan kepuasan di akhir ketika model mulai “mengerti” pola. Targetnya sederhana — klasifikasi produk olahraga berdasarkan deskripsi dan gambar untuk marketplace kecil. Dataset awal hanya ~5.000 entri, deskripsi teks terfragmentasi, dan foto yang kualitasnya bervariasi. Saya memutuskan menguji beberapa AI tools dan library populer untuk melihat mana yang paling efisien dalam konteks terbatas ini.

Review detail: tools, pengujian, dan hasil nyata

Saya membagi pipeline menjadi empat tahap: pra-pengolahan data, pemodelan, tuning, dan deployment. Untuk pra-pengolahan teks saya bandingkan scikit-learn (TF-IDF + LogisticRegression) dengan Hugging Face Transformers (distilbert fine-tune). Untuk data gambar saya uji transfer learning menggunakan ResNet50 (PyTorch) dan model ringan dari TensorFlow Hub.

Hasil awal menunjukkan: TF-IDF + LogisticRegression (baseline) memakan waktu training ~30 detik di CPU dan mencapai akurasi validasi 68%. Mengganti ke XGBoost memberi lonjakan ke 78% dengan waktu training ~2 menit. Fine-tuning distilBERT pada GPU (RTX 3060 12GB) butuh ~45 menit dan mencapai 86% untuk teks saja — keuntungan jelas ketika deskripsi produk bermakna. Untuk gambar, ResNet50 fine-tune butuh ~25 menit per epoch pada GPU; setelah 5 epoch, akurasi gabungan teks+gambar stabil di 90%.

Saya juga menguji AutoML (AutoGluon dan Google AutoML) sebagai perbandingan. AutoGluon menghasilkan pipeline kompetitif (akurasi ~88%) tanpa banyak konfigurasi, tetapi memakan memori lebih besar dan waktu yang tidak selalu dapat diprediksi. Google AutoML menawarkan UI yang rapi dan deployment instan, namun biaya dan keterbatasan kontrol hyperparameter menjadi kendala untuk proyek open-source yang saya kelola.

Kelebihan & kekurangan: temuan praktis dari pengujian

Kelebihan pendekatan manual (scikit-learn / XGBoost / PyTorch): kontrol penuh. Anda bisa men-debug kebocoran data, memeriksa fitur yang dominan, dan mengoptimalkan inferensi untuk latency rendah. Contoh konkret: dengan memotong fitur teks berulangi dan memilih 200 fitur teratas TF-IDF, inferensi latency turun dari 120ms ke 25ms per sampel — penting untuk integrasi real-time.

Kekurangannya: waktu pengembangan lebih panjang dan memerlukan pengalaman. Fine-tuning Transformer memberi performa terbaik, tetapi memerlukan GPU, manajemen memori, dan dataset yang cukup berkualitas. Di proyek saya, label noise (sekitar 8% entri salah kategori) sempat menurunkan performa; solusinya: validasi ulang 500 sampel teratas berdasarkan probabilitas prediksi rendah, lalu retrain.

AutoML memang cepat untuk POC. Kelebihannya adalah kemudahan dan rekomendasi pipeline otomatis. Kekurangannya adalah transparansi: Anda tidak selalu tahu kenapa model memilih fitur tertentu. Untuk tim kecil yang butuh interpretability (misalnya alasan klasifikasi untuk seller), saya masih merekomendasikan XGBoost dengan SHAP.

Perbandingan praktis dan rekomendasi akhir

Jika Anda punya sumber daya GPU dan ingin akurasi maksimal: kombinasi fine-tuned Transformer untuk teks + transfer learning pada CNN untuk gambar memberi hasil terbaik. Dalam proyek saya, gabungan ini menaikkan akurasi dari 78% (XGBoost saja) ke ~90% setelah iterasi kedua. Namun jika sumber daya terbatas atau deployment harus hemat biaya, XGBoost atau LightGBM lebih masuk akal: training cepat, interpretasi baik, dan akurasi kompetitif.

Praktik yang selalu saya terapkan: (1) mulai dari baseline sederhana, catat metrik dan waktu training; (2) perbaiki data sebelum model; (3) gunakan cross-validation stratified untuk mengatasi ketidakseimbangan; (4) lakukan sanity check pada fitur penting. Untuk dataset gambar yang kurang rapi, teknik augmentasi sederhana (rotasi, crop, brightness) meningkatkan robustnes model sebesar 3-5% — saya bahkan menggunakan gambar produk dari marketplace dan sumber lain untuk augmentasi, termasuk beberapa foto referensi dari australiansportsupplies yang membantu memperkaya variasi sudut pandang.

Kesimpulannya: proyek pertama ML itu bikin frustrasi, karena banyak moving parts dan jebakan praktis seperti label noise, leakage, dan keterbatasan infrastruktur. Tapi proyek itu juga sangat seru — setiap iterasi memberi insight baru dan solusi teknis yang bisa langsung diimplementasikan. Rekomendasi saya: mulai sederhana, ukur semuanya, dan pilih tools sesuai trade-off kontrol vs kecepatan. Untuk tim yang ingin hasil cepat tanpa banyak effort, AutoML layak dicoba; untuk tim yang mengutamakan performa dan transparansi, kombinasi XGBoost + fine-tuned Transformer/CNN adalah jalan yang lebih baik.

Perlengkapan Hiking yang Selalu Bikin Tas Saya Berantakan

Pagi yang Berantakan di Jalur Pendakian

Itu pagi November, kabut masih menempel di lereng, saya berdiri di parkiran kecil sebelum masuk jalur. Jam menunjukkan 05.30. Rencana: ridge run pendek 20 km sebelum siang, santai tapi efektif. Tas punggung 18 liter saya terasa berat di satu sisi. Bukan karena jaket ekstra atau kamera—melainkan bunyi keriting-nya snack yang berantakan. Saya tersenyum kecut. Lagi-lagi, perlengkapan nutrisi mengacaukan tas saya.

Kalau pernah mengalami momen ini, Anda tahu sensasinya: gel energi tercecer, potongan wrapper yang lengket menempel di saku, sachet elektrolit kubuka lalu tercecer, dan pisang yang separuh tertekan berubah jadi noda cokelat manis di dalam tas. Saya ingat ngomong pada diri sendiri, “Kenapa terus terulang?” Respon alami: frustrasi. Respon produktif: evaluasi dan perbaikan.

Sarang Tergesa: Snack yang Selalu Jadi Sumber Masalah

Pendakian berikutnya, masalah muncul sama. Energy gel, biasanya 40 g karbohidrat per sachet, mudah dibuka. Tapi sisa kecil di ujung sachet lengket dan kini menempel di lapisan dalam tas. Bar granola terbungkus rapih, tapi saya sering merobeknya setengah, makan separuh, lalu menyimpan sisanya tanpa bungkus—hasilnya crumble dan sisa serpihan tersebar ke mana-mana. Elektrolit bubuk sachet—praktis, tapi ketika dibuka lalu tumpah sedikit untuk dicampur, saya lupa menutup kembali. Air minum jadi terasa asin tiga jam kemudian.

Perilaku saya juga berkontribusi: saya makan saat capek, tangan basah berkeringat, tidak repot membersihkan; saya sering berpikir “nanti dibersihkan” lalu terlupa. Ada juga faktor lingkungan: angin kencang yang mengibaskan wrapper, dan satu kali tupai yang mencium bau kacang dan membuka tas saya dengan sangat gesit. Pengalaman ini memberi saya rasa malu sekaligus pelajaran berharga.

Proses Perbaikan: Langkah-Langkah Praktis yang Saya Coba

Saya mulai mendata masalah dan menerapkan solusi sederhana. Pertama, semua yang lengket atau berpotensi tumpah masuk ke ziplock kecil khusus nutrisi. Saya membagi porsi untuk satu jam ke dalam kantong-kantong kecil: tiga gel untuk tiga interval, dua sachet elektrolit, dan satu potong bar yang sudah dibagi. Prinsipnya: pre-portioning mengurangi sampah ruang dan menghilangkan godaan “ambil lebih banyak”.

Kedua, saku khusus di bahu tas jadi tempat bahan cepat saji. Tapi saya belajar menutup kembali setiap bungkus setelah makan; kebiasaan kecil yang berdampak besar. Ketiga, membawa tas sampah kecil—satu gulungan kantong plastik Zip yang cukup kuat—untuk semua bungkus kosong. Efek psikologisnya kuat: melihat bungkus di tangan membuat saya segera memasukkannya, bukan meninggalkannya di jalan.

Saya juga mulai membawa botol minum berleher lebar untuk mencampur elektrolit tanpa tumpah. Sumber peralatan ini kadang saya pesan online, khususnya item yang tahan lama dan berkualitas; salah satu toko perlengkapan olahraga yang pernah saya gunakan adalah australiansportsupplies, tempat saya menemukan botol yang pas dan ziplock tahan robek. Perubahan kecil lain: menukar bar yang mudah hancur dengan saus kacang dalam sachet, lebih padat energi dan minim sampah remah.

Nutrisi, Kebiasaan, dan Pelajaran yang Bisa Anda Terapkan

Pendekatan saya kini bukan hanya mengurangi kekacauan, tapi juga meningkatkan performa. Pengalaman mengajari saya dua aturan nutrisi praktis: makan secara terjadwal (30–60 g karbo per jam untuk aktivitas 1–3 jam; sesuaikan intensitas dan kebiasaan perut Anda) dan jangan tunggu lapar parah untuk makan. Waktu makan adalah manajemen energi, bukan hadiah.

Selain itu, sodium penting. Saat saya mengalami kram di tanjakan ketiga, satu sachet elektrolit (biasanya 300–500 mg sodium) cukup mengembalikan ritme. Pelajaran praktis: bawa kombinasi rasa—manis, asam, asin—untuk atasi mual atau jenuh rasa. Varian kecil membuat Anda makan cukup tanpa bosan.

Terakhir: kebiasaan kecil menjaga kebersihan gear memperpanjang umur peralatan. Bungkus yang tertinggal merusak lapisan tas, menimbulkan bau, dan menarik hewan. Saya belajar bahwa organisasi nutrisi bukan hanya soal kenyamanan—itu soal etika lapangan dan efisiensi performa.

Setiap kali saya membuka tas sekarang, ada rasa puas. Tidak sempurna — saya masih menemukan remah di tiap perjalanan — tapi jauh lebih terkendali. Saya lebih fokus pada pemandangan, langkah, dan percakapan di jalur. Itu esensinya: perbaiki satu kebiasaan, dapatkan lebih banyak pengalaman. Untuk saya, meminimalkan kekacauan nutrisi membuat hiking lebih menyenangkan. Coba langkah-langkah sederhana ini. Anda akan terkejut betapa besar pengaruhnya.