import pandas as pd import streamlit as st import pickle from PIL import Image # Set page configuration st.set_page_config( page_title="Electric Bill Predictor", page_icon="⚡", layout="centered", initial_sidebar_state="expanded" ) # Custom CSS st.markdown(""" """, unsafe_allow_html=True) # Load model with caching and error handling @st.cache_resource def load_model(): try: with open("final_model_.pkl", "rb") as f: model = pickle.load(f) st.success("✅ Model loaded successfully!") return model except FileNotFoundError: st.error("❌ Model file not found! Please ensure 'final_model_.pkl' is in the correct directory.") return None except Exception as e: st.error(f"❌ Error loading model: {str(e)}") return None model = load_model() # App title and header st.markdown("

⚡ Smart Electric Bill Predictor

", unsafe_allow_html=True) st.markdown("Predict your monthly electricity bill based on appliance usage patterns and location.") # Main input section with st.expander("🏠 **Property & Usage Details**", expanded=True): st.markdown("
", unsafe_allow_html=True) col1, col2 = st.columns(2) with col1: st.subheader("Appliance Usage (Hours)") fan = st.slider("Fan Hours per Day", 5.0, 23.0, 13.0, 0.5, help="Daily usage hours of ceiling/table fans") fridge = st.slider("Refrigerator Hours", 17.0, 23.0, 18.0, 0.5, help="Refrigerator running hours (typically 18-24 hours)") ac = st.slider("Air Conditioner Hours", 0.0, 3.0, 1.0, 0.5, help="Daily AC usage hours (0 if not used)") tv = st.slider("Television Hours", 3.0, 22.0, 12.0, 0.5, help="Daily TV viewing hours") monitor = st.slider("Computer Monitor Hours", 1.0, 12.0, 8.0, 0.5, help="Daily computer usage hours") with col2: st.subheader("Location & Billing") city = st.selectbox("City", ['Hyderabad', 'Vadodara', 'Shimla', 'Mumbai', 'Ratnagiri', 'New Delhi', 'Dahej', 'Ahmedabad', 'Noida', 'Nagpur', 'Chennai', 'Faridabad', 'Kolkata', 'Pune', 'Gurgaon', 'Navi Mumbai'], help="Select your city for regional tariff rates") company = st.selectbox("Electricity Provider", ['Tata Power Company Ltd.', 'NHPC', 'Jyoti Structure', 'Power Grid Corp', 'Ratnagiri Gas and Power Pvt. Ltd. (RGPPL)', 'Adani Power Ltd.', 'Kalpataru Power', 'Orient Green', 'Sterlite Power Transmission Ltd', 'Neueon Towers / Sujana Towers Ltd.', 'KEC International', 'Indowind Energy', 'Unitech Power Transmission Ltd.', 'Bonfiglioli Transmission Pvt. Ltd.', 'SJVN Ltd.', 'Maha Transco – Maharashtra State Electricity Transmission Co, Ltd.', 'L&T Transmission & Distribution', 'Guj Ind Power', 'Torrent Power Ltd.', 'Reliance Energy', 'GE T&D India Limited', 'NTPC Pvt. Ltd.', 'Optibelt Power Transmission India Private Limited', 'CESC', 'Ringfeder Power Transmission India Pvt. Ltd.', 'Reliance Power', 'JSW Energy Ltd.', 'Sunil Hitech Eng', 'Toshiba Transmission & Distribution Systems (India) Pvt. Ltd.', 'Jaiprakash Power', 'TransRail Lighting', 'NLC India'], help="Select your electricity provider company") month = st.selectbox("Month", ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], index=7, # Default to August help="Select month for seasonal variation") monthly_hours = st.slider("Total Monthly Usage Hours", 95.0, 926.0, 826.0, 10.0, help="Sum of all appliance usage hours for the month") tariff_rate = st.slider("Electricity Tariff Rate (₹/kWh)", 7.4, 9.3, 8.2, 0.1, help="Current electricity rate per unit") st.markdown("
", unsafe_allow_html=True) # Prediction button and results if st.button("🔍 Predict Monthly Bill", use_container_width=True): if model is None: st.error("Cannot make prediction - model not loaded.") else: try: # Convert month name to number month_num = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"].index(month) + 1 input_data = pd.DataFrame([[fan, fridge, ac, tv, monitor, month_num, city, company, monthly_hours, tariff_rate]], columns=['Fan', 'Refrigerator', 'AirConditioner', 'Television', 'Monitor', 'Month', 'City', 'Company', 'MonthlyHours', 'TariffRate']) predicted_price = model.predict(input_data)[0] # Display result with visual impact st.markdown(f"""
Estimated Monthly Bill
₹ {predicted_price:,.2f} INR
Based on your usage patterns in {city} ({month})
""", unsafe_allow_html=True) # Add energy saving tips based on prediction if predicted_price > 5000: st.warning("💡 High Bill Alert: Consider reducing AC usage and switching to energy-efficient appliances.") elif predicted_price > 3000: st.info("💡 Moderate Bill: You might save by using fans instead of AC when possible.") else: st.success("💡 Efficient Usage: Your electricity consumption is well managed!") except Exception as e: st.error(f"❌ Prediction error: {str(e)}") # Additional information section with st.expander("ℹ️ About This Prediction"): st.markdown(""" **How this prediction works:** - The model analyzes your appliance usage patterns, location, and local electricity rates - Calculations consider seasonal variations in energy consumption - Predictions are based on machine learning models trained on historical billing data **For more accurate results:** - Provide exact usage hours from your electricity meter if available - Update tariff rates according to your latest electricity bill - Consider seasonal adjustments for AC/heating usage """) # Footer st.markdown(""" """, unsafe_allow_html=True)