Seluruh chapter konsep sebelumnya — dari terminologi, preprocessing, validasi silang, hingga praktik machine learning yang bertanggung jawab — kini diuji dalam satu proyek utuh. Kita akan membangun model regresi yang memprediksi harga rumah di lima kota Jabodetabek dari data listing tabular: membangkitkan dataset sendiri, menginterogasi kualitasnya, merancang pipeline preprocessing yang aman dari data leakage, membandingkan tiga keluarga model lewat GridSearchCV, dan menutup semuanya dengan evaluasi holdout serta laporan tertulis untuk pemangku kepentingan. Proyek ini juga menjadi tempat keputusan-keputusan kecil yang tidak pernah muncul di contoh mainan: kolom mana yang diimputasi, pencilan mana yang dipertahankan, dan metrik mana yang dipakai untuk memutuskan model final. Seluruh keputusan tersebut hidup dalam lima skrip Python yang dapat dijalankan ulang dengan hasil identik.

Apa yang Kita Bangun #

Deliverable proyek ini konkret, bukan sekadar narasi. Pertama, dataset data/rumah.csv berisi 400 baris listing dengan lima fitur dan satu target harga_juta. Kedua, pipeline preprocessing yang memisahkan perlakuan fitur numerik dan kategorikal di dalam satu objek ColumnTransformer. Ketiga, hasil pembandingan tiga model — Ridge, Lasso, dan RandomForestRegressor — dengan hyperparameter terbaiknya. Keempat, evaluasi holdout dengan MAE, RMSE, dan R2. Kelima, laporan plain text di laporan/laporan-harga-rumah.txt yang merangkum data, preprocessing, metrik, dan temuan dalam satu berkas yang bisa dibaca tanpa alat bantu apa pun.

Struktur folder proyek mengikuti pembagian kerja tersebut. Kode hidup semua berada di src/, dikelompokkan dengan nomor urut sesuai tahapan; setiap bagian menyematkan skrip terkait sehingga pembaca bisa mengunduh dan menjalankannya langsung.

text
proyek-regresi-harga-rumah/
├── _index.md
├── bagian/
│   ├── part-1-eksplorasi-data/
│   ├── part-2-preprocessing-dan-pipeline/
│   ├── part-3-pelatihan-dan-optimasi-model/
│   └── part-4-evaluasi-dan-laporan/
├── data/
│   └── rumah.csv
├── src/
│   ├── 01_bangun_data.py
│   ├── 02_eksplorasi.py
│   ├── 03_preprocessing.py
│   ├── 04_model.py
│   └── 05_laporan.py
└── laporan/
    └── laporan-harga-rumah.txt

Peta Empat Bagian #

Proyek dipecah menjadi empat bagian yang dirancang seperti sprint berurutan; setiap bagian menutup satu kelompok keputusan dan membuka kelompok berikutnya.

BagianFokus keputusanSkripKeluaran utama
Bagian 1: Eksplorasi DataKualitas data, pola awal, pencilan01_bangun_data.py, 02_eksplorasi.pydata/rumah.csv dan temuan awal
Bagian 2: Preprocessing dan PipelineImputasi, scaling, encoding, keamanan leakage03_preprocessing.pyMatriks fitur 9 kolom siap model
Bagian 3: Pelatihan dan Optimasi ModelPembandingan model, tuning hyperparameter04_model.pyModel juara hasil GridSearchCV
Bagian 4: Evaluasi dan LaporanMetrik holdout, diagnostik sisaan, laporan05_laporan.pyLaporan final dan keputusan model

Urutan ini bukan formalitas. Temuan eksplorasi menentukan resep preprocessing; resep preprocessing menentukan ruang kandidat model; dan seluruh pilihan baru dianggap sah setelah lolos data uji yang tidak pernah disentuh. Jika salah satu mata rantai dilewati — misalnya langsung melompat ke GridSearchCV tanpa memeriksa nilai hilang — keputusan akhir berdiri di atas asumsi yang tidak pernah diverifikasi.

Dataset: Listing Jabodetabek Sintetis #

Dataset proyek ini sintetis dan dibangkitkan sendiri, dengan tiga alasan yang disengaja. Pertama, reproduksibilitas penuh: pembangkit memakai np.random.default_rng(42) sehingga setiap pembaca mendapatkan berkas CSV yang identik bit demi bit, dan laporan yang sama pula. Kedua, kejujuran evaluasi: karena fungsi pembangkit harga diketahui, kita tahu pasti kapan model berhasil mendekati struktur sebenarnya dan kapan hasil bagus hanya kebetulan. Ketiga, kendali penuh atas kekusahan data: nilai hilang dan pencilan realistis disisipkan pada posisi yang diketahui, sehingga Bagian 1 punya bahan nyata untuk dikerjakan.

Lima fitur yang tersedia adalah luas_m2, kamar_tidur, usia_bangunan, jarak_pusat_km, dan kota (Jakarta, Bogor, Depok, Tangerang, Bekasi). Harga mengikuti fungsi linear atas fitur numerik ditambah penambah harga per kota dan derau Gaussian — struktur yang cukup sederhana untuk dipahami, namun cukup realistis untuk melatih disiplin proses. Data portal properti nyata tentu lebih kompleks; proyek ini memprioritaskan kejelasan alur kerja.

Kontrak Determinisme dan Cara Menjalankan #

Setiap skrip memakai path relatif (data/rumah.csv, laporan/...) dan wajib dijalankan dari root folder proyek, karena folder data/ dan laporan/ memang berada di root. Seluruh sumber ketidakpastian dikunci: random_state=42 pada setiap estimator dan pemisahan data, n_jobs=1 pada RandomForestRegressor, tanpa stempel waktu pada keluaran. Skrip tercepat selesai di bawah sepuluh detik dan skrip terberat — grid search — tetap di bawah sepuluh detik pada mesin biasa. Jalankan dua kali dan keluarannya identik; itulah standar yang dipertahankan di seluruh course ini.

bash
cd proyek-regresi-harga-rumah
python3 src/01_bangun_data.py
python3 src/02_eksplorasi.py

Peta sudah tergelar dan kontrak sudah jelas. Pekerjaan pertama menanti di Bagian 1: Eksplorasi Data — kita bangkitkan dataset, periksa kualitasnya, dan gali pola awal yang akan menentukan seluruh keputusan preprocessing di bagian-bagian berikutnya.

Referensi Resmi #