{"id":34947848,"url":"https://github.com/csakig/bike-sharing-demand-analytics","last_synced_at":"2026-04-10T11:01:28.458Z","repository":{"id":329571904,"uuid":"1120052960","full_name":"csakig/bike-sharing-demand-analytics","owner":"csakig","description":"Advanced analytics on Bike Sharing data using Random Forest, Gradient Boosting, and SARIMAX forecasting.","archived":false,"fork":false,"pushed_at":"2025-12-20T12:16:53.000Z","size":1945,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-22T16:38:47.413Z","etag":null,"topics":["data-science","machine-learning","portfolio","python","scikit-learn","time-series"],"latest_commit_sha":null,"homepage":"","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/csakig.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-20T11:44:04.000Z","updated_at":"2025-12-20T12:19:31.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/csakig/bike-sharing-demand-analytics","commit_stats":null,"previous_names":["csakig/bike-sharing-demand-analytics"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/csakig/bike-sharing-demand-analytics","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/csakig%2Fbike-sharing-demand-analytics","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/csakig%2Fbike-sharing-demand-analytics/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/csakig%2Fbike-sharing-demand-analytics/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/csakig%2Fbike-sharing-demand-analytics/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/csakig","download_url":"https://codeload.github.com/csakig/bike-sharing-demand-analytics/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/csakig%2Fbike-sharing-demand-analytics/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31639524,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-10T07:40:12.752Z","status":"ssl_error","status_checked_at":"2026-04-10T07:40:11.664Z","response_time":98,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["data-science","machine-learning","portfolio","python","scikit-learn","time-series"],"created_at":"2025-12-26T20:49:28.514Z","updated_at":"2026-04-10T11:01:28.453Z","avatar_url":"https://github.com/csakig.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🚲 Bike Sharing Demand Analytics\n### 🚀 Optimizing Fleet Operations with Machine Learning \u0026 Time Series Forecasting\n\n![Python](https://img.shields.io/badge/Python-3.8%2B-blue?style=for-the-badge\u0026logo=python\u0026logoColor=white)\n![Scikit-Learn](https://img.shields.io/badge/scikit--learn-F7931E?style=for-the-badge\u0026logo=scikit-learn\u0026logoColor=white)\n![Statsmodels](https://img.shields.io/badge/Statsmodels-Time_Series-blueviolet?style=for-the-badge)\n![Status](https://img.shields.io/badge/Status-Completed-success?style=for-the-badge)\n\n---\n\n## 📸 Executive Summary\nThis project aims to solve a critical logistics problem: **predicting bike availability demand to optimize rebalancing operations.**\n\nBy analyzing historical usage patterns, I developed a machine learning pipeline that not only predicts exact rental counts ($R^2=0.94$) but also forecasts future demand trends using SARIMAX, enabling proactive fleet management.\n\n### 🏆 Key Visual Insight\n*The analysis revealed distinct \"Commuter\" vs. \"Leisure\" patterns, which became the primary feature for the model.*\n\n![Demand by Hour](demand_by_hour.png)\n*(Fig 1. Hourly demand clearly separates working days (orange) from weekends (blue), dictating the feature engineering strategy.)*\n\n---\n\n## 📊 Business Value \u0026 Recommendations\nBased on the data, the following operational changes are recommended:\n\n| Insight | Actionable Recommendation | Expected Impact |\n| :--- | :--- | :--- |\n| **Rush Hour Spikes** | Deploy rebalancing trucks at **9:00 AM** and **3:00 PM** (post-peak). | Prevent station \"starvation\" during commuting hours. |\n| **Weather Sensitivity** | Push notifications/discounts when **Temp \u003c 10°C** or **Humidity \u003e 80%**. | Stabilize revenue during low-demand weather conditions. |\n| **Seasonal Trends** | Schedule heavy maintenance in **Spring** (lowest demand). | Maximize fleet availability during Fall/Summer peaks. |\n\n---\n\n## 🧠 Technical Approach\n\n### 1. Data Processing \u0026 EDA\n* **Feature Engineering:** extracted `hour`, `day_of_week`, and `season` from timestamps.\n* **Outlier Detection:** Removed anomalies in windspeed and humidity data.\n* **Correlation Analysis:** Identified Temperature as the strongest driver of demand.\n\n![Correlation / Feature Importance](feature_importance.png)\n\n### 2. Modeling Strategy\nI tested four algorithms to find the optimal balance between accuracy and interpretability.\n\n| Model | Task | Performance Metric | Verdict |\n| :--- | :--- | :--- | :--- |\n| **Random Forest** | Regression | **$R^2 = 0.94$** | 🏆 **Best Performer** (Selected) |\n| **Gradient Boosting** | Classification | **F1-Score = 0.92** | Excellent for Peak Detection |\n| **Linear Regression** | Regression | $R^2 = 0.39$ | Underfitted (Non-linear data) |\n\n### 3. Forecasting (Time Series)\nUsing **SARIMAX (Seasonal ARIMA with eXogenous variables)**, I modeled the weekly seasonality to project demand for the next 30 days.\n\n![30 Day Forecast](forecast_30_days.png)\n*(Fig 3. The model (red) successfully captures the weekly cycle and growth trend with a narrow 95% confidence interval.)*\n\n---\n\n## 🛠️ Installation \u0026 Usage\n\n# 1. Clone the repo\ngit clone [https://github.com/csakig/bike-sharing-demand-analytics.git](https://github.com/csakig/bike-sharing-demand-analytics.git)\n\n# 2. Install dependencies\npip install -r requirements.txt\n\n# 3. Run the analysis\njupyter notebook Bike_Sharing_Demand_Analysis.ipynb\n\n---\n\n📂 Repository Structure\nBike_Sharing_Demand_Analysis.ipynb: Main analysis notebook.\n\ndata.csv: Historical dataset.\n\ndemand_by_hour.png: Visualization asset.\n\nfeature_importance.png: Visualization asset.\n\nforecast_30_days.png: Visualization asset.\n\n---\n\nAuthor: csakig | Aspiring Data Scientist\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcsakig%2Fbike-sharing-demand-analytics","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcsakig%2Fbike-sharing-demand-analytics","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcsakig%2Fbike-sharing-demand-analytics/lists"}