<?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 time series - OpenForecast</title>
	<atom:link href="https://openforecast.org/tag/time-series/feed/" rel="self" type="application/rss+xml" />
	<link>https://openforecast.org/tag/time-series/</link>
	<description>How to look into the future</description>
	<lastBuildDate>Fri, 18 Sep 2026 15:54:20 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.2</generator>

<image>
	<url>https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2026/07/cropped-of-logo-short-1-32x32.png&amp;nocache=1</url>
	<title>Archives time series - OpenForecast</title>
	<link>https://openforecast.org/tag/time-series/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>The Menace of ML: Simple Moving Average</title>
		<link>https://openforecast.org/2026/09/21/simple-moving-average/</link>
					<comments>https://openforecast.org/2026/09/21/simple-moving-average/#respond</comments>
		
		<dc:creator><![CDATA[Ivan Svetunkov]]></dc:creator>
		<pubDate>Mon, 21 Sep 2026 09:01:58 +0000</pubDate>
				<category><![CDATA[Simple Methods]]></category>
		<category><![CDATA[Social media]]></category>
		<category><![CDATA[extrapolation methods]]></category>
		<category><![CDATA[SMA]]></category>
		<category><![CDATA[theory]]></category>
		<category><![CDATA[time series]]></category>
		<guid isPermaLink="false">https://openforecast.org/?p=4648</guid>

					<description><![CDATA[<p>And here is another forecasting method that is hard to beat in practice. In a recent competition, it gave data scientists huge headaches and even outperformed some powerful ML methods. What&#8217;s the name of this beast?! Simple Moving Average! The idea behind the Simple Moving Average (SMA) is to take the average of the last ... <a title="The Menace of ML: Simple Moving Average" class="read-more" href="https://openforecast.org/2026/09/21/simple-moving-average/" aria-label="Read more about The Menace of ML: Simple Moving Average">Read more</a></p>
<p>Message <a href="https://openforecast.org/2026/09/21/simple-moving-average/">The Menace of ML: Simple Moving Average</a> first appeared on <a href="https://openforecast.org">OpenForecast</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>And here is another forecasting method that is hard to beat in practice. In a recent competition, it gave data scientists huge headaches and even outperformed some powerful ML methods. What&#8217;s the name of this beast?! Simple Moving Average!</p>
<p>The idea behind the Simple Moving Average (SMA) is to take the average of the last few observations and use it as a forecast for the next several steps ahead. Very crude and very simple. In fact, it has Naive (from <a href="/2026/08/27/why-naive-is-popular-and-important/">this post</a>) as a special case if you take the average of one most recent observation. On the other hand, if you increase the order to include all the observations, you will end up with the Global Mean. And this simple method works quite well if you have level data, i.e. no apparent strong trend, no obvious seasonality, and no other important elements of structure.</p>
<p>The only thing that makes it a bit harder to use in practice is the choice of the order, i.e. the number of observations to average over. Unfortunately, there is no universal answer here. But people report that the order of 12 or 13 is fine for weekly data, although it&#8217;s not completely clear why. In the academic literature, <a href="https://doi.org/10.1016/j.ijforecast.2004.10.001">Aris Syntetos &#038; John Boylan (2005)</a> found that SMA(13) performed quite well on intermittent demand data, which was unexpected given the nature of the data (lots of zeroes). And almost 10 years ago, <a href="/2017/09/20/old-dog-new-tricks-a-modelling-view-of-simple-moving-averages/">Fotios Petropoulos and I proposed a model</a> underlying SMA with automatic order selection. We showed that it outperforms other simple benchmarks on supply chain data.</p>
<p>There is also some evidence from the VN2 inventory competition by Nicolas Vandeput. The benchmark there was built around a 13-week moving average with a simple seasonal adjustment, and only 25 out of 180+ participants <a href="https://nicolas-vandeput.medium.com/my-learning-points-from-vn2-the-first-inventory-competition-a4bffcc92856">managed to beat it</a>. Many sophisticated ML pipelines lost to a method that predates computers.</p>
<p>So, if you work, for example, in retail or in supply chain, SMA is a method to consider for your sanity-check pool of models. But don&#8217;t expect miracles from it! It is still a simple method that works for level time series. Use it as a stepping stone to find a better model that has more features.</p>
<p>Anyone else found SMA to be a strong contender? Leave a comment &#8211; it would be interesting to see how many of you have had the same experience.</p>
<p>And yes, we discuss it in our &#8220;Demand Forecasting Principles&#8221; training in more detail. The next one will be held online in November, with live sessions from 2pm to 4pm UK time. We still have a few places left, so <a href="https://openforecast.org/training/demand-forecasting-principles/">register here</a>.</p>
<p>Message <a href="https://openforecast.org/2026/09/21/simple-moving-average/">The Menace of ML: Simple Moving Average</a> first appeared on <a href="https://openforecast.org">OpenForecast</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://openforecast.org/2026/09/21/simple-moving-average/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Five assumptions behind &#8220;forecastability&#8221;</title>
		<link>https://openforecast.org/2026/09/14/five-assumptions-behind-forecastability/</link>
					<comments>https://openforecast.org/2026/09/14/five-assumptions-behind-forecastability/#respond</comments>
		
		<dc:creator><![CDATA[Ivan Svetunkov]]></dc:creator>
		<pubDate>Mon, 14 Sep 2026 08:03:00 +0000</pubDate>
				<category><![CDATA[Forecast evaluation]]></category>
		<category><![CDATA[Social media]]></category>
		<category><![CDATA[Theory of forecasting]]></category>
		<category><![CDATA[extrapolation methods]]></category>
		<category><![CDATA[opinion]]></category>
		<category><![CDATA[theory]]></category>
		<category><![CDATA[time series]]></category>
		<guid isPermaLink="false">https://openforecast.org/?p=4636</guid>

					<description><![CDATA[<p>Here is a confession. I don&#8217;t like the idea of &#8220;forecastability&#8221;. I think it does not bring value and can be harmful in some cases. Let me explain. One of the definitions I see on the internet: &#8220;A measure of the degree to which something may be forecast with accuracy&#8221;. This definition is so disturbing ... <a title="Five assumptions behind &#8220;forecastability&#8221;" class="read-more" href="https://openforecast.org/2026/09/14/five-assumptions-behind-forecastability/" aria-label="Read more about Five assumptions behind &#8220;forecastability&#8221;">Read more</a></p>
<p>Message <a href="https://openforecast.org/2026/09/14/five-assumptions-behind-forecastability/">Five assumptions behind &#8220;forecastability&#8221;</a> first appeared on <a href="https://openforecast.org">OpenForecast</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Here is a confession. I don&#8217;t like the idea of &#8220;forecastability&#8221;. I think it does not bring value and can be harmful in some cases. Let me explain.</p>
<p>One of the definitions I see on the internet: &#8220;A measure of the degree to which something may be forecast with accuracy&#8221;. This definition is so disturbing that I cannot resist ranting about it. The thing that annoys me the most is the &#8220;with accuracy&#8221;, which is really arbitrary and can mean anything. Your Naive method produces a relative RMSE of 1.0. Is that accurate enough? Does this make the time series forecastable? What if ETS produces 1.2, while LightGBM delivers 0.8? Is the data forecastable now? And when do you say &#8220;this is fine&#8221;?</p>
<p>But let me breathe and take a step back. The thing is, any method of measuring forecastability has assumptions behind it. Here is my list of five (did I miss any?):</p>
<ol>
<li>The models you use: each time series has its own characteristics, so you can only say that the data is &#8220;forecastable&#8221; given the set of models you have. The data with trend might look unforecastable for the model that only has the level component.</li>
<li>The features/indicators that are available: if you do not know when promotions happen, some observations will look unforecastable. It&#8217;s a similar argument to (1), but more about what you include in your model. If you spend more time on feature generation and transformation, then the series that looked very hard might become quite easily forecastable.</li>
<li>The statistic you focus on: this could be the conditional mean, the median, some quantile, or the whole predictive distribution. A model can do great in terms of point forecasts but very poorly when it comes to prediction intervals. Does that make the time series unforecastable? Which one do you care more about?</li>
<li>The forecast horizon: the longer it is, the less accurate the forecasts become. One-step-ahead forecasts are easy, multiple steps ahead are hard. Which one do you use to measure forecastability?</li>
<li>The error measures: I&#8217;ll just leave this here: <a href="/category/forecasting-theory/forecast-evaluation/">https://openforecast.org/category/forecasting-theory/forecast-evaluation/</a></li>
</ol>
<p>Do I hear someone mentioning the coefficient of variation (CoV) as a good measure of forecastability? This is, by the way, what is used in the conventional XYZ classification. Well, let&#8217;s check the five points above against it and see what it assumes: (1) the global mean is suitable and the variance is constant; (2) no features are available; (3) conditional mean as the statistic of interest; (4) 1-step-ahead point forecast; (5) Root Mean Squared Error (the core of the CoV). So, it is suitable for a very small set of time series. If you use it universally, you might decide that some time series with a very clear structure are not forecastable. And the same exercise works for the more sophisticated measures, entropy-based ones included: run them through the five questions and see what they silently assume.</p>
<p>And then we come to the final point: so what? Let&#8217;s say you split your data into the &#8220;forecastable/not&#8221; categories. What are you going to do with that? The intention behind this is legitimate — you cannot babysit ten thousand SKUs equally, so you want to know where to spend your time. But the label &#8220;unforecastable&#8221; answers the wrong question. The right question is why the series is hard to forecast: missing promotion information? Wrong model? Genuinely random demand? Each of these implies a different action. It might well be that your &#8220;unforecastable&#8221; time series just require more time and effort to become forecastable again.</p>
<p>We don&#8217;t teach &#8220;forecastability&#8221; in our Demand Forecasting Principles course — because, as you can see, I don&#8217;t believe in it. What we do teach is everything in the list above: models, their assumptions, features, horizons, and how to evaluate forecasts properly. See details about the next course <a href="/training/demand-forecasting-principles/">here</a>.</p>
<p>This is my personal view. Happy to hear what others have to say.</p>
<p>Message <a href="https://openforecast.org/2026/09/14/five-assumptions-behind-forecastability/">Five assumptions behind &#8220;forecastability&#8221;</a> first appeared on <a href="https://openforecast.org">OpenForecast</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://openforecast.org/2026/09/14/five-assumptions-behind-forecastability/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>On differencing of ARIMA in state space</title>
		<link>https://openforecast.org/2026/09/12/on-differencing-of-arima-in-state-space/</link>
					<comments>https://openforecast.org/2026/09/12/on-differencing-of-arima-in-state-space/#respond</comments>
		
		<dc:creator><![CDATA[Ivan Svetunkov]]></dc:creator>
		<pubDate>Sat, 12 Sep 2026 11:25:01 +0000</pubDate>
				<category><![CDATA[ARIMA]]></category>
		<category><![CDATA[smooth for Python]]></category>
		<category><![CDATA[ADAM]]></category>
		<category><![CDATA[extrapolation methods]]></category>
		<category><![CDATA[theory]]></category>
		<category><![CDATA[time series]]></category>
		<guid isPermaLink="false">https://openforecast.org/?p=4641</guid>

					<description><![CDATA[<p>A reader left a comment under the MSARIMA post on LinkedIn saying that in order to compare ARIMAs via information criteria, we need to make sure that the candidate models have the same order of differencing. They are right — for the conventional ARIMA. BUT! In the state space formulation, the problem disappears. Here is ... <a title="On differencing of ARIMA in state space" class="read-more" href="https://openforecast.org/2026/09/12/on-differencing-of-arima-in-state-space/" aria-label="Read more about On differencing of ARIMA in state space">Read more</a></p>
<p>Message <a href="https://openforecast.org/2026/09/12/on-differencing-of-arima-in-state-space/">On differencing of ARIMA in state space</a> first appeared on <a href="https://openforecast.org">OpenForecast</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>A reader left a comment under the <a href="https://openforecast.org/2026/09/10/smooth-in-python-multiple-seasonal-arima/">MSARIMA post</a> on LinkedIn saying that in order to compare ARIMAs via information criteria, we need to make sure that the candidate models have the same order of differencing. They are right — for the conventional ARIMA. BUT! In the state space formulation, the problem disappears. Here is why.</p>
<p>In the conventional ARIMA, taking differences is treated as a pre-processing step, where we switch from, for example, the sales of a product to the sales increase/decrease. If you had a sample of 100 observations, after first differences you are left with 99 &#8211; the first observation has nothing to be subtracted from. So yes, with the conventional approach, ARIMA(1,0,1) and ARIMA(1,1,1) are estimated on different sample sizes, and their information criteria are not directly comparable.</p>
<p>But! MSARIMA (and ADAM in general) is a state space model, and this pre-processing step is not needed. The differences are embedded in the model as additional components: ARIMA(0,1,1) has one, ARIMA(0,2,1) has two. The sample stays the same; what changes is the number of estimated parameters &#8211; each new component needs its initial value, and the information criterion penalises that. So the comparison stays fair: same sample, same likelihood basis, different number of parameters. I have <a href="/adam/StateSpaceARIMA.html#ADAMARIMAExamplesModels">several examples of how ARIMA is formulated in the ADAM SSOE framework</a>.</p>
<p>What this implies: any ARIMA model of any orders (non-seasonal, seasonal, or multiseasonal) can be compared with other ARIMA models directly via information criteria, on the same sample of data.</p>
<p>This is not a new idea, by the way. I used this approach in the ARIMA algorithm I developed for the DemandWorks company (now part of Netstock) more than ten years ago, and John Boylan and I later built the State Space ARIMA on the same principle (<a href="https://doi.org/10.1080/00207543.2019.1600764">the paper</a>).</p>
<p>So, yes: if you use the conventional ARIMA (auto_arima from pmdarima, ARIMA from aeon or statsforecast in Python; stats or forecast implementations in R), you NEED to make sure that you compare models with the same order of differencing. But if you use the smooth implementation, you don&#8217;t need to worry &#8211; everything is already taken care of for you. This comes as a bonus from the specific formulation of the model.</p>
<p>Message <a href="https://openforecast.org/2026/09/12/on-differencing-of-arima-in-state-space/">On differencing of ARIMA in state space</a> first appeared on <a href="https://openforecast.org">OpenForecast</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://openforecast.org/2026/09/12/on-differencing-of-arima-in-state-space/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>stick function for the EDA in time series</title>
		<link>https://openforecast.org/2026/06/26/stick-function-for-the-eda-in-time-series/</link>
					<comments>https://openforecast.org/2026/06/26/stick-function-for-the-eda-in-time-series/#respond</comments>
		
		<dc:creator><![CDATA[Ivan Svetunkov]]></dc:creator>
		<pubDate>Fri, 26 Jun 2026 11:24:43 +0000</pubDate>
				<category><![CDATA[Applied forecasting]]></category>
		<category><![CDATA[greybox in Python]]></category>
		<category><![CDATA[Package greybox for R]]></category>
		<category><![CDATA[Social media]]></category>
		<category><![CDATA[EDA]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[R]]></category>
		<category><![CDATA[time series]]></category>
		<guid isPermaLink="false">https://openforecast.org/?p=4157</guid>

					<description><![CDATA[<p>You have probably seen my post about the STI classification of Hans Levenbach (this one). Well, I&#8217;ve decided to implement it, and it has landed in the greybox package for R/Python. What&#8217;s greybox? It is a package for statistical modelling focusing on forecasting and time series analysis. I created it back in 2018 to split ... <a title="stick function for the EDA in time series" class="read-more" href="https://openforecast.org/2026/06/26/stick-function-for-the-eda-in-time-series/" aria-label="Read more about stick function for the EDA in time series">Read more</a></p>
<p>Message <a href="https://openforecast.org/2026/06/26/stick-function-for-the-eda-in-time-series/">stick function for the EDA in time series</a> first appeared on <a href="https://openforecast.org">OpenForecast</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>You have probably seen my post about the STI classification of Hans Levenbach (<a href="/2026/05/18/hans-levenbach-s-classification-scheme-for-trend-seasonal-components/">this one</a>). Well, I&#8217;ve decided to implement it, and it has landed in the greybox package for R/Python.</p>
<p>What&#8217;s greybox? It is a package for statistical modelling focusing on forecasting and time series analysis. I created it back in 2018 to split the static models (such as linear regression) from the dynamic ones that landed in the smooth package. Greybox has evolved since then, and now has linear regression (alm), regression selection (stepwise) and combinations (calm), a variety of tools for feature generation, diagnostics, forecast evaluation (e.g. rolling origin) etc. You can <a href="https://github.com/config-i1/greybox/wiki">read more about it here</a>. Originally, the package was available for R only, but Claude and I ported its main functions to Python back in February.</p>
<p>The Exploratory Data Analysis techniques for time series fit the package quite well, although I don&#8217;t have many of those yet. So, I&#8217;ve implemented the main idea of the STI of Hans Levenbach in a function called &#8220;stick&#8221; (Seasonal, Trend, Irregular Contribution Kit) in the greybox package for R/Python. The idea is straightforward: apply stick to a time series, it will use ANOVA, and give you the strength of each component. Here, for example, is how to apply the function to the AirPassengers data (everyone&#8217;s favourite toy time series) in R:</p>
<pre class="decode">library(greybox)
stick(AirPassengers)</pre>
<p>and in Python:</p>
<pre class="decode">from fcompdata import AirPassengers
from greybox import stick

result = stick(AirPassengers.y, lags=12)
print(result)</pre>
<p>which gives exactly the same result:</p>
<pre>Strength of the components:
seasonal12      trend  irregular
    0.1061     0.8613     0.0326</pre>
<p>So, trend dominates the time series, explaining 86.13% of its variability, meaning that if you capture it correctly, you solve a big chunk of the problem. This split also gives you a rough idea about the structure-versus-noise breakdown in the time series, although it assumes that the seasonal component does not evolve over time.</p>
<p>The function supports several seasonal components, and I might extend it to include external information (e.g. promotions) in the future if there is demand for it.</p>
<p>Message <a href="https://openforecast.org/2026/06/26/stick-function-for-the-eda-in-time-series/">stick function for the EDA in time series</a> first appeared on <a href="https://openforecast.org">OpenForecast</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://openforecast.org/2026/06/26/stick-function-for-the-eda-in-time-series/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Hans Levenbach&#8217;s classification scheme for trend/seasonal components</title>
		<link>https://openforecast.org/2026/05/18/hans-levenbach-s-classification-scheme-for-trend-seasonal-components/</link>
					<comments>https://openforecast.org/2026/05/18/hans-levenbach-s-classification-scheme-for-trend-seasonal-components/#respond</comments>
		
		<dc:creator><![CDATA[Ivan Svetunkov]]></dc:creator>
		<pubDate>Mon, 18 May 2026 08:01:28 +0000</pubDate>
				<category><![CDATA[Social media]]></category>
		<category><![CDATA[Statistics]]></category>
		<category><![CDATA[Theory of forecasting]]></category>
		<category><![CDATA[EDA]]></category>
		<category><![CDATA[Seasonality]]></category>
		<category><![CDATA[time series]]></category>
		<guid isPermaLink="false">https://openforecast.org/?p=4145</guid>

					<description><![CDATA[<p>Here is a curious idea: if we can somehow estimate the importance of trend/seasonal components for your data, you can use this in model building and forecasting. But how can we do this first step? Hans Levenbach has an answer with his simple EDA technique. Let me explain. The core idea is simple and neat. ... <a title="Hans Levenbach&#8217;s classification scheme for trend/seasonal components" class="read-more" href="https://openforecast.org/2026/05/18/hans-levenbach-s-classification-scheme-for-trend-seasonal-components/" aria-label="Read more about Hans Levenbach&#8217;s classification scheme for trend/seasonal components">Read more</a></p>
<p>Message <a href="https://openforecast.org/2026/05/18/hans-levenbach-s-classification-scheme-for-trend-seasonal-components/">Hans Levenbach&#8217;s classification scheme for trend/seasonal components</a> first appeared on <a href="https://openforecast.org">OpenForecast</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Here is a curious idea: if we can somehow estimate the importance of trend/seasonal components for your data, you can use this in model building and forecasting. But how can we do this first step? Hans Levenbach has an answer with his simple EDA technique. Let me explain.</p>
<p>The core idea is simple and neat. For this example, I’ll use monthly data, like the time series in this image:</p>
<figure id="attachment_4147" aria-describedby="caption-attachment-4147" style="width: 290px" class="wp-caption aligncenter"><a href="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2026/05/2026-05-13-Hans-Levenbach-and-STI-01.png&amp;nocache=1"><img fetchpriority="high" decoding="async" src="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2026/05/2026-05-13-Hans-Levenbach-and-STI-01-300x180.png&amp;nocache=1" alt="" width="300" height="180" class="size-medium wp-image-4147" srcset="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2026/05/2026-05-13-Hans-Levenbach-and-STI-01-300x180.png&amp;nocache=1 300w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2026/05/2026-05-13-Hans-Levenbach-and-STI-01-768x461.png&amp;nocache=1 768w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2026/05/2026-05-13-Hans-Levenbach-and-STI-01.png&amp;nocache=1 1000w" sizes="(max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-4147" class="wp-caption-text">Series N2568 from the M3 dataset</figcaption></figure>
<p>You can see that the data has strong seasonality, and we can qualitatively say that capturing that seasonal component correctly will probably solve the main problem in capturing the structure. But how can we quantify this?</p>
<p>All you need to do is put the data in a &#8220;wide&#8221; format, with months in rows and years in columns. Then, as Hans proposed, run a two-way ANOVA with &#8220;month&#8221; and &#8220;year&#8221; to capture variability due to year (trend) and due to month (seasonality). Roughly, we take row/column means to get mean seasonal profiles and mean annual changes (trend), as in the following two images:</p>
<figure id="attachment_4149" aria-describedby="caption-attachment-4149" style="width: 290px" class="wp-caption aligncenter"><a href="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2026/05/2026-05-13-Hans-Levenbach-and-STI-02.png&amp;nocache=1"><img decoding="async" src="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2026/05/2026-05-13-Hans-Levenbach-and-STI-02-300x180.png&amp;nocache=1" alt="Seasonal profile of the data" width="300" height="180" class="size-medium wp-image-4149" srcset="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2026/05/2026-05-13-Hans-Levenbach-and-STI-02-300x180.png&amp;nocache=1 300w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2026/05/2026-05-13-Hans-Levenbach-and-STI-02-768x461.png&amp;nocache=1 768w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2026/05/2026-05-13-Hans-Levenbach-and-STI-02.png&amp;nocache=1 1000w" sizes="(max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-4149" class="wp-caption-text">Seasonal profile of the data</figcaption></figure>
<figure id="attachment_4148" aria-describedby="caption-attachment-4148" style="width: 290px" class="wp-caption aligncenter"><a href="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2026/05/2026-05-13-Hans-Levenbach-and-STI-03.png&amp;nocache=1"><img decoding="async" src="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2026/05/2026-05-13-Hans-Levenbach-and-STI-03-300x180.png&amp;nocache=1" alt="Trend profile" width="300" height="180" class="size-medium wp-image-4148" srcset="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2026/05/2026-05-13-Hans-Levenbach-and-STI-03-300x180.png&amp;nocache=1 300w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2026/05/2026-05-13-Hans-Levenbach-and-STI-03-768x461.png&amp;nocache=1 768w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2026/05/2026-05-13-Hans-Levenbach-and-STI-03.png&amp;nocache=1 1000w" sizes="(max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-4148" class="wp-caption-text">Trend profile</figcaption></figure>
<p>The former has no trend, the latter has no seasonality, so they can be analysed separately. Then we calculate the sums of squares of these means from the global mean to estimate variation due to months (seasonality) and years (trend). We can also calculate the sum of squares of the irregular component (what is left), giving three elements that add up to the total sum of squares.</p>
<p>Next step is trivial and straightforward: calculate the shares of each component in the total sum of squares. For our example, using <code>aov()</code> in R and then computing the total:</p>
<pre>Seasonal:  292,307,558
Trend:     176,308,365
Irregular:  33,618,630

Total:     502,234,552</pre>
<p>So, the seasonal contribution is 292,307,558 / 502,234,552 ≈ 58.2%, the trend contribution is 35.1%, and the irregular component is 6.69%.</p>
<p>Why bother? This simple EDA technique tells you roughly what to focus in forecasting. In this example, capturing seasonality correctly is roughly 60% of the story, with trend being second in importance. Hans goes further in his derivations, see <a href="https://www.linkedin.com/pulse/sticlass-scheme-classification-framework-model-levenbach-phd-cpdf-va7ae/">his LinkedIn post</a>. He also analysed M3 results at some point, explaining why some methods performed better (trend dominated the data).</p>
<p>It is worth pointing out that this approach assumes that the seasonal component does not evolve over time, which is reasonable but not always correct. And the model behind this is essentially a regression with dummy variables for year and month. Nonetheless, it is a great starting point for EDA.</p>
<p>P.S. Hans Levenbach passed away on 7 April 2026. I wasn’t sure whether to write about it and what to write about him, but I had several nice discussions with him, and I have admired his approach to forecasting: first explore the data, then build a model. His passing is a loss for the forecasting community.</p>
<p>P.P.S. You can read a bit about him on <a href="https://forecasters.org/blog/2026/04/10/hans-levenbach-1940-2026/">the IIF website</a>.</p>
<p><a href="https://youtu.be/bjXTF7gKXA8?si=m1Ym5FBDeUWbftv7">CMAF had a webinar with Hans a couple of years ago</a>. We had technical issues, but he managed to explain his idea well.</p>
<p>Message <a href="https://openforecast.org/2026/05/18/hans-levenbach-s-classification-scheme-for-trend-seasonal-components/">Hans Levenbach&#8217;s classification scheme for trend/seasonal components</a> first appeared on <a href="https://openforecast.org">OpenForecast</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://openforecast.org/2026/05/18/hans-levenbach-s-classification-scheme-for-trend-seasonal-components/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Forecasting Competitions Datasets in Python</title>
		<link>https://openforecast.org/2026/01/26/forecasting-competitions-datasets-in-python/</link>
					<comments>https://openforecast.org/2026/01/26/forecasting-competitions-datasets-in-python/#respond</comments>
		
		<dc:creator><![CDATA[Ivan Svetunkov]]></dc:creator>
		<pubDate>Mon, 26 Jan 2026 09:29:25 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Social media]]></category>
		<category><![CDATA[Competitions]]></category>
		<category><![CDATA[time series]]></category>
		<guid isPermaLink="false">https://openforecast.org/?p=3955</guid>

					<description><![CDATA[<p>Here is one small, unexpected piece of news: I now have my first package on PyPI! It’s called fcompdata, and let me tell you a little bit about it. When I test my functions in R, I usually use the M1, M3, and tourism competition datasets because they are diverse enough, containing seasonal, non-seasonal, trended, ... <a title="Forecasting Competitions Datasets in Python" class="read-more" href="https://openforecast.org/2026/01/26/forecasting-competitions-datasets-in-python/" aria-label="Read more about Forecasting Competitions Datasets in Python">Read more</a></p>
<p>Message <a href="https://openforecast.org/2026/01/26/forecasting-competitions-datasets-in-python/">Forecasting Competitions Datasets in Python</a> first appeared on <a href="https://openforecast.org">OpenForecast</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Here is one small, unexpected piece of news: I now have my first package on PyPI! It’s called <a href="https://pypi.org/project/fcompdata/">fcompdata</a>, and let me tell you a little bit about it.</p>
<p>When I test my functions in R, I usually use the M1, M3, and tourism competition datasets because they are diverse enough, containing seasonal, non-seasonal, trended, and non-trended time series of different frequencies (yearly, quarterly, monthly). The total number of these series is 5,315, which is large enough but not too heavy for my PC. So, when I run something on those datasets, it becomes like a stress test for the forecasting approach, and I can see where it fails and how it can be improved. I consider this type of test a toy experiment — something to do before applying anything to real-world data.</p>
<p>In R, there are the Mcomp and Tcomp packages that contain these datasets, and I like how they are organised. You can do something like this:</p>
<pre class="decode">series <- Mcomp::M3[[2568]]
ourModel <- adam(series$x)
ourForecast <- forecast(model, h=series$h)
ourError <- series$xx -
            ourForecast$mean</pre>
<p>Each series from the dataset contains all the necessary attributes to run the experiment without trouble. This is easy and straightforward. Plus, I don’t need to download or organise any data — I just use the installed package.</p>
<p>When I started vibe coding in Python, I realised that I missed this functionality. So, with the help of Claude AI, I created a Python script to download the data from the Monash repository and organise it the way I liked. But then I realised two things, which motivated me to package it:</p>
<ol>
<li>I needed to drag this script with me to every project I worked on. It would be much easier to just run "pip install fcompdata" and forget about everything else.</li>
<li>Some series in the Monash repository differ from those in the R package.</li>
</ol>
<p>Wait, what?! Really?</p>
<p>Yes. The difference is tiny — it’s a matter of rounding. For example, series N350 from the M1 competition data (T169 from the quarterly data subset) has three digits in the R package and only two if downloaded from the Monash repository (Zenodo website).</p>
<p>Who cares?! It's just one digit difference, right?</p>
<p>Well, if you want to reproduce results across different languages, this tiny difference might become your nightmare. So, I care (and probably nobody else in the world), and I decided to create a proper Python package. You can now do this in Python and relax:</p>
<pre class="decode">pip install fcompdata

from fcompdata import M1, M3, Tourism
series = M3[2568]</pre>
<p>The "series" object is now an instance of the MCompSeries class that has the same attributes as in R: series.x, series.h, series.xx, etc.</p>
<p>As simple as that!</p>
<p>One more thing: I’ve added support for the M4 competition data, which — when imported — will be downloaded and formatted properly. The dataset is large (100k time series), and I personally don’t like it. I even wrote <a href="https://openforecast.org/2020/03/01/m-competitions-from-m4-to-m5-reservations-and-expectations/">a post about it back in 2020</a>. But if I want the package to be useful to a wider audience, I shouldn’t impose my personal preferences — you should decide for yourselves whether to use it or not.</p>
<p>P.S. Submitting to PyPI gave me a good understanding of the submission process for Python and why it can be such a mess. My package was published just a few seconds after submission — nobody looked at it, nobody ran any tests. CRAN does a variety of checks to ensure you don’t submit garbage. PyPI doesn’t care. So, I’ve gained more respect for CRAN after submitting this package to PyPI.</p>
<p>Message <a href="https://openforecast.org/2026/01/26/forecasting-competitions-datasets-in-python/">Forecasting Competitions Datasets in Python</a> first appeared on <a href="https://openforecast.org">OpenForecast</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://openforecast.org/2026/01/26/forecasting-competitions-datasets-in-python/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Online Detection of Forecast Model Inadequacies Using Forecast Errors</title>
		<link>https://openforecast.org/2025/06/11/online-detection-of-forecast-model-inadequacies-using-forecast-errors/</link>
					<comments>https://openforecast.org/2025/06/11/online-detection-of-forecast-model-inadequacies-using-forecast-errors/#respond</comments>
		
		<dc:creator><![CDATA[Ivan Svetunkov]]></dc:creator>
		<pubDate>Wed, 11 Jun 2025 12:04:14 +0000</pubDate>
				<category><![CDATA[Papers]]></category>
		<category><![CDATA[changepoint]]></category>
		<category><![CDATA[papers]]></category>
		<category><![CDATA[time series]]></category>
		<guid isPermaLink="false">https://openforecast.org/?p=3863</guid>

					<description><![CDATA[<p>There&#8217;s a large and fascinating area in time series analysis called &#8220;changepoint detection&#8221;. I hadn&#8217;t worked in this area before, but thanks to Rebecca Killick and Thomas Grundy, I contributed to the paper &#8220;Online Detection of Forecast Model Inadequacies Using Forecast Errors&#8220;, which has just been published in the Journal of Time Series Analysis. DISCLAIMER: ... <a title="Online Detection of Forecast Model Inadequacies Using Forecast Errors" class="read-more" href="https://openforecast.org/2025/06/11/online-detection-of-forecast-model-inadequacies-using-forecast-errors/" aria-label="Read more about Online Detection of Forecast Model Inadequacies Using Forecast Errors">Read more</a></p>
<p>Message <a href="https://openforecast.org/2025/06/11/online-detection-of-forecast-model-inadequacies-using-forecast-errors/">Online Detection of Forecast Model Inadequacies Using Forecast Errors</a> first appeared on <a href="https://openforecast.org">OpenForecast</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>There&#8217;s a large and fascinating area in time series analysis called &#8220;changepoint detection&#8221;. I hadn&#8217;t worked in this area before, but thanks to <a href="https://www.linkedin.com/in/rebecca-killick-0427b615a">Rebecca Killick</a> and <a href="https://www.linkedin.com/in/grundy95/">Thomas Grundy</a>, I contributed to the paper &#8220;<a href="https://doi.org/10.1111/jtsa.12843">Online Detection of Forecast Model Inadequacies Using Forecast Errors</a>&#8220;, which has just been published in the Journal of Time Series Analysis.</p>
<p><em>DISCLAIMER: the image in the post is taken from the paper, Figure 6, showing the proportion of GRP A&#038;E admissions, the forecast errors and two detectors.</em></p>
<p>Here&#8217;s a brief summary of what it&#8217;s about:</p>
<p>One of the common issues in forecasting is that there might be some serious changes in the data due to external factors (e.g. changes in consumer preferences). These changes are not always captured by the model, which can lead to reduced accuracy, increased variance, and ultimately to losses. The changepoint detection literature addresses this by trying to automatically identify such structural changes and alert analysts when intervention might be needed. This becomes especially useful when managing large numbers of time series, where visual inspection isn&#8217;t feasible.</p>
<p>However, most existing approaches either work directly on raw data or rely on a model,  which makes their usefulness limited.</p>
<p>Tom Grundy and Rebecca Killick came up with a better idea: analysing forecast errors instead. They kindly invited me to join as a co-author (since I know a thing or two about forecasting). The result is an online changepoint detection mechanism that is more universal and can be applied to classical statistical forecasting models and potentially to machine learning approaches.</p>
<p>The paper is quite technical and includes theoretical derivations, showing that the proposed method substantially reduces detection delay compared to some conventional approaches. We also evaluated its performance with ARIMA and ETS models on simulated data and provided several examples with real time series, demonstrating how it works.</p>
<p>The final version of the paper <a href="https://doi.org/10.1111/jtsa.12843">is available here</a>, while the <a href="https://doi.org/10.48550/arXiv.2502.14173">pre-print is here</a>.</p>
<p>Message <a href="https://openforecast.org/2025/06/11/online-detection-of-forecast-model-inadequacies-using-forecast-errors/">Online Detection of Forecast Model Inadequacies Using Forecast Errors</a> first appeared on <a href="https://openforecast.org">OpenForecast</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://openforecast.org/2025/06/11/online-detection-of-forecast-model-inadequacies-using-forecast-errors/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Is there such thing as &#8220;Time series forecasting&#8221;?</title>
		<link>https://openforecast.org/2024/10/15/is-there-such-thing-as-time-series-forecasting/</link>
					<comments>https://openforecast.org/2024/10/15/is-there-such-thing-as-time-series-forecasting/#respond</comments>
		
		<dc:creator><![CDATA[Ivan Svetunkov]]></dc:creator>
		<pubDate>Tue, 15 Oct 2024 17:27:07 +0000</pubDate>
				<category><![CDATA[Social media]]></category>
		<category><![CDATA[Theory of forecasting]]></category>
		<category><![CDATA[theory]]></category>
		<category><![CDATA[time series]]></category>
		<guid isPermaLink="false">https://openforecast.org/?p=3718</guid>

					<description><![CDATA[<p>Is there such thing as &#8220;Time series forecasting&#8221;? I personally don&#8217;t like this term and think that we should use a different one. Which one? Come with me in this post to find out. I understand why people use the term &#8220;Time series forecasting&#8221; &#8211; they want to show the type of data they work ... <a title="Is there such thing as &#8220;Time series forecasting&#8221;?" class="read-more" href="https://openforecast.org/2024/10/15/is-there-such-thing-as-time-series-forecasting/" aria-label="Read more about Is there such thing as &#8220;Time series forecasting&#8221;?">Read more</a></p>
<p>Message <a href="https://openforecast.org/2024/10/15/is-there-such-thing-as-time-series-forecasting/">Is there such thing as &#8220;Time series forecasting&#8221;?</a> first appeared on <a href="https://openforecast.org">OpenForecast</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Is there such thing as &#8220;Time series forecasting&#8221;? I personally don&#8217;t like this term and think that we should use a different one. Which one? Come with me in this post to find out.</p>
<p>I understand why people use the term &#8220;Time series forecasting&#8221; &#8211; they want to show the type of data they work with and explain what they are doing. But there is no point in forecasting outside of time series. According to one of the definitions (I previously mention it <a href="/adam/forecastingPlanningAnalytics.html">here</a> and <a href="/2024/05/01/what-is-forecasting/">here</a>), &#8220;<strong>forecast</strong> is a scientifically justified assertion about possible states of an object in the future&#8221;, while forecasting is just a process of producing forecasts. So, the time is already embedded in the definition, and there is no need to add &#8220;time series&#8221; to it.</p>
<p>Furthermore, you cannot do &#8220;cross-sectional forecasting&#8221;. It wouldn&#8217;t be forecasting per se, but rather scenarios generation. For example, you can say that based on the collected cross-sectional data across several shops in our chain on Monday, the increase of price of a product should cause a decline in sales on average by some amount. You can even say what sales to expect if the price and other variables were somehow defined. But you cannot say what to expect in next week based on this data, because the cross-sectional data itself does not have dynamic element. It is good for scenario planning, but useless in forecasting.</p>
<p>Furthermore, when you say &#8220;time series forecasting&#8221;, you imply a wide area without any specificity. But there are many areas, where you can do forecasting which differ substantially from one to another. Are you doing &#8220;demand forecasting&#8221;, &#8220;revenue forecasting&#8221;, &#8220;price forecasting&#8221;, &#8220;volatility forecasting&#8221; or something else? While some approaches can be applied to many of these areas, they still have their specificity and own set of instruments and rules. So, you should always keep the specific domain in mind, otherwise you might do something unreasonable. For example, GAMLSS works very well in energy demand forecasting, but it does not necessarily perform as well in supply chain forecasting, where you often have short history and lots of zeroes.</p>
<p>But most importantly, forecasting should not be done for the sake of itself (see my <a href="/2020/03/23/forecasting-for-the-sake-of-forecasting/">old post from COVID times on this</a>). If you &#8220;forecast a time series&#8221;, then you just do an exercise without a specific aim. Forecasting should inform decisions. Yes, you can show how cool you are, but is there anything beside that?</p>
<p>So, when I see statements like &#8220;This and that guy will talk in our webinar about time series forecasting&#8221;, I feel that the person has a poor understanding of forecasting itself and does not know what to talk about, because there is no specificity in such talk. It&#8217;s like presenting on the topic of &#8220;frequentist statistics&#8221; &#8211; too broad and too general.</p>
<p>I feel that this post might provoke some debate, so feel free to express yourselves in the comments! :)</p>
<p>Message <a href="https://openforecast.org/2024/10/15/is-there-such-thing-as-time-series-forecasting/">Is there such thing as &#8220;Time series forecasting&#8221;?</a> first appeared on <a href="https://openforecast.org">OpenForecast</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://openforecast.org/2024/10/15/is-there-such-thing-as-time-series-forecasting/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Seasonal or not?</title>
		<link>https://openforecast.org/2024/05/15/seasonal-or-not/</link>
					<comments>https://openforecast.org/2024/05/15/seasonal-or-not/#respond</comments>
		
		<dc:creator><![CDATA[Ivan Svetunkov]]></dc:creator>
		<pubDate>Wed, 15 May 2024 13:00:38 +0000</pubDate>
				<category><![CDATA[Social media]]></category>
		<category><![CDATA[Theory of forecasting]]></category>
		<category><![CDATA[Seasonality]]></category>
		<category><![CDATA[time series]]></category>
		<guid isPermaLink="false">https://openforecast.org/?p=3575</guid>

					<description><![CDATA[<p>Not every pattern that appears seasonal is genuinely seasonal. This means you don&#8217;t always require a seasonal model when you see repetitive patterns with fixed periodicity. How come? First things first, in forecasting, the term &#8220;seasonality&#8221; refers to any natural pattern repeating with some periodicity. For example, if you work in a hospital with A&#038;E ... <a title="Seasonal or not?" class="read-more" href="https://openforecast.org/2024/05/15/seasonal-or-not/" aria-label="Read more about Seasonal or not?">Read more</a></p>
<p>Message <a href="https://openforecast.org/2024/05/15/seasonal-or-not/">Seasonal or not?</a> first appeared on <a href="https://openforecast.org">OpenForecast</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Not every pattern that appears seasonal is genuinely seasonal. This means you don&#8217;t always require a seasonal model when you see repetitive patterns with fixed periodicity. How come?</p>
<p>First things first, in forecasting, the term &#8220;seasonality&#8221; refers to any natural pattern repeating with some periodicity. For example, if you work in a hospital with A&#038;E attendance, you know that every Monday has higher demand than other days, while weekends tend to have lower demand. This is a well known phenomenon: <a href="https://digital.nhs.uk/data-and-information/publications/statistical/hospital-accident--emergency-activity/2019-20/time-of-day">people have fun over the weekend and then go to hospital first thing in the morning of the work week</a>, so if you don&#8217;t want to get stuck in the hospital, don&#8217;t injure yourselves over the weekend!</p>
<p>Anyway, back to the main topic of this post!</p>
<p>Consider the following example:</p>
<figure id="attachment_3576" aria-describedby="caption-attachment-3576" style="width: 290px" class="wp-caption aligncenter"><a href="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2024/05/2024-05-14-Seasonality.png&amp;nocache=1"><img loading="lazy" decoding="async" src="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2024/05/2024-05-14-Seasonality-300x161.png&amp;nocache=1" alt="Seemingly seasonal time series" width="300" height="161" class="size-medium wp-image-3576" srcset="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2024/05/2024-05-14-Seasonality-300x161.png&amp;nocache=1 300w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2024/05/2024-05-14-Seasonality.png&amp;nocache=1 640w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-3576" class="wp-caption-text">Seemingly seasonal time series</figcaption></figure>
<p>This is a daily data. Is it seasonal? Without context, you might assume so: there&#8217;s a midweek peak followed by a decline, repeating weekly, so it must be seasonal, right? But what if I told you that this data is daily LinkedIn impressions of my posts? The peaks coincide with posts releases, and it is hard to tell from the image, but I released first three posts on Thursdays and then switched to Wednesdays, shifting peaks one day forward. So, this is not a seasonal data, but instead it is a classical life cycle (which can be described, for example, by the <a href="https://doi.org/10.1287/mnsc.15.5.215">Bass model</a>), repeating every week. It would be seasonal if the impressions happened naturally without me releasing anything. For example, number of visitors of my website has natural seasonality, because they happen without my interventions:</p>
<figure id="attachment_3577" aria-describedby="caption-attachment-3577" style="width: 290px" class="wp-caption aligncenter"><a href="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2024/05/2024-05-14-Seasonality-website.png&amp;nocache=1"><img loading="lazy" decoding="async" src="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2024/05/2024-05-14-Seasonality-website-300x130.png&amp;nocache=1" alt="The series with natural seasonality" width="300" height="130" class="size-medium wp-image-3577" srcset="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2024/05/2024-05-14-Seasonality-website-300x130.png&amp;nocache=1 300w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2024/05/2024-05-14-Seasonality-website.png&amp;nocache=1 734w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-3577" class="wp-caption-text">The series with natural seasonality</figcaption></figure>
<p>Bringing this to a business context, I have encountered several times the &#8220;spurious seasonality&#8221;. For example, one company, working with weekly data, used a seasonal model with periodicity of 4, because they noticed that at the end of each month, people get their salary and spend it, increasing the sales of the company. However this is not true seasonality, but rather a calendar event that happens seemingly periodically, on a specific day of month (not necessarily the same one).</p>
<p>Why is this important?</p>
<p>Relying on a seasonal model (like seasonal ETS or ARIMA) in such cases poses risks. If the periodicity shifts (e.g., salaries received on a different week), the model will produce misaligned forecasts (e.g., predicting an earlier peak). To address this, you should model such events with explanatory variables instead of seasonal indices. This way you will be able to control the timing of the event in your model and adjust it if needed.</p>
<p>So, next time you see a pattern that looks seasonal, think whether it happens naturally, or whether you are dealing with the spurious seasonality. Remember, the context is always important!</p>
<p>Message <a href="https://openforecast.org/2024/05/15/seasonal-or-not/">Seasonal or not?</a> first appeared on <a href="https://openforecast.org">OpenForecast</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://openforecast.org/2024/05/15/seasonal-or-not/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
