| --- |
| license: mit |
| tags: |
| - regression |
| - scikit-learn |
| - linear-regression |
| - electricity-consumption |
| - tabular |
| library_name: scikit-learn |
| --- |
| |
| # Electricity Bill Regression Model |
|
|
| A Linear Regression model that predicts a household's daily electricity consumption (kWh) from appliance usage hours. Used to power a "what-if" electricity bill calculator, deployed as a Streamlit app. |
|
|
| ## Model Description |
|
|
| - **Model type:** Linear Regression (scikit-learn, OLS) |
| - **Task:** Regression - predicts `Daily_kWh` from 13 appliance usage-hour features |
| - **Preprocessing:** Features are scaled using `StandardScaler` before being passed to the model |
| - **Files included:** |
| - `linear_regression_model.pkl` - the trained regression model |
| - `scaler.pkl` - the fitted StandardScaler (must be used to transform any new input before prediction) |
| - `feature_columns.pkl` - the exact list and order of input feature names the model expects |
|
|
| ## Intended Use |
|
|
| Given a household's typical daily appliance usage hours, this model estimates daily electricity consumption. That estimate can then be scaled to a full month and passed through a fixed slab-based electricity tariff formula (LT Commercial tariff) to estimate a monthly bill. The tariff calculation itself is NOT part of this model, it is applied separately after prediction, since it is a fixed government rate structure, not a learned relationship. |
|
|
| ## Input Features |
|
|
| The model expects 13 numeric features, in this exact order (see `feature_columns.pkl` for the authoritative list): |
|
|
| `AC_Hours`, `Fridge_Hours`, `Heater_Hours`, `Fan_Hours`, `Light_Hours`, `NightLamp_Hours`, `LEDBulb_Hours`, `TV_Hours`, `WashingMachine_Hours`, `Chimney_Hours`, `Mixer_Hours`, `Grinder_Hours`, `InductionStove_Hours` |
|
|
| Each represents hours of use per day (0-24) for that appliance. |
|
|
| ## Training Data |
|
|
| Trained on a synthetically generated dataset simulating 9 years (2017-2025) of daily electricity usage for a single household, ~3,269 rows after cleaning (missing values dropped, invalid negative values removed, outliers removed using the IQR method). |
|
|
| Note: `Daily_kWh` in the training data was generated using a deterministic formula (hours x fixed appliance wattage), with no added noise. This means the model achieves a very high (near 100%) R-Squared score on this dataset, which reflects the noise-free nature of the training data rather than an unusually strong real-world model. On genuine smart-meter data with natural variance, performance would be expected to be lower. |
|
|
| ## How to Use |
|
|
| This model predicts only **daily electricity consumption (kWh)**. It does not predict the monthly bill directly, since bill calculation depends on a fixed government tariff formula (slab-based rates), not something a model should learn. The example below shows the complete pipeline: get the daily prediction from the model, scale it to a full month, then apply the tariff formula separately to get the estimated bill. |
|
|
| ```python |
| from huggingface_hub import hf_hub_download |
| import joblib |
| import pandas as pd |
| import calendar |
| |
| REPO_ID = "SelvaMech/electricity-bill-regression" |
| |
| model = joblib.load(hf_hub_download(repo_id=REPO_ID, filename="linear_regression_model.pkl")) |
| scaler = joblib.load(hf_hub_download(repo_id=REPO_ID, filename="scaler.pkl")) |
| feature_columns = joblib.load(hf_hub_download(repo_id=REPO_ID, filename="feature_columns.pkl")) |
| |
| # user_values must be in the same order as feature_columns |
| user_values = pd.DataFrame([[5, 24, 1, 8, 5, 8, 6, 3, 0.5, 0.5, 0.1, 0.1, 1]], columns=feature_columns) |
| |
| scaled_input = scaler.transform(user_values) |
| predicted_daily_kwh = model.predict(scaled_input)[0] |
| |
| # Scale to a full month (example: August 2026) |
| days = calendar.monthrange(2026, 8)[1] |
| monthly_units = predicted_daily_kwh * days |
| |
| # LT Commercial slab tariff - deterministic formula, not part of the model |
| if monthly_units <= 100: |
| bill = monthly_units * 5.5 + 120 |
| elif monthly_units <= 250: |
| bill = (100 * 5.5) + (monthly_units - 100) * 6.5 + 120 |
| else: |
| bill = (100 * 5.5) + (150 * 6.5) + (monthly_units - 250) * 7.2 + 120 |
| |
| print(f"Predicted Daily kWh : {predicted_daily_kwh:.2f}") |
| print(f"Predicted Monthly Units : {monthly_units:.2f}") |
| print(f"Estimated Bill : Rs {bill:.2f}") |
| ``` |
|
|
| ## Limitations |
|
|
| - Trained on synthetic, single-household data, not real smart-meter readings. |
| - Assumes a fixed electricity tariff rate across all years; real tariffs are revised periodically. |
| - Does not account for appliance efficiency (star ratings) or seasonal usage patterns as separate model inputs. |
| - Should not be used as a substitute for an actual utility bill; it is an educational estimation tool. |
|
|
| ## Live Demo |
|
|
| Try the deployed calculator here: [(https://ebbillpredictionsampledeployment-bpne9za7xb7p2kkp7eejza.streamlit.app)] |
|
|
| ## Author |
|
|
| Built by Selvanaayagam Ravy as part of a personal Data Analytics/AI portfolio project. |
| Full training code and dataset details: [https://github.com/selvanaayagam-tech/EB_billprediction_sample_deployment] |
| |