<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Archives Theory of forecasting - Open Forecasting</title>
	<atom:link href="https://openforecast.org/category/forecasting-theory/feed/" rel="self" type="application/rss+xml" />
	<link>https://openforecast.org/category/forecasting-theory/</link>
	<description>How to look into the future</description>
	<lastBuildDate>Mon, 02 Mar 2026 22:48:08 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2015/08/cropped-usd-05-32x32.png&amp;nocache=1</url>
	<title>Archives Theory of forecasting - Open Forecasting</title>
	<link>https://openforecast.org/category/forecasting-theory/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>There&#8217;s no such thing as &#8220;deterministic forecast&#8221;</title>
		<link>https://openforecast.org/2026/03/02/there-s-no-such-thing-as-deterministic-forecast/</link>
					<comments>https://openforecast.org/2026/03/02/there-s-no-such-thing-as-deterministic-forecast/#respond</comments>
		
		<dc:creator><![CDATA[Ivan Svetunkov]]></dc:creator>
		<pubDate>Mon, 02 Mar 2026 22:45:31 +0000</pubDate>
				<category><![CDATA[Social media]]></category>
		<category><![CDATA[Theory of forecasting]]></category>
		<category><![CDATA[extrapolation methods]]></category>
		<category><![CDATA[statistics]]></category>
		<category><![CDATA[theory]]></category>
		<guid isPermaLink="false">https://openforecast.org/?p=4081</guid>

					<description><![CDATA[<p>Sometimes I see people referring to a &#8220;deterministic&#8221; forecast, and I have some personal issues with this. Because if you apply a model to data then there is nothing deterministic about your forecasts! In many contexts, &#8220;deterministic&#8221; has a precise meaning: no randomness, no uncertainty. A deterministic solution to an optimisation problem (e.g. linear programming) [&#8230;]</p>
<p>Message <a href="https://openforecast.org/2026/03/02/there-s-no-such-thing-as-deterministic-forecast/">There&#8217;s no such thing as &#8220;deterministic forecast&#8221;</a> first appeared on <a href="https://openforecast.org">Open Forecasting</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Sometimes I see people referring to a &#8220;deterministic&#8221; forecast, and I have some personal issues with this. Because if you apply a model to data then there is nothing deterministic about your forecasts!</p>
<p>In many contexts, &#8220;deterministic&#8221; has a precise meaning: no randomness, no uncertainty. A deterministic solution to an optimisation problem (e.g. linear programming) implies that there are no random inputs or outputs once the model and its parameters are fixed. Forecasting is different. As <a href="https://onlinelibrary.wiley.com/doi/10.1002/(SICI)1099-131X(199612)15:7%3C495::AID-FOR640%3E3.0.CO;2-O">Chatfield</a> and many others have pointed out, forecasting has multiple sources of uncertainty, and there is essentially zero chance that the future will unfold exactly as any single number suggests.</p>
<p>Yes, some people use &#8220;deterministic&#8221; as a synonym for &#8220;point forecast&#8221;. But that label is still misleading, because a point forecast is not uncertainty-free &#8211; it is just one summary of a predictive distribution (often the conditional mean, sometimes the median or another functional).</p>
<p>Here’s a quick reality check you can do yourself. Take a dataset, apply your model, and write down the point forecast for the next few observations. Now add one new observation, re-estimate, and forecast again (the image in this post depicts exactly that, but with 50 forecasts produced on different subsamples of data). The point forecast will change unless you are dealing with an exotic situation with non-random data (e.g. every day, you sell exactly 100 units). So, which of the two was the &#8220;deterministic&#8221; forecast? If forecasts were truly deterministic in the strict sense, you would not get multiple plausible values from small, reasonable changes in the sample.</p>
<p>This happens because any forecasting method (statistical or ML) depends on data and on modelling choices: parameter estimation, feature selection, splitting rules, tuning, even decisions like &#8220;use α=0.1&#8221;. Those choices can be fixed across samples of data, but fixing them does not remove uncertainty &#8211; it only hides it. The randomness is still there in the data and in the fact that we only observe a sample of it.</p>
<p>So when you see someone mentioning &#8220;deterministic forecast&#8221;, it&#8217;s worth translating it mentally to: &#8220;a point forecast, probably a conditional mean&#8221;. If you care about decisions and risk, you should know that there is an uncertainty associated with this so called &#8220;deterministic forecast&#8221;, and that it should not be ignored. But this is a topic for another discussion in another post.</p>
<p>Message <a href="https://openforecast.org/2026/03/02/there-s-no-such-thing-as-deterministic-forecast/">There&#8217;s no such thing as &#8220;deterministic forecast&#8221;</a> first appeared on <a href="https://openforecast.org">Open Forecasting</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://openforecast.org/2026/03/02/there-s-no-such-thing-as-deterministic-forecast/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Scaling of error measures</title>
		<link>https://openforecast.org/2026/02/23/scaling-of-error-measures/</link>
					<comments>https://openforecast.org/2026/02/23/scaling-of-error-measures/#respond</comments>
		
		<dc:creator><![CDATA[Ivan Svetunkov]]></dc:creator>
		<pubDate>Mon, 23 Feb 2026 13:36:12 +0000</pubDate>
				<category><![CDATA[Forecast evaluation]]></category>
		<category><![CDATA[Social media]]></category>
		<category><![CDATA[Theory of forecasting]]></category>
		<category><![CDATA[error measures]]></category>
		<category><![CDATA[theory]]></category>
		<guid isPermaLink="false">https://openforecast.org/?p=4054</guid>

					<description><![CDATA[<p>Apparently, we need to talk about scaling of error measures because this is not as obvious as it seems. In forecasting literature, since early days of the area, there has been a general consensus that the forecast errors from the individual time series should not be analysed and aggregated as is. This is because you [&#8230;]</p>
<p>Message <a href="https://openforecast.org/2026/02/23/scaling-of-error-measures/">Scaling of error measures</a> first appeared on <a href="https://openforecast.org">Open Forecasting</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Apparently, we need to talk about scaling of error measures because this is not as obvious as it seems.</p>
<p>In forecasting literature, since early days of the area, there has been a general consensus that the forecast errors from the individual time series should not be analysed and aggregated as is. This is because you can have very different time series capturing dynamics of very different processes.</p>
<p>Indeed, if you forecast sales of apples in kilograms, your actual value would be apples in kilograms, and your point forecast would also be in the same units. Subtracting one from another tells us how many kilograms of apples we missed with the forecast we produced. But if we then take the average between forecast errors for apples and beer, we would be aggregating things in different units, which contradicts some basic aggregating principles.</p>
<p>Furthermore, if the company sells thousands of kilograms of apples and jet engines, aggregating forecast errors on those (e.g. 3000 vs 3) might introduce all types of issues, because the models performance on apples might mask the performance of the model on jet engines. Still, the jet engines are much more expensive than apples and getting them accurately might be more important for the company than forecasting apples.</p>
<p>So, forecasting literature has agreed that the forecast errors need to be somehow scaled to make the errors unitless and not to distort performance of models on time series with different volumes. There are several ways of doing that, including the poor ones and reasonable ones. The state of the art at the moment is to divide error measures by some in-sample statistics to avoid potential holdout-sample distortion. Using mean absolute differences (MAD) for this (thus ending up with MASE or RMSSE) is considered as a standard. A couple of years ago, <a href="/2019/08/25/are-you-sure-youre-precise-measuring-accuracy-of-point-forecasts/">I have written a post about advantages and disadvantages of several scaling methods</a>.</p>
<p>But there is one method that I haven&#8217;t looked at and which is not very well discussed in the forecasting literature. It relies on the monetary value of forecasts. We could multiply each individual forecast error &#8220;e&#8221; by the price of the product &#8220;p&#8221; (thus moving to the missed income per product) and then divide everything by the overall income (price times quantity) from different products. This can be written as:</p>
<p>\begin{equation}<br />
\text{monetary Mean Error} = \frac{\sum_{j=1}^n (p_j \times e_j)} {\sum_{j=1}^n (p_j \times q_j)}<br />
\end{equation}</p>
<p>(the above formula can be modified to have squares or absolute values of the error). This way we switch from the original units to the monetary values and each error would tell you the percentage of the missed income in the overall one. This is a useful measure because it connects models performance with some managerial decisions and it takes the value of product into account (thus we do not mask the expensive jet engines with cheap apples).</p>
<p>However, it might have a potential issue similar to what the MAE/Mean or wMAPE has: if the sales of the product are not stationary, the denominator would change, thus driving the proportion either up or down, irrespective of how good the forecast is. I am not sure whether this needs to be addressed, because there is an argument that if the income from a product has increased and the error hasn&#8217;t changed, then this means that the proportion of the missed income decreased, which makes sense. But if we need to address this, we can switch to the MAD multiplied by price in the denominator to address this issue. In fact, this was sort of done in <a href="https://doi.org/10.1016/j.ijforecast.2021.11.013">M5 competition</a> that used a weighted RMSSE, relying on the income from each product over the last 4 weeks of data.</p>
<p>But here is one more interesting thing about this error measure. If we <strong>assume that prices for all products are exactly the same</strong>, they will disappear from the numerator and the denominator, leaving us with just sum of errors divided by the overall sales of all products. This still maintains the original idea of the proportion of the missed income, but now has a very strong assumption, which is probably not correct in the real life (apples and engines for the same price?). Furthermore, this would mask the performance of the model for the expensive products again. I personally don&#8217;t like this measure and find the assumption unrealistic and potentially misleading. Having said that, I can see some cases where this could still be acceptable and useful (e.g. similar products with similar dynamics and similar prices).</p>
<p>Summarising:</p>
<ol>
<li>If you are conducting a forecasting experiment without a specific context, I&#8217;d recommend using RMSSE or some other similar measure with scaling.</li>
<li>If you have prices of products, income-based scaling might be more informative.</li>
<li>Setting all prices to the same value does not sound appealing to me, but I understand that there is a context where this might work.</li>
</ol>
<p>Message <a href="https://openforecast.org/2026/02/23/scaling-of-error-measures/">Scaling of error measures</a> first appeared on <a href="https://openforecast.org">Open Forecasting</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://openforecast.org/2026/02/23/scaling-of-error-measures/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Risky business: how to select your model based on risk preferences</title>
		<link>https://openforecast.org/2026/01/19/risky-business-how-to-select-your-model-based-on-risk-preferences/</link>
					<comments>https://openforecast.org/2026/01/19/risky-business-how-to-select-your-model-based-on-risk-preferences/#respond</comments>
		
		<dc:creator><![CDATA[Ivan Svetunkov]]></dc:creator>
		<pubDate>Mon, 19 Jan 2026 11:28:04 +0000</pubDate>
				<category><![CDATA[Applied forecasting]]></category>
		<category><![CDATA[Papers]]></category>
		<category><![CDATA[Social media]]></category>
		<category><![CDATA[Theory of forecasting]]></category>
		<category><![CDATA[error measures]]></category>
		<category><![CDATA[extrapolation methods]]></category>
		<category><![CDATA[Information criteria]]></category>
		<category><![CDATA[model combination]]></category>
		<category><![CDATA[model selection]]></category>
		<category><![CDATA[papers]]></category>
		<category><![CDATA[theory]]></category>
		<guid isPermaLink="false">https://openforecast.org/?p=3950</guid>

					<description><![CDATA[<p>What do you use for model selection? Do you select the best model based on its cross-validated performance, or do you use in-sample measures like AIC? If so, there is a way to improve your selection process further. JORS recently published the paper of Nikos Kourentzes and I based on a simple but powerful idea: [&#8230;]</p>
<p>Message <a href="https://openforecast.org/2026/01/19/risky-business-how-to-select-your-model-based-on-risk-preferences/">Risky business: how to select your model based on risk preferences</a> first appeared on <a href="https://openforecast.org">Open Forecasting</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>What do you use for model selection? Do you select the best model based on its cross-validated performance, or do you use in-sample measures like AIC? If so, there is a way to improve your selection process further.</p>
<p>JORS recently published the paper of Nikos Kourentzes and I based on a simple but powerful idea: instead of using summary statistics (like the mean RMSE of cross-validated errors), you should consider the entire distribution and choose a specific quantile. This aligns with <a href="https://openforecast.org/2024/03/27/what-does-lower-error-measure-really-mean/">my previous post on error measures</a>, but here is the core intuition:</p>
<p>The distribution of error measures is almost always asymmetric. If you only look at the average, you end up with a &#8220;mean temperature in the hospital&#8221; statistic, which doesn&#8217;t reflect how models actually behave. Some models perform great on most series but fail miserably on a few.</p>
<p>What can we do in this case? We can look at quantiles of distribution.</p>
<p>For example, if we use 84th quantile, we compare the models based on their &#8220;bad&#8221; performance, situations where they fail and produce less accurate forecasts. If you choose the best performing model there, you will end up with something that does not fail as much. So your preferences for the model become risk-averse in this situation.</p>
<p>If you focus on the lower quantile (e.g. 16th), you are looking at models that do well on the well-behaved series and ignore how they do on the difficult ones. So, your model selection preferences can be described as risk-tolerant, because you are accept that the best performing model might fail on a difficult time series.</p>
<p>Furthermore, the median (50th quantile, the middle of sample), corresponds to the risk-neutral situation, because it ignores the tails of the distribution.</p>
<p>What about the mean? This is a risk-agnostic strategy, because it says nothing about the performance on the difficult or easy time series &#8211; it takes everything and nothing in it at the same time, hiding the true risk profile.</p>
<p>So what?</p>
<p>In the paper, we show that using a risk-averse strategy tends to improve overall forecasting accuracy in day-to-day situations. Conversely, a risk-tolerant strategy can be beneficial when disruptions are anticipated, as standard models are likely to fail anyway.</p>
<p>So, next time you select a model, think about the measure you are using. If it’s just the mean RMSE, keep in mind that you might be ignoring the inherent risks of that selection.</p>
<p>P.S. While the discussion above applies to the distribution of error measures, our paper specifically focused on point AIC (in-sample performance). But it is a distance measure as well, so the logic explained above holds.</p>
<p>P.P.S. Nikos wrote a <a href="https://www.linkedin.com/posts/nikos-kourentzes-3660515_forecasting-datascience-analytics-activity-7414687127269007360-pLAh">post about this paper here</a>.</p>
<p>P.P.P.S. And here is <a href="https://github.com/trnnick/working_papers/blob/fd1973624e97fc755a9c2401f05c78b056780e34/Kourentzes_2026_Incorporating%20risk%20preferences%20in%20forecast%20selectionk.pdf">the link to the paper</a>.</p>
<p>Message <a href="https://openforecast.org/2026/01/19/risky-business-how-to-select-your-model-based-on-risk-preferences/">Risky business: how to select your model based on risk preferences</a> first appeared on <a href="https://openforecast.org">Open Forecasting</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://openforecast.org/2026/01/19/risky-business-how-to-select-your-model-based-on-risk-preferences/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Several crucial steps in demand forecasting with ML</title>
		<link>https://openforecast.org/2025/10/08/several-crucial-steps-in-demand-forecasting-with-ml/</link>
					<comments>https://openforecast.org/2025/10/08/several-crucial-steps-in-demand-forecasting-with-ml/#respond</comments>
		
		<dc:creator><![CDATA[Ivan Svetunkov]]></dc:creator>
		<pubDate>Wed, 08 Oct 2025 10:32:41 +0000</pubDate>
				<category><![CDATA[Social media]]></category>
		<category><![CDATA[Theory of forecasting]]></category>
		<guid isPermaLink="false">https://openforecast.org/?p=3935</guid>

					<description><![CDATA[<p>When I read posts written by some ML experts, I sometimes notice that they either overlook or do not clearly explain a few crucial steps in demand forecasting. In this post, I want to highlight the three most important ones based on my personal experience. First and foremost, stationarity (see the proper definition of the [&#8230;]</p>
<p>Message <a href="https://openforecast.org/2025/10/08/several-crucial-steps-in-demand-forecasting-with-ml/">Several crucial steps in demand forecasting with ML</a> first appeared on <a href="https://openforecast.org">Open Forecasting</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>When I read posts written by some ML experts, I sometimes notice that they either overlook or do not clearly explain a few crucial steps in demand forecasting. In this post, I want to highlight the three most important ones based on my personal experience.</p>
<p>First and foremost, <strong>stationarity</strong> (see the proper definition of the term <a href="/adam/ARIMAIntro.html">here</a>). Time series often exhibit either a changing level or clear trends. While some models (such as ETS) take care of that directly via specific components, others need some preliminary steps before being applied. The simplest thing one can do is to take differences of the original data if it shows any form of non-stationarity and model the rates of change instead of just demand. For ML, this is extremely important because typical approaches (such as decision trees, k-NN, neural networks) cannot extrapolate. So, getting rid of the trend and/or ensuring that the level does not change over time will help ML approaches do the job they are supposed to do. And don&#8217;t use the global trend (see image in the post), as time series rarely exhibit a constant increase or decrease. In real life, the trend is usually stochastic, implying that the average sales change at a varying rate, not a fixed one.</p>
<p>Second, real time series often exhibit <strong>heteroscedasticity</strong> (i.e. the variance of the data increases with the level). The simplest way to stabilise the variance is to take logarithms of the data. This is not a universal solution, but it works in many cases. This way, the error in the model should have a constant variance. A more advanced approach is to use the Box-Cox transformation, but this requires estimating the parameter lambda, which is not always straightforward. The main issue with this arises when working with intermittent demand, where some unpredictable zeroes occur (the logarithm of zero equals -infinity). In that case, you might want to take logarithms of demand sizes (non-zero values) instead of the demand itself and switch to a mixture model. Another simple but inelegant trick is to add one to every observation and then take logarithms. This works but breaks my heart.</p>
<p>Third, <strong>seasonality</strong> is extremely important in time series. There are many ways one can capture it. The simplest is by introducing dummy variables, but this might cause issues because, in reality, seasonality often changes over time (see <a href="/2025/09/22/evolving-seasonality/">this recent post</a>). So, a better way of capturing it is either by extracting the seasonal component from STL or ETS and using it as a feature or by using the lagged values of your data. Depending on the specific situation and approach, there can be many other ways of capturing seasonality, and frankly, I struggle to come up with a universal one.</p>
<p>Bonus: if you work with intermittent demand, splitting it into demand sizes and demand occurrence might boost the accuracy of your approach if the underlying levels are captured correctly. Anna Sroginis and I show this improvement for LightGBM, regression, and simple local level approaches <a href="/2025/04/11/svetunkov-sroginis-2025-model-based-demand-classification/">in our paper</a> (currently under revision).</p>
<p>P.S. Kandrika and I will deliver a course on &#8220;Demand Forecasting Principles with examples in R&#8221; in November, where we will discuss these and other important aspects of demand forecasting. You can still sign up for it <a href="https://www.lancaster.ac.uk/centre-for-marketing-analytics-and-forecasting/grow-with-us/demand-forecasting-with-r/">here</a></p>
<p>Message <a href="https://openforecast.org/2025/10/08/several-crucial-steps-in-demand-forecasting-with-ml/">Several crucial steps in demand forecasting with ML</a> first appeared on <a href="https://openforecast.org">Open Forecasting</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://openforecast.org/2025/10/08/several-crucial-steps-in-demand-forecasting-with-ml/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Evolving seasonality</title>
		<link>https://openforecast.org/2025/09/22/evolving-seasonality/</link>
					<comments>https://openforecast.org/2025/09/22/evolving-seasonality/#respond</comments>
		
		<dc:creator><![CDATA[Ivan Svetunkov]]></dc:creator>
		<pubDate>Mon, 22 Sep 2025 19:21:09 +0000</pubDate>
				<category><![CDATA[Social media]]></category>
		<category><![CDATA[Theory of forecasting]]></category>
		<category><![CDATA[extrapolation methods]]></category>
		<category><![CDATA[Seasonality]]></category>
		<guid isPermaLink="false">https://openforecast.org/?p=3928</guid>

					<description><![CDATA[<p>Here is another fascinating aspect of the seasonal profile in your data: it can evolve over time due to changing consumer preferences. How so? Let me explain. I&#8217;ve worked with a couple of companies where there were some examples of data with drastically changing seasonal patterns over just a few years. For example, Before Covid [&#8230;]</p>
<p>Message <a href="https://openforecast.org/2025/09/22/evolving-seasonality/">Evolving seasonality</a> first appeared on <a href="https://openforecast.org">Open Forecasting</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Here is another fascinating aspect of the seasonal profile in your data: it can evolve over time due to changing consumer preferences. How so? Let me explain.</p>
<p>I&#8217;ve worked with a couple of companies where there were some examples of data with drastically changing seasonal patterns over just a few years. For example, Before Covid (BC), the consumer behaviour could be different than After the Disruption (AD): people started ordering online some products that they used to buy in shops. Some practitioners told me that the seasonal patterns in their data had changed so dramatically that historical data BC had become practically useless.</p>
<p>Why is this important?</p>
<p>If you don&#8217;t recognise that the seasonal patterns can change and simply use seasonal dummy variables (for example, in regression or decision trees), you&#8217;ll run into problems, as these approaches won&#8217;t capture the evolving profile. The same applies to classical decomposition (see <a href="/adam/ClassicalDecomposition.html">Section 3.2 of ADAM</a>), since it assumes a fixed seasonal structure. In fact, any model that assumes fixed seasonality would fail in this situation, and you may not even notice (see image in the post, where the model fails to capture the profile correctly because it assumes that it is fixed).</p>
<p>What can we do with that?</p>
<p>The solution is to use approaches that allow seasonality to evolve over time. ARIMA and ETS handle this via their parameters, while STL decomposition produces a dynamic seasonal profile. In regression or decision trees, you could incorporate lagged sales to partially account for this, or bring in the seasonal component from STL/ETS as an additional feature.</p>
<p>All good? Not quite, because there is a nasty small grey elephant hidden in this room.</p>
<p>Even if your chosen method allows seasonality to evolve, you must ensure that forecasting uncertainty reflects this properly. If the seasonal pattern in your training set changed drastically, what prevents it from shifting again in the test set? This is particularly critical if you need predictive distributions, such as for setting safety stock levels or generating prediction intervals. Ignoring the fact that the seasonality might change further could make your predictive distribution narrower than expected, leading to potential lost sales.</p>
<p>The good news: ARIMA and ETS handle this naturally, as components&#8217; uncertainty translates directly to the holdout variance. In ML, it is more complicated, because you would need to invest time in proper feature engineering to explicitly capture the potential seasonality changes. Unfortunately, I haven&#8217;t done much in the latter direction, so I cannot give you a good recipe. Any thoughts what to do here?</p>
<p>And what do you do in the situation like that?</p>
<p>Message <a href="https://openforecast.org/2025/09/22/evolving-seasonality/">Evolving seasonality</a> first appeared on <a href="https://openforecast.org">Open Forecasting</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://openforecast.org/2025/09/22/evolving-seasonality/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Review of a paper on comparison of modern machine learning techniques in retail</title>
		<link>https://openforecast.org/2025/06/22/review-of-a-paper-comparative-analysis-of-modern-machine-learning-models-for-retail-sales-forecasting/</link>
					<comments>https://openforecast.org/2025/06/22/review-of-a-paper-comparative-analysis-of-modern-machine-learning-models-for-retail-sales-forecasting/#respond</comments>
		
		<dc:creator><![CDATA[Ivan Svetunkov]]></dc:creator>
		<pubDate>Sun, 22 Jun 2025 21:59:19 +0000</pubDate>
				<category><![CDATA[Applied forecasting]]></category>
		<category><![CDATA[Papers]]></category>
		<category><![CDATA[Theory of forecasting]]></category>
		<category><![CDATA[AI and ML]]></category>
		<category><![CDATA[extrapolation methods]]></category>
		<category><![CDATA[papers]]></category>
		<guid isPermaLink="false">https://openforecast.org/?p=3874</guid>

					<description><![CDATA[<p>A couple of days ago, I noticed a link to the following paper in a post by Jack Rodenberg: https://arxiv.org/abs/2506.05941v1. The topic seemed interesting and relevant to my work, so I read it, only to find that the paper contains several serious flaws that compromise its findings. Let me explain. Introduction But first, why am [&#8230;]</p>
<p>Message <a href="https://openforecast.org/2025/06/22/review-of-a-paper-comparative-analysis-of-modern-machine-learning-models-for-retail-sales-forecasting/">Review of a paper on comparison of modern machine learning techniques in retail</a> first appeared on <a href="https://openforecast.org">Open Forecasting</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>A couple of days ago, I noticed a link to the following paper in a post by Jack Rodenberg: <a href="https://arxiv.org/abs/2506.05941v1" target="_blank">https://arxiv.org/abs/2506.05941v1</a>. The topic seemed interesting and relevant to my work, so I read it, only to find that the paper contains several serious flaws that compromise its findings. Let me explain.</p>
<h2>Introduction</h2>
<p>But first, why am I writing this post?</p>
<p>There’s growing interest in forecasting among data scientists, data engineers, ML experts etc. Many of them assume that they can apply their existing knowledge directly to this new area without reading domain-specific literature. As a result, we get a lot of &#8220;hit-or-miss&#8221; work: sometimes having promising ideas, but executed in ways that violate basic forecasting principles. The main problem with that is that if your experiment is not done correctly, your results might be compromised, i.e. your claims might be simply wrong.</p>
<p>If you&#8217;re a researcher writing forecasting-related papers, then hopefully reading this post (and the posts and papers I refer to), will help you improve your papers. This might lead to a smoother peer-review process. Also, while I can’t speak for other reviewers, if I come across a paper with similar issues, I typically give it a hard time.</p>
<p>I should also say that I am not a reviewer of this paper (I would not publish a review), but I merely decided to demonstrate what issues I can see when I read papers like that. The authors are just unlucky that I picked their paper&#8230;</p>
<p>Let&#8217;s start.</p>
<p>The authors apply several ML methods to retail data, compare their forecasting accuracy, and conclude that XGBoost and LightGBM outperform N-BEATS, NHITS, and Temporal Fusion Transformer. While the finding isn’t groundbreaking, additional evidence on a new dataset is always welcome.</p>
<h2>Major issues</h2>
<p>So, what&#8217;s wrong? Here is a list of the major comments:</p>
<ol>
<li><strong>Forecast horizon vs. data frequency</strong>:</li>
<p>Daily data with a 365-day forecast horizon makes no practical sense (page 2, paragraph 3). I haven&#8217;t seen any company making daily-level decisions a year in advance. Stock decisions are typically made on much shorter horizons, and if you need a year ahead forecast, you definitely do not need it on the daily level. After all, there is no point in knowing that on 22nd December 2025 you will have the expected demand of 35.457 units &#8211; it is too far into the future to make any difference. Some references:</p>
<ul>
<li><a href="https://doi.org/10.1016/j.ijforecast.2022.08.003">Athanasopoulos and Kourentzes (2023)</a> paper discusses data frequency and some decisions related to them;</li>
<li>and there is <a href="/2024/09/24/how-to-choose-forecast-horizon/">a post on my website</a> on a related topic</li>
</ul>
<li><strong>Misuse of SBC classification</strong>:</li>
<p>Claiming that 70% of products are &#8220;intermittent&#8221; (page 2, last paragraph) based on SBC is incorrect. Furthermore, SBC classification does not make sense in this setting, and is not used in the paper anyway, so the authors should just drop it.</p>
<ul>
<li>Read more about it <a href="/2025/06/04/sbc-is-not-for-you/">here</a>.</li>
<li>And there is <a href="https://www.linkedin.com/posts/stephankolassa_on-the-categorization-of-demand-patterns-activity-7340669762894462978-Wjrb">a post of Stephan Kolassa</a> on exactly this point</li>
</ul>
<li><strong>Product elimination and introduction is unclear (page 3):</strong></li>
<p>The authors say &#8220;Around 30% of products were eliminated during training and 10% are newly introduced in validation&#8221;. It&#8217;s not clear why this was done and how specifically. This needs to be explained in more detail.</p>
<li><strong>&#8220;Missing values&#8221; undefined</strong>:</li>
<p>It is not clear what the authors mean by &#8220;missing values&#8221; (page 3, &#8220;Handling Missing Values&#8221;). How do they appear and why? Are they the same as stockouts, or were there some other issues in the data? This needs to be explained in more detail.</p>
<li><strong>Figure 1 is vague</strong>:</li>
<p>Figure 1 is supposed to explain how the missing values were treated. But the whole imputation process is questionable, because it is not clear how well it worked in comparison with alternatives and how reasonable it is to have an imputed series that look more erratic than the original one. The discussion of that needs to be expanded with some insights from the business problem.</p>
<li><strong>No stockout handling discussion</strong>:</li>
<p>The authors do not discuss whether the data has stockouts or not. This becomes especially important in retail, because if the stockouts are not treated correctly, you would end up forecasting sales instead of demand</p>
<ul>
<li>For example, <a href="/2025/04/11/svetunkov-sroginis-2025-model-based-demand-classification/">see this post</a>.</li>
</ul>
<li><strong>Feature engineering is opaque</strong>:</li>
<p>&#8220;Lag and rolling-window statistics for sales and promotional indicators were created&#8221; (page 3, &#8220;Feature Engineering&#8221;) &#8211; it is not clear, what specific lags, what length of rolling windows, and what statistics (anything besides mean?) were created. These need to be explained for transparency and so that a reader could better understand what specifically was done. Without this explanation, it is not clear whether the features are sensible at all.</p>
<li><strong>Training/validation setup not explained</strong>:</li>
<p>It is not clear how specifically the split into training and validation sets was done (page 3, last paragraph), and whether the authors used rolling origin (aka time series cross-validation). If they did random splits, that could cause some issues, because the first law of time series is not to break its structure!</p>
<li><strong>Variables transformation is unclear</strong>:</li>
<p>It is not clear whether any transformations of the response variable were done. For example, if the data is not stationary, taking differences might be necessary to capture the trend and to do extrapolation correctly. Normalisation of variables is also important for neural networks, unless this is built-in in the functions the authors used. This is not discussed in the paper.</p>
<li><strong>Forecast strategy not explained</strong>:</li>
<p>It is not clear whether the direct or recursive strategy was used for forecasting. If lags were not used in the model, that would not matter, but they are, so this becomes a potential issue. Also, if the authors used the lag of the actual value on observation 235 steps ahead to produce forecast for 236 steps ahead, then this is another fundamental issue, because that implies that the forecast horizon is just 1 step ahead, and not 365, as the authors claim. This needs to be explained in more detail.</p>
<ul>
<li>I&#8217;ve written <a href="/2024/05/25/recursive-vs-direct-forecasting-strategy/">a post</a> about the strategies.</li>
</ul>
<li><strong>No statistical benchmarks</strong>:</li>
<p>At the very least, the authors should use simple moving average and probably exponential smoothing. Even if they do not perform well, this gives an additional information about the performance of the other approaches. Without them, the claims about good performance of the used ML approaches are not supported by evidence. The authors claim that they used mean as a benchmark, but its performance is not discussed in the paper.</p>
<ul>
<li><a href="/2024/10/28/why-is-it-hard-to-beat-simple-moving-average/">A post on the Simple Moving Average</a></li>
<li><a href="/2024/01/10/why-you-should-care-about-exponential-smoothing/">Why you should care about the exponential smoothing</a></li>
</ul>
<li><strong>Issues with forecast evaluation</strong>:</li>
<p>The whole Table 3 with error measures is an example of what not to do. Here are some of major issues:</p>
<ol>
<li><a href="/2024/04/03/stop-reporting-several-error-measures-just-for-the-sake-of-them/">There is no point in reporting several error measures</a> &#8211; each one of them is minimised by their own statistics. The error measure should align with what approaches produce.</li>
<li>MSE, RMSE, MAE and ME should be dropped, because they are not scaled, so the authors are adding up error measures for bricks and nails. The result is meaningless.</li>
<li>MASE is not needed &#8211; it is minimised by median, which could be a serious issue on intermittent demand <a href="/2025/01/21/don-t-use-mae-based-error-measures-for-intermittent-demand/">see this post</a>. wMAPE has similar issues because it is also based on MAE.</li>
<li>If the point forecasts are produced in terms of medians (like in case of NBEATS), then RMSSE should be dropped, and MASE should be used instead.</li>
<li>But also, comparing means with medians is not a good idea. If you assume a symmetric distribution, the two should coincide, but in general this might not hold.</li>
<li>R2 is not a good measure of forecast accuracy. It makes some sense in regression context for linear models, but in this one, it is pointless, and only shows that the authors don&#8217;t fully understand what they are doing. Plus, it&#8217;s not clear how specifically it was calculated.</li>
<li>I don&#8217;t fully understand &#8220;demand error&#8221;, &#8220;demand bias&#8221; and other measures, and the authors do not explain them in necessary detail. This needs to be added to the paper.</li>
<li>The split into &#8220;Individual Groups&#8221; and &#8220;Whole Category&#8221; is not well explained either: it is not clear what this means, why, and how this was done.</li>
<li>And in general, I don&#8217;t understand what the authors want to do with Cases A &#8211; D in Table 3. It is not clear why they are needed, and what they want to show with them. This is not explained in the paper.</li>
</ol>
<ul>
<li>I have a series of posts on forecast evaluation <a href="/category/forecasting-theory/forecast-evaluation/">here</a>.</li>
</ul>
<li><strong>Invalid analysis of bias measures</strong>:</li>
<p>Analysis of bias measures is meaningless because they were not scaled.</p>
<li><strong>Disturbing bias of NBEATS in Figure 2</strong>:</li>
<p>The bias shown in Figure 2 is disturbing and should be dealt with prior to evaluation. It could have appeared due to the loss function used for training or because the data was not pre-processed correctly. Leaving it as is and blaming NBEATS for this does not sound reasonable to me.</p>
<li><strong>No inventory implications</strong>:</li>
<p>The authors mention inventory management, but stop on forecasting, not showing how the specific forecasts translate to inventory decisions. If this paper was to be submitted to any operations-related journal, the inventory implications would need to be added in the discussion.</p>
<li><strong>Underexplained performance gaps</strong>:</li>
<p>The paper also does not explain well why neural networks performed worse than gradient boosting methods. They mention that this could be due to the effect of missing values, but this is a speculation rather than an explanation, which I personally do not believe (I might be wrong). While the overall results make sense for me personally, if you want to publish a good paper, you need to provide a more detailed answer to the question &#8220;why?&#8221;.
</ol>
<h3>Minor issues</h3>
<p>I also have three minor comments:</p>
<ol>
<li>&#8220;many product series are censored&#8221; (page 2, last paragraph) is not what it sounds like. The authors imply that the histories are short, while the usual interpretation is that the sales are lower than the demand, so the values are censored. I would rewrite this.</li>
<li>Figure 2 has the legend saying &#8220;Poisson&#8221; three times, not providing any useful information. This is probably just a mistake, which can easily be fixed.</li>
<li>There are no references to Table 2 and Figure 3 in the paper. It is not clear why they are needed. Every table and figure should be referred to and explained.</li>
</ol>
<h2>Conclusions</h2>
<p>Overall, the paper has a sensible idea, but I feel that the authors need to learn more about forecasting principles and that they have not read forecasting literature carefully to understand how specifically the experiments should be designed, what to do, and not to do (stop using SBC!). Because they made several serious mistakes, I feel that the results of the paper are compromised and might not be correct.</p>
<p>P.S. If I were a reviewer of this paper, I would recommend either &#8220;reject and resubmit&#8221; or a &#8220;major revision&#8221; (if the former option was not available).</p>
<p>P.P.S. If the authors of the paper are reading this, I hope you find these comments useful. If you have not submitted the paper yet, I&#8217;d suggest to take some of them (if not all) into account. Hopefully, this will smooth the submission process for you.</p>
<p>Message <a href="https://openforecast.org/2025/06/22/review-of-a-paper-comparative-analysis-of-modern-machine-learning-models-for-retail-sales-forecasting/">Review of a paper on comparison of modern machine learning techniques in retail</a> first appeared on <a href="https://openforecast.org">Open Forecasting</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://openforecast.org/2025/06/22/review-of-a-paper-comparative-analysis-of-modern-machine-learning-models-for-retail-sales-forecasting/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>SBC is not for you!</title>
		<link>https://openforecast.org/2025/06/04/sbc-is-not-for-you/</link>
					<comments>https://openforecast.org/2025/06/04/sbc-is-not-for-you/#respond</comments>
		
		<dc:creator><![CDATA[Ivan Svetunkov]]></dc:creator>
		<pubDate>Wed, 04 Jun 2025 11:41:00 +0000</pubDate>
				<category><![CDATA[Social media]]></category>
		<category><![CDATA[Theory of forecasting]]></category>
		<category><![CDATA[intermittent demand]]></category>
		<category><![CDATA[theory]]></category>
		<guid isPermaLink="false">https://openforecast.org/?p=3853</guid>

					<description><![CDATA[<p>I&#8217;ve been acting as a reviewer lately, providing comments on papers about intermittent demand, and I’ve felt a bit frustrated by what some authors write. Let me explain. Several papers I reviewed claim that demand can be either intermittent or lumpy. They then mention the Syntetos-Boylan-Croston (SBC) classification and use the thresholds from Syntetos et [&#8230;]</p>
<p>Message <a href="https://openforecast.org/2025/06/04/sbc-is-not-for-you/">SBC is not for you!</a> first appeared on <a href="https://openforecast.org">Open Forecasting</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>I&#8217;ve been acting as a reviewer lately, providing comments on papers about intermittent demand, and I’ve felt a bit frustrated by what some authors write. Let me explain.</p>
<p>Several papers I reviewed claim that demand can be either intermittent or lumpy. They then mention the Syntetos-Boylan-Croston (SBC) classification and use the thresholds from Syntetos et al. (2005: ) to do some things with ML methods. Sounds reasonable?</p>
<p>No! And here’s why.</p>
<p>Actually, I’ve already explained this in <a href="/2024/07/16/intermittent-demand-classifications-is-that-what-you-need/">a previous post</a>, but let me summarise the main points again.</p>
<p>First, intermittent demand is the demand that happens at irregular frequency. That’s the definition John Boylan and I came up with in our paper (<a href="/2023/09/08/iets-state-space-model-for-intermittent-demand-forecasting/">this one</a>). But even before that, the literature generally agreed: if you observe naturally occurring zeroes (e.g., no one wants to buy a product), then the demand is intermittent &#8211; even if there’s only one zero in the data.</p>
<p>Now, <a href="https://doi.org/10.1057/palgrave.jors.2601841">Syntetos et al. (2005)</a> specifically studied <strong>intermittent demand</strong> and proposed a classification to help choose between Croston’s method and SBA. Their classification includes four types (see image in the post):</p>
<ol>
<li>Erratic but not very intermittent</li>
<li>Smooth</li>
<li>Lumpy</li>
<li>Intermittent but not very erratic</li>
</ol>
<p>The thresholds they used (ADI=1.32 and CV²=0.49) were <strong>only</strong> intended to guide the choice between Croston and SBA. And &#8220;lumpy&#8221;, as you can see, is just a special case of intermittent demand!</p>
<p>Yes, you can classify intermittent demand into &#8220;lumpy&#8221; and &#8220;smooth&#8221;, but this separation is not well-defined. Use a different classification (e.g., <a href="https://openforecast.org/2025/04/11/svetunkov-sroginis-2025-model-based-demand-classification/">this paper</a>) and you&#8217;ll get different results. In fact, practically speaking, your ML approach likely doesn’t need this classification at all.</p>
<p>So, here are a two things you should <strong>NOT DO</strong>:</p>
<ol>
<li>Saying that demand can be &#8220;intermittent&#8221; or &#8220;lumpy&#8221; &#8211; the latter is a subset of the former.</li>
<li>Use ADI=1.32 and/or CV²=0.49 to categorise demand, unless you&#8217;re selecting between Croston and SBA. And let’s be honest, you’re probably not doing that. So forget about it!</li>
</ol>
<p>And honestly, stop overusing SBC! Lately, I&#8217;ve seen more harm than good from it. If you really want to use it, make sure you’ve read carefully and understood the original paper.</p>
<p>But if you don&#8217;t know what you are doing, SBC is not for you!</p>
<p>Message <a href="https://openforecast.org/2025/06/04/sbc-is-not-for-you/">SBC is not for you!</a> first appeared on <a href="https://openforecast.org">Open Forecasting</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://openforecast.org/2025/06/04/sbc-is-not-for-you/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>On randomness and uncertainty</title>
		<link>https://openforecast.org/2025/04/28/on-randomness-and-uncertainty/</link>
					<comments>https://openforecast.org/2025/04/28/on-randomness-and-uncertainty/#respond</comments>
		
		<dc:creator><![CDATA[Ivan Svetunkov]]></dc:creator>
		<pubDate>Mon, 28 Apr 2025 11:05:29 +0000</pubDate>
				<category><![CDATA[Social media]]></category>
		<category><![CDATA[Statistics]]></category>
		<category><![CDATA[Theory of forecasting]]></category>
		<category><![CDATA[statistics]]></category>
		<category><![CDATA[theory]]></category>
		<category><![CDATA[uncertainty]]></category>
		<guid isPermaLink="false">https://openforecast.org/?p=3828</guid>

					<description><![CDATA[<p>Everything is random! Your data, your model, its parameter estimates, the forecasts it produces, and even the minimum of the loss function you used. There is no such thing as a &#8220;deterministic&#8221; forecast &#8211; everything is stochastic! Whenever you work with data, you are working with a sample from a population. In some cases, this [&#8230;]</p>
<p>Message <a href="https://openforecast.org/2025/04/28/on-randomness-and-uncertainty/">On randomness and uncertainty</a> first appeared on <a href="https://openforecast.org">Open Forecasting</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Everything is random! Your data, your model, its parameter estimates, the forecasts it produces, and even the minimum of the loss function you used. There is no such thing as a &#8220;deterministic&#8221; forecast &#8211; everything is stochastic!</p>
<p>Whenever you work with data, you are working with a sample from a population. In some cases, this is more apparent than in others. In my statistics lectures, I typically give the following example. Consider that we are interested in the average height of students at the university. I could ask every student at the lecture to tell me their height, take the average, and get a number. Is this number random? Yes, indeed. Why? Because if a student who was late for the lecture comes in, I would need to recalculate the average, and the number would change. The average that I get depends on who specifically I have in the sample and how many observations I have. It will vary more in smaller samples and become more stable in larger ones. But this example gives you an idea about the inherent uncertainty of any estimates we deal with.</p>
<p>In time series, the situation is somewhat similar: you are dealing with a sample of values that you have observed up until a specific moment. If, for example, you want to forecast daily admissions in the emergency department of a hospital and apply a model, its forecast will change when a new day comes and a new cohort of patients arrives. This is because your sample changes, and you receive new information about the demand.</p>
<p>So, the parameter estimates of a model you use will change when you get a new observation (e.g., a new record of product sales). Yes, if you estimate the model properly (e.g., using Least Squares), the parameter estimates won’t change substantially, but they will change nonetheless. And this would affect point forecasts and any other statistics produced by your model. Your standard errors, p-values, conditional means, prediction intervals, error measures, model ranking &#8211; everything will change with a new observation. In fact, if you do model selection, the structure of the model might change as well. For example, in the case of ETS, you might switch from a model without a trend to one with a trend. So, every time you estimate anything on a sample of data, you should keep in mind that it is random and will change if your sample changes or gets updated.</p>
<p>Why is that important? Because we need to understand this inherent uncertainty, and ideally, we should somehow take it into account. In forecasting, this means you should not draw conclusions based on one application of a model to a dataset. At the very least, you should perform <a href="/adam/rollingOrigin.html">a rolling origin evaluation</a>. As Leonidas Tsaprounis says, &#8220;if you don&#8217;t roll the origin, you roll the dice&#8221;.</p>
<p>So, embrace the uncertainty and learn how to deal with it.</p>
<p>By the way, Kandrika Pritularga and I are holding a course on Demand Forecasting starting on 6th May. There is still time to <a href="https://online-payments.lancaster-university.co.uk/product-catalogue/courses/lancaster-university-management-school-lums/centre-for-marketing-analytics-forecasting-cmaf/demand-forecasting-principles-with-examples-in-r">sign up for it here</a>.</p>
<p>Message <a href="https://openforecast.org/2025/04/28/on-randomness-and-uncertainty/">On randomness and uncertainty</a> first appeared on <a href="https://openforecast.org">Open Forecasting</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://openforecast.org/2025/04/28/on-randomness-and-uncertainty/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Challenges related to seasonal data: shifting seasonality</title>
		<link>https://openforecast.org/2025/04/07/challenges-related-to-seasonal-data/</link>
					<comments>https://openforecast.org/2025/04/07/challenges-related-to-seasonal-data/#respond</comments>
		
		<dc:creator><![CDATA[Ivan Svetunkov]]></dc:creator>
		<pubDate>Mon, 07 Apr 2025 12:54:49 +0000</pubDate>
				<category><![CDATA[Applied forecasting]]></category>
		<category><![CDATA[Social media]]></category>
		<category><![CDATA[Theory of forecasting]]></category>
		<category><![CDATA[Seasonality]]></category>
		<category><![CDATA[theory]]></category>
		<guid isPermaLink="false">https://openforecast.org/?p=3814</guid>

					<description><![CDATA[<p>There are many different issues with capturing seasonality in time series. In this short post, I&#8217;d like to discuss one of the most annoying ones. I&#8217;m talking about the seasonal pattern that shifts over time. What I mean is that, for example, instead of having the standard number of observations in the cycle (e.g., 24 [&#8230;]</p>
<p>Message <a href="https://openforecast.org/2025/04/07/challenges-related-to-seasonal-data/">Challenges related to seasonal data: shifting seasonality</a> first appeared on <a href="https://openforecast.org">Open Forecasting</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>There are many different issues with capturing seasonality in time series. In this short post, I&#8217;d like to discuss one of the most annoying ones.</p>
<p>I&#8217;m talking about the seasonal pattern that shifts over time. What I mean is that, for example, instead of having the standard number of observations in the cycle (e.g., 24 hours in a day), in some cases you can have more or fewer of them. How is that possible?</p>
<p>One of these issues is the Daylight Saving Time (DST) change. The original idea of DST was to reduce energy consumption because daylight in summer is longer than in winter (there&#8217;s a nice and long article on Wikipedia about it). Because of this, many countries introduced a time shift: in spring, the clock is moved forward by one hour, while in autumn it goes back. This idea had a reasonable motivation at the beginning of the 20th century, but I personally think that as we&#8217;ve progressed as a society, it has lost its value. While this is already extremely annoying on its own, a bit unhealthy (several studies report an increased risk of heart attacks), and a torture for parents with small kids (the little ones don&#8217;t understand that it&#8217;s not 7am yet), it also introduces a modelling challenge: two days in the year do not have 24 hours. In spring, we have 23 hours, while in autumn we have 25. Standard classical forecasting approaches (such as ETS/ARIMA, regression, STL or classical decomposition) break in this case, because by default they assume that a specific pattern repeats itself every 24 hours. The issue arises because business cycles are tuned to working hours, not to the movement of the sun &#8211; people come to work at 9am, no matter how many hours are in the day.</p>
<p>Another challenge is leap years. While DST is totally man-made, leap years occur because the Earth orbits the sun approximately every 365.25 days. To avoid drifting too far from reality, our calendars include one extra day every four years (29th February). This addresses the issue but also means that one year has 366 days instead of 365. Once again, conventional models relying on fixed periodicity fail.</p>
<p>There are several ways to handle this, all with their own advantages and disadvantages:</p>
<ol>
<li>Fix the data. In the case of DST, this means removing one of the duplicated hours during the autumn time change and adding one during the spring shift. For leap years, it means dropping the 29th of February. This is easy to do, but breaks the structure and might cause issues when we have DST/leap year in the holdout sample.</li>
<li>Introduce more complex components, such as Fourier-based ones, to capture the shift in the data. This works well for leap years but doesn&#8217;t address the DST issue. <a href="https://doi.org/10.1016/j.energy.2015.02.100)">Harmonic regressions</a> and <a href="https://doi.org/10.1198/jasa.2011.tm09771">TBATS</a> do this, for example.</li>
<li><a href="https://openforecast.org/adam/MultipleFrequenciesDSTandLeap.html">Shift seasonal indices</a> when the issue happens &#8211; for example, having two indices for 1am when the switch to winter time occurs.</li>
</ol>
<p>In R, I’ve developed the <code>temporaldummy()</code> function in the <code>greybox</code> package to introduce correct dummy variables for data with shifting seasonality, and I’ve incorporated method (3) into the <code>adam()</code> function from the smooth package. You can read more about these here: https://openforecast.org/adam/MultipleFrequenciesDSTandLeap.html</p>
<p>Are there any other strategies? Which one do you prefer?</p>
<p>BTW, Kandrika Pritularga and I are running a course on Demand Forecasting Principles with Examples in R. We’ll discuss some of these aspects there. Read more about it <a href="https://lancaster.ac.uk/centre-for-marketing-analytics-and-forecasting/grow-with-us/demand-forecasting-with-r/">here</a>.</p>
<p>Message <a href="https://openforecast.org/2025/04/07/challenges-related-to-seasonal-data/">Challenges related to seasonal data: shifting seasonality</a> first appeared on <a href="https://openforecast.org">Open Forecasting</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://openforecast.org/2025/04/07/challenges-related-to-seasonal-data/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Naming conventions for seasonality types</title>
		<link>https://openforecast.org/2025/03/26/naming-conventions-for-seasonality-types/</link>
					<comments>https://openforecast.org/2025/03/26/naming-conventions-for-seasonality-types/#respond</comments>
		
		<dc:creator><![CDATA[Ivan Svetunkov]]></dc:creator>
		<pubDate>Wed, 26 Mar 2025 11:44:00 +0000</pubDate>
				<category><![CDATA[Social media]]></category>
		<category><![CDATA[Theory of forecasting]]></category>
		<category><![CDATA[Seasonality]]></category>
		<category><![CDATA[theory]]></category>
		<guid isPermaLink="false">https://openforecast.org/?p=3809</guid>

					<description><![CDATA[<p>In forecasting, the term seasonality doesn’t always mean what you think it does. It encompasses more than just patterns repeating from one season to the next. In fact, seasonality covers a wide range of periodic behaviors, and can have some issues associated with the naming conventions. Should we discuss? First things first: when we say [&#8230;]</p>
<p>Message <a href="https://openforecast.org/2025/03/26/naming-conventions-for-seasonality-types/">Naming conventions for seasonality types</a> first appeared on <a href="https://openforecast.org">Open Forecasting</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>In forecasting, the term seasonality doesn’t always mean what you think it does. It encompasses more than just patterns repeating from one season to the next. In fact, seasonality covers a wide range of periodic behaviors, and can have some issues associated with the naming conventions. Should we discuss?</p>
<p>First things first: when we say &#8220;seasonality&#8221; in forecasting, we mean any pattern that repeats periodically. If you mention monthly seasonality, most people will understand that you’re referring to a pattern repeating every 12 observations. Similarly, quarterly seasonality is widely recognized. However, beyond these two simple cases, ambiguity creeps in.</p>
<p>For example, if you describe your data as having &#8220;weekly&#8221; seasonality, do you mean that you’re working with weekly data and observe similar patterns every 52 weeks? Or are you dealing with daily data, where the pattern repeats every 7 days? The same issue applies to the term &#8220;daily&#8221; seasonality, which can refer to a pattern within daily data or a repeating pattern across multiple days.</p>
<p>Furthermore, the more granular your data, the more potential seasonal profiles you can have. For daily data, you may observe seasonality at 7-day (weekly) and 365-day (yearly) intervals. For hourly data, you could have three seasonal patterns: 24 hours, 168 hours (24 × 7), and 8,760 hours (24 × 365). An example of such data is shown in the image attached to this post.</p>
<p>Some people use the prefix &#8220;intra&#8221; to indicate patterns within a given frequency, but I still find this confusing. For example, intraweekly only indicates that a pattern exists within the week but doesn’t specify the frequency: it could refer to either 7 days or 168 hours.</p>
<p>That’s why I personally prefer the &#8220;A of B&#8221; naming scheme for seasonality. For example, &#8220;week of year&#8221; seasonality clearly denotes a pattern repeating every 52 observations. &#8220;Day of week&#8221; clearly refers to a 7-observation pattern. This format is more precise and less ambiguous than &#8220;weekly&#8221; or &#8220;intraweekly&#8221; seasonality. &#8220;Hour of year&#8221;, &#8220;half-hour of week&#8221;, &#8220;minute of day&#8221; etc are all straightforward and easy to understand.</p>
<p>And what naming conventions do you use?</p>
<p>P.S. Kandrika Pritularga and I are running the course &#8220;Demand Forecasting Principles with Examples in R&#8221; again, where we’ll discuss some of these and related aspects in detail. You can read more about the course and sign up for it <a href="https://lancaster.ac.uk/centre-for-marketing-analytics-and-forecasting/grow-with-us/demand-forecasting-with-r/">here</a> and <a href="https://online-payments.lancaster-university.co.uk/product-catalogue/courses/lancaster-university-management-school-lums/centre-for-marketing-analytics-forecasting-cmaf/demand-forecasting-principles-with-examples-in-r">here</a> respectively.</p>
<p>Message <a href="https://openforecast.org/2025/03/26/naming-conventions-for-seasonality-types/">Naming conventions for seasonality types</a> first appeared on <a href="https://openforecast.org">Open Forecasting</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://openforecast.org/2025/03/26/naming-conventions-for-seasonality-types/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
