Forecasting

Developing a Combined Operational Load Forecast

January 16, 2020

With the deep penetration of non-grid connected renewable generation and storage, electric vehicle charging, smart load control and time-of-use rates now come with greater load volatility. This in turn leads to eroding operational load forecast performance. To improve system operator’s confidence with the load forecasting process, there has been a movement toward developing and presenting an ensemble of load forecasts, which could include forecasts designed to handle the impact of rooftop solar PV and electric vehicle charging, forecasts that incorporate the impact of TOU pricing and smart load control, and load forecasts produced under alternative weather forecasts.

If the alternative load forecasts are clustered closely around each other then system operations may have greater confidence in the system conditions predicted by the ensemble. On the other hand, a forecast ensemble with a wide range could raise doubts about the forecasted system conditions, leading to system operators taking actions to hedge against the worst-case scenario. In effect, the forecast ensemble quantifies the plausible range of loads that are given uncertainty around future meteorological conditions such as temperatures, wind and solar conditions, and uncertainty around price sensitive loads and load control actions.

Within this new world of ensemble forecasting, there remains the reality that most downstream applications (e.g. transmission and distribution energy management systems and market models) require as an input only one load forecast. This means the load forecasting process needs a way of combing the alternative forecasts into a single “optimal” forecast that is then used for downstream processing.

Much of the academic literature on combining forecasts starts with the seminal paper “The Combination of Forecasts”, by J. M. Bates and C. W. J. Granger (source Operational Research Society, Vol. 20, No. 4 (Dec. 1969), pp.451-469). Bates and Granger start their analysis by observing that a combined forecast formed by taking a simple average of two alternative forecasts outperforms the two alternative forecasts. They then asked, if a 50/50 weighting of two independently generated forecasts can improve the overall forecast performance, is it possible to define a method for computing an “optimal” weighting scheme that leads to a combined forecast with the smallest mean squared forecast error?

I have drafted a white paper that provides a high-level review of some of the academic literature on combining forecasts and put forth a recommendation for how to develop an optimal forecast given an ensemble of alternative load forecasts. I am looking for comments on the white paper draft. If you are interested in providing your comments, please send an email to frank.monforte@itron.com.

The final white paper should be available later in 2020.

Si è verificato un errore nell'elaborarazione del modello.
The following has evaluated to null or missing:
==> authorContent.contentFields  [in template "44616#44647#114455" at line 9, column 17]

----
Tip: It's the step after the last dot that caused this error, not those before it.
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: contentFields = authorContent.content...  [in template "44616#44647#114455" at line 9, column 1]
----
1<#assign 
2	webContentData = jsonFactoryUtil.createJSONObject(author.getData()) 
3	classPK = webContentData.classPK 
4/> 
5 
6<#assign 
7authorContent = restClient.get("/headless-delivery/v1.0/structured-contents/" + classPK + "?fields=contentFields%2CfriendlyUrlPath%2CtaxonomyCategoryBriefs") 
8contentFields = authorContent.contentFields 
9categories=authorContent.taxonomyCategoryBriefs 
10authorContentData = jsonFactoryUtil.createJSONObject(authorContent) 
11friendlyURL = authorContentData.friendlyUrlPath 
12authorCategoryId = "0" 
13/> 
14 
15<#list contentFields as contentField > 
16   <#assign  
17	 contentFieldData = jsonFactoryUtil.createJSONObject(contentField)  
18	 name = contentField.name 
19	 /> 
20	 <#if name == 'authorImage'> 
21	    <#if (contentField.contentFieldValue.image)??> 
22	        <#assign authorImageURL = contentField.contentFieldValue.image.contentUrl />	 
23			</#if> 
24	 </#if> 
25	 <#if name == 'authorName'> 
26	    <#assign authorName = contentField.contentFieldValue.data /> 
27			<#list categories as category > 
28         <#if authorName == category.taxonomyCategoryName> 
29				     <#assign authorCategoryId = category.taxonomyCategoryId /> 
30				 </#if> 
31      </#list> 
32	 </#if> 
33	 <#if name == 'authorDescription'> 
34	    <#assign authorDescription = contentField.contentFieldValue.data /> 
35			 
36	 </#if> 
37	  
38	 <#if name == 'authorJobTitle'> 
39	    <#assign authorJobTitle = contentField.contentFieldValue.data /> 
40			 
41	 </#if> 
42 
43</#list> 
44 
45<div class="blog-author-info"> 
46	<#if authorImageURL??> 
47		<img class="blog-author-img" id="author-image" src="${authorImageURL}" alt="" /> 
48	</#if> 
49	<#if authorName??> 
50		<#if authorName != ""> 
51			<p class="blog-author-name">By <a id="author-detail-page" href="/w/${friendlyURL}?filter_category_552298=${authorCategoryId}"><span id="author-full-name">${authorName}</span></a></p> 
52			<hr /> 
53		</#if> 
54	</#if> 
55	<#if authorJobTitle??> 
56		<#if authorJobTitle != ""> 
57			<p class="blog-author-title" id="author-job-title" >${authorJobTitle}</p> 
58			<hr /> 
59		</#if> 
60	</#if> 
61	<#if authorDescription??> 
62		<#if authorDescription != "" && authorDescription != "null" > 
63			<p class="blog-author-desc" id="author-job-desc">${authorDescription}</p> 
64			<hr /> 
65		</#if> 
66	</#if> 
67</div>