Seasonality and Promotions as they Impact Inventory Management

Charles J. Bodenstab, October 1997

General Discussion
Products that exhibit seasonality can, if not handled properly, have a major adverse impact on inventory management and planning. Unless the forecast for these products recognizes and deals with the seasonality, the forecast will lag demand as the product enters its strong selling season, and it will just as seriously overstate the demand as the season drops off. The adverse impact on the inventory from these flawed forecasts can be quite serious--inadequate fill rates during the strong season and excess inventory during the off season. Typically, however, the inventory managers load the system with excess inventory all year long to offset the fill rate problem, thereby having excess inventory in the off season and a massive excess inventory during the period of slow demand.

Seasonality can occur for a variety of reasons. Weather is the classic variable, but factors such as the end of school, tax periods, and routine marketing programs can all create seasonal selling patterns. Because marketing and sales promotions frequently accompany normal seasonality, or at times actually cause a seasonal pattern, they are included in this discussion. The fact that the sales promotions can be deliberately varied from year to year does not exclude it from seasonality treatment. The methods of dealing with these shifts will be discussed later.

How much of a shift in sales from the low to the high point has to occur before we must consider seasonality in our forecast? A ten percent shift between the high and low points is a reasonable level for consideration. Below ten percent normal random variation tends to obscure the patterns, making their inclusion in the calculations marginal. Whereas above that level, the seasonality impact starts to become a factor and its exclusion has a considerable negative impact.

Historical Methods Of Dealing With Seasonality
Historically, inventory forecasting systems have dealt with seasonality in one of two ways, each being at the opposite end of the spectrum of complexity. The most common approach, and the simplest, has been to follow the logic of "look at what you did last year--and do the same this year". This "use last year" technique has taken on a number of forms, from actually using the month’s sales in the prior year as the forecast for this year, to various smoothing techniques that averaged the adjacent months to smooth out aberrations.

There are two serious problems with this simplistic approach to seasonality. The first is that by definition, you are using year-old data. Year-old sales patterns will fail to comprehend products whose sales are either rising during the off season or declining during the off season. This is a dangerous situation in today’s dynamically changing environment. We need a technique that will comprehend that products are changing their fundamental demand levels during the interim period and respond accordingly.

The second problem with the "use last year" technique is its vulnerability to aberrations in the data. It is very common to have a single month of sales impacted by some aberrant event. The sales could be artificially low because of a failure of a supplier to meet your order, or it could be high due to some artificial one-time-buy that had nothing to due with seasonality. The numbers of reasons for these potential aberrations are endless. One year later no one remembers the problems that beset the data, and suddenly the forecast becomes a reflection of these abnormal events and the problem is unnecessarily perpetuated.

At the other end of the complexity spectrum is the technique of letting the computer automatically calculate a set of seasonal indices for each SKU. The classic form of seasonally adjusted exponential forecasting is just such a system. The technique has the computer dynamically update each and every SKU with its own unique set of seasonal indices. While the concept is wonderfully elegant, it works only for items where you have at least two years of data, the sales levels are fairly decent, and there are no aberrations in the prior months of data. Violation of any of these criteria leads to out of line forecasts that can, in turn, lead to serious imbalances of inventory. Since 80 to 90% of most organization’s SKUs do not meet these criteria, the technique shouldn’t be used as it was originally designed.

Another approach to the problem is to arm the computer with a wide variety of forecasting models that the system uses concurrently for every SKU. The computer tracks the performance of as many as 20 different forecasting models and then proceeds to select the model that had the best historic performance for that SKU as the next forecast.

While this technique has a certain seductive appeal, it is also badly flawed. Not only is it a bit like shooting a mouse with a blunderbuss, but it actually can make highly erroneous forecasts for specific SKUs while trying to squeeze out trivial improvements in the remainder. This situation arises because the system can very easily misinterpret a past pattern that happened to match well as being the optimum model for the future. When in fact, the match was due to a random situation (e.g., an aberrant demand in a prior year matches a pattern that "forecasted" the aberration, but in reality was a coincidence).

Because of the seductive logic of the concept, I created a system of this nature on my own during the early days of developing the MARS system. I was amazed, however, how often the system locked onto a given model based on past performance. When I visually analyzed the situation it was ludicrous that this model should be used to forecast the future.

The Various Techniques MARS-IW Uses to Deal With Seasonality
This section provides an overview of the different aspects of seasonality and how MARS deals with each. The actual procedural steps to utilize each feature in MARS are outlined in the documentation relative to their specific sections. The purpose of this discussion is to provide a general overview and an understanding of when different features apply.

First of all, note the discussion deals with the creation of the set of seasonality indices the system will use. Once the indice set is created, MARS uses it both to seasonally adjust the forecast in looking forward for an item and for deseasonalizing the history just processed to insure the forecast is not unduly impacted by a recent seasonal effect. Charlie Bodenstab’s book "A New Era In Inventory Management" discusses these issues in greater detail.

No Seasonality - If the product exhibits minimum or no seasonal characteristics there is no need to take any action. The download should simply default all items to a seasonality index of 01 that consists of a series of 1.0s for each of the 24 months.

The Universal Approach to Seasonality - This section covers the technique by which you will deal with the bulk of the SKUs, if not all of them, that have seasonal characteristics.

Later on we will cover a technique that automatically creates, and dynamically updates, a set of seasonality indices for each SKU. This technique unfortunately does not work for the majority of your SKUs for reasons that will be discussed at length and is also discussed very comprehensively in my book "A New Era In Inventory Management" starting with section 2.2.6 on page 52. You should read this section for a full understanding of the issues and the techniques employed. A summarized version of the concept, however, is as follows:

Rather than letting the computer automatically and blindly create the indice set, we are going to customize a seasonal index set for each "family" of products that tend to have similar seasonal characteristics. This approach rests on the concept that individual SKUs do not necessarily have unique seasonal characteristics, but rather belong to a family of products that respond to the same seasonal pattern. For example, there is no reason why a battery for an 88 Escort should have a different seasonal index than a 94 Mazda. They may have distinctly different demand levels, but their month to month variations will be similar.

One comment about the idea of a family of products…this is a group of products, as stated earlier, that all have a similar seasonal pattern to their demand. The group may constitute the total vendor’s products but most likely will not. Since you are deeply aware of the nature of your own product lines, you most likely, with some thought, can decide what the logical groups should be. You may also find that with time you refine this family grouping, whereby you may breakout a group of products that experience shows exhibit their own somewhat different pattern.

With this concept we can now create a set of seasonal indices for a family of products as a one-time, overt process. In other words, rather than letting the computer automatically and blindly create a set of indices, we will overtly create a set with a high degree of manual observation. Once we create a good set of indices for a family of products, we do not have to redo the process for a number of years.

Each SKU is then tagged in the "seasonality code" field with a unique number that identifies it as belonging to that seasonal family. That same code is also assigned to a set of the 12 seasonal indices which the system accesses when performing the calculations for that item.

The advantages of this technique are as follows:

MARS contains three distinct methods of creating a set of seasonal indices for a family of products.

Using a Few Specific Items - This is the technique discussed extensively in my book and the feature in MARS is accessed from the group of icons that come up prior to the master screen. The icon is called "Indice Calculator". The actual theory behind the approach is discussed in the book and the specific instructions to use the feature are outlined in the documentation for Indice Calculations. The basic concept, however, is as follows:

With this feature you can access a few SKUs that are highly representative of the family for which you want to create a set of indices. These SKUs, which will act as the "template" for the family, should have all the characteristics of the "well-behaved" items defined earlier (e.g., that have at least one full year of history and preferably two and are high volume movers). Consequently, you will first of all be starting with items that have excellent characteristics. Then the feature allows you to "clean up" the data to eliminate any aberrations that may still be present. The net result is that you will create an excellent set of indices that are highly representative of the family as a whole.

By "cleaning up" I am referring to the process where you visually scan the indices to verify they are flowing in a logical way. (E.g., if the indices have a sequence of .6 --.8 -- .9 -- .7 -- 1.2 etc., you may feel the .7 simply doesn’t make sense because your knowledge of the product line indicates that the product is increasing its demand fairly smoothly throughout the period. Therefore the .7 is a dip due to some aberration which study of the raw data supports. The raw data could then be "corrected" which may change the index to possibly a 1.0 causing some of the other eleven indices to be lowered slightly to make the total still add up to 12).

Using a Seasonality Set Developed Elsewhere - You may have some data that has allowed you to determine a set of seasonality indices, independent of MARS, you feel are very representative for a family of items. These can be inserted directly into the system by calling up the icon on the master screen called " Ind. Entry". This feature lets you create a seasonal index identifier and then key in the 12 indices for the set.

Incidentally, if you have a specific SKU you feel is highly representative of a total family and you placed an "XX" in the seasonality field, then that item will have a set of indices (as discussed earlier) that you could transpose into this feature for the total family. Additionally, you could do some "cleaning up" of the indices in the process.

Using a Group of Items - Another feature exists within MARS that allows you to use the "pre-select" screen to call up a complete group of items you feel are representative of a family. This feature is accessed by the icon on the master screen called "Ind/PRM". In this feature, the system will calculate a set of indices by simply adding all the demand for the group of products called up. Incidentally, it will only consider items for which a full year of data exist (e.g., any item that has existed for only a part of the year is not included in the calculation. The part of the year that is missing would bias the calculations into thinking that the demand was zero).

Be careful when using this feature that you do not commingle products that actually have different seasonal characteristics. Note also in this technique, unless you bring in the items one at a time, you will not be viewing the detailed monthly history so aberrations could exist that adversely impact the results. Accordingly, be sure the indices that result from the process make logical marketing sense before they are accepted.

Seasonality For "Well Behaved" Items - Earlier, because of data difficulties, I alluded to the pitfalls of automatically letting the computer create a set of seasonal indices. Certain products, however, do exhibit good data properties and can use this technique, particularly unique and routinely promoted items.

Since this approach is going to work only for items exhibiting "normal seasonality" that are "well behaved" let’s define both terms. An SKU, or a series of SKUs, fit the definition of "normal seasonality" if they meet the following criteria:

The product exhibits definite seasonal characteristics, but there is at least reasonable demand in almost every month. The spread of sales between the highest and lowest months can be fairly extreme (e.g., 300 to 400 percent), but each month has respectable demand as contrasted to 90% of the demand falling all into a three to four month period.

They fit the definition of "Well Behaved Items" if they meet the following criteria:

Items of this nature are handled very elegantly by MARS using a feature called "Seasonally Adjusting Well Behaved Items". Using the technique is extremely easy, since you need only to put an identifier such as an "XX" into the seasonality code for that item, and MARS will dynamically update and create a unique set of seasonality indices for each SKU so tagged.

This means each month, upon command, MARS will locate the items with an XX in their seasonality code and update the set of seasonality indices for that item. (The documentation describes the actual process and calculations.)

There may be a tendency to assume you can tag all your items with the XX and no further effort is required for seasonality. Recall our earlier discussion, however, where it was pointed out only 10 to 20 percent of your SKUs will fit the definitions for "well-behaved items". The technique will work fantastically well for the ones that do meet the criteria, however. For the remaining items we must go to the next sections.

This feature has particular use in the area of promotions. You may have a series of 100 or more items that are routinely promoted. Moreover, each item may have its own unique characteristics and therefore do not conveniently lend themselves to the "family" approach discussed later. Using the "XX" technique the system will monitor each of these items independently and automatically. Additionally, you can very readily access these items and shift the time of the promotion in the coming year. Again, the documentation contains the detail for these actions.

Radical Seasonality
The MARS documentation discusses the issue of radical seasonality in great detail and outlines exactly how to deal with the feature. The general concept, however, is as follows.

Some products are seasonal to the point that 90% or more of the demand takes place in three to four months. The demand in the remaining eight to nine months is therefore minuscule. Products with these demand patterns do not lend themselves to any of the techniques discussed so far. Accordingly, we have to shift to an entirely different methodology to handle these items.

The "radical seasonality" feature of MARS reverts to the "do what we did last year" concept I belittled earlier in this discussion. We have little choice but to look back to the prior year however, since there is no sales history during the slow period from which to "learn". Therefore we are left with only the demand during the peak period. MARS does, however, add some features to the approach that helps mitigate some of the objections to the conventional methods. Additionally it recognizes that these types of products are usually ordered as single one-time buys well in advance of the season. It also allows for fill-in orders during the season. Again, the documentation under "Radical Seasonality" discusses the specifics of how MARS operates in detail.

Other Comments
Promotions - Earlier we mentioned promotions were very closely associated with seasonality, since they either were associated with a normal seasonal pattern or they actually create the seasonal pattern themselves.

If the promotions do not change from year to year, then they may be safely included in the seasonality exercise. If, on the other hand, they change from year to year, then they become what we have labeled "random promotions". MARS deals with this issue by having two years of season indices. The first year (months 1-12) handles the processing of the data for the past year, while the next year (months 13-24) handles the coming year. The function of the first year is to "deseasonalize" the past data in developing the forecast. That is, it takes out the effect of the peak period (or troth period) in updating the forecast so the system does not confuse expected peaks or valleys with actual shifts in demand.

The second year is what the system uses for the forecast as it looks forward. If the seasonality and associated promotions are not expected to change, then the two years are the same. If on the other hand, you feel there will be a shift, or you fully intend to change the months of the promotion, then you can manually rearrange the indices to reflect your new program.

This process of changing the index may be accessed by the screen associated with the technique of creating "XX" seasonal items discussed above or with the "ind. Entry" icon also discussed earlier. The documentation describes the actual process in detail.

Individual Slow Months of Demand – In the discussion on "Normal seasonality" there was one issue that was not discussed. Even though the demand pattern may meet all the criteria for normal seasonality, there can be one or more months where the demand falls to extremely low levels. (This is not, however, as severe as radical seasonality where well over half the months are low.)

If the index for a month is, let’s say, .2 (indicating the demand for that month is normally only 20% of an average month) then the deseasonalizing process of the forecast calculations can break down. For example, assume we normally sell about 50 units in an average month and we come to the month where the seasonal index is .2. This implies we expect to sell only 10 units. However, assume you get a random order for an extra 10 units (someone who is using the product for a non-typical use in the off-season) for a total of 20. When MARS deseasonalizes the actual sales, it divides the actual demand by the index, or 20 divided by .2, or 100. In other words, it is saying this is equivalent to selling 100 units in an average month. The 100 is then exponentially averaged into the deseasonalized average jacking it up to a misleading figure.

The entire problem arises because of the high potential to have wildly fluctuating demand during very slow periods. MARS solves this issue very simply, and you do not have to take any action yourself. If a seasonal index is .4 or lower, MARS simply does not update the deseasonalized forecast. This action causes the system to "mark time" during the period when updating the forecast or learning from the most current event has the potential of causing more harm than good.

This figure is defaulted to .4 in the "Systems Parameter" icon and can be changed, but modification of the level should be done with great forethought.

Seasonality Implications on The Reorder Target – Obviously as the impact of seasonality changes the forecast, the reorder target is affected as well, since the forecast is a key variable in the calculations. There is an additional complication, however, that MARS handles automatically and very effectively, of which you should be aware.

The forecast for the reorder target actually covers the entire "exposure period" for which the reorder target is trying to protect. This exposure period is the sum of the lead time and reorder frequency. For example, if the order frequency is one month and the lead time for the product to arrive is two months, the reorder target has to insure product is either on hand or in the pipeline to cover the forecasted demand for this period plus the safety stock.

If the reorder target calculation were to just blithely use the forecast for the coming month, or for the furthest out month, it would not properly reflect the true needs for the period. For example, assume the seasonality index for the next three months (the exposure period) was .7 -- .9 -- and 1.3. This is an expression of how the product will flow out over the three-month period. If we were to use the furthest out forecast (with the index of 1.3) the implication would be that the product is going to be consumed at that rate for all three months, which is obviously not the case. Rather we have to comprehend each of the individual periods from the present time to the furthest out month in our calculations. This is exactly what MARS does. It virtually simulates the use of product for each month, or part of a month, as it comprehends the exposure period. The net affect is a reorder target that very elegantly comprehends the expected flow of product during the exposure period at issue.