S1 Sistem Informatika - FSTT ISTN Jakarta | Semester Ganjil 2025/2026
Rule-Based Automation adalah metode membuat sistem yang bisa mengambil keputusan otomatis dengan mengikuti serangkaian aturan logika (rules) yang sudah didefinisikan sebelumnya.
Berbeda dengan AI/Machine Learning yang "belajar" dari data, rule-based system menggunakan aturan eksplisit yang dibuat oleh manusia dalam format IF-THEN.
Lampu lalu lintas adalah contoh sempurna rule-based system:
Aturan ini sederhana, pasti, dan tidak berubah-ubah. Sistem tidak perlu "belajar" dari jutaan data kecelakaan untuk tahu kapan harus berhenti!
| Komponen | Fungsi | Contoh |
|---|---|---|
| Rule (Aturan) | Menjelaskan hubungan IF-THEN antara kondisi dan aksi | "IF user login dari lokasi baru β THEN kirim OTP" |
| Facts (Fakta) | Data atau kondisi nyata yang terjadi saat ini | Lokasi login user = Jakarta (biasanya Bandung) |
| Inference Engine | Otak sistem yang membaca rules dan memutuskan tindakan | Engine mengevaluasi semua aturan dan eksekusi yang match |
| Knowledge Base | Tempat penyimpanan semua aturan dan fakta | Database berisi 100+ rules untuk berbagai skenario |
IF user_type == "NEW":
IF first_purchase_value > 200000:
THEN give_voucher_50k AND assign_membership_silver
ELSE:
THEN give_voucher_20k
ELSE IF user_type == "RETURNING":
IF inactive_days > 90:
THEN send_winback_campaign
ELSE IF total_purchases > 10:
THEN upgrade_to_gold_membership
Tokopedia ingin membuat sistem yang secara otomatis memberikan promo, diskon, atau notifikasi kepada pengguna berdasarkan perilaku mereka, tanpa perlu manual intervention dari tim marketing.
| Skenario | Kondisi | Aksi yang Diinginkan |
|---|---|---|
| User Baru | Belum pernah membeli | Berikan voucher welcome Rp50,000 |
| Pembelian Besar | Total belanja > Rp1,000,000 | Diskon 10% + Free shipping |
| User Loyal | Transaksi β₯ 10x dalam 3 bulan | Upgrade ke Gold member |
| Cart Abandonment | Item di cart > 24 jam belum checkout | Kirim reminder + voucher 5% |
| Inactive User | Tidak login > 30 hari | Email "We miss you" + voucher Rp30,000 |
# Python Implementation - Rule-Based Promo System
class PromoRuleEngine:
def __init__(self):
self.rules = []
self.actions_log = []
def add_rule(self, name, condition, action, priority=1):
"""Menambahkan aturan baru ke sistem"""
self.rules.append({
'name': name,
'condition': condition,
'action': action,
'priority': priority
})
# Sort by priority (higher first)
self.rules.sort(key=lambda x: x['priority'], reverse=True)
def evaluate(self, user_data):
"""Evaluasi semua aturan terhadap data user"""
actions_taken = []
for rule in self.rules:
if rule['condition'](user_data):
result = rule['action'](user_data)
actions_taken.append({
'rule': rule['name'],
'action': result
})
self.actions_log.append({
'user_id': user_data['id'],
'rule': rule['name'],
'timestamp': datetime.now()
})
return actions_taken
# Initialize engine
engine = PromoRuleEngine()
# RULE 1: Welcome Voucher untuk User Baru
def condition_new_user(data):
return data['total_transactions'] == 0
def action_new_user(data):
return "π Kirim voucher Rp50,000 untuk pembelian pertama"
engine.add_rule("Welcome New User", condition_new_user, action_new_user, priority=5)
# RULE 2: Diskon untuk Pembelian Besar
def condition_big_purchase(data):
return data['cart_value'] > 1000000
def action_big_purchase(data):
discount = int(data['cart_value'] * 0.10)
return f"π° Berikan diskon 10% = Rp{discount:,} + Free shipping"
engine.add_rule("Big Purchase Discount", condition_big_purchase, action_big_purchase, priority=4)
# RULE 3: Upgrade Gold Member untuk Loyal User
def condition_loyal_user(data):
return data['total_transactions'] >= 10
def action_loyal_user(data):
return "β Upgrade ke Gold membership dengan benefits eksklusif"
engine.add_rule("Gold Membership Upgrade", condition_loyal_user, action_loyal_user, priority=3)
# RULE 4: Cart Abandonment Reminder
def condition_cart_abandoned(data):
return data['cart_items'] > 0 and data['hours_since_cart'] > 24
def action_cart_abandoned(data):
return "π Kirim notifikasi reminder + voucher diskon 5%"
engine.add_rule("Cart Reminder", condition_cart_abandoned, action_cart_abandoned, priority=4)
# RULE 5: Reactivation Campaign untuk Inactive User
def condition_inactive(data):
return data['days_since_login'] > 30 and data['total_transactions'] > 0
def action_inactive(data):
return f"π Kirim email 'Kami Rindu Kamu' + voucher Rp30,000"
engine.add_rule("Reactivation Campaign", condition_inactive, action_inactive, priority=4)
# Test with sample users
test_users = [
{
'id': 1,
'name': 'Budi',
'total_transactions': 0,
'cart_value': 0,
'cart_items': 0,
'hours_since_cart': 0,
'days_since_login': 1
},
{
'id': 2,
'name': 'Ani',
'total_transactions': 15,
'cart_value': 1500000,
'cart_items': 3,
'hours_since_cart': 2,
'days_since_login': 5
},
{
'id': 3,
'name': 'Citra',
'total_transactions': 5,
'cart_value': 450000,
'cart_items': 2,
'hours_since_cart': 30,
'days_since_login': 10
}
]
for user in test_users:
print(f"\nπ€ Evaluasi untuk: {user['name']}")
actions = engine.evaluate(user)
if actions:
for action in actions:
print(f" β [{action['rule']}] {action['action']}")
else:
print(" βΉοΈ Tidak ada aksi untuk user ini")
| Metrik | Before | After | Improvement |
|---|---|---|---|
| New User Conversion | 12% | 28% | +133% |
| Cart Abandonment Rate | 68% | 42% | -38% |
| User Reactivation | 15% | 34% | +127% |
| Average Order Value | Rp 485,000 | Rp 720,000 | +48% |
| Marketing Team Workload | 100% | 35% | -65% |
π‘ ROI: Marketing automation menghemat 200 jam kerja/bulan dan meningkatkan revenue 45%
| Aspek | Rule-Based System | AI/Machine Learning |
|---|---|---|
| Cara Kerja | Berdasarkan logika dan aturan eksplisit yang dibuat manusia | Belajar pola dari data historis secara otomatis |
| Fleksibilitas | Kaku - perlu update manual jika kondisi berubah | Adaptif - otomatis adjust berdasarkan data baru |
| Kecepatan Implementasi | β‘ Cepat (beberapa hari) | π Lambat (beberapa minggu/bulan) |
| Data Requirement | β Tidak perlu data training | β Butuh data besar (ribuan/jutaan records) |
| Transparansi | β Sangat jelas - bisa lihat exact rules | β "Black box" - sulit explain keputusannya |
| Maintainability | β οΈ Sulit jika rules terlalu banyak (hundreds) | β Lebih mudah - model auto-update |
| Akurasi | Depends on quality of rules (60-80%) | Bisa sangat tinggi dengan data cukup (85-95%) |
| Cost | π° Low (hanya development time) | π°π°π° High (data, compute, ML expertise) |
| Best For |
β’ Logika bisnis yang jelas dan pasti β’ Compliance & regulation β’ MVP/prototype β’ Decision yang simple |
β’ Pola kompleks dan dinamis β’ Personalisasi mendalam β’ Prediksi berbasis historical patterns β’ Large-scale recommendations |
Gunakan Rule-Based JIKA:
Gunakan AI/ML JIKA:
π― Best Practice: HYBRID APPROACH
Kombinasikan keduanya! Gunakan rules untuk business logic yang pasti, dan ML untuk personalisasi yang adaptif.
Bank BCA ingin mendeteksi transaksi yang mencurigakan (potential fraud) secara real-time dan mengambil tindakan preventif otomatis.
| Red Flag | Threshold | Risk Level |
|---|---|---|
| Transaksi dari lokasi baru | Negara berbeda dalam 24 jam | β οΈ Medium |
| Jumlah transaksi tidak biasa | > 3x rata-rata transaksi bulanan | π΄ High |
| Multiple failed attempts | > 3 PIN salah dalam 1 jam | π΄ High |
| Transaksi di merchant berisiko | Merchant dengan fraud rate > 5% | β οΈ Medium |
| Rapid consecutive transactions | > 5 transaksi dalam 10 menit | π΄ High |
β Bad: Satu rule giant dengan 10+ conditions
β Good: Pecah jadi beberapa rules kecil yang focused
Tidak semua rules sama penting. Assign priority untuk handle conflicts:
Track setiap rule execution untuk:
Setup schedule untuk review rules:
Treat rules seperti code:
Best of both worlds:
Contoh Hybrid:
1. ML model predict user akan churn (90% confidence)
2. Rule check: IF prediction_confidence > 80% AND user_value > "high"
3. THEN send personalized retention offer
4. Rule override: IF user already got offer in last 30 days, THEN skip
Scenario: Universitas ISTN ingin sistem otomatis untuk memberikan beasiswa kepada mahasiswa
Instruksi:
Deliverables:
Topik: "Kapan Menggunakan Rule-Based vs Machine Learning"
Deadline: 2 minggu (presentasi minggu depan)
Β© 2025 ISTN Jakarta - Fakultas Sains Terapan dan Teknologi
Dosen: Oni Bibin Bintoro, Riadi Marta Dinata