<?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>OpenForecast</title>
	<atom:link href="https://openforecast.org/feed/" rel="self" type="application/rss+xml" />
	<link>https://openforecast.org/</link>
	<description>How to look into the future</description>
	<lastBuildDate>Fri, 04 Sep 2026 12:44:49 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1</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>OpenForecast</title>
	<link>https://openforecast.org/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>smooth in python: Multiple Seasonal ARIMA</title>
		<link>https://openforecast.org/2026/09/10/smooth-in-python-multiple-seasonal-arima/</link>
					<comments>https://openforecast.org/2026/09/10/smooth-in-python-multiple-seasonal-arima/#respond</comments>
		
		<dc:creator><![CDATA[Ivan Svetunkov]]></dc:creator>
		<pubDate>Thu, 10 Sep 2026 08:01:44 +0000</pubDate>
				<category><![CDATA[ARIMA]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[smooth for Python]]></category>
		<category><![CDATA[Social media]]></category>
		<category><![CDATA[ADAM]]></category>
		<category><![CDATA[Seasonality]]></category>
		<category><![CDATA[smooth]]></category>
		<guid isPermaLink="false">https://openforecast.org/?p=4632</guid>

					<description><![CDATA[<p>ARIMA has been a workhorse for decades. But the standard implementations quietly hard-code assumptions: one seasonal cycle, Gaussian errors, regressors handled separately etc. This is fine for textbook well-behaved data. But what do you do when you face real data? The conventional implementations (statsmodels or pmdarima in Python, stats in R) do their job well: ... <a title="smooth in python: Multiple Seasonal ARIMA" class="read-more" href="https://openforecast.org/2026/09/10/smooth-in-python-multiple-seasonal-arima/" aria-label="Read more about smooth in python: Multiple Seasonal ARIMA">Read more</a></p>
<p>Message <a href="https://openforecast.org/2026/09/10/smooth-in-python-multiple-seasonal-arima/">smooth in python: Multiple Seasonal ARIMA</a> first appeared on <a href="https://openforecast.org">OpenForecast</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>ARIMA has been a workhorse for decades. But the standard implementations quietly hard-code assumptions: one seasonal cycle, Gaussian errors, regressors handled separately etc. This is fine for textbook well-behaved data. But what do you do when you face real data?</p>
<p>The conventional implementations (statsmodels or pmdarima in Python, stats in R) do their job well: they estimate SARIMA via likelihood, select orders automatically, and produce sensible forecasts for series with trend and one seasonality. Monthly or quarterly demand data is their home ground. The problems start when the data has more than one cycle: the classical SARIMA formulation has a slot for exactly one seasonal lag, so for the half-hourly electricity demand you would have to pick either the hour-of-day or the day-of-week cycle and discard the other.</p>
<p>MSARIMA (Multiple Seasonal ARIMA) solves this by reformulating ARIMA in the Single Source of Error (SSOE) state space form. Each AR, I, and MA element becomes a state in the model, so nothing restricts you to one seasonal lag: you can have as many as you want. In the smooth package, orders are specified per lag, matched to a lags list. Here is an example on the classical taylor series (half-hourly electricity demand in England and Wales), with two seasonal cycles:</p>
<p><code>from fcompdata import taylor<br />
from smooth import MSARIMA</p>
<p># MSARIMA(3,0,1)(0,1,1)[48](0,1,1)[336]
model = MSARIMA(<br />
    orders={"ar": [3, 0, 0], "i": [0, 1, 1], "ma": [1, 1, 1]},<br />
    lags=[1, 48, 336],<br />
    h=336, holdout=True<br />
)<br />
model.fit(taylor.y)<br />
model.predict(h=336, interval="prediction", level=0.95)</code></p>
<p>In Python, it takes only 1.5 seconds for the function to fit the model to the data and estimate its parameters, which is fast for a double-seasonal model fit to roughly four thousand observations:</p>
<figure id="attachment_4634" aria-describedby="caption-attachment-4634" 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/09/2026-04-30-smooth-posts-07-msarima.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/09/2026-04-30-smooth-posts-07-msarima-300x207.png&amp;nocache=1" alt="Python/R output of the double seasonal ARIMA" width="300" height="207" class="size-medium wp-image-4634" srcset="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2026/09/2026-04-30-smooth-posts-07-msarima-300x207.png&amp;nocache=1 300w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2026/09/2026-04-30-smooth-posts-07-msarima.png&amp;nocache=1 632w" sizes="(max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-4634" class="wp-caption-text">Python/R output of the double seasonal ARIMA</figcaption></figure>
<p>But the smooth implementation brings several additional practical benefits.</p>
<p>First, model.fit() accepts a matrix of external regressors via xreg, estimated jointly with the ARIMA components &#8211; no separate pre-filtering step. The logic and the code are identical to ETSX, <a href="/2026/05/05/smooth-in-python-ets-with-explanatory-variables/">which I covered earlier</a>.</p>
<p>Second, you can swap the loss: loss=&#8221;GTMSE&#8221; or &#8220;MSEh&#8221; optimises the model directly on multistep errors, with the same shrinkage mechanism I discussed in <a href="/2026/08/31/smooth-in-python-multistep-losses/">the post on multistep losses</a>.</p>
<p>Third, you don&#8217;t need to stick with the Gaussian distribution &#8211; you can choose other ones if you think that, for example, Laplace is more suitable for the data (<a href="/2026/05/27/smooth-in-python-non-normal-distributions-in-ets-arima/">this post</a>).</p>
<p>And there is one more thing. Because MSARIMA now lives in the same state space framework as ETS, the two models can be combined into one and compared with each other directly via information criteria. But that deserves a post of its own, so stay tuned.</p>
<p>Read <a href="/adam/ADAMARIMA.html">Chapter 9 on ADAM ARIMA</a>.<br />
Or check out the documentation in <a href="https://github.com/openforecast-org/smooth/wiki/MSARIMA">smooth wiki</a>.</p>
<p>An why not try it yourself? <code>pip install smooth</code></p>
<p>Message <a href="https://openforecast.org/2026/09/10/smooth-in-python-multiple-seasonal-arima/">smooth in python: Multiple Seasonal ARIMA</a> first appeared on <a href="https://openforecast.org">OpenForecast</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://openforecast.org/2026/09/10/smooth-in-python-multiple-seasonal-arima/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Demand Forecasting Principles training moved to November</title>
		<link>https://openforecast.org/2026/09/07/demand-forecasting-principles-training-moved-to-november/</link>
					<comments>https://openforecast.org/2026/09/07/demand-forecasting-principles-training-moved-to-november/#respond</comments>
		
		<dc:creator><![CDATA[Ivan Svetunkov]]></dc:creator>
		<pubDate>Mon, 07 Sep 2026 08:07:12 +0000</pubDate>
				<category><![CDATA[Training]]></category>
		<category><![CDATA[announcement]]></category>
		<category><![CDATA[training]]></category>
		<guid isPermaLink="false">https://openforecast.org/?p=4630</guid>

					<description><![CDATA[<p>This is a public service announcement! We had to shift things around, and our open course, Demand Forecasting Principles, now runs in November. Eight live sessions over four weeks, every Tuesday and Thursday from 3pm to 5pm UK time, starting 3 November. Nikos Kourentzes and I will deliver it together. The course is built around ... <a title="Demand Forecasting Principles training moved to November" class="read-more" href="https://openforecast.org/2026/09/07/demand-forecasting-principles-training-moved-to-november/" aria-label="Read more about Demand Forecasting Principles training moved to November">Read more</a></p>
<p>Message <a href="https://openforecast.org/2026/09/07/demand-forecasting-principles-training-moved-to-november/">Demand Forecasting Principles training moved to November</a> first appeared on <a href="https://openforecast.org">OpenForecast</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>This is a public service announcement! We had to shift things around, and our open course, Demand Forecasting Principles, now runs in November.</p>
<p>Eight live sessions over four weeks, every Tuesday and Thursday from 3pm to 5pm UK time, starting 3 November. Nikos Kourentzes and I will deliver it together.</p>
<p>The course is built around one idea: you cannot defend a forecast you do not understand. So we teach how the models actually work, starting from the time series components, moving to simple methods, exponential smoothing, the ETS framework, intermittent demand, forecast evaluation, judgemental adjustments, and finishing with combinations. We focus on the understanding instead of how to call specific function, so that you can use that knowledge in any support system you work with (SAP, SAS, Excel etc). Workshops between sessions come in both R and Python, and we review them together at the start of the next session.</p>
<p>The training is for demand planners, forecasting analysts, data scientists moving into demand forecasting, and supply chain professionals who need forecasts they can trust and challenge. No prior forecasting or statistics knowledge is assumed.</p>
<p>£750 per person, £600 each for two or more, £500 for students.</p>
<p>Details and booking can be found <a href="/training/demand-forecasting-principles/">here</a>.</p>
<p>Message <a href="https://openforecast.org/2026/09/07/demand-forecasting-principles-training-moved-to-november/">Demand Forecasting Principles training moved to November</a> first appeared on <a href="https://openforecast.org">OpenForecast</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://openforecast.org/2026/09/07/demand-forecasting-principles-training-moved-to-november/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Another important Naïve method</title>
		<link>https://openforecast.org/2026/09/03/another-important-naive-method/</link>
					<comments>https://openforecast.org/2026/09/03/another-important-naive-method/#respond</comments>
		
		<dc:creator><![CDATA[Ivan Svetunkov]]></dc:creator>
		<pubDate>Thu, 03 Sep 2026 09:05:47 +0000</pubDate>
				<category><![CDATA[Simple Methods]]></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=4614</guid>

					<description><![CDATA[<p>There is another forecasting method that is extremely popular, hard to beat, and has no parameters to estimate. It also has &#8220;Naïve&#8221; in its name. Do you know what I&#8217;m talking about? It is called &#8220;Seasonal Naïve&#8221;. While the simple Naïve copies the last observed actual into the future as a forecast, the seasonal one ... <a title="Another important Naïve method" class="read-more" href="https://openforecast.org/2026/09/03/another-important-naive-method/" aria-label="Read more about Another important Naïve method">Read more</a></p>
<p>Message <a href="https://openforecast.org/2026/09/03/another-important-naive-method/">Another important Naïve method</a> first appeared on <a href="https://openforecast.org">OpenForecast</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>There is another forecasting method that is extremely popular, hard to beat, and has no parameters to estimate. It also has &#8220;Naïve&#8221; in its name. Do you know what I&#8217;m talking about?</p>
<p>It is called &#8220;Seasonal Naïve&#8221;. While the simple Naïve copies the last observed actual into the future as a forecast, the seasonal one copies the whole seasonal shape of the data and uses it as a forecast. The logic is straightforward: if you see an increase in sales every January, why not use the actual sales of January 2025 as the forecast for January 2026? Simple, easy to do, and hard to beat in some cases, especially when your demand does not have high variability.</p>
<p>What this method doesn&#8217;t do is filter out the noise in the data. This means that if you had a promotion-driven spike this February, Seasonal Naïve will happily copy it into next February&#8217;s forecast. So, if you have some distinct components in your time series and/or effects of explanatory variables on sales, Seasonal Naïve might not be a good choice. But it remains an essential benchmark for any seasonal data.</p>
<p>I actually have an anecdote related to the Seasonal Naïve. Yves Sagaert and I were working on a paper, and we decided to apply our new method to data with multiple seasonality. It worked great, better than the double seasonal exponential smoothing and ARIMA. I was really hyped and was ready to celebrate, when Yves suggested trying the Seasonal Naïve as well. It&#8217;s good that he did, because it turned out that Seasonal Naïve beat them all, including our new method, without even blinking. This was a great demonstration of a principle I had been preaching to others: if you have seasonal data, always use Seasonal Naïve as a benchmark.</p>
<p>In the Demand Forecasting Principles course in November, we cover simple methods like this one properly, including when to stop trusting them. Details and booking can be found <a href="/training/demand-forecasting-principles/">here</a>.</p>
<p>Message <a href="https://openforecast.org/2026/09/03/another-important-naive-method/">Another important Naïve method</a> first appeared on <a href="https://openforecast.org">OpenForecast</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://openforecast.org/2026/09/03/another-important-naive-method/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>smooth in python: Multistep losses</title>
		<link>https://openforecast.org/2026/08/31/smooth-in-python-multistep-losses/</link>
					<comments>https://openforecast.org/2026/08/31/smooth-in-python-multistep-losses/#respond</comments>
		
		<dc:creator><![CDATA[Ivan Svetunkov]]></dc:creator>
		<pubDate>Mon, 31 Aug 2026 08:47:20 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[smooth for Python]]></category>
		<category><![CDATA[Social media]]></category>
		<category><![CDATA[ADAM]]></category>
		<category><![CDATA[ARIMA]]></category>
		<category><![CDATA[ETS]]></category>
		<category><![CDATA[extrapolation methods]]></category>
		<category><![CDATA[Loss functions]]></category>
		<guid isPermaLink="false">https://openforecast.org/?p=4605</guid>

					<description><![CDATA[<p>Why train a forecasting model on one-step-ahead errors when you care about 10-step-ahead accuracy? This is the core motivation behind multistep losses in dynamic models. This has connection with the so-called &#8220;direct forecasting strategy&#8221;. And here what it is and how to work with it in Python. Conventional maximum likelihood estimation minimises one-step-ahead errors. It ... <a title="smooth in python: Multistep losses" class="read-more" href="https://openforecast.org/2026/08/31/smooth-in-python-multistep-losses/" aria-label="Read more about smooth in python: Multistep losses">Read more</a></p>
<p>Message <a href="https://openforecast.org/2026/08/31/smooth-in-python-multistep-losses/">smooth in python: Multistep losses</a> first appeared on <a href="https://openforecast.org">OpenForecast</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Why train a forecasting model on one-step-ahead errors when you care about 10-step-ahead accuracy? This is the core motivation behind multistep losses in dynamic models. This has connection with the so-called &#8220;direct forecasting strategy&#8221;. And here what it is and how to work with it in Python.</p>
<p>Conventional maximum likelihood estimation minimises one-step-ahead errors. It works well in many standard situations and produces quite robust models. But in practice, you are rarely interested in just the next observation. Supply chains operate on lead times. Budgets are planned quarterly. The model you trained on one-step-ahed forecast is not the model that minimises your actual decision-relevant error.</p>
<p><strong>Multistep losses address this directly</strong>. Instead of minimising \(\mathrm{MSE}_1\), they minimise errors computed \(h\) steps ahead from every in-sample point. The key theoretical result (<a href="/2023/08/09/multi-step-estimators-and-shrinkage-effect-in-time-series-models/">Svetunkov et al., 2023</a>) is that this implies *shrinkage* of smoothing parameters towards zero — the model becomes less stochastic, less reactive to noise, and more stable across longer horizons. Shrinkage strength grows with \(h\) and weakens as sample size increases.</p>
<p>ADAM supports several multistep losses, each with a different trade-off:</p>
<ul>
<li><strong>MSEh</strong> — minimises the \(h\)-step-ahead variance only; strongest shrinkage, simplest interpretation;</li>
<li><strong>TMSE</strong> — sums \(\mathrm{MSE}_j\) for \(j=1,&#8230;,h\), i.e. sum of the MSEs between 1 and h steps ahead; balances all horizons but is dominated by longer-horizon errors;</li>
<li><strong>GTMSE</strong> — takes the log of each \(\mathrm{MSE}_j\) before summing; equalises the influence of short and long horizons, milder shrinkage;</li>
<li><strong>MSCE</strong> — minimises cumulative forecast error; directly relevant for inventory decisions with lead time \(h\);</li>
<li><strong>GPL</strong> — the full General Predictive Likelihood; accounts for the entire covariance structure of multistep errors and encompasses all the above.</li>
</ul>
<p>All of these are accessible in the Python <code>smooth</code> package with a single parameter change. Here is an example of the code with GTMSE:</p>
<pre class="decode">from fcompdata import AirPassengers
from smooth import ADAM

model = ADAM(model="AAA", lags=12, loss="GTMSE", h=12)
model.fit(AirPassengers.y)
model.predict(h=10)</pre>
<p>The <code>h</code> parameter sets the horizon over which multistep errors are evaluated during estimation. This allows connecting the loss with the specific decision horizon better. The image in the post shows the ETS model fit and forecasts, when estimated with several different losses, including the conventional one.</p>
<p>One practical note: on small samples, MSEh and MSCE can produce noticeably biased parameter estimates (closer to zero) due to strong shrinkage. GTMSE tends to be a safer default for small samples.</p>
<p>Read more about these and other losses in the <a href="/adam/multistepLosses.html">ADAM monograph</a> or in the <a href="https://github.com/openforecast-org/smooth/wiki">wiki of the package</a>.</p>
<p>Message <a href="https://openforecast.org/2026/08/31/smooth-in-python-multistep-losses/">smooth in python: Multistep losses</a> first appeared on <a href="https://openforecast.org">OpenForecast</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://openforecast.org/2026/08/31/smooth-in-python-multistep-losses/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Why Naïve is popular and important</title>
		<link>https://openforecast.org/2026/08/27/why-naive-is-popular-and-important/</link>
					<comments>https://openforecast.org/2026/08/27/why-naive-is-popular-and-important/#respond</comments>
		
		<dc:creator><![CDATA[Ivan Svetunkov]]></dc:creator>
		<pubDate>Thu, 27 Aug 2026 09:03:02 +0000</pubDate>
				<category><![CDATA[Simple Methods]]></category>
		<category><![CDATA[Social media]]></category>
		<category><![CDATA[Theory of forecasting]]></category>
		<category><![CDATA[Competitions]]></category>
		<category><![CDATA[extrapolation methods]]></category>
		<category><![CDATA[theory]]></category>
		<guid isPermaLink="false">https://openforecast.org/?p=4599</guid>

					<description><![CDATA[<p>There is one forecasting method that appears more often than any other in competitions and evaluations. An experienced forecaster will always use it as a benchmark. This method is called &#8220;Naïve&#8221;, and here is why it is popular and important. Naïve is a very simple forecasting method: the forecast equals to the last observed value. ... <a title="Why Naïve is popular and important" class="read-more" href="https://openforecast.org/2026/08/27/why-naive-is-popular-and-important/" aria-label="Read more about Why Naïve is popular and important">Read more</a></p>
<p>Message <a href="https://openforecast.org/2026/08/27/why-naive-is-popular-and-important/">Why Naïve is popular and important</a> first appeared on <a href="https://openforecast.org">OpenForecast</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>There is one forecasting method that appears more often than any other in competitions and evaluations. An experienced forecaster will always use it as a benchmark. This method is called &#8220;Naïve&#8221;, and here is why it is popular and important.</p>
<p>Naïve is a very simple forecasting method: the forecast equals to the last observed value. So, for example, if the room temperature at 12pm was 20 degrees Celsius, then Naive will forecast exactly the same temperature for 1pm, and it will usually be roughly right. That is what makes it dangerous to sophisticated models: it is often surprisingly hard to beat. If your model cannot beat Naïve, it is not worth deploying, no matter how sophisticated and beautiful it is.</p>
<p>This is why there is a well-established rule in forecasting: any proper evaluation should include simple benchmarks, and Naïve is the easiest one to implement, because it does not have any parameters to estimate and can work with the sample of one observation. This is why you will find it in every decent forecasting competition.</p>
<p>This is not a new finding, by the way. Back in 1979, Spyros Makridakis and Michèle Hibon <a href="https://doi.org/10.2307/2345077">published a paper</a>, showing on a set of 111 real time series that simple methods were often at least as accurate as the sophisticated statistical ones. The audience did not take it well: the discussion that followed was openly hostile, with eminent statisticians suggesting that the results said more about the authors&#8217; skills than about the methods. Spyros&#8217; response was to test the claim at a much larger scale, which is how the M-competitions were born. <a href="/2024/03/14/the-role-of-m-competitions-in-forecasting/">I wrote a post</a> about that some time ago. But the lesson survived the criticism: always compare your approach with the simple forecasting methods.</p>
<p>In our training course on Demand Forecasting Principles, we discuss this and other simple methods in more detail, showing where they work and where they fail. They are all building blocks for understanding applied forecasting.</p>
<p>The next course runs online in October, over Zoom. <a href="https://openforecast.org/training/demand-forecasting-principles/">Details and booking can be found here</a>.</p>
<p>P.S. There is one case where Naïve is not a good benchmark, read <a href="/2024/12/02/why-naive-is-not-a-good-benchmark-for-intermittent-demand/">this post</a>.</p>
<p>Message <a href="https://openforecast.org/2026/08/27/why-naive-is-popular-and-important/">Why Naïve is popular and important</a> first appeared on <a href="https://openforecast.org">OpenForecast</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://openforecast.org/2026/08/27/why-naive-is-popular-and-important/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Demand Forecasting Principles course, October 2026</title>
		<link>https://openforecast.org/2026/08/24/demand-forecasting-principles-course-october-2026/</link>
					<comments>https://openforecast.org/2026/08/24/demand-forecasting-principles-course-october-2026/#respond</comments>
		
		<dc:creator><![CDATA[Ivan Svetunkov]]></dc:creator>
		<pubDate>Mon, 24 Aug 2026 08:03:07 +0000</pubDate>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Training]]></category>
		<category><![CDATA[ETS]]></category>
		<category><![CDATA[extrapolation methods]]></category>
		<category><![CDATA[intermittent demand]]></category>
		<category><![CDATA[model selection]]></category>
		<category><![CDATA[teaching]]></category>
		<category><![CDATA[theory]]></category>
		<guid isPermaLink="false">https://openforecast.org/?p=4594</guid>

					<description><![CDATA[<p>Our demand forecasting course is back! This time under the OpenForecast umbrella. Since 2024, Kandrika Pritularga and I have run a demand forecasting principles course at the Centre for Marketing Analytics and Forecasting. We ran it three times, and it has received good reviews from the participants. They liked that the material was motivated by ... <a title="Demand Forecasting Principles course, October 2026" class="read-more" href="https://openforecast.org/2026/08/24/demand-forecasting-principles-course-october-2026/" aria-label="Read more about Demand Forecasting Principles course, October 2026">Read more</a></p>
<p>Message <a href="https://openforecast.org/2026/08/24/demand-forecasting-principles-course-october-2026/">Demand Forecasting Principles course, October 2026</a> first appeared on <a href="https://openforecast.org">OpenForecast</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Our demand forecasting course is back! This time under the OpenForecast umbrella.</p>
<p>Since 2024, Kandrika Pritularga and I have run a demand forecasting principles course at the Centre for Marketing Analytics and Forecasting. We ran it three times, and it has received good reviews from the participants. They liked that the material was motivated by real-life problems, that we explained it in detail, answered all the questions, and had helpful workshops. So, having discussed this with Kandrika and Nikos, we decided to continue the course, but now under the umbrella of OpenForecast, and this time Nikos Kourentzes and I will be teaching it together.</p>
<p>Demand Forecasting Principles is a four-week online course running in October 2026. We plan to have eight live Zoom sessions (two per week), with hands-on workshops in both R and Python between them. All sessions are recorded and shared with the participants for their reference.</p>
<p>The course will cover all the essentials of forecasting, starting from the forecasting principles, moving to the simple methods, ETS, intermittent demand, forecast evaluation, judgement, and finishing with forecast combinations.</p>
<h2>Who is this for?</h2>
<ul>
<li>demand planners,</li>
<li>data scientists,</li>
<li>business analysts</li>
<li>anyone who works with forecasts and wants to understand what happens behind the numbers.</li>
</ul>
<h2>What do you need to know?</h2>
<p>You don&#8217;t need prior knowledge of forecasting or statistics &#8211; we explain everything as we go, in as much detail as you need. Yet, experienced practitioners will still find plenty that is new: some of our previous participants were seasoned forecasters and said exactly that.</p>
<p>The details, programme, prices and booking are <a href="/training/demand-forecasting-principles/">available here</a>. Students get a discount.</p>
<p>Exact October dates will be announced next week, but you can already book your place.</p>
<p>If you are not sure whether the course fits you or your team, <a href="/contact-us/">get in touch</a>.</p>
<p>Message <a href="https://openforecast.org/2026/08/24/demand-forecasting-principles-course-october-2026/">Demand Forecasting Principles course, October 2026</a> first appeared on <a href="https://openforecast.org">OpenForecast</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://openforecast.org/2026/08/24/demand-forecasting-principles-course-october-2026/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Five things that determine your safety stock</title>
		<link>https://openforecast.org/2026/08/18/five-things-that-determine-your-safety-stock/</link>
					<comments>https://openforecast.org/2026/08/18/five-things-that-determine-your-safety-stock/#respond</comments>
		
		<dc:creator><![CDATA[Ivan Svetunkov]]></dc:creator>
		<pubDate>Tue, 18 Aug 2026 13:40:20 +0000</pubDate>
				<category><![CDATA[Inventory Management]]></category>
		<category><![CDATA[inventory]]></category>
		<category><![CDATA[safety stock]]></category>
		<category><![CDATA[service level]]></category>
		<category><![CDATA[theory]]></category>
		<guid isPermaLink="false">https://openforecast.org/?p=4573</guid>

					<description><![CDATA[<p>One of the most common questions we get from companies is &#8220;How much safety stock should we hold?&#8221; Companies usually want simple solutions, but the honest answer is that there is no universal number and no universal formula &#8211; depending on what you sell, how often you sell, how your operations are setup etc, you ... <a title="Five things that determine your safety stock" class="read-more" href="https://openforecast.org/2026/08/18/five-things-that-determine-your-safety-stock/" aria-label="Read more about Five things that determine your safety stock">Read more</a></p>
<p>Message <a href="https://openforecast.org/2026/08/18/five-things-that-determine-your-safety-stock/">Five things that determine your safety stock</a> first appeared on <a href="https://openforecast.org">OpenForecast</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>One of the most common questions we get from companies is &#8220;How much safety stock should we hold?&#8221; Companies usually want simple solutions, but the honest answer is that there is no universal number and no universal formula &#8211; depending on what you sell, how often you sell, how your operations are setup etc, you will get a different optimal solution. But that does not mean that the answer to this question does not have a structure. Whatever your product and industry is, the answer is always shaped by the same five elements:</p>
<ol>
<li>the forecast,</li>
<li>the variability of sales,</li>
<li>the target service level,</li>
<li>the lead time,</li>
<li> and the assumed demand distribution.</li>
</ol>
<p>Get any of them wrong, and you either overstock or end up with stockouts.</p>
<p>I have written up <a href="/resources/what-is-a-good-amount-of-safety-stock/">a longer answer to this question</a>, explaining how these five elements impact the safety stock formula, and provided a short example of an abstract calculation for an FMCG product.</p>
<p>Message <a href="https://openforecast.org/2026/08/18/five-things-that-determine-your-safety-stock/">Five things that determine your safety stock</a> first appeared on <a href="https://openforecast.org">OpenForecast</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://openforecast.org/2026/08/18/five-things-that-determine-your-safety-stock/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Website redesign</title>
		<link>https://openforecast.org/2026/08/17/website-redesign/</link>
					<comments>https://openforecast.org/2026/08/17/website-redesign/#respond</comments>
		
		<dc:creator><![CDATA[Ivan Svetunkov]]></dc:creator>
		<pubDate>Mon, 17 Aug 2026 11:43:34 +0000</pubDate>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[stories]]></category>
		<guid isPermaLink="false">https://openforecast.org/?p=4552</guid>

					<description><![CDATA[<p>Good news, everyone! I&#8217;ve turned my website into a company. But first, some history that explains why&#8230; Back in 1990, Robert Fildes joined Lancaster University and established the Centre for Marketing Analytics and Forecasting (called &#8220;Lancaster Centre for Forecasting&#8221; back then). The main idea of the centre was to bridge the gap between academia and ... <a title="Website redesign" class="read-more" href="https://openforecast.org/2026/08/17/website-redesign/" aria-label="Read more about Website redesign">Read more</a></p>
<p>Message <a href="https://openforecast.org/2026/08/17/website-redesign/">Website redesign</a> first appeared on <a href="https://openforecast.org">OpenForecast</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Good news, everyone! I&#8217;ve turned my website into a company. But first, some history that explains why&#8230;</p>
<p>Back in 1990, Robert Fildes joined Lancaster University and established the Centre for Marketing Analytics and Forecasting (called &#8220;Lancaster Centre for Forecasting&#8221; back then). The main idea of the centre was to bridge the gap between academia and practice in demand forecasting. The academic world rarely listens to the things that bother business, thinking that those problems are boring, while business usually finds &#8220;hacks&#8221; to the problems rather than proper solutions. Robert wanted to listen to what business has to say and to use rigorous scientific methods in solving the problems. And while this has been a challenging road, I think it was wildly successful. As Robert says himself, for many years it was a journey of a man and a dog (and we all know who that man was). But after a decade of work, the centre started growing and attracting such smart people as Sven Crone, Kostas Nikolopoulos, Juan Ramon Trapero, Fotios Petropoulos, Devon Barrow, Nikos Kourentzes, John Boylan and many others. If you pick a random person working in forecasting in academia, chances are they have some connection with the CMAF and Robert Fildes.</p>
<p>The centre has evolved, it has grown, and after some time, for some of us it was time to move on. Nikos left Lancaster University back in 2019, I left it in August 2026. Over the last couple of years, the CMAF has changed, and we feel that Robert&#8217;s legacy should continue, OpenForecast being one of the potential ways forward. And I&#8217;m glad to say that Robert has agreed to join OpenForecast as an advisor.</p>
<p>So, I have started building the OpenForecast company, following the same principles that Robert built CMAF on. I have updated my website, which has worked as my personal blog for the last 10 years or so, to explain what the company does and how we can help. This is now the website of a company offering demand forecasting and inventory consultancy, and practitioner training. The books (e.g. ADAM and the Statistics lecture notes) are still there, all the resources are still there, and the packages that I have developed together with my colleagues are still open source and will stay that way. And most importantly, the blog is still there — <a href="/blog/">it just lives in a different place now</a>.</p>
<p>What&#8217;s changed is that the whole website now has a company around it. So, if your company keeps running out of stock, faces over-ordering, or relies on a system nobody understands, get in touch. And stay tuned — I plan to write more posts on the topic.</p>
<p>Message <a href="https://openforecast.org/2026/08/17/website-redesign/">Website redesign</a> first appeared on <a href="https://openforecast.org">OpenForecast</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://openforecast.org/2026/08/17/website-redesign/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ISF2026: PTS Taxonomy of Multiple Source of Error State Space Models for Demand Forecasting</title>
		<link>https://openforecast.org/2026/07/06/isf2026-pts-taxonomy-of-multiple-source-of-error-state-space-models-for-demand-forecasting/</link>
					<comments>https://openforecast.org/2026/07/06/isf2026-pts-taxonomy-of-multiple-source-of-error-state-space-models-for-demand-forecasting/#respond</comments>
		
		<dc:creator><![CDATA[Ivan Svetunkov]]></dc:creator>
		<pubDate>Mon, 06 Jul 2026 11:15:48 +0000</pubDate>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[MUSE]]></category>
		<category><![CDATA[presentations]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[R]]></category>
		<guid isPermaLink="false">https://openforecast.org/?p=4164</guid>

					<description><![CDATA[<p>This time, at ISF2026, I presented the paper that I have worked on together with Juan Ramon Trapero and Diego Pedregal. The idea of the paper is to introduce a taxonomy of the models in the Multiple Sources of Error (MSOE) framework. In the Single Source of Errors one, there is ETS, in the MSOE, ... <a title="ISF2026: PTS Taxonomy of Multiple Source of Error State Space Models for Demand Forecasting" class="read-more" href="https://openforecast.org/2026/07/06/isf2026-pts-taxonomy-of-multiple-source-of-error-state-space-models-for-demand-forecasting/" aria-label="Read more about ISF2026: PTS Taxonomy of Multiple Source of Error State Space Models for Demand Forecasting">Read more</a></p>
<p>Message <a href="https://openforecast.org/2026/07/06/isf2026-pts-taxonomy-of-multiple-source-of-error-state-space-models-for-demand-forecasting/">ISF2026: PTS Taxonomy of Multiple Source of Error State Space Models for Demand Forecasting</a> first appeared on <a href="https://openforecast.org">OpenForecast</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>This time, at ISF2026, I presented the paper that I have worked on together with Juan Ramon Trapero and Diego Pedregal. The idea of the paper is to introduce a taxonomy of the models in the Multiple Sources of Error (MSOE) framework. In the Single Source of Errors one, there is ETS, in the MSOE, there is nothing. So, we have united the existing research in one taxonomy of &#8220;Power transform, Trend, and Seasonal&#8221; model &#8211; analogue of ETS, but in the MSOE world. We are now finalising the paper about this, hoping to submit to a peer reviewed journal soon.</p>
<p><strong>Abstract</strong>: State space models for time series forecasting have been dominated by the single source of error (SSOE) framework, most notably the ETS family of models. The idea of SSOE is to use the same error across all equations in the model. Multiple source of error (MSOE) models, by contrast, assign independent stochastic disturbances to each component &#8211; level, trend, and seasonality &#8211; offering a richer and more flexible representation of uncertainty, yet they lack a systematic, unifying taxonomy. This paper introduces the PTS taxonomy, a structured classification of MSOE state space models tailored to the specific properties of the MSOE setting. The taxonomy organises models along three dimensions: P (Power transform, based on the Box-Cox transformation), T (Trend, with options for none, local, global, or damped), and S (Seasonality, with options for none, discrete, or trigonometric), yielding up to 24 well-defined model variants. All models are cast within a general state space system and estimated via the Kalman filter using maximum likelihood, with model selection performed through standard information criteria. The framework also incorporates a robust outlier detection procedure covering additive outliers, level shifts, and slope changes, as well as natural handling of missing observations through the Kalman smoother. We illustrate the practical utility of the taxonomy through empirical experiments on the real life dataset, demonstrating that the PTS family is both theoretically coherent and empirically competitive with established alternatives.</p>
<p><a href="https://openforecast.org/wp-content/uploads/2026/07/2026-ISF-Svetunkov-PTS.pdf">Slides are here</a>.<br />
Package that implements PTS: <a href="https://github.com/config-i1/muse">muse</a></p>
<p>Message <a href="https://openforecast.org/2026/07/06/isf2026-pts-taxonomy-of-multiple-source-of-error-state-space-models-for-demand-forecasting/">ISF2026: PTS Taxonomy of Multiple Source of Error State Space Models for Demand Forecasting</a> first appeared on <a href="https://openforecast.org">OpenForecast</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://openforecast.org/2026/07/06/isf2026-pts-taxonomy-of-multiple-source-of-error-state-space-models-for-demand-forecasting/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>
	</channel>
</rss>
