Forecasting

It’s All the Same, Only the Names Will Change

March 06, 2019

Last year, Itron was contracted by a small utility (about 11,000 customers) to construct a 10-year-ahead load forecast for capacity planning. I was one of the consultants on the project, and as we usually do when building long-term load forecasts for our clients, we employed our Statistically Adjusted End-Use (SAE) framework.

For those of you who aren’t familiar with our SAE framework, it’s an approach to long-term load forecasting that combines elements of both pure econometric models and traditional end-use models. The framework integrates the weather and economic drivers of an econometric model with the saturation and efficiency information of an end-use model. The end-use inputs are used to create powerful, structured, explanatory variables that get dropped in the right-hand side of a linear regression equation. Essentially, you get the best of both worlds, and this approach can be used to model monthly sales, energy or peaks.

You can see from the flow chart that an SAE model has three core terms: XCool, XHeat and XOther. These terms are designed to capture the relative impact of cooling, heating and other equipment on electric loads. The diagram below illustrates how these ingredients might be incorporated into a nice model of monthly sales.

The estimated coefficients (a, bc, bh and bo) can be thought of as statistical adjustment parameters that “true-up” the end-use assumptions to the measured energy use.

Aside from all that technical jargon, what’s especially nice about this framework is that no matter how big or small a utility is, this approach is applicable. Every year at our Annual Energy Forecasting meeting, also known as the Energy Forecasting Group (EFG) conference (hosted this year in Boston, April 3-5), we always kick things off with a discussion on the challenges currently facing load forecasters. Invariably, the list includes how to intelligently integrate new technologies and distributed resources into load forecasts and how to disentangle all the underlying drivers to correctly identify trends in use-per-customer. The SAE framework usually helps utilities obtain answers to these tough questions, or at least gets them started in the right direction because it enables them to decouple the impacts of weather, economics and end-uses on electricity consumption.

It is a tried-and-true method employed by a large number of utilities across North America to better understand the true underlying causes of growth, decline or lack thereof in a utility’s service territory. It’s not necessarily a “one size fits all” approach, but it is a “fits all” framework in that it can be tailored to best suit the objectives of a utility. And, needless to say, it definitely helped us build a reasonable long-term forecast for our client.

If this article peaked your interest and you’d like to learn more about our SAE framework, please feel free to reach out. We also host an SAE workshop the day prior to the start of our annual conference. Otherwise, I hope to see you at the meeting!

See the agenda and who is already registered at http://www.cvent.com/d/pbq67d. For more information on Itron’s Forecasting capabilities, click here.

Wystąpił błąd podczas przetwarzania szablonu.
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>