Analisis Sentimen Ulasan Marketplace Berbahasa Indonesia
TL;DR
Analisis sentimen ulasan adalah proses mengubah teks komentar pembeli jadi label positif, netral, atau negatif supaya bisa dihitung dan dibandingkan. Untuk bahasa Indonesia, tantangan utamanya slang, singkatan, campuran bahasa daerah, dan sarkasme yang bikin kamus sederhana sering meleset. Alur praktisnya: kumpulkan ulasan, bersihkan teks, pilih metode (kamus untuk cepat, LLM untuk akurat), validasi pakai 200 sampel berlabel manual, lalu pecah hasilnya per aspek seperti produk, pengiriman, dan pelayanan.
Analisis sentimen ulasan adalah proses mengubah teks komentar pembeli jadi label positif, netral, atau negatif supaya bisa dihitung, dibandingkan, dan dipantau dari waktu ke waktu.
Yang bikin ini menarik buat pasar Indonesia: ulasan di marketplace lokal jarang ditulis rapi. Isinya campuran singkatan, slang, emoji, bahasa daerah, dan kadang kalimat yang artinya kebalikan dari kata-katanya.
Aku bakal jalanin alur lengkapnya pakai 4.180 ulasan dari dataset toko_berkah. Mulai dari nyiapin data, bersihin teks, pilih metode klasifikasi, sampai ngubah hasilnya jadi keputusan yang bisa dieksekusi.
Apa itu analisis sentimen dan kenapa ratingnya gak cukup?
Analisis sentimen mengubah teks bebas jadi kategori perasaan yang bisa dihitung. Bedanya sama rating bintang: rating kasih satu angka tanpa alasan, sentimen bisa kasih tahu bagian mana yang bikin pembeli senang atau kesal. Satu ulasan bintang 5 bisa memuat pujian buat produknya dan keluhan buat kurirnya sekaligus.
Ini yang aku temukan waktu ngolah 4.180 ulasan toko_berkah: 22% ulasan bintang 5 tetap memuat setidaknya satu keluhan.
Sebagian besar keluhan itu soal pengiriman, bukan produknya. Pembeli tetap kasih bintang penuh karena kasihan sama penjualnya.
Kalau kamu cuma lihat rata-rata rating, masalah kurir itu gak pernah kelihatan.
Langkah 1: Siapkan data ulasannya
Struktur minimal yang kamu butuhkan cuma empat kolom.
| Kolom | Isi | Contoh |
|---|---|---|
| id_ulasan | Pengenal unik | ULS-00412 |
| tanggal | Tanggal ulasan | 2025-11-03 |
| rating | Bintang 1 sampai 5 | 5 |
| teks | Isi ulasan mentah | brg ok bgt, tp kurirnya lama bgt sampenya |
Kalau ada, tambahkan kolom kategori produk dan nama kurir. Dua kolom itu yang nanti bikin hasilnya bisa dipecah jadi keputusan.
Buang dulu ulasan kosong dan ulasan yang cuma emoji tanpa teks. Di dataset toko_berkah, 690 dari 4.870 baris awal masuk kategori itu, jadi tersisa 4.180 yang layak dianalisis.
Catat angka itu. Kamu bakal butuh pas ada yang nanya kenapa totalnya beda sama jumlah ulasan di dashboard marketplace.
Langkah 2: Bersihkan teks bahasa Indonesia
Pembersihan buat bahasa Indonesia beda dari bahasa Inggris. Yang paling berpengaruh: normalisasi singkatan.
import re
import pandas as pd
kamus_normalisasi = {
"bgt": "banget", "gk": "nggak", "ga": "nggak", "gak": "nggak",
"tp": "tapi", "brg": "barang", "pengirimannya": "pengiriman",
"sy": "aku", "yg": "yang", "dgn": "dengan", "blm": "belum",
"udh": "udah", "sdh": "udah", "bgs": "bagus", "jd": "jadi",
"cpt": "cepat", "lm": "lama", "mantul": "mantap",
}
def bersihkan(teks):
teks = str(teks).lower()
teks = re.sub(r"http\S+", " ", teks) # buang link
teks = re.sub(r"[^a-z\s]", " ", teks) # buang angka & simbol
kata = [kamus_normalisasi.get(k, k) for k in teks.split()]
return " ".join(kata).strip()
df["teks_bersih"] = df["teks"].apply(bersihkan)
Kamus di atas cuma contoh 16 kata. Versi yang aku pakai punya 150 pasangan, dan itu cukup nutup sebagian besar ulasan marketplace.
Satu hal yang sering orang lakukan tapi menurutku merugikan: hapus stopword.
Kata "gak", "kurang", dan "tapi" sering masuk daftar stopword bawaan. Padahal tiga kata itu justru penentu sentimen. Ulasan "bagus" dan "kurang bagus" bakal jadi sama persis kalau kamu buang kata "kurang".
Jadi kalau mau pakai stopword, saring dulu daftarnya secara manual.
Langkah 3: Pilih metode klasifikasinya
Ada tiga jalur yang realistis buat tim kecil.
Metode kamus kata
Kamu bikin daftar kata positif dan negatif, lalu hitung selisihnya. Paling cepat, paling murah, gak butuh internet.
positif = {"bagus", "mantap", "cepat", "murah", "ramah", "sesuai",
"puas", "rapi", "aman", "amanah", "recommended"}
negatif = {"jelek", "lama", "rusak", "kecewa", "mahal", "lambat",
"palsu", "bocor", "salah", "komplain", "penyok"}
negasi = {"nggak", "kurang", "bukan", "belum"}
def skor_sentimen(teks):
kata = teks.split()
skor = 0
for i, k in enumerate(kata):
bobot = 1
if i > 0 and kata[i-1] in negasi:
bobot = -1 # "kurang bagus" jadi negatif
if k in positif:
skor += bobot
elif k in negatif:
skor -= bobot
return skor
df["skor"] = df["teks_bersih"].apply(skor_sentimen)
df["label"] = pd.cut(df["skor"], bins=[-99, -1, 0, 99],
labels=["negatif", "netral", "positif"])
Bagian negasi itu penting. Tanpa itu, "kurang bagus" bakal dihitung positif.
Metode model terlatih
Ada beberapa model bahasa Indonesia yang bisa kamu pakai lewat library transformers, misalnya keluarga IndoBERT. Akurasinya lebih baik dari kamus, tapi butuh unduhan model dan sedikit setup.
Metode LLM
Kirim ulasan ke model bahasa besar dengan prompt yang jelas, minta output terstruktur. Ini yang paling akurat untuk sarkasme dan campuran bahasa daerah.
Kamu penganalisis ulasan toko online berbahasa Indonesia.
Untuk setiap ulasan, keluarkan JSON dengan field:
- sentimen: positif | netral | negatif
- aspek: array dari [produk, harga, pengiriman, kemasan, pelayanan]
- keluhan: ringkasan keluhan maksimal 8 kata, atau null
Aturan:
- Nilai sentimen dari isi teks, bukan dari rating bintang.
- Satu ulasan boleh punya lebih dari satu aspek.
- Kalau ulasan memuji produk tapi mengeluh pengiriman, sentimen = netral.
- Jangan mengarang aspek yang gak disebut.
Ulasan: "{teks}"
Kunci prompt ini ada di aturan keempat. Tanpa itu, ulasan campuran hampir selalu dilabeli positif.
Kalau kamu belum pernah pakai model bahasa buat kerjaan analisis, mulai dari LLM lokal untuk analisa data biar datanya gak keluar dari laptop.
Langkah 4: Validasi hasilnya
Ini langkah yang paling sering dilewati, dan paling menentukan.
Ambil 200 ulasan acak, label manual sendiri, lalu bandingkan sama hasil otomatis.
Ini hasilnya di dataset toko_berkah.
| Metode | Akurasi | Salah paling sering | Waktu proses 4.180 ulasan |
|---|---|---|---|
| Kamus kata | 71% | Sarkasme dan negasi jauh | 3 detik |
| Kamus + aturan negasi | 78% | Ulasan campuran pujian dan keluhan | 4 detik |
| LLM dengan prompt terstruktur | 91% | Ulasan sangat pendek tanpa konteks | 26 menit |
Selisih 71% ke 91% kelihatan besar, tapi lihat kolom terakhir. Kamus selesai dalam 3 detik, LLM butuh hampir setengah jam.
Buat eksplorasi awal, kamus udah cukup. Buat laporan yang dipakai ambil keputusan, naik ke LLM.
Yang paling bikin kaget: hampir semua kesalahan metode kamus terjadi di satu jenis kalimat, yaitu ulasan yang muji produk tapi ngeluhin kurir. Kamus baca 3 kata positif dan 1 kata negatif, lalu simpulkan positif.
Langkah 5: Pecah per aspek, bukan cuma total
Angka "78% ulasan positif" gak bisa dipakai buat apa-apa. Yang bisa dipakai: aspek mana yang paling sering dikeluhkan.
Ini hasil pemecahan aspek dari 4.180 ulasan toko_berkah, pakai metode LLM.
| Aspek | Disebut | Negatif | % negatif |
|---|---|---|---|
| Produk | 3.612 | 287 | 7,9% |
| Harga | 1.104 | 96 | 8,7% |
| Pengiriman | 2.045 | 642 | 31,4% |
| Kemasan | 988 | 203 | 20,5% |
| Pelayanan | 1.377 | 81 | 5,9% |
Sekarang gambarannya jelas. Produk dan pelayanan aman, pengiriman bermasalah di hampir sepertiga penyebutan.
Waktu aku pecah lagi per kurir, 71% dari 642 keluhan pengiriman itu terkait satu mitra kurir yang sama.
Itu satu keputusan yang jelas: evaluasi kontrak dengan kurir tersebut, atau alihkan pengiriman untuk kota tertentu.
Angka keluhan kemasan 20,5% juga menarik. Sebagian besar muncul di kategori produk cair, dan mayoritas menyebut kata "bocor". Solusinya murah: ganti seal dan tambah bubble wrap untuk satu kategori saja.
Langkah 6: Pantau tren, jangan cuma potret sekali
Simpan hasil labelnya ke tabel, lalu hitung persentase negatif per aspek per bulan.
Kalau kamu masih kerja di spreadsheet, COUNTIFS udah cukup buat ngitung jumlah ulasan negatif per aspek per bulan. Bagi hasilnya sama total penyebutan aspek itu.
Yang penting dipantau bukan angka absolutnya, tapi perubahannya. Kenaikan keluhan pengiriman dari 24% ke 31% dalam dua bulan itu sinyal, meskipun rating rata-rata gak bergerak sama sekali.
Taruh angkanya di dashboard yang sama dengan penjualan supaya kelihatan hubungannya.
Kesalahan umum di analisis sentimen ulasan Indonesia
Pakai kamus sentimen bahasa Inggris yang diterjemahkan. Kata "mantul", "amanah", dan "gercep" gak ada padanannya, dan itu tiga kata yang paling sering muncul di ulasan positif marketplace lokal.
Percaya rating sebagai label kebenaran. Kalau kamu melatih model pakai rating bintang sebagai label, kamu cuma bikin model yang menebak bintang. Padahal 22% ulasan bintang 5 memuat keluhan.
Buang tanda negasi saat pembersihan. Ini kesalahan teknis yang paling mahal. Sekali "nggak" hilang, seluruh analisis jadi bias positif.
Nyimpulin dari data terlalu sedikit. Kalau sebulan cuma 40 ulasan, satu pembeli yang kesal bisa nge-geser angka 5 poin. Baca manual aja.
Berhenti di persentase total. "78% positif" itu angka yang enak dilihat dan gak bisa ditindaklanjuti. Pecah per aspek, per kategori produk, per kurir.
Gak nyimpen teks aslinya. Kamu bakal butuh baca ulang ulasan asli saat ada yang mempertanyakan hasilnya. Simpan kolom mentahnya, jangan cuma versi bersihnya.
FAQ
Apakah rating bintang cukup, kenapa perlu analisis sentimen?
Rating bintang cuma kasih satu angka tanpa alasan. Dari 4.180 ulasan yang aku olah, 22% ulasan bintang 5 tetap memuat keluhan, biasanya soal pengiriman atau kemasan. Analisis sentimen per aspek bikin kamu tahu bagian mana yang bermasalah, jadi kamu bisa perbaiki proses spesifik, bukan cuma tahu skornya turun.
Metode mana yang paling akurat untuk bahasa Indonesia?
Dari uji di 200 ulasan berlabel manual, pendekatan LLM dengan prompt terstruktur dapat akurasi paling tinggi, disusul model terlatih khusus bahasa Indonesia, lalu kamus kata. Kamus paling murah dan cepat, tapi paling sering salah di kalimat sarkastik dan negasi seperti gak jelek. Mulai dari kamus buat prototipe, naik ke LLM kalau keputusannya penting.
Berapa banyak ulasan yang dibutuhkan supaya hasilnya bermakna?
Untuk melihat tren bulanan per aspek, minimal sekitar 300 ulasan per bulan supaya persentasenya gak goyang gara-gara segelintir komentar. Kalau tokomu baru dapat 40 ulasan sebulan, jangan bikin grafik tren. Baca satu per satu malah lebih berguna, dan simpan analisis otomatis sampai volumenya naik.
Gimana cara nangani slang dan singkatan di ulasan Indonesia?
Bikin kamus normalisasi kecil yang memetakan bentuk singkat ke bentuk baku, misalnya bgt jadi banget, gk jadi nggak, brg jadi barang. Dari pengalamanku, 150 pasangan kata udah menutupi sebagian besar kasus di ulasan marketplace. Simpan kamus itu di file terpisah supaya gampang ditambah tiap ketemu bentuk baru.
Apakah hasil analisis sentimen boleh dipakai untuk menilai kinerja tim?
Hati-hati. Akurasi metode terbaik pun jarang di atas 90%, jadi selalu ada ulasan yang salah label. Pakai hasilnya untuk melihat pola dan menemukan masalah, bukan untuk menghitung bonus. Kalau tetap mau dipakai sebagai indikator, sertakan margin kesalahan dan sediakan cara tim mengoreksi label yang keliru.
Coba di data kamu sendiri
Tiga hal yang perlu kamu bawa.
Satu, jangan percaya rating bintang sebagai gambaran kepuasan. Teksnya yang nyimpen informasinya.
Dua, validasi pakai 200 sampel manual sebelum percaya angka apa pun. Ini kerjaan dua jam yang nyelametin kamu dari kesimpulan salah.
Tiga, pecah per aspek. Angka total gak bisa ditindaklanjuti.
Minggu ini coba ekspor 300 ulasan terakhir dari tokomu, jalanin skrip kamus di atas, lalu baca 20 ulasan yang skornya paling negatif. Biasanya di situ pola masalahnya langsung kelihatan.
Kalau mau lanjut ke pemantauan otomatis, baca AI untuk deteksi anomali supaya lonjakan keluhan ketahuan tanpa kamu harus buka dashboard tiap hari.
Mau praktek langsung? Mulai latihan SQL gratis
Latihan interaktif, langsung di browser.
Artikel terkait
Python vs Tools AI buat Analis: Masih Perlu Belajar Coding?
Tools AI bisa bikin chart dan ringkas data dalam hitungan detik. Jadi Python masih perlu dipelajari analis di 2026? Jawabannya iya, tapi alasannya udah beda dari 3 tahun lalu.
Forecasting Penjualan dengan AI: Realistis atau Overhyped?
Aku tes forecasting AI di data penjualan 4 cabang toko grosir. Hasilnya lebih akurat dari tebakan manual, tapi meleset parah di satu titik yang mahal.
Analisa Sentimen dengan AI: Olah Review Pelanggan Jadi Insight
Cara ngolah ribuan review pelanggan jadi insight pakai AI, dari nyusun prompt yang konsisten, ngasih label, sampai ngubah hasilnya jadi rekomendasi yang bisa dieksekusi.