Memprediksi Kesuksesan Usaha Kuliner dengan Data dan SMOTE
Tutorial membangun model machine learning untuk memprediksi kesuksesan usaha kuliner menggunakan data Google Maps, TF-IDF, dan SMOTE.
Apa yang membuat sebuah usaha kuliner berhasil? Lokasi? Rasa? Nama usaha? Pertanyaan seperti ini mendorong saya untuk mencoba menjawabnya menggunakan pendekatan data dan machine learning.
Saya menggunakan data dari Google Maps yang mencakup lebih dari 2.000 usaha kuliner di Purwokerto. Setiap entri mencakup nama, rating, jumlah ulasan, kategori, serta keberadaan website dan nomor telepon. Tujuannya: membangun model untuk memprediksi apakah sebuah usaha termasuk “sukses” atau tidak.
1. Mendefinisikan Sukses dan Menghadapi Tantangan Data
1.1 Definisi Sukses
Agar bisa dianalisis secara supervised learning, saya definisikan usaha “sukses” sebagai yang memiliki rating >= median (4.6) dan jumlah ulasan >= median (15).
df['Is_Successful'] = ((df['Rating'] >= 4.6) & (df['Review Count'] >= 15)).astype(int)
Hasilnya mengejutkan: hanya 23% usaha tergolong sukses. Ini menciptakan masalah klasik dalam machine learning: data tidak seimbang (imbalanced).
1.2 Solusi dengan SMOTE
from imblearn.over_sampling import SMOTE
from imblearn.pipeline import Pipeline
Untuk mengatasi ketidakseimbangan, saya menggunakan SMOTE yang membuat sampel sintetis dari kelas minoritas. Teknik ini memungkinkan model lebih adil dalam mempelajari pola usaha sukses. Apakah ini selalu solusi terbaik? Tidak selalu. Tapi dalam kasus ini, SMOTE memberikan hasil yang cukup signifikan.
2. Membangun Pipeline Preprocessing
2.1 Strategi Multi-Fitur
Saya menggabungkan tiga tipe fitur yang berbeda:
- Numerik: keberadaan website (
has_website
) dan nomor telepon (has_phone
) - Kategorikal: kategori usaha (
Category
) - Tekstual: nama usaha (
Name
) diproses dengan TF-IDF
2.2 Implementasi Pipeline
text_transformer = TfidfVectorizer(max_features=50, stop_words=['di','dan','rm','cabang'])
categorical_transformer = OneHotEncoder(handle_unknown='ignore')
Semua fitur digabung dalam ColumnTransformer
, lalu masuk ke pipeline yang mencakup SMOTE dan Random Forest. Pipeline ini memastikan preprocessing konsisten antara data training dan testing.
3. Model Training dan Optimasi
Saya menggunakan RandomForestClassifier
sebagai model utama, dituning menggunakan RandomizedSearchCV
dengan 5-fold cross-validation.
{'n_estimators': 200,
'min_samples_split': 2,
'min_samples_leaf': 2,
'max_features': 'sqrt',
'max_depth': 30}
Apakah semua kombinasi dicoba? Tidak. Tapi dengan 50 iterasi, cukup banyak ruang untuk eksplorasi tanpa menghabiskan waktu terlalu lama.
4. Evaluasi dan Interpretasi Hasil
4.1 Performa Model
Model diuji pada 20% data (427 baris) dengan hasil yang cukup menarik:
- Akurasi: 73%
- F1-macro: 63%
- AUC: 0.687
Tidak Sukses: precision=0.83 | recall=0.81
Sukses : precision=0.43 | recall=0.46
Masih ada gap antara recall kelas minoritas dan mayoritas. Tapi dibanding tanpa SMOTE, perbaikan ini terasa. Apakah sudah cukup untuk keputusan bisnis? Belum tentu.
4.2 Faktor Penentu Kesuksesan
Berikut fitur paling penting menurut Random Forest:
1. has_website (0.075)
2. angkringan (dari TF-IDF Name)
3. has_phone (0.055)
4. pak (TF-IDF Name)
5. es (TF-IDF Name)
6. ayam, nasi, soto, sate (TF-IDF Name)
7. Category_Restaurant, Coffee shop, Cafe
Kata-kata yang muncul dalam nama usaha seperti “angkringan”, “ayam”, atau “pak” punya bobot prediktif tinggi. Apakah ini cerminan dari positioning usaha? Sangat mungkin.
5. Kesimpulan dan Refleksi
Eksperimen ini memberi beberapa pelajaran penting:
- Nama usaha bukan sekadar estetika, tapi punya sinyal branding yang kuat
- Informasi sederhana seperti “punya website” cukup berpengaruh pada prediksi kesuksesan
- SMOTE terbukti membantu menangani bias terhadap kelas mayoritas
Apakah model ini sudah cukup andal untuk keputusan bisnis? Belum. Tapi cukup untuk menjadi alat bantu awal dalam memahami pola kesuksesan usaha kuliner.
Saya jadi penasaran, bagaimana jika kita punya data lokasi, harga menu, atau foto makanan? Mungkin prediksi bisa jauh lebih akurat. Untuk sekarang, setidaknya kita bisa membaca sinyal-sinyalnya lebih baik, dan itu awal yang menjanjikan.
Related Posts

Review Aplikasi Play Store: Analisis Ringan untuk Riset dengan Python
Pelajari cara menganalisis ulasan aplikasi Google Play Store menggunakan Python untuk jurnal, skripsi, penelitian, atau tugas akhir.

Arsitektur Web: Dari Astro, Next.js, WordPress, hingga Blogger
Pandangan tentang berbagai pendekatan arsitektur web, dari Astro, Next.js, Hugo, hingga WordPress dan Blogger. Mana yang cocok untuk kebutuhan Anda?

Mengambil Data Jurnal Tanpa Ribet: Cerita di Balik Otomatisasi dengan Python
Capek salin data dari banyak jurnal satu per satu? Saya juga. Di artikel ini, saya bagikan pengalaman membuat alat otomatis dengan Python untuk mengumpulkan data artikel jurnal dari ribuan situs OJS. Cocok untuk peneliti, mahasiswa, atau siapa pun yang butuh data