Halo Sobat Kampus dan para tech enthusiast! Buat kalian yang suka ikut hackathon atau hobi ngulik coding, pasti tahu kalau tantangan yang dikasih sering kali kelihatan mustahil di awal. Nah, ada sebuah cerita menarik dari ajang HackMIT, di mana sebuah teka-teki penyesuaian wajah sederhana (face-customization puzzle) berubah drastis menjadi proyek data science yang serius dan kompleks. Mari kita bedah bagaimana cara mengubah frustrasi ngulik UI manual menjadi solusi otomatis menggunakan scripting dan pemahaman logika.

Teka-teki utama dari tantangan ini bernama Face Value. Di awal, tampilannya kelihatan gampang banget: ada sepuluh slider—mulai dari Face, Skin, Hair, Brows, Eyes, Nose, Mouth, Glasses, Mole, hingga Accessory—yang masing-masing punya rentang angka 0 sampai 9 untuk mengatur sebuah avatar kartun. Tugas kita adalah menemukan konfigurasi yang membuat model tersembunyi di balik sistem memberikan lampu hijau dengan syarat yang cukup ketat:

  • Confidence harus mencapai minimal 99.9%.
  • Edit distance dari konfigurasi awal maksimal 5 (artinya cuma separuh slider yang boleh digeser).
  • Lolos uji Charm.
  • Lolos uji Sync.

Petunjuk dari panitia saat itu singkat tapi krusial: "Tidak semua fitur mempengaruhi model secara merata. Beberapa lebih sensitif dibanding yang lain, terutama jika dikombinasikan. Uji coba satu fitur saja bisa sangat menyesatkan." Peringatan inilah yang menjadi inti dari seluruh permainan.

Fase 1: Pendekatan Brutal Secara Manual

Naluri pertama anak IT biasanya langsung mencoba cara manual: klik slider, tekan tombol Query, baca hasilnya, sesuaikan lagi, lalu ulang terus-menerus. Setiap kali melakukan query, sistem akan mengembalikan empat angka dalam panel Reviewer, yaitu Probability, Charm, edit Distance, dan Sync. Keempatnya harus selaras sekaligus.

Cara ini lumayan ampuh di awal. Lewat 24 query manual pertama, pola-pola mulai kelihatan—misalnya nilai Glasses tertentu sepertinya berpengaruh besar pada Sync, sementara Mole dan Accessory mendongkrak skor Confidence. Tapi, progresnya langsung mandek di kisaran angka 60% sampai 77% saja. Pengujian manual punya keterbatasan dimensi, padahal model ini jelas-jelas memperhitungkan interbasi antar-variabel. Kamu gak bakal bisa nemuin interaksi tiga arah kalau cuma mengubah satu slider sambil menerka-nerka hasilnya.

Fase 2: Keluar dari Keterbatasan UI Browser

Titik balik terbesar dari proyek ini terjadi saat membuka Chrome DevTools, mengeklik Query sekali, lalu menyalin request jaringan tersebut sebagai perintah cURL. Di balik antarmuka UI yang kelihatan rapi, ternyata tersimpan sebuah JSON API mentah:

POST https://facevalue.hackmit.org/api/query
{"sessionId": "...", "config": {...}, "userId": "..."}

Begitu kita bisa menembak endpoint tersebut secara langsung dari sebuah script, masalahnya berubah total. Alih-alih melakukan klik manual yang cuma dapat satu iterasi per menit, kita bisa mengeksekusi ratusan iterasi dalam hitungan detik. Lebih keren lagi, kita bisa menjalankan algoritma pencarian beneran alih-alih mengandalkan intuisi manual.

Algoritma Pencarian: Simulated Annealing dan Coordinate Descent

Senjata utama yang dipakai di sini adalah simulated annealing: sebuah metode untuk mengusulkan perubahan acak ke 1-3 slider, mengecek skor aslinya, lalu mempertahankan peningkatan yang ada sekaligus menerima hasil yang sedikit lebih buruk dengan probabilitas tertentu agar tidak terjebak di satu titik optimal lokal (local optimum).

Berikut adalah contoh cuplikan kode algoritma simulated annealing yang digunakan:

def anneal(current, budget, T0):
    result = query(current)
    current_score = score(result, current)
    best_score, best_config = current_score, dict(current)
    for step in range(budget):
        T = max(T0 * (1 - step / budget), 0.005)
        candidate = random_neighbor(current)
        r = query(candidate)
        s = score(r, candidate)
        if s > current_score or random.random() < pow(2.71828, (s - current_score) / T):
            current, current_score = candidate, s
        if s > best_score:
            best_score, best_config = s, dict(candidate)
    return best_config

Selain simulated annealing, teknik lain yang ditambahkan meliputi:

  • Coordinate descent: Mencoba secara habis-habisan kesepuluh nilai untuk satu fitur dalam satu waktu sambil menahan fitur lainnya tetap konstan.
  • Random restarts: Mengulang pencarian secara acak pada subset fitur yang berbeda untuk mencari tahu kombinasi 5 fitur mana yang paling berdampak.
  • Systematic subset sweeps: Menguji lebih dari 140 dari total 252 kemungkinan kombinasi lima fitur.

Membongkar Aturan Tersembunyi Lewat Data Science

Setelah melakukan sekitar 10.000 query, server mulai memberikan respons 429 Too Many Requests karena batasan limit dari pihak hackathon. Untungnya, tumpukan data log CSV dari hasil query sebelumnya sudah terkumpul banyak. Daripada terus meneror API, masalah ini dipandang sebagai kasus data science murni.

Dengan memanfaatkan library numpy untuk melakukan vektorisasi pengecekan pada 9.245 data unik, ditemukanlah rumus matematika di balik parameter Sync dalam hitungan detik:

Sync = True  ⟺  (hair + eyes + glasses) mod 5 == 2

Ternyata, aturan Sync yang rumit itu cuma bergantung pada tiga fitur saja dengan operasi modulus yang sederhana!

Solusi Akhir dan Kesimpulan

Mengetahui formula pasti dari Sync membuat sisa query bisa difokuskan sepenuhnya untuk mendongkrak Confidence dan Charm. Lewat perombakan skrip pengujian terakhir, kombinasi sempurna akhirnya berhasil dipecahkan dengan hasil akhir:

Face=8, Skin=4, Hair=3, Brows=1, Eyes=5, Nose=6, Mouth=2, Glasses=9, Mole=0, Acc=1
Probability: 99.939% | Charm: 3.92 | Sync: True | Edit distance: 5.
SOLVED — Your face has been accepted.

Buat kalian mahasiswa yang mau terjun ke dunia kompetisi teknologi, coding, atau data science, jadikan kisah ini motivasi! Jangan cuma mengandalkan cara manual yang melelahkan. Asah terus skill scripting, pahami struktur API, dan pelajari algoritma pencarian karena hal-hal tersebut bakal sangat berguna buat portofolio karier profesional kalian ke depannya. Siapkan CV terbaikmu sekarang juga!