import React, { useState, useEffect } from 'react'; import { Target, Search, Wrench, Cpu, BarChart, Rocket, CheckCircle, AlertTriangle, ArrowRight, Activity, Play } from 'lucide-react'; // --- MOCK DATA --- const rawData = [ { id: 'C001', tenure: 2, charge: 50.5, status: 'Aktif', churn: 'Ya' }, { id: 'C002', tenure: 24, charge: null, status: 'Aktif', churn: 'Tidak' }, { id: 'C003', tenure: 1, charge: 89.0, status: 'Nonaktif', churn: 'Ya' }, { id: 'C004', tenure: -5, charge: 20.0, status: 'Aktif', churn: 'Tidak' }, // Error data { id: 'C005', tenure: 12, charge: 65.0, status: 'Aktif', churn: 'Tidak' }, ]; const cleanData = [ { id: 'C001', tenure: 2, charge: 50.5, status: 1, churn: 1 }, { id: 'C002', tenure: 24, charge: 56.1, status: 1, churn: 0 }, // Imputed { id: 'C003', tenure: 1, charge: 89.0, status: 0, churn: 1 }, { id: 'C004', tenure: 5, charge: 20.0, status: 1, churn: 0 }, // Fixed abs { id: 'C005', tenure: 12, charge: 65.0, status: 1, churn: 0 }, ]; const steps = [ { id: 1, name: 'Business Understanding', icon: Target }, { id: 2, name: 'Data Understanding', icon: Search }, { id: 3, name: 'Data Preparation', icon: Wrench }, { id: 4, name: 'Modeling', icon: Cpu }, { id: 5, name: 'Evaluation', icon: BarChart }, { id: 6, name: 'Deployment', icon: Rocket }, ]; export default function App() { const [currentStep, setCurrentStep] = useState(1); const [isProcessing, setIsProcessing] = useState(false); const [dataCleaned, setDataCleaned] = useState(false); const [selectedModel, setSelectedModel] = useState(null); // Deployment Form State const [deployTenure, setDeployTenure] = useState(12); const [deployCharge, setDeployCharge] = useState(50); const [prediction, setPrediction] = useState(null); const handleNext = () => { if (currentStep < 6) setCurrentStep(c => c + 1); }; const handleSimulateProcessing = (callback, delay = 1500) => { setIsProcessing(true); setTimeout(() => { setIsProcessing(false); callback(); }, delay); }; const handlePredict = () => { handleSimulateProcessing(() => { // Simple mock logic for Decision Tree if (deployTenure < 6 && deployCharge > 60) { setPrediction('Tinggi (Akan Churn)'); } else { setPrediction('Rendah (Bertahan)'); } }, 800); }; return (
Simulasi Proyek Data Mining: Memprediksi Customer Churn (Pelanggan Berhenti)
Skenario Bisnis: Perusahaan Telekomunikasi "TelcoFast" menyadari banyak pelanggannya yang beralih ke kompetitor bulan lalu (Churn).
Tujuan Bisnis: Mencegah pelanggan pindah dengan memberikan promo khusus sebelum mereka memutuskan untuk berhenti.
Tujuan Data Mining: Membangun model yang dapat memprediksi pelanggan mana yang kemungkinan besar akan churn di bulan berikutnya berdasarkan data historis mereka.
Kita telah mengambil sampel data pelanggan. Mari kita lihat datanya. Apakah Anda melihat keanehan?
| ID Pelanggan | Lama Berlangganan (Bulan) | Tagihan Bulanan ($) | Status Sistem | Churn (Target) |
|---|---|---|---|---|
| {row.id} | {row.tenure < 0 ? {row.tenure} (Aneh) : row.tenure} | {row.charge === null ? KOSONG : row.charge} | {row.status} | {row.churn} |
Temuan: Terdapat nilai tagihan yang kosong (Null/Missing Value), nilai bulan negatif (Error input), dan format data teks ('Aktif'/'Ya') yang tidak bisa dibaca algoritma matematika.
Tahap ini memakan waktu paling lama di dunia nyata. Kita harus memperbaiki kesalahan yang ditemukan pada tahap sebelumnya.
{!dataCleaned ? (Klik tombol di bawah untuk menjalankan proses Data Cleaning & Transformation.
| ID | Lama (Bln) | Tagihan ($) | Status (Encoded) | Churn (Target) |
|---|---|---|---|---|
| {row.id} | {row.tenure} | {row.charge} | {row.status} | {row.churn} |
Data kita sudah memiliki target (kolom Churn: 1 atau 0). Algoritma mana yang harus kita pilih?
Teknik untuk mengelompokkan data tanpa label (Unsupervised). Mengelompokkan pelanggan berdasarkan kemiripan profil.
{selectedModel === 'kmeans' && (Teknik supervised learning untuk memprediksi kategori/label spesifik berdasarkan aturan keputusan (seperti pohon cabang).
{selectedModel === 'decisionTree' && (Model Decision Tree selesai dilatih! Apakah model ini bekerja dengan baik sebelum kita terapkan di dunia nyata?
Model dapat menebak dengan benar 87 dari 100 pelanggan.
Model dianggap sukses dan memenuhi Business Understanding awal. Siap untuk diterjunkan!
Model kini diintegrasikan ke sistem perusahaan. Mari coba prediksi untuk 1 pelanggan baru hari ini!
{prediction}
{prediction.includes('Tinggi') ? (Saran Sistem: Kirimkan voucher diskon 20% segera!
) : (Saran Sistem: Pelanggan aman, tidak perlu tindakan khusus.
)}