import streamlit as st import pandas as pd from predict import InsuranceClaimPredictor # Initialize the predictor predictor = InsuranceClaimPredictor('model/insurance_claim_prediction_model.joblib') # Title of the Streamlit app st.title('Insurance Claim Prediction') # Sidebar for user input st.sidebar.header('User Input Parameters') def user_input_features(): age = st.sidebar.number_input('Age (in years)', min_value=0, max_value=100, value=40) sex = st.sidebar.selectbox('Sex', ['male', 'female']) bmi = st.sidebar.number_input('BMI (Body Mass Index)', min_value=0.0, max_value=50.0, value=25.3) children = st.sidebar.number_input('Number of Children', min_value=0, max_value=10, value=2) smoker = st.sidebar.selectbox('Smoker', ['yes', 'no']) region = st.sidebar.selectbox('Region', ['northeast', 'northwest', 'southeast', 'southwest']) charges = st.sidebar.number_input('Medical Charges ($)', min_value=0.0, max_value=100000.0, value=2900.0) data = {'age': age, 'sex': sex, 'bmi': bmi, 'children': children, 'smoker': smoker, 'region': region, 'charges': charges} features = pd.DataFrame(data, index=[0]) return features df = user_input_features() # Button for prediction if st.sidebar.button('Predict'): # Make prediction prediction = predictor.predict(df) # Display the prediction if prediction[0] == 1: st.sidebar.success('This person is likely to make an insurance claim.') else: st.sidebar.info('This person is less likely to make an insurance claim.') # Display user input st.subheader('User Input Parameters') # Add descriptions for each input st.write(""" - **Age**: The age of the individual. - **Sex**: The gender of the individual. - **BMI**: Body Mass Index, a measure of body fat based on height and weight. - **Number of Children**: Number of children or dependents. - **Smoker**: Whether the individual is a smoker. - **Region**: The geographical region where the individual resides. - **Medical Charges**: Annual medical charges billed. """) # Demo data st.subheader('Demo Data') # Sample data for demo demo_data = pd.DataFrame({ 'age': [23, 45], 'sex': ['female', 'male'], 'bmi': [22.0, 30.0], 'children': [0, 2], 'smoker': ['no', 'yes'], 'region': ['southeast', 'northwest'], 'charges': [2000.0, 12000.0], 'claim': ['No', 'Yes'] }) st.write(demo_data) # Notifications for analysis st.subheader('Analysis Dashboard') claimed_data = demo_data[demo_data['claim'] == 'Yes'] not_claimed_data = demo_data[demo_data['claim'] == 'No'] st.write(f"### Charges Analysis") st.write(f"- **Average charges for claims made**: ${claimed_data['charges'].mean():.2f}") st.write(f"- **Average charges for claims not made**: ${not_claimed_data['charges'].mean():.2f}")