Forecasting

Creating a Nonlinear Growth Variable

March 08, 2016

I love straight lines. After all, the fastest route between any two points is a straight line. But in forecasting, going from point A to point B isn’t always as straightforward as we imagine.

There are two ways to capture long-term growth in electric sales. The best way is to correlate growth with a macroeconomic driver. The process involves endless iterations of testing alterative series until you find one that works and makes sense. For those of us with less patience, a linear trend is used, which captures the average growth over the historic period and apply it to the forecast. While this is easier, we understand that past growth won’t always happen in the future (thus the need for a macroeconomic driver).

Another option is to create a growth variable which captures growth based on a percent increase in each year. But, how do you create this growth variable in MetrixND? In Excel, creating a growth rate variable is as simple as creating the following formulas assuming that X is the growth rate.

C4=C3*(1+x)
C5=C4*(1+x).

For example, a one percent growth rate beginning with a base value of 1.0 will yield a value of 1.01 in the second period. In six periods, the value grows to 1.0510. These first six values are shown below.

Period

Index Value

1

1.0000

2

1.0100

3

1.0201

4

1.0303

5

1.0406

6

1.0510



In MetrixND, the same index can be created using four transform variables in a transformation tables. First, create two variables that serve as the base index value and the growth rate. Second, create a period index. Finally, create the growth index using the first three variables as shown below.

forecasting3

The transformation table result as well as a graph of the Growth index is shown in the final two pictures.

forecasting2

forecasting1

Keep the growth rate index in your toolbox of modeling techniques. You never know which technique will work best when developing your models and long-term forecasts.

Kesalahan terjadi ketika Memproses Template.
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>