Forecasting

Timing is Everything

February 26, 2020

When evaluating peak loads, load forecasters commonly focus on the severity of peak producing weather, considering meteorological factors such as temperature, humidity and wind speed. The peak loads are then weather adjusted to represent what the peak load would have been had the peak producing weather been normal.

However, the recent proliferation of AMI data facilitates deeper analysis. In particular, this data supports the decomposition of system peak loads into class-level and new technology (e.g. solar PV, EV and battery storage). Decomposing the peak load unveils the fact that while the severity of the peak producing weather is impactful, the time at which the peak producing weather occurs is also important, particularly in areas where the base load shape has a profound seasonal pattern.

In this blog, we will discuss two examples of the impact of timing on the winter and summer peaks, respectively.

Case 1: The Extreme Winter Peak
Case 1 considers a utility located in the heart of the Canadian prairies. Here, the winter low temperatures are frigid, approaching -40 degrees F. As most reasonable people would guess, this is a winter peaking utility. However, because the majority of customers in this area have natural gas – while the electric space heating load (driven by furnace fans) contributes to the winter peak – it is actually not the primary driving factor. Rather, the combination of business class, residential lighting and residential furnace fan loads contribute to drive the winter peak, which typically occurs just after 5 p.m.

Located far north from the equator, this area experiences significant shifts in hours of light.
  • On Dec. 21, the sun set at 4:56 p.m. local time
  • On Jan. 21, the sun set at 5:32 p.m. local time
  • On Feb. 21, the sun will set at 6:25 p.m. local time

The sunset time oscillation creates a narrow window in mid-December during which the base load is particularly high at 5 p.m. In addition, holiday lights also provide additional lift during this period. Therefore, a -40-degree F day which hits in this window drives a much stronger peak than it would if it occurs in February or March.

Case 2: The Extreme Summer Peak
Case 2 considers a utility located in the Northwest of the United States. Here, the summer temperatures approach 105 degrees F, and as one might expect, this is a summer peaking utility. However, while the air conditioning load is high, the combination of strong air conditioning and irrigation loads drives the peak.

Irrigation loads have a profound seasonal pattern, reaching peak levels in late June and early July. This produces a narrow window during which a hot day can produce an extremely strong peak. While the extreme, hot weather tends to hit in late July and August, it can occur earlier, coincident with the irrigation season peak.

Therefore, a 105-degree F day which hits in this window drives a much stronger peak than it would if it occurs in late July or August.

Quantifying Sensitivity
Both of these cases lend themselves toward bottom-up hourly approaches to peak forecasting. AMI data supports the disaggregation of system load data into the relevant components.

Weather simulations support the quantification of peak load sensitivities to both peak producing weather severity and timing. As the above cases demonstrate, both of these factors prove influential in determining both the 50:50 and 90:10 peak forecasts.

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>