04 / 08 · AI & ML

EcoMoveUS

Demand forecasting · Machine learning

Built a regression workflow to forecast bike-rental demand from weather, calendar, and temporal features, supporting fleet and staffing decisions.

Random Forest: R² 0.941 · RMSE 50.24

PythonPandasScikit-learn

01 — The brief

Problem & outcome.

The problem

EcoMoveUS needed to anticipate bike-rental demand ahead of time so it could plan fleet distribution and staffing, instead of reacting to demand after it happened and losing rides to empty stations.

The outcome

Trained and compared regression models on weather, calendar, and temporal features; the Random Forest model explained 94.1% of demand variance (R² 0.941, RMSE 50.24), giving a reliable forecast to plan fleet and staffing decisions around.

I cleaned and feature-engineered weather, calendar, and temporal data, then benchmarked a linear regression baseline against a Random Forest ensemble. Random Forest explained 94.1% of demand variance versus 41.5% for the linear baseline, with hour of day standing out as the single dominant driver.

02 — How it works

The model.

Average rentals by weekday and hour: the morning and evening commute peaks are the main driver the model picks up on.

Average rentals by weekday and hour: the morning and evening commute peaks are the main driver the model picks up on.

03 — Results

What the data said.

R²

variance explained · higher is better

Linear Regression0.415
Random Forest0.941

RMSE

prediction error · lower is better

Linear Regression157.63
Random Forest50.24

Feature importance

Random Forest · share of predictive power

Hour of day68.5%
Temperature (°C)7.9%
Business day7.0%
Feeling temperature (°C)4.0%
Season: Winter2.0%
Humidity (%)2.0%

04 — Approach

Step by step.

  1. Data cleaning

    Range checks on temperature, humidity, and wind speed; removal of invalid records and outliers.

  2. Feature engineering

    Expanded hour, weekday, season, and business-day fields; added interaction terms (Hour × Temperature, Temp × Humidity); one-hot encoded categorical variables.

  3. Modelling

    80/20 train-test split (random_state=42); Linear Regression baseline versus Random Forest (100 estimators).

  4. Evaluation

    Compared RMSE and R² on the held-out test set, then reviewed feature importance for interpretability.

05 — Highlights

At a glance.

  • R² 0.941 vs 0.415 baseline
  • RMSE 50.24
  • Hour of day: 68.5% importance
  • Interaction features
  • 80/20 held-out test
  • Feature-importance review