Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import joblib | |
| import numpy as np | |
| import pandas as pd | |
| from models.svr import NuSVRInsuranceModel | |
| from models.randomforest import RandomForestInsuranceModel | |
| from models.XGBoost import XGBoostInsuranceModel | |
| from models.knn import KNNInsuranceModel | |
| from models.linreg import LinearRegressionInsuranceModel | |
| from models.polyreg import PolynomialRegressionInsuranceModel | |
| import os | |
| # ------------------------------------------------------- | |
| # Placeholder code to load pre-trained models | |
| # (Replace 'model_NuSVR.joblib', etc. with your actual file paths) | |
| # ------------------------------------------------------- | |
| model_nusvr = joblib.load(os.path.join('.', 'NuSVRInsuranceModel.joblib')) | |
| model_xgb = joblib.load(os.path.join('.', 'XGBoostInsuranceModel.joblib')) | |
| model_knn = joblib.load(os.path.join('.', 'KNNInsuranceModel.joblib')) | |
| model_rf = joblib.load(os.path.join('.', 'RandomForestInsuranceModel.joblib')) | |
| model_lr = joblib.load(os.path.join('.', 'LinearRegressionInsuranceModel.joblib')) | |
| model_pr = joblib.load(os.path.join('.', 'PolynomialRegressionInsuranceModel.joblib')) | |
| # # Dictionary to map model choice to the actual loaded model | |
| models_dict = { | |
| "NuSVR": model_nusvr, | |
| "Gradient Boost Regressor": model_xgb, | |
| "KNN": model_knn, | |
| "Random Forest": model_rf, | |
| "Linear Regression": model_lr, | |
| "Polynomial Regression": model_pr | |
| } | |
| # ------------------------------------------------------- | |
| # Simple label encodings or numeric mappings: | |
| # - gender: {"male":0, "female":1} | |
| # - diabetic: {"No":0, "Yes":1} | |
| # - smoker: {"No":0, "Yes":1} | |
| # - region: {"southwest":0, "southeast":1, "northwest":2, "northeast":3} | |
| # Adjust this to however you pre-processed the data for training! | |
| # ------------------------------------------------------- | |
| region_mapping = {"southwest": 0, "southeast": 1, "northwest": 2, "northeast": 3} | |
| gender_mapping = {"male": 0, "female": 1} | |
| yes_no_mapping = {"No": 0, "Yes": 1} | |
| def predict_insurance_claim( | |
| model_choice, | |
| age, | |
| gender, | |
| bmi, | |
| blood_pressure, | |
| diabetic, | |
| children, | |
| smoker, | |
| region | |
| ): | |
| # Convert categorical values using the same logic used during training | |
| try: | |
| gender_val = gender_mapping[gender.lower()] | |
| diabetic_val = yes_no_mapping[diabetic] | |
| smoker_val = yes_no_mapping[smoker] | |
| region_val = region_mapping[region.lower()] | |
| except KeyError: | |
| return "Invalid input for categorical field." | |
| # Construct a single-row DataFrame with the correct column names | |
| user_data = { | |
| 'age': [age], | |
| 'gender': [gender], | |
| 'bmi': [bmi], | |
| 'bloodpressure': [blood_pressure], | |
| 'diabetic': [diabetic], | |
| 'children': [children], | |
| 'smoker': [smoker], | |
| 'region': [region] | |
| } | |
| user_df = pd.DataFrame(user_data) | |
| chosen_model = models_dict[model_choice] | |
| d = chosen_model.preprocessing(user_df) | |
| y_pred = chosen_model.predict(d) | |
| return float(y_pred[0]) | |
| # ------------------------------------------------------- | |
| # Gradio Interface | |
| # ------------------------------------------------------- | |
| def build_interface(): | |
| # Dropdown to choose model | |
| with gr.Row(): | |
| model_dropdown = gr.Dropdown( | |
| choices=["NuSVR", "Gradient Boost Regressor", "KNN", "Random Forest", 'Linear Regression', 'Polynomial Regression'], | |
| value="NuSVR", | |
| label="Select Model" | |
| ) | |
| with gr.Row(): | |
| # Numeric inputs | |
| age_input = gr.Number(value=39.0, label="Age") | |
| bmi_input = gr.Number(value=23.2, label="BMI") | |
| bp_input = gr.Number(value=91.0, label="Blood Pressure") | |
| children_input = gr.Number(value=0, label="Children") | |
| # Dropdowns for categorical data | |
| gender_input = gr.Dropdown(choices=["male", "female"], value="male", label="Gender") | |
| diabetic_input = gr.Dropdown(choices=["No", "Yes"], value="Yes", label="Diabetic") | |
| smoker_input = gr.Dropdown(choices=["No", "Yes"], value="No", label="Smoker") | |
| region_input = gr.Dropdown(choices=["southwest", "southeast", "northwest", "northeast"], | |
| value="southeast", | |
| label="Region") | |
| # Output | |
| output_label = gr.Textbox(label="Predicted Claim") | |
| # Interface | |
| demo = gr.Interface( | |
| fn=predict_insurance_claim, | |
| inputs=[ | |
| model_dropdown, | |
| age_input, | |
| gender_input, | |
| bmi_input, | |
| bp_input, | |
| diabetic_input, | |
| children_input, | |
| smoker_input, | |
| region_input | |
| ], | |
| outputs=output_label, | |
| title="Insurance Claim Prediction" | |
| ) | |
| return demo | |
| if __name__ == "__main__": | |
| interface = build_interface() | |
| interface.launch() | |