Cara Tokopedia mengurangi biaya operasional dengan meningkatkan kualitas aplikasi web penjual mereka menggunakan Machine Learning

Dendi Sunardi
Dendi Sunardi
Geoffrey Prasetyo
Geoffrey Prasetyo
Swetha Gopalakrishnan
Swetha Gopalakrishnan

Tokopedia adalah perusahaan teknologi Indonesia dengan salah satu marketplace e-commerce terbesar, yang menghosting lebih dari 40 produk digital dan lebih dari 14 juta penjual terdaftar di platformnya.

Mitra Tokopedia, bagian dari vertikal bisnis Tokopedia, adalah aplikasi web yang membantu pemilik bisnis kecil untuk menjual produk digital seperti voucher kredit dan game, paket data, token listrik, tagihan layanan kesehatan nasional, dan lainnya. Situs ini adalah salah satu saluran utama untuk penjual Mitra Tokopedia di lebih dari 700 kota, sehingga sangat penting untuk memastikan pengalaman pengguna yang lancar.

Langkah utama dalam proses aktivasi mengharuskan penjual ini memverifikasi identitas mereka. Penjual harus mengupload Tanda Pengenal Nasionalnya serta selfie dengan ID untuk menyelesaikan verifikasi penjual. Hal ini disebut sebagai proses Kenali Pelanggan Anda (KYC).

Dengan menambahkan kemampuan Machine Learning ke proses KYC penting ini dalam aplikasi web mereka, Mitra Tokopedia dapat mencapai pengalaman pengguna yang lebih baik dengan pengurangan kegagalan verifikasi lebih dari 20%. Mereka juga menghemat biaya operasional dengan mengurangi persetujuan manual hingga hampir 70%.

Tantangan

Sebagian besar data KYC ditolak, sehingga membuat ribuan tiket per minggu dikirim ke tim operasi untuk verifikasi manual. Hal ini tidak hanya menyebabkan biaya operasional yang tinggi, tetapi juga mengakibatkan pengalaman pengguna yang buruk bagi penjual, yang proses verifikasinya tertunda. Alasan terbesar penolakan adalah penjual tidak mengupload selfie dengan kartu tanda pengenal dengan benar. Mitra Tokopedia ingin mengatasi masalah ini secara skalabel menggunakan kemampuan web modern.

Solusi

Tim di Tokopedia memutuskan untuk menggunakan ML dengan TensorFlow.js untuk mengatasi masalah ini pada langkah pertama proses KYC—saat pengguna mengupload gambar. Mereka menggunakan MediaPipe dan library Deteksi Wajah TensorFlow untuk mendeteksi wajah penjual dengan enam titik kunci saat penjual mengupload kartu ID dan gambar selfie. Output model kemudian digunakan untuk memeriksa kriteria penerimaannya. Setelah verifikasi berhasil, informasi akan dikirim ke backend. Jika verifikasi gagal, penjual akan diberi pesan error dan opsi untuk mencoba lagi. Pendekatan campuran digunakan dengan model yang melakukan inferensi di perangkat atau sisi server, bergantung pada spesifikasi ponsel. Perangkat yang lebih rendah akan melakukan inferensi di server.

Dengan menggunakan model ML di awal proses KYC, mereka dapat:

  • Tingkatkan rasio penolakan dalam proses KYC.
  • Peringatkan pengguna tentang kemungkinan penolakan gambar mereka, berdasarkan kualitas yang dinilai oleh model.

Mengapa memilih ML dibandingkan solusi lain?

ML dapat mengotomatiskan tugas berulang yang menghabiskan waktu atau tidak praktis untuk dilakukan secara manual. Dalam kasus Tokopedia, pengoptimalan solusi non-ML saat ini tidak dapat memberikan hasil yang signifikan, sedangkan solusi ML dapat secara signifikan mengurangi beban tim operasi yang harus memproses ribuan persetujuan setiap minggunya. Dengan solusi ML, pemeriksaan gambar dapat dilakukan hampir seketika, sehingga memberikan pengalaman pengguna yang lebih baik dan meningkatkan efisiensi operasional. Baca selengkapnya tentang framing masalah untuk menentukan apakah ML adalah solusi yang sesuai untuk masalah Anda.

Pertimbangan saat memilih model

Faktor-faktor berikut dipertimbangkan saat memilih model ML.

Biaya

Mereka mengevaluasi biaya keseluruhan penggunaan model. Karena TensorFlow.js adalah paket open source yang dikelola dengan baik oleh Google, kami menghemat biaya pemberian lisensi dan pemeliharaan. Pertimbangan tambahan adalah biaya inferensi. Kemampuan untuk menjalankan inferensi di sisi klien menghemat banyak biaya dibandingkan dengan memprosesnya di sisi server dengan GPU yang mahal, terutama jika data ternyata tidak valid dan tidak dapat digunakan.

Skalabilitas

Mereka mempertimbangkan skalabilitas model dan teknologi. Apakah model tersebut dapat menangani pertumbuhan kompleksitas data dan model seiring dengan perkembangan project kita? Dapatkah diperluas untuk memenuhi project atau kasus penggunaan lainnya? Pemrosesan di perangkat dapat membantu karena model dapat dihosting di CDN dan dikirim ke sisi klien, yang sangat skalabel.

Performa

Mereka mempertimbangkan ukuran library (dalam KB) dan latensi proses runtime. Sebagian besar basis pengguna Mitra Tokopedia memiliki perangkat kelas menengah hingga rendah dengan kecepatan dan konektivitas internet sedang. Dengan demikian, performa dalam hal download dan runtime (yaitu seberapa cepat model dapat menghasilkan output) adalah prioritas utama untuk memenuhi kebutuhan spesifik mereka dan memastikan pengalaman pengguna yang luar biasa.

Pertimbangan lainnya

Kepatuhan terhadap peraturan: Mereka harus memastikan bahwa library yang dipilih mematuhi peraturan perlindungan data dan privasi yang relevan.

Keterampilan: Mereka mengevaluasi keahlian dan keterampilan tim mereka. Beberapa framework dan library ML mungkin memerlukan keahlian atau bahasa pemrograman tertentu dalam bidang tertentu. Dengan mempertimbangkan faktor-faktor ini, mereka membuat keputusan yang tepat saat memilih model yang tepat untuk project machine learning.

Teknologi yang dipilih

TensorFlow.js memenuhi kebutuhan mereka, setelah mempertimbangkan faktor-faktor ini. Aplikasi ini dapat berjalan sepenuhnya di perangkat menggunakan backend WebGL-nya untuk menggunakan GPU perangkat. Menjalankan model di perangkat memungkinkan masukan yang lebih cepat kepada pengguna karena mengurangi latensi server dan mengurangi biaya komputasi server. Baca lebih lanjut tentang ML di perangkat dalam artikel Keuntungan dan batasan ML di perangkat.

"TensorFlow.js adalah library machine learning open source dari Google yang ditujukan untuk developer JavaScript yang dapat menjalankan sisi klien di browser. Ini adalah opsi paling matang untuk AI Web dengan dukungan operator backend WebGL, WebAssembly, dan WebGPU yang komprehensif yang dapat digunakan dalam browser dengan performa cepat."Cara Adobe menggunakan Web ML dengan TensorFlow.js untuk meningkatkan Photoshop untuk web

Implementasi teknis

Mitra Tokopedia menggunakan MediaPipe dan library Deteksi Wajah TensorFlow, paket yang menyediakan model untuk menjalankan deteksi wajah real-time. Secara khusus, model MediaPipeFaceDetector-TFJS yang disediakan dalam library ini, yang menerapkan runtime tfjs digunakan untuk solusi ini.

Sebelum membahas penerapannya, mari kita bahas sekilas tentang MediaPipe. MediaPipe memungkinkan Anda mem-build dan men-deploy solusi ML di perangkat di seluruh perangkat seluler (Android, iOS), web, desktop, edge, dan IoT.

Ada 14 solusi berbeda yang ditawarkan oleh MediaPipe pada saat menulis postingan ini. Anda dapat menggunakan runtime mediapipe atau tfjs. Runtime tfjs dibuat dengan JavaScript dan menyediakan paket JavaScript yang dapat didownload secara eksternal oleh aplikasi web. Hal ini berbeda dengan runtime mediapipe, yang dibuat dengan C++ dan dikompilasi ke modul WebAssembly. Perbedaan utamanya adalah performa, kemampuan debug, dan pengelompokan. Paket JavaScript dapat dipaketkan dengan paket klasik seperti webpack. Sebaliknya, modul Wasm adalah resource biner yang lebih besar dan terpisah (yang dimitigasi dengan tidak menjadi dependensi waktu pemuatan) dan memerlukan alur kerja proses debug Wasm yang berbeda. Namun, ini berjalan lebih cepat untuk membantu memenuhi persyaratan teknis dan performa.

Diagram cara kerja model MediaPipe dan TensorFlow untuk berbagai runtime, menggunakan FaceDetection sebagai contoh.
Ilustrasi umum tentang cara kerja model MediaPipe dan TensorFlow untuk berbagai runtime, menggunakan FaceDetection sebagai contoh

Kembali ke implementasi Tokopedia, langkah pertama adalah melakukan inisialisasi model sebagai berikut. Saat pengguna mengupload foto, HTMLImageElement akan diteruskan sebagai input ke detektor.

// Create the detector.
const model = faceDetection.SupportedModels.MediaPipeFaceDetector;
const detectorConfig = {
  runtime: 'tfjs'
};

const detector = await faceDetection.createDetector(model, detectorConfig);

// Run inference to start detecting faces.
const estimationConfig = {flipHorizontal: false};
const faces = await detector.estimateFaces(image, estimationConfig);

Hasil daftar wajah berisi wajah yang terdeteksi untuk setiap wajah dalam gambar. Jika model tidak dapat mendeteksi wajah, daftar akan kosong. Untuk setiap wajah, objek ini berisi kotak pembatas wajah yang terdeteksi, serta array enam titik kunci untuk wajah yang terdeteksi. Hal ini mencakup fitur seperti mata, hidung, dan mulut. Setiap titik kunci berisi x dan y, serta nama.

[
  {
    box: {
      xMin: 304.6476503248806,
      xMax: 502.5079975897382,
      yMin: 102.16298762367356,
      yMax: 349.035215984403,
      width: 197.86034726485758,
      height: 246.87222836072945
    },
    keypoints: [
      {x: 446.544237446397, y: 256.8054528661723, name: "rightEye"},
      {x: 406.53152857172876, y: 255.8, "leftEye },
      ...
    ],
  }
]

box mewakili kotak pembatas wajah di ruang piksel gambar, dengan xMin, xMax menunjukkan batas x, yMin, yMax menunjukkan batas y, dan width, height adalah dimensi kotak pembatas. Untuk keypoints, x, dan y mewakili posisi keypoint sebenarnya dalam ruang piksel gambar. name memberikan label untuk titik kunci, yang masing-masing adalah 'rightEye', 'leftEye', 'noseTip', 'mouthCenter', 'rightEarTragion', dan 'leftEarTragion'. Seperti yang disebutkan di awal postingan ini, penjual harus mengupload KTP dan selfie dengan KTP untuk menyelesaikan verifikasi penjual. Output model kemudian digunakan untuk memeriksa kriteria penerimaan—yaitu memiliki kecocokan dari enam titik kunci yang disebutkan sebelumnya agar dianggap sebagai Kartu Identitas dan gambar selfie yang valid.

Setelah verifikasi berhasil, informasi penjual yang relevan akan diteruskan ke backend. Jika verifikasi gagal, penjual akan menerima pesan kegagalan dan opsi untuk mencoba lagi. Tidak ada informasi yang akan dikirim ke backend.

Diagram halaman Mitra KYC, model TensorFlow.js, dan server yang saling berinteraksi.
Cara halaman Mitra KYC, model TensorFlow.js, dan server berinteraksi satu sama lain

Pertimbangan performa untuk perangkat kelas bawah

Ukuran paket ini hanya 24,8 KB (diminifikasi dan di-gzip), yang tidak memengaruhi waktu download secara signifikan. Namun, untuk perangkat kelas bawah, pemrosesan runtime memerlukan waktu lama. Logika tambahan ditambahkan untuk memeriksa RAM dan CPU Perangkat sebelum meneruskan dua gambar ke model deteksi wajah machine learning.

Jika perangkat memiliki RAM lebih dari 4 GB, koneksi jaringan di atas 4G, dan CPU dengan lebih dari 6 core, image akan diteruskan ke model di perangkat untuk verifikasi wajah. Jika persyaratan ini tidak terpenuhi, model di perangkat akan dilewati dan image akan dikirim langsung ke server untuk diverifikasi menggunakan pendekatan campuran guna mengakomodasi perangkat lama ini. Seiring waktu, lebih banyak perangkat akan dapat melakukan offload komputasi dari server seiring hardware terus berkembang.

Dampak

Berkat integrasi ML, Tokopedia berhasil mengatasi rasio penolakan yang tinggi dan mendapatkan hasil berikut:

  • Rasio penolakan menurun lebih dari 20%.
  • Jumlah persetujuan manual menurun hampir 70%.

Hal ini tidak hanya menciptakan pengalaman pengguna yang lebih lancar bagi penjual, tetapi juga mengurangi biaya operasional bagi tim Tokopedia.

Kesimpulan

Secara keseluruhan, hasil studi kasus ini menunjukkan bahwa untuk kasus penggunaan yang tepat, solusi ML di perangkat di web dapat bermanfaat dalam meningkatkan pengalaman pengguna dan efektivitas fitur serta menciptakan penghematan biaya dan manfaat bisnis lainnya.

Coba fitur Deteksi Wajah MediaPipe sendiri menggunakan MediaPipe Studio dan contoh kode untuk Detektor Wajah MediaPipe untuk web.

Jika Anda tertarik untuk memperluas kemampuan aplikasi web Anda sendiri dengan ML di perangkat, lihat referensi berikut: