feature / app.py
Vinci96's picture
Upload 3 files
8e46f8d verified
import gradio as gr
import pandas as pd
import pickle
import numpy as np
# Load model from file
try:
model_filename = "apartment_price_model.pkl"
with open(model_filename, mode="rb") as f:
model = pickle.load(f)
model_loaded = True
except:
print("Model file not found. App will still run but predictions will be simulated.")
model_loaded = False
def predict(
rooms,
area,
pop,
pop_dens,
frg_pct,
emp,
tax_income,
room_per_m2,
luxurious,
temporary,
furnished,
area_cat_ecoded,
zurich_city,
listing_complexity
):
# Create input dataframe with all features
input_data = pd.DataFrame([[
rooms,
area,
pop,
pop_dens,
frg_pct,
emp,
tax_income,
room_per_m2,
luxurious,
temporary,
furnished,
area_cat_ecoded,
zurich_city,
listing_complexity
]], columns=[
'rooms',
'area',
'pop',
'pop_dens',
'frg_pct',
'emp',
'tax_income',
'room_per_m2',
'luxurious',
'temporary',
'furnished',
'area_cat_ecoded',
'zurich_city',
'listing_complexity'
])
# Make prediction
if model_loaded:
prediction = model.predict(input_data)[0]
else:
# If model not loaded, simulate a basic prediction
prediction = 1500 + (rooms * 500) + (area * 10)
return f"Predicted monthly rent: CHF {prediction:.2f}"
# Create Gradio interface
demo = gr.Interface(
fn=predict,
inputs=[
gr.Number(label="Number of Rooms", value=3),
gr.Number(label="Area (m²)", value=80),
gr.Number(label="Population", value=30000),
gr.Number(label="Population Density", value=5000),
gr.Number(label="Foreign Population Percentage", value=25),
gr.Number(label="Employment Rate", value=0.75),
gr.Number(label="Average Tax Income (CHF)", value=80000),
gr.Number(label="Room per m²", value=26.7),
gr.Number(label="Luxurious (0 or 1)", value=0),
gr.Number(label="Temporary (0 or 1)", value=0),
gr.Number(label="Furnished (0 or 1)", value=0),
gr.Number(label="Area Category Encoded (0, 1, or 2)", value=1),
gr.Number(label="Zurich City (0 or 1)", value=0),
gr.Number(label="Listing Complexity", value=0.5)
],
outputs="text",
title="Swiss Apartment Price Predictor",
description="Enter apartment details to predict the monthly rental price in Swiss Francs (CHF).",
examples=[
# 2-room apartment in Zurich
[2, 65, 39647, 2574, 34.5, 0.82, 92000, 32.5, 1, 0, 1, 1, 1, 0.65],
# 3.5-room apartment outside Zurich
[3.5, 85, 25000, 3200, 22.3, 0.78, 75000, 24.3, 0, 0, 0, 1, 0, 0.5],
# 1-room studio in Zurich
[1, 35, 15874, 7942, 38.2, 0.83, 88000, 35.0, 0, 1, 1, 0, 1, 0.45]
]
)
if __name__ == "__main__":
demo.launch()