Jam dinding menunjukkan 21:10 saat aku menutup rapat singkat dengan klien. Cuaca di Jakarta malam itu lembab, lampu meja menyisakan lingkaran hangat di meja kerja. Deadline presentasi proof-of-concept machine learning pukul 24:00. Seharusnya tinggal polishing slide dan menjalankan demo singkat. Tapi sebuah interaksi singkat dengan chatbot di Slack membuat malam itu berubah jadi maraton debugging dan retraining model sampai dini hari.
Malam yang Dimulai Biasa Saja
Aku biasa menggunakan chatbot internal untuk scaffolding: generate snippet data pipeline, koreksi SQL, atau buat prompt baseline untuk model kecil. Malam itu aku minta bantuan chatbot untuk membuat augmentasi data cepat—dataset imbalan rendah jumlahnya dan aku butuh trick supaya model tak overfit. Chatbot menyarankan pipeline augmentasi yang terlihat rapi: kombinasi SMOTE-like oversampling, gaussian noise pada fitur numerik, dan pseudolabeling dari model pretrained. Di layar, kodenya rapi. Cepat. Terlalu cepat buatku yang sedang buru-buru. “Semua aman,” pikirku. Aku copy-paste dan menjalankan training dengan konfigurasi yang disarankan untuk mempercepat demo.
Chatbot yang Bikin Repot
Hasil awal tampak menjanjikan: validasi accuracy melonjak. Aku lega. Lalu klien minta metrik lain: F1 score per kelas dan confusion matrix. Di sinilah masalah muncul. Ketika aku cek distribusi label pada set validasi, ada anehnya—proporsi label berubah drastis dibanding eksplorasi awal. Internal alarm: distribution shift. Aku membuka log; ternyata langkah pseudolabeling yang disarankan chatbot tanpa stratifikasi memasukkan prediksi model ke dalam training tanpa menimbang estimasi confidence. Singkatnya: model melatih ulang pada prediksi sendiri—classic confirmation bias. Akibatnya, metrik pada validasi lokal tampak kinclong, tapi itu ilusi.
Reaksi pertamaku? Frustrasi. “Kenapa aku gak cek lebih teliti?” pikirku. Emosi naik turun: kesal sama diri sendiri, takut ke klien, tapi juga penasaran gimana memperbaikinya secepat mungkin. Aku tarik napas, dan mulai breakdown masalah secara sistematis: rollback perubahan pipeline, buat kontrol eksperimental, terapkan thresholding pada pseudolabel confidence, dan lakukan cross-validation stratified. Sampai tahap ini aku sudah kehilangan satu jam berharga.
Proses: Debug, Retrain, dan Pelajaran Teknikal
Proses itu praktis. Aku menulis unit test kecil untuk memastikan class balance tidak berubah lebih dari X% setelah augmentasi. Aku mulai mencatat seed RNG, batch size, learning rate, dan metric yang benar-benar penting untuk demo (macro F1). Di sini pengalaman 10 tahun kerja machine learning berperan: jangan berharap satu metrik akurat mewakili kinerja, dan selalu simpan baseline eksperimen. Aku juga menurunkan temperature pada proses sampling pseudolabel, menambahkan ensemble voting untuk stabilisasi prediksi, dan mengimplementasikan early stopping yang ketat untuk mencegah overfitting pseudolabel noise.
Pada menit-menit kritis itu aku sempat iseng buka artikel luar topik buat melemaskan kepala—sekilas tentang roket dan eksplorasi luar angkasa di spaceflightamerica. Anehnya, membaca hal yang tak terkait memberi perspektif: riset dan iterasi adalah inti inovasi, baik di roket maupun model ML. Kembali ke meja, aku menjalankan retraining dengan pipeline yang diperbaiki. Kali ini metrik jujur: validasi stabil, lift yang realistis, distribusi label konsisten.
Hasil, Refleksi, dan Aturan Baru
Demo akhirnya berjalan. Klien puas, meski aku datang sedikit terlambat ke meeting—ditambah ekspresi capek di wajah. Yang penting, model yang ku-presentasikan sekarang tahan uji. Malam itu aku belajar lebih dari sekadar teknik augmentasi: aku mengingatkan diri untuk tidak menganggap output chatbot sebagai kebenaran final. Chatbot itu membantu ideasi dan mempercepat boilerplate code, tapi dia tidak menggantikan tahap validasi ilmiah dan praktik eksperimen yang disiplin.
Ada beberapa aturan baru yang ku-terapkan dalam workflow sejak malam itu: selalu review perubahan pipeline secara eksploratif sebelum commit, tulis checks otomatis untuk transformasi data, dan perlakukan pseudolabeling sebagai eksperimen terpisah dengan kontrol ketat. Juga, masukkan manusia lebih awal di loop evaluasi—rekan yang teliti sering menangkap asumsi-asumsi keliru yang tak terlihat pada permukaan.
Kalau ditanya apakah aku menyesal memanfaatkan chatbot malam itu? Tidak. Aku senang dengan efisiensi yang dia beri. Tapi aku jauh lebih menghargai pengalaman itu karena mengajarkan prinsip yang tak terlihat dalam dokumentasi API: alat mempercepat, tanggung jawab tetap pada manusia. Sejak itu, setiap rekomendasi model dicek dua kali—dengan curiosity, skepticism, dan sedikit humor saat terminal memberi segudang stack trace jam 02:00.
