Anda punya ribuan baris transaksi di aplikasi kasir atau spreadsheet, tetapi keputusan stok dan promo masih diambil berdasarkan perasaan. Barang laris kehabisan di akhir pekan, sementara barang lain menumpuk di gudang berbulan-bulan. Masalahnya jarang karena kurang data, melainkan karena data itu tidak pernah diolah menjadi jawaban yang bisa ditindaklanjuti.
Kabar baiknya, Anda tidak perlu menjadi data scientist. Dengan data yang rapi, beberapa query sederhana, dan asisten AI seperti ChatGPT, Claude, atau Gemini, pemilik UMKM maupun developer yang membangun aplikasi bisnis bisa mendapatkan insight yang dulu hanya dimiliki perusahaan besar. Artikel ini membahas alurnya dari awal sampai insight benar-benar dipakai.
Apa yang Sebenarnya Bisa Dilakukan AI dengan Data Penjualan
Sebelum mulai, pahami dulu batasannya. Model bahasa (LLM) sangat bagus untuk menjelaskan pola, menyusun hipotesis, menulis query atau rumus, dan merangkum temuan dalam bahasa yang mudah dipahami. Namun LLM bukan kalkulator yang selalu akurat. Kalau Anda menempelkan 5.000 baris data mentah ke kolom chat, besar kemungkinan angka totalnya meleset.
Pendekatan yang aman adalah membagi pekerjaan: perhitungan dilakukan oleh database atau spreadsheet, sedangkan AI membantu membaca hasil agregat dan menyarankan tindakan. Fitur seperti analisis data di ChatGPT (yang menjalankan kode Python) memang bisa menghitung langsung dari file CSV, tetapi tetap periksa ulang angka penting dengan cara manual.
| Pendekatan | Cocok untuk | Kelebihan | Risiko |
|---|---|---|---|
| Pivot table Excel/Google Sheets | Data di bawah 50 ribu baris, pemilik usaha | Gratis, mudah dicek ulang | Manual, rawan salah rentang |
| Query SQL di database aplikasi | Aplikasi kasir/POS berbasis web | Akurat, bisa diotomasi | Butuh akses database dan sedikit SQL |
| Upload CSV ke asisten AI | Eksplorasi cepat, mencari ide | Cepat, bisa tanya jawab | Privasi data, angka perlu diverifikasi |
| Dashboard BI (Looker Studio, Metabase) | Pemantauan rutin harian/mingguan | Visual, otomatis diperbarui | Setup awal butuh waktu |
Langkah 1: Rapikan Data Sebelum Dianalisis
Hampir semua analisis yang keliru berawal dari data kotor. Nama produk yang sama ditulis tiga cara ("Kopi Susu", "kopi susu 250ml", "KOPSU"), transaksi retur tercatat sebagai penjualan, atau tanggal tersimpan sebagai teks. Sebelum bertanya apa pun ke AI, pastikan setiap transaksi minimal punya kolom berikut:
- tanggal dan jam dalam format tanggal yang valid, bukan teks bebas;
- kode produk (SKU) yang konsisten, bukan hanya nama;
- jumlah, harga satuan, dan diskon sebagai angka;
- nomor transaksi untuk mengelompokkan item dalam satu struk;
- status (lunas, batal, retur) agar transaksi batal bisa dikecualikan.
Jika Anda memakai aplikasi kasir, sebagian besar kolom ini biasanya sudah tersedia. Penjelasan lebih lengkap tentang struktur data kasir ada di artikel Apa Itu Aplikasi Kasir dan Cara Kerjanya. Bagi developer, desain tabel yang baik sejak awal menghemat banyak waktu, dan panduan merancang ERD sederhana bisa menjadi titik awal.
Langkah 2: Buat Ringkasan Agregat dengan SQL
Daripada mengirim data mentah ke AI, buat ringkasan dulu. Contoh di bawah memakai MySQL dengan asumsi tabel sales (header struk) dan sale_items (item per struk). Sesuaikan nama tabel dan kolom dengan aplikasi Anda.
-- Omzet dan kuantitas per produk, 90 hari terakhir
SELECT p.sku, p.name,
SUM(si.qty) AS total_qty,
SUM(si.qty * si.price - si.discount) AS omzet
FROM sale_items si
JOIN sales s ON s.id = si.sale_id
JOIN products p ON p.id = si.product_id
WHERE s.status = 'paid'
AND s.created_at >= CURDATE() - INTERVAL 90 DAY
GROUP BY p.sku, p.name
ORDER BY omzet DESC;
-- Jam ramai per hari dalam seminggu
SELECT DAYNAME(created_at) AS hari, HOUR(created_at) AS jam,
COUNT(*) AS jumlah_struk
FROM sales
WHERE status = 'paid'
GROUP BY hari, jam
ORDER BY jumlah_struk DESC
LIMIT 15;
-- Pasangan produk yang sering dibeli bersama
SELECT a.product_id AS produk_a, b.product_id AS produk_b,
COUNT(*) AS kali_bersama
FROM sale_items a
JOIN sale_items b ON a.sale_id = b.sale_id AND a.product_id < b.product_id
GROUP BY produk_a, produk_b
HAVING kali_bersama >= 10
ORDER BY kali_bersama DESC;
Query ketiga adalah versi sederhana dari market basket analysis. Di tabel besar, query ini bisa lambat, jadi batasi rentang tanggal dan pastikan ada index pada sale_id dan product_id. Tips optimasi lainnya dibahas di Optimasi Performa Query Eloquent Laravel.
Langkah 3: Tanyakan ke AI dengan Prompt yang Terarah
Setelah punya hasil agregat (biasanya puluhan baris, bukan ribuan), tempelkan ke asisten AI. Kualitas jawaban sangat bergantung pada konteks yang Anda berikan. Bandingkan prompt "analisis data ini" dengan template berikut:
Saya pemilik kedai kopi dengan 2 cabang. Berikut ringkasan penjualan
90 hari terakhir (CSV di bawah): sku, nama, total_qty, omzet.
Margin rata-rata minuman 60%, makanan 35%.
Tugas:
1. Kelompokkan produk ke kategori A (70% omzet), B (20%), C (10%).
2. Sebutkan 3 produk C yang paling layak dihentikan dan alasannya.
3. Usulkan 2 paket bundling dari data pasangan produk di bawah.
4. Tulis asumsi Anda secara eksplisit. Jangan mengarang angka
yang tidak ada di data.
[tempel CSV di sini]
Kalimat terakhir penting. Instruksi untuk menyebutkan asumsi dan tidak mengarang angka mengurangi risiko AI "mengisi kekosongan" dengan data fiktif.
Langkah 4: Prediksi Permintaan Secara Sederhana
Untuk sebagian besar UMKM, model prediksi yang rumit belum diperlukan. Rata-rata bergerak (moving average) penjualan 4 minggu terakhir, ditambah penyesuaian musiman, sering sudah cukup untuk menentukan titik pemesanan ulang. Contoh perhitungan sederhana:
- Hitung rata-rata penjualan harian produk X selama 28 hari terakhir. Misalkan hasilnya 12 unit per hari.
- Tentukan lead time pemasok, misalnya 3 hari.
- Tambahkan stok pengaman, misalnya 50% dari kebutuhan lead time: 12 x 3 x 0,5 = 18 unit.
- Titik pesan ulang = (12 x 3) + 18 = 54 unit. Saat stok menyentuh 54, waktunya memesan.
Angka di atas hanya contoh. Bila ada momen khusus seperti Ramadan, gajian, atau libur sekolah, minta AI membantu menyusun faktor pengali berdasarkan data tahun lalu milik Anda sendiri.
Untuk developer: otomasi laporan mingguan di Laravel
Jika aplikasi bisnis Anda berbasis Laravel, ringkasan di atas bisa dikirim otomatis setiap Senin pagi melalui scheduler. Kerangka sederhananya seperti ini:
// routes/console.php (Laravel 11)
use App\Jobs\SendWeeklySalesSummary;
use Illuminate\Support\Facades\Schedule;
Schedule::job(new SendWeeklySalesSummary)
->weeklyOn(1, '07:00')
->timezone('Asia/Jakarta');
Di dalam job, jalankan query agregat, kirim hasilnya ke API model AI untuk dibuatkan narasi singkat, lalu kirim lewat email atau WhatsApp. Karena memanggil API eksternal bisa lambat, jalankan sebagai job antrean seperti dijelaskan di Queue dan Job di Laravel untuk Tugas Berat. Kirim hanya data agregat, bukan nama atau nomor HP pelanggan.
Kesalahan Umum dan Cara Memperbaikinya
- Menganalisis omzet, bukan margin. Produk dengan omzet tertinggi belum tentu paling menguntungkan. Tambahkan kolom harga pokok agar AI bisa menghitung kontribusi laba.
- Lupa mengecualikan transaksi batal dan retur. Selalu filter berdasarkan status lunas.
- Mengambil kesimpulan dari periode terlalu pendek. Data satu minggu bisa terdistorsi oleh hujan, libur, atau promo. Gunakan minimal 8 sampai 12 minggu.
- Menempelkan data pelanggan ke AI publik. Hapus nama, email, dan nomor telepon. Untuk data sensitif, gunakan paket bisnis yang menjamin data tidak dipakai untuk pelatihan model.
- Menerima saran AI tanpa uji coba. Perlakukan saran sebagai hipotesis. Uji bundling di satu cabang selama dua minggu sebelum diterapkan ke semua.
Checklist Siklus Analisis Bulanan
- Ekspor atau query data penjualan lunas 90 hari terakhir.
- Cek duplikasi SKU dan nama produk yang tidak konsisten.
- Buat ringkasan per produk, per jam, dan pasangan produk.
- Minta AI membuat klasifikasi ABC dan usulan tindakan dengan asumsi tertulis.
- Verifikasi dua atau tiga angka kunci secara manual.
- Pilih maksimal tiga tindakan, catat tanggal mulai, lalu ukur hasilnya bulan depan.
Siklus kecil yang dijalankan rutin jauh lebih berguna daripada satu analisis besar yang tidak pernah diulang. Jika Anda sedang mencari aplikasi kasir atau pembukuan berbasis Laravel yang datanya sudah terstruktur untuk analisis seperti ini, katalog di GudangCode bisa menjadi titik awal.