Solar forecasts
Background
Solar generation forecasts are a core feature of Tensor Cloud. They enable automated operational asset management where Tensor Cloud trades on electricity markets and handles the submission of generation, sales, and procurement plans to the grid operator. For co-located battery storage, they are also a crucial input for creating economically optimized charge and discharge schedules.
Solar forecasts are generated every 30 minutes for all operational assets on Tensor Cloud in paid workspaces with different horizon lengths, depending on the time of the day.
Components and architecture
Similar to the price forecasts, the Tensor Cloud solar forecast service comprises two main components:
- the training service, which trains an individual forecast model for each asset
- the prediction service, which uses the trained models to predict solar generation for each asset
Training service
The model training service runs three times a week (Sunday, Tuesday, Thursday at 23:00 JST) and trains solar generation forecasts for assets for which new generation data since the last training run is available.
Model architecture
The models are trained with historical generation data provided by users and historical weather forecasts. Hyper parameters for each model are individually tuned to reach the best performance on a validation period (which is not used during training). The models create one-shot solar generation predictions for all 30-minute time slots between 05:00 and 20:00, covering a total of 30 slots in one go (15 hours at 2 slots/hour resolution). Any time slots outside this period are assumed to be zero.
The historical weather forecasts are sourced from different national weather agencies. For each asset, we identify the combination of weather sources that best fit the historical generation data. Up to 13 weather variables at hourly resolution are used from each source. The specific weather sources and the variables are detailed below.
Assets included must match these criteria:
- they are marked as operational
- the COD of the solar system is in the past
Training data
Tensor Cloud trains an individualized machine learning model for each asset in a workspace if enough historical data is available. Usually a machine-learning model can be created from 30 and 60 days of clean historical generation data for an asset. Tensor Cloud automatically excludes days with curtailment or with more than 1 consecutive hour of missing values from the training data set.
Model validation
For each asset, we first train up to five candidate models, each using different combinations of weather sources. Once trained, these models are evaluated on a test period consisting of the most recent data, which has remained untouched until this point. In parallel, a simulation model based on the same technology used in our solar simulation engine) is run for the same period. If none of the machine learning models outperforms the physical simulation model, they are rejected and the physical model will be used for prediction. Otherwise, the machine learning model with the best RMSE accuracy for the test period is accepted. RMSE is calculated considering every slot:
Where is the total number of time steps in the validation period, is the actual generation at time , and is the prediction.
This approach prevents faulty training data from affecting forecast quality, as Tensor Cloud would fall back to the simulation model in case of poor performance.
Prediction service
The prediction service runs every 30 minutes and predicts the generation for each asset over the prediction horizon, which is determined at each run based on the logic described below.
For each asset, the prediction service tries to load a trained model created by the training service. If there is no trained model (for example because there is no historical generation data for that asset, or because the asset has just been added to the platform), or the trained model did not pass validation, the physical simulation approach will be used instead.
Determining forecast horizon
We generate forecasts up to 14 days in the future for all assets, and we update them every 30 minutes. However, the frequency of updates for forecasts depend on how far in the future the forecasted time is. Longer term forecasts are updated less frequently because they are eventually updated by later forecasts anyway, rely on less frequent and less reliable weather inputs, and would generate excessive data if updated too frequently.
We guarantee that solar forecasts are never older than below time horizons:
- 30 minutes for any slot within a 12-hour horizon from now
- 1 hour for hours 12-24
- 2 hour for hours 24-48
- 6 hour for days 3 to 7
- 24 hours for days 8 to 14
Weather data
Sources
Our weather forecasts are aggregated from several national weather providers. Currently we consider the following sources when training our models.
National Weather Provider | Weather Model | Spatial Resolution | Temporal Resolution | Update Frequency |
---|---|---|---|---|
JMA | MSM | 0.05° (~5 km) | 1 hour | Every 3 hours |
NOAA NCEP | GFS | 0.11° (~13 km) | 1 hour | Every 6 hours |
ECMWF | IFS 0.25° | 0.25° (~25 km) | 3 hours | Every 6 hours |
UK Met Office | UKMO Global | 0.09° (~10 km) | 1 hour | Every 6 hours |
China Meteorological Administration (CMA) | GFS GRAPES | 0.125° (~15 km) | 3 hours | Every 6 hours |
Additional sources will be added in the future.
Variables
To train the models and to predict future generation we use weather data as predictor variables. We use these variables:
Variable | Unit | Time resolution |
---|---|---|
Air temperature at 2 m | °C | 1 hour |
Wind speed | m/s | 1 hour |
Global horizontal irradiance (GHI)* | W/m2 | 1 hour |
Diffuse horizontal irradiance (DHI)* | W/m2 | 1 hour |
Direct normal irradiance (DNI) | W/m2 | 1 hour |
Global tilted irradiance (GTI)* | W/m2 | 1 hour |
Direct solar radiation | W/m2 | 1 hour |
Relative humidity at 2 m | % | 1 hour |
Dew point temperature at 2 m | °C | 1 hour |
Precipitation | mm | 1 hour |
Cloud cover | % | 1 hour |
Surface pressure | hPa | 1 hour |
Apparent temperature | °C | 1 hour |
*Variables not available in the UKMO Global model.