Spaces:
Sleeping
Sleeping
Upload 3 files
Browse files- app.py +64 -0
- real_estate_model.pkl +3 -0
- requirements.txt +3 -0
app.py
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import gradio as gr
|
| 2 |
+
import pandas as pd
|
| 3 |
+
import joblib
|
| 4 |
+
|
| 5 |
+
# 1. LOAD MODEL
|
| 6 |
+
print("Memuat model Real Estate Valuation...")
|
| 7 |
+
model = joblib.load('real_estate_model.pkl')
|
| 8 |
+
|
| 9 |
+
# 2. FUNGSI PREDIKSI REGRESI
|
| 10 |
+
def predict_price(house_age, distance_mrt, num_stores, latitude, longitude):
|
| 11 |
+
# Susun data input ke dalam DataFrame.
|
| 12 |
+
# PENTING: Sesuaikan nama kolom di bawah ini dengan nama kolom saat Anda melakukan training di Colab!
|
| 13 |
+
input_df = pd.DataFrame([[
|
| 14 |
+
house_age, distance_mrt, num_stores, latitude, longitude
|
| 15 |
+
]], columns=['X2 house age', 'X3 distance to the nearest MRT station', 'X4 number of convenience stores', 'X5 latitude', 'X6 longitude'])
|
| 16 |
+
|
| 17 |
+
try:
|
| 18 |
+
# Lakukan prediksi (menghasilkan angka kontinu/harga)
|
| 19 |
+
predicted_price = model.predict(input_df)[0]
|
| 20 |
+
|
| 21 |
+
# Format output sebagai harga
|
| 22 |
+
return f"### 🏡 Estimasi Harga Properti (per unit area): \n# **${predicted_price:,.2f}**"
|
| 23 |
+
except Exception as e:
|
| 24 |
+
return f"⚠️ Terjadi error saat prediksi: Cek apakah nama kolom input sudah sesuai dengan model Anda. Error: {str(e)}"
|
| 25 |
+
|
| 26 |
+
# 3. ANTARMUKA GRADIO
|
| 27 |
+
with gr.Blocks(theme=gr.themes.Soft()) as demo:
|
| 28 |
+
gr.Markdown("""
|
| 29 |
+
<h1 style='text-align: center;'>🏙️ AI Real Estate Valuation</h1>
|
| 30 |
+
<p style='text-align: center;'>Aplikasi Machine Learning (Regresi) untuk memprediksi harga wajar suatu properti berdasarkan fasilitas di sekitarnya.</p>
|
| 31 |
+
""")
|
| 32 |
+
|
| 33 |
+
with gr.Row():
|
| 34 |
+
with gr.Column(scale=1):
|
| 35 |
+
gr.Markdown("**📍 Spesifikasi & Lokasi Properti**")
|
| 36 |
+
house_age = gr.Slider(minimum=0, maximum=50, value=15, step=1, label="Usia Rumah (Tahun)")
|
| 37 |
+
distance_mrt = gr.Number(value=500, label="Jarak ke Stasiun MRT Terdekat (Meter)")
|
| 38 |
+
num_stores = gr.Slider(minimum=0, maximum=10, value=4, step=1, label="Jumlah Minimarket/Toko Terdekat")
|
| 39 |
+
|
| 40 |
+
gr.Markdown("**🗺️ Koordinat Geografis**")
|
| 41 |
+
latitude = gr.Number(value=24.97, label="Garis Lintang (Latitude)")
|
| 42 |
+
longitude = gr.Number(value=121.54, label="Garis Bujur (Longitude)")
|
| 43 |
+
|
| 44 |
+
btn_predict = gr.Button("💰 Prediksi Harga Wajar", variant="primary")
|
| 45 |
+
|
| 46 |
+
with gr.Column(scale=1):
|
| 47 |
+
gr.Markdown("**📊 Hasil Analisis AI**")
|
| 48 |
+
out_price = gr.Markdown()
|
| 49 |
+
|
| 50 |
+
gr.Markdown("""
|
| 51 |
+
---
|
| 52 |
+
**💡 Info Model:**
|
| 53 |
+
Model ini menggunakan algoritma Regresi untuk menemukan pola hubungan antara jarak fasilitas umum (seperti MRT dan minimarket) terhadap harga tanah/bangunan di area tersebut.
|
| 54 |
+
""")
|
| 55 |
+
|
| 56 |
+
# Hubungkan tombol
|
| 57 |
+
btn_predict.click(
|
| 58 |
+
fn=predict_price,
|
| 59 |
+
inputs=[house_age, distance_mrt, num_stores, latitude, longitude],
|
| 60 |
+
outputs=out_price
|
| 61 |
+
)
|
| 62 |
+
|
| 63 |
+
if __name__ == "__main__":
|
| 64 |
+
demo.launch()
|
real_estate_model.pkl
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:d80ad00ce97bc604a6340b7bc34d1794aed08083fc6ae034b367047ce59bcf60
|
| 3 |
+
size 5550785
|
requirements.txt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
pandas
|
| 2 |
+
scikit-learn
|
| 3 |
+
joblib
|