Hybrid Scoring System for EV Charger Site Selection with LightGBM and Multi-Dimensional Composite Scoring

Mar 15, 2026

Building on my initial EV charger site selection model, I redesigned the platform from a single-model kWh predictor into a hybrid scoring system that combines LightGBM demand prediction with a six-dimension composite scoring layer. The model expanded from 19 to 58 features across 10 categories — adding network-specific competitive intelligence, amenity dwell-time compatibility, station reliability metrics, and state-level market indicators. The composite scoring layer then augments ML predictions with traffic quality, amenity fit, demographic strength, competitive dynamics, and equity dimensions, producing transparent 0-100 site suitability scores. A market opportunity bonus rewards supply-constrained markets, a competition penalty discounts saturated areas, and a greedy spacing algorithm constructs deployment portfolios that prevent cannibalization.

The Challenge

The initial prototype used a Random Forest model with 19 features to predict weekly kWh consumption, ranking sites into four percentile-based tiers. While functional, it had significant limitations:

  • Single opaque metric: A kWh prediction alone doesn’t capture whether a site has good anchor tenants, adequate traffic, or manageable competition
  • No competitive intelligence: The model treated all nearby charging stations identically, missing the distinction between same-network demand signals and cross-network competition
  • Missing amenity context: No consideration of whether nearby businesses generate dwell times compatible with DC fast charging sessions (15-45 minutes)
  • No portfolio construction: Sites were ranked independently with no mechanism to prevent selecting two locations that would cannibalize each other’s demand
  • Limited features: 19 features across 5 categories couldn’t capture the full complexity of site suitability — missing reliability metrics, temporal charging patterns, and state-level market conditions

The client needed a scoring system where each dimension was transparent and auditable — stakeholders could see not just “this site scores 78” but exactly how much of that score comes from demand signals vs. traffic quality vs. amenity fit.

Solution Architecture

I designed a three-stage pipeline: feature engineering, ML prediction, and composite scoring with portfolio optimization.

graph LR BQ[(BigQuery)] --> raw[Charging Network Data] DS[(Local Datasets)] --> features[Feature Engineering
58 Features, 10 Categories] raw --> features features --> train[LightGBM Training] features --> predict[Session Prediction
Candidate Sites] train --> predict predict --> composite[Composite Scoring
6 Weighted Dimensions] composite --> bonus[Market Opportunity
Bonus] bonus --> penalty[Competition
Penalty] penalty --> spacing[Network Spacing
Filter] spacing --> portfolio[Deployment
Portfolio]

Model Improvements

Target Variable Redesign:

I shifted the prediction target from weekly kWh to weekly charging sessions. Sessions decouple demand measurement from charging power levels — a station with many short top-up sessions and a station with fewer long charges serve different markets but may deliver similar kWh. Post-prediction, kWh is derived via a fleet-level average kWh/session ratio computed from non-outlier training data, maintaining business-interpretable energy forecasts.

Algorithm Upgrade:

I replaced the Random Forest with LightGBM, applying log1p transformation to the right-skewed session distribution. LightGBM’s leaf-wise growth with regularization handles the high-cardinality geospatial features more effectively. Hyperparameters were tuned via RandomizedSearchCV with 5-fold cross-validation.

Feature Expansion (19 to 58 features):

The feature set tripled in size, expanding from 5 to 10 categories. Five entirely new categories were added: network-specific neighborhood features (splitting performance metrics by the dominant network vs. other networks for competitive intelligence), temporal charging patterns (morning/evening shares, peak concentration index), station reliability metrics (failure rates), amenity dwell-time compatibility (from Overture Maps POI data), and state-level market indicators. Existing categories (demographics, traffic, EV registration, interaction features) were also deepened with additional metrics.

Network-Aware Competitive Intelligence:

The most impactful addition was splitting neighborhood features by network. Since the model trains on the dominant network’s station data, nearby same-network performance is a direct demand signal, while other-network performance provides a complementary signal about broader EV market health. This separation distinguishes between “area has strong demand for the target customer segment” (opportunity) and “area has strong competing infrastructure” (different competitive dynamic).

Amenity Dwell-Time Compatibility:

Using Overture Maps POI data with a BallTree spatial index, I engineered amenity features that capture how well nearby businesses align with DC fast charging sessions. The dwell-compatible ratio measures what fraction of nearby POIs have typical visit durations in the 15-45 minute sweet spot — matching the time needed for a meaningful fast charge. Shopping malls, warehouse clubs, and gyms rank highest as anchor tenants, while gas stations and convenience stores rank lowest because visits are too short.

Validation:

I added spatial GroupKFold cross-validation by state alongside standard random CV. Random CV can overfit to spatial autocorrelation — nearby stations have similar features and outcomes. Spatial CV with state-level grouping provides a more realistic estimate of how the model performs on truly unseen geographic regions, giving a conservative lower bound on out-of-sample accuracy.

Hybrid Scoring Architecture

The composite scoring layer transforms ML predictions into multi-dimensional site suitability scores. Each site receives a 0-100 composite score computed from six weighted dimensions:

Six Scoring Dimensions:

  • Demand: Blends the ML session prediction with observed supply-demand signals — nearby station utilization and market saturation ratios
  • Traffic: Road accessibility metrics including daily traffic volume, proximity to major roads, and road functional classification
  • Amenity: Anchor tenant quality, overall commercial attractiveness, dwell-time compatibility with fast charging, and walkable retail density
  • Demographics: Income levels, population density, and housing characteristics
  • Competition: Nearby station counts by network, inverted so fewer competitors score higher
  • Equity: Urban/rural classification for geographic balance

Each metric is percentile-rank normalized to 0-100, with optional log transforms for skewed distributions and inversion for lower-is-better metrics. Dimension weights are configurable, and when a metric is unavailable, sub-weights redistribute automatically among remaining metrics within the same dimension.

Market Opportunity Bonus:

Sites in supply-constrained markets receive an additive bonus on top of the composite score. The bonus triggers when nearby station utilization significantly exceeds the national average, scaling linearly between a floor and cap threshold. The system preferentially uses network-specific utilization where same-network neighbors exist, falling back to combined utilization otherwise. A minimum neighbor count requirement prevents false positives from isolated stations with anomalous utilization.

Competition Penalty:

Sites near large competitor stations receive a multiplicative penalty on their composite score, scaling with the size of the largest nearby competitor relative to the fleet maximum. Critically, sites that received a market opportunity bonus are exempt from the competition penalty — in supply-constrained markets, proximity to busy competitors validates demand rather than threatening it.

Portfolio Construction via Network Spacing:

A greedy sequential selection algorithm builds the deployment portfolio: select the highest-scored site, skip all candidates within a minimum spacing radius, select the next highest, repeat. This prevents cannibalization without requiring complex optimization — for the portfolio sizes involved, greedy selection produces near-optimal results with deterministic, reproducible output.

Key Design Decisions

Sessions as target instead of kWh:

  • kWh conflates demand volume with charging behavior (session duration, power level)
  • Sessions measure customer visits directly — the most actionable business metric
  • kWh is derived post-prediction via fleet-level ratio, maintaining energy forecasts without coupling the model to power-level assumptions

Hybrid scoring over pure ML ranking:

  • A single ML prediction, however accurate, is opaque — stakeholders can’t decompose “predicted 150 sessions/week” into actionable insights
  • Composite scoring makes each dimension visible: “this site scores 85 on demand but only 30 on amenity” immediately suggests a pairing opportunity or concern
  • Dimension weights are configurable parameters, not model internals — business priorities can shift without retraining

Market opportunity bonus exempts from competition penalty:

  • This addresses a common failure mode in scoring systems: sites near busy competitors get penalized for competition while simultaneously showing strong demand signals
  • High utilization at nearby stations means the market is supply-constrained — a new entrant captures spillover demand, not splits existing demand
  • The exemption creates a coherent scoring narrative: either the market is saturated (penalty applies) or supply-constrained (bonus applies), never both

Log-transformed target with LightGBM:

  • Weekly sessions are heavily right-skewed (many low-usage stations, few high-usage)
  • Log1p transformation normalizes the distribution, improving model fit across the full range
  • Predictions are inverse-transformed (expm1) before scoring, keeping business metrics in natural units

Technical Implementation

Data Pipeline:

The pipeline runs as three sequential steps: feature computation for existing stations (BigQuery source, BigQuery output), model training on the dominant network’s data, and site scoring with composite layer. Each step is independently runnable, enabling rapid iteration on the scoring layer without re-computing features or retraining the model.

BigQuery Integration:

Features and predictions flow through BigQuery using full table refreshes for training data and MERGE upsert via staging tables for incremental prediction updates. This supports multiple scoring runs against different candidate site lists without data loss. Deterministic site IDs ensure idempotent upserts.

Feature Computation:

A single compute_features() function serves both training and prediction paths, accepting an exclude_self parameter to prevent data leakage during training (a station’s own performance shouldn’t predict its own performance). Features are computed sequentially — demographics, neighborhood, traffic, amenity, EV registration, state-level, interaction — with each category’s function returning a new DataFrame that is concatenated via a shared apply_features() helper.

Results & Impact

  • Evolved site selection from single-model kWh prediction to hybrid ML + composite scoring system with 6 transparent dimensions
  • Expanded feature set from 19 to 58 features across 10 categories, adding network-specific competitive intelligence, amenity compatibility, and reliability metrics
  • Migrated from Random Forest to LightGBM with log-transformed session target and fleet-level kWh derivation
  • Designed market opportunity bonus identifying supply-constrained markets where new stations capture spillover demand
  • Implemented competition penalty with intelligent exemption for supply-constrained markets
  • Built portfolio construction algorithm preventing cannibalization via greedy spacing selection
  • Integrated BigQuery for production data pipeline with MERGE upsert for incremental updates
  • Added spatial cross-validation (GroupKFold by state) for realistic out-of-sample performance estimation
  • Tuned hyperparameters via RandomizedSearchCV

Technologies

Python, LightGBM, scikit-learn, pandas, NumPy, GeoPandas, Shapely, Google BigQuery, Overture Maps, BallTree Spatial Indices, Feature Engineering, Composite Scoring, Geospatial Analysis