Spaces:
Build error
Build error
| import pickle | |
| import pandas as pd | |
| import numpy as np | |
| import streamlit as st | |
| import io | |
| def load_model(uploaded_file): | |
| """ | |
| Load an uploaded model file | |
| Args: | |
| uploaded_file: Streamlit UploadedFile object containing the model | |
| Returns: | |
| The loaded model object | |
| """ | |
| try: | |
| # Read the file | |
| bytes_data = uploaded_file.getvalue() | |
| # Load the model | |
| model = pickle.loads(bytes_data) | |
| return model | |
| except Exception as e: | |
| raise ValueError(f"Failed to load model: {str(e)}") | |
| def predict_price(model, input_df, with_confidence_interval=False, confidence_level=0.95, error_margin=0.15): | |
| """ | |
| Make prediction using the loaded model with optional confidence interval | |
| Args: | |
| model: The loaded XGBoost model | |
| input_df (pd.DataFrame): Processed input dataframe | |
| with_confidence_interval (bool): Whether to return confidence interval | |
| confidence_level (float): Confidence level (between 0 and 1) | |
| error_margin (float): Estimated error margin as a proportion of the prediction | |
| Returns: | |
| If with_confidence_interval is False: | |
| float: Predicted price | |
| If with_confidence_interval is True: | |
| tuple: (predicted_price, lower_bound, upper_bound) | |
| """ | |
| try: | |
| # Make prediction | |
| prediction = model.predict(input_df) | |
| predicted_price = float(prediction[0]) | |
| if with_confidence_interval: | |
| # Map confidence levels to z-scores | |
| z_scores = { | |
| 0.50: 0.674, | |
| 0.80: 1.282, | |
| 0.90: 1.645, | |
| 0.95: 1.96, | |
| 0.99: 2.576, | |
| 0.999: 3.291 | |
| } | |
| # Get the appropriate z-score (default to 95% if not found) | |
| z_score = z_scores.get(confidence_level, 1.96) | |
| # Calculate the margin of error | |
| margin = predicted_price * error_margin | |
| # Calculate the bounds of the confidence interval | |
| lower_bound = max(0, predicted_price - (z_score * margin)) | |
| upper_bound = predicted_price + (z_score * margin) | |
| return predicted_price, lower_bound, upper_bound | |
| else: | |
| return predicted_price | |
| except Exception as e: | |
| raise ValueError(f"Failed to make prediction: {str(e)}") | |