<?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>Архивы Экстраполяционные методы - Open Forecasting</title>
	<atom:link href="https://openforecast.org/ru/category/ekstrapolyacionnye-metody/feed/" rel="self" type="application/rss+xml" />
	<link>https://openforecast.org/ru/category/ekstrapolyacionnye-metody/</link>
	<description>О том как смотреть в будущее</description>
	<lastBuildDate>Tue, 02 Aug 2022 12:27:23 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2015/08/cropped-usd-05-32x32.png&amp;nocache=1</url>
	<title>Архивы Экстраполяционные методы - Open Forecasting</title>
	<link>https://openforecast.org/ru/category/ekstrapolyacionnye-metody/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Комплексное Экспоненциальное Сглаживание</title>
		<link>https://openforecast.org/ru/2022/08/02/kompleksnoe-eksponencialnoe-sglazhivanie/</link>
					<comments>https://openforecast.org/ru/2022/08/02/kompleksnoe-eksponencialnoe-sglazhivanie/#comments</comments>
		
		<dc:creator><![CDATA[Ivan Svetunkov]]></dc:creator>
		<pubDate>Tue, 02 Aug 2022 12:23:39 +0000</pubDate>
				<category><![CDATA[CES]]></category>
		<category><![CDATA[R]]></category>
		<category><![CDATA[Пакет smooth для R]]></category>
		<category><![CDATA[Статьи]]></category>
		<category><![CDATA[статьи]]></category>
		<guid isPermaLink="false">https://openforecast.org/?p=3010</guid>

					<description><![CDATA[<p>Авторы: Ivan Svetunkov, Nikolaos Kourentzes, Keith Ord. Журнал: Naval Research Logistics Аннотация на английском: Exponential smoothing has been one of the most popular forecasting methods used to support various decisions in organisations, in activities such as inventory management, scheduling, revenue management and other areas. Although its relative simplicity and transparency have made it very attractive [&#8230;]</p>
<p>Сообщение <a href="https://openforecast.org/ru/2022/08/02/kompleksnoe-eksponencialnoe-sglazhivanie/">Комплексное Экспоненциальное Сглаживание</a> появились сначала на <a href="https://openforecast.org/ru">Open Forecasting</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><strong>Авторы</strong>: Ivan Svetunkov, Nikolaos Kourentzes, Keith Ord.</p>
<p><strong>Журнал</strong>: Naval Research Logistics</p>
<p><strong>Аннотация на английском</strong>: Exponential smoothing has been one of the most popular forecasting methods used to support various decisions in organisations, in activities such as inventory management, scheduling, revenue management and other areas. Although its relative simplicity and transparency have made it very attractive for research and practice, identifying the underlying trend remains challenging with significant impact on the resulting accuracy. This has resulted in the development of various modifications of trend models, introducing a model selection problem. With the aim of addressing this problem, we propose the Complex Exponential Smoothing (CES), based on the theory of functions of complex variables. The basic CES approach involves only two parameters and does not require a model selection procedure. Despite these simplifications, CES proves to be competitive with, or even superior to existing methods. We show that CES has several advantages over conventional exponential smoothing models: it can model and forecast both stationary and non-stationary processes, and CES can capture both level and trend cases, as defined in the conventional exponential smoothing classification. CES is evaluated on several forecasting competition datasets, demonstrating better performance than established benchmarks. We conclude that CES has desirable features for time series modelling and opens new promising avenues for research.</p>
<p><a href="/wp-content/uploads/2022/07/Svetunkov-et-al.-2022-Complex-Exponential-Smoothing.pdf">Ссылка на черновую версию статьи</a>.</p>
<p>DOI: <a href="https://doi.org/10.1002/nav.22074" targe="blank">10.1002/nav.22074</a></p>
<p><a href="/en/2022/08/02/the-long-and-winding-road-the-story-of-complex-exponential-smoothing/">История статьи на английском</a>.</p>
<h2>Идея Комплексного Экспоненциального Сглаживания</h2>
<p>Одна из фундаментальных идей в прогнозировании &#8212; это декомпозиция временного ряда на несколько ненаблюдаемых компонент (описание этого процесса есть, например, <a href="http://<a href="https://openforecast.org/adam/tsComponents.html">&#171;>в моей монографии</a>). Обычно говорят, что временной ряд содержит компоненты уровня, тренда, сезонности, а так же ошибку. Это популярное разбиение на компоненты и используется, например, при построении <a href="https://openforecast.org/adam/ETSConventional.html">ETS</a>, внутри которой выбор подходящих компонент осуществляется <a href="https://openforecast.org/adam/ETSSelection.html">на основе информационных критериев</a>. Однако, не у всех временных рядов есть такое чёткое разделение на компоненты, да и само разделение можно считать условным. Например, ряд со слабым трендом на практике может быть не отличим от ряда с быстро меняющимся уровнем. Кроме того, в реальности всё немного сложнее, чем нам кажется и взаимодействие компонент может быть нелинейным.</p>
<p>Комплексное Экспоненциальное Сглаживание (КЭС) моделирует нелинейность во временных рядах и позволяет описывать структуру ряда по-другому. Вот как выглядит модель КЭС математически:<br />
\begin{equation} \label{eq:cesalgebraic}<br />
	\hat{y}_{t} + i \hat{e}_{t} = (\alpha_0 + i\alpha_1)(y_{t-1} + i e_{t-1}) + (1 &#8212; \alpha_0 + i &#8212; i\alpha_1)(\hat{y}_{t-1} + i \hat{e}_{t-1}) ,<br />
\end{equation}<br />
где \(y_t\) &#8212; это фактическое значение, \(e_t\) &#8212; это ошибка прогноза, \(\hat{y}_t\) &#8212; прогнозируемое значение на шаг вперёд, \(\hat{e}_t\) &#8212; это прокси прошлых ошибок, \(\alpha_0\) и \(\alpha_1\) &#8212; это постоянные сглаживания, а \(i\) &#8212; это мнимая единица, число удовлетворяющее уравнению \(i^2=-1\). Из-за использования комплексных переменных, модель позволяет распределять веса во времени нелинейным образом. Это становится более понятно, если в правую часть уравнения \eqref{eq:cesalgebraic} включить само же уравнение, затем повторить это и получить:<br />
\begin{equation} \label{eq:cesalgebraicExpanded}<br />
	\begin{aligned}<br />
		\hat{y}_{t} + i \hat{e}_{t} = &#038; (\alpha_0 + i\alpha_1)(y_{t-1} + i e_{t-1}) + \\<br />
					      &#038; (\alpha_0 + i\alpha_1) (1 &#8212; \alpha_0 + i &#8212; i\alpha_1) (y_{t-2} + i e_{t-2}) + \\<br />
					      &#038; (\alpha_0 + i\alpha_1) (1 &#8212; \alpha_0 + i &#8212; i\alpha_1)^2 (y_{t-3} + i e_{t-3}) + \\<br />
					      &#038; &#8230; + \\<br />
					      &#038; (\alpha_0 + i\alpha_1) (1 &#8212; \alpha_0 + i &#8212; i\alpha_1)^{t-2} (y_{1} + i e_{1}) + \\<br />
					      &#038; (1 &#8212; \alpha_0 + i &#8212; i\alpha_1)^{t-1} (\hat{y}_{1} + i \hat{e}_{1}) .<br />
	\end{aligned}<br />
\end{equation}<br />
Возведение комплексного числа \((1 &#8212; \alpha_0 + i &#8212; i\alpha_1)\) в степень в формуле выше позволяет распределять веса между наблюдениями нелинейным образом. Графически это может быть представлено следующим образом (синяя линия &#8212; веса для фактических значений, зелёная &#8212; для прогнозных ошибок):</p>
<div id="attachment_2978" style="width: 650px" class="wp-caption aligncenter"><a href="/wp-content/uploads/2022/07/cspweights.png"><img fetchpriority="high" decoding="async" aria-describedby="caption-attachment-2978" src="/wp-content/uploads/2022/07/cspweights-1024x410.png" alt="" width="640" height="256" class="size-large wp-image-2978" srcset="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2022/07/cspweights-1024x410.png&amp;nocache=1 1024w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2022/07/cspweights-300x120.png&amp;nocache=1 300w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2022/07/cspweights-768x307.png&amp;nocache=1 768w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2022/07/cspweights-1536x614.png&amp;nocache=1 1536w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2022/07/cspweights-2048x819.png&amp;nocache=1 2048w" sizes="(max-width: 640px) 100vw, 640px" /></a><p id="caption-attachment-2978" class="wp-caption-text">Распределение весов между наблюдениями на комплексной и действительной плоскостях. Синяя линия &#8212; веса для фактических значений, зелёная &#8212; для прогнозных ошибок.</p></div>
<p>В зависимости от значение комплексной постоянной сглаживания \(\alpha_0 + i\alpha_1\), распределение весов будет иметь разный вид. Но оно не обязательно должно быть гармоническим как на рисунке выше, оно может и убывать по классической экспоненте (как у простого экспоненциального сглаживания ака метода Брауна). Именно это гибкое распределение весов даёт КЭС особенную гибкость и позволяет ему быть эффективно применимым как к стационарным, так и нестационарным данным без переключения между компонентами временного ряда.</p>
<p>В опубликованной статье, мы также обсуждаем сезонную модификацию КЭС, которая позволяет моделировать как аддитивную, так и мультипликативную сезонность. Я не привожу формулы и детальное объяснение в данной статье, рекомендую всех заинтересованных обратиться к <a href="/wp-content/uploads/2022/07/Svetunkov-et-al.-2022-Complex-Exponential-Smoothing.pdf">первоисточнику</a>.</p>
<h2>Пример в R</h2>
<p>В R, КЭС реализовано в функции <code>ces()</code> пакета <code>smooth</code>. В том же пакете есть функция <code>auto.ces()</code>, позволяющая автоматически выбирать между не сезонными и сезонными моделями КЭС на основе информационных критериев. Синтакс функций похож на синтекс <code>es()</code> и <code>adam()</code>. Вот пример применения функции:</p>
<pre class="decode">cesModel <- smooth::auto.ces(BJsales, holdout=TRUE, h=12)
cesModel</pre>
<pre>Time elapsed: 0.05 seconds
Model estimated: CES(n)
a0 + ia1: 1.9981+1.0034i
Initial values were produced using backcasting.

Loss function type: likelihood; Loss function value: 249.4613
Error standard deviation: 1.4914
Sample size: 138
Number of estimated parameters: 3
Number of degrees of freedom: 135
Information criteria:
     AIC     AICc      BIC     BICc 
504.9227 505.1018 513.7045 514.1457 

Forecast errors:
MPE: 0%; sCE: 0.7%; Asymmetry: -5%; MAPE: 0.4%
MASE: 0.857; sMAE: 0.4%; sMSE: 0%; rMAE: 0.329; rRMSE: 0.338</pre>
<p>Описание выше уже как-то обсуждалось <a href="/2016/11/02/smooth-package-for-r-es-function-part-ii-pure-additive-models-ru/">в одном из прошлых постов</a> на примере функции <code>es()</code>. Главное отличие между тем, что возвращают функции <code>es()</code> и <code>ces()</code> - это параметры. В данном случае, мы видим, что комплексная постоянная сглаживания \(\alpha_0 + i\alpha_1 = 1.9981 + i 1.0034\). Полученную модель можно использовать в прогнозировании, например, так:</p>
<pre class="decode">cesModel |> forecast(h=12, interval="p") |> plot()</pre>
<p>что даст такой график:</p>
<div id="attachment_3007" style="width: 310px" class="wp-caption aligncenter"><a href="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2022/07/cesForecast.png&amp;nocache=1"><img decoding="async" aria-describedby="caption-attachment-3007" src="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2022/07/cesForecast-300x210.png&amp;nocache=1" alt="" width="300" height="210" class="size-medium wp-image-3007" srcset="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2022/07/cesForecast-300x210.png&amp;nocache=1 300w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2022/07/cesForecast-768x538.png&amp;nocache=1 768w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2022/07/cesForecast.png&amp;nocache=1 1000w" sizes="(max-width: 300px) 100vw, 300px" /></a><p id="caption-attachment-3007" class="wp-caption-text">Прогноз КЭС для ряда продаж из книги Box & Jenkins.</p></div>
<p>Сама функция <code>ces()</code> не изменилась с момента окончания мною PhD в 2016 году, так что результаты, например, <a href="/en/2018/01/01/smooth-functions-in-2017/">вот этого</a> сравнения всё ещё актуальны. Модель не обязательно даёт самые точные прогнозы во всех случаях, но как, например, было показано в статье <a href="https://doi.org/10.1016/j.ijforecast.2019.01.006">Petropoulos & Svetunkov (2020)</a>, она привносит в комбинации то, чего не привносят другие модели. Всё из-за того, что КЭС позволяет хорошо вылавливать долгосрочные тенденции во временных рядах.</p>
<h2>Послесловие</h2>
<p>В качестве послесловия, я хотел бы выразить свои благодарности нескольким людям. Во-первых, это <a href="http://kourentzes.com/forecasting/">Никос Курентзес</a>, который поверил в мою модель в далёком 2012 году и поддерживал меня все эти годы без колебаний. Во-вторых, это <a href="https://scholar.google.com/citations?user=-0p44ukAAAAJ">Кит Орд</a>, который помог мне в некоторых выкладках и затем оказал серьёзную поддержку статье и помог придать ей ту форму, которая она имеет в конце концов. Ну, и, конечно же, я благодарен своему папе, <a href="https://sergey.svetunkov.ru/">Сергею Геннадьевичу Светунькову</a>, который направлял меня в моей исследовательской деятельности в самом её начале и верил в меня и мои исследования ещё тогда, когда никто о них ничего не подозревал.</p>
<p>Если вы хотите узнать больше про модель, вам придётся прочитать <a href="/wp-content/uploads/2022/07/Svetunkov-et-al.-2022-Complex-Exponential-Smoothing.pdf">статью на английском</a> (она также доступна <a href="https://doi.org/10.1002/nav.22074" targe="blank">онлайн</a> на сайте издателя) или же прочитать на английском <a href="/en/2022/08/02/the-long-and-winding-road-the-story-of-complex-exponential-smoothing/">историю статьи</a>.</p>
<p>Сообщение <a href="https://openforecast.org/ru/2022/08/02/kompleksnoe-eksponencialnoe-sglazhivanie/">Комплексное Экспоненциальное Сглаживание</a> появились сначала на <a href="https://openforecast.org/ru">Open Forecasting</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://openforecast.org/ru/2022/08/02/kompleksnoe-eksponencialnoe-sglazhivanie/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>ISF 2019, Салоники, Греция</title>
		<link>https://openforecast.org/ru/2019/07/03/isf-2019/</link>
					<comments>https://openforecast.org/ru/2019/07/03/isf-2019/#comments</comments>
		
		<dc:creator><![CDATA[Ivan Svetunkov]]></dc:creator>
		<pubDate>Wed, 03 Jul 2019 09:12:25 +0000</pubDate>
				<category><![CDATA[Конференции]]></category>
		<category><![CDATA[Экстраполяционные методы]]></category>
		<category><![CDATA[ISF]]></category>
		<category><![CDATA[конференции]]></category>
		<category><![CDATA[презентация]]></category>
		<category><![CDATA[прерывистый спрос]]></category>
		<guid isPermaLink="false">https://openforecast.org/?p=1999</guid>

					<description><![CDATA[<p>В этот раз я презентовал спин-офф исследования на тему прерывистого спроса. Идея исследования в том, чтобы в случае с сезонным прерывистым спросом (часто встречающимся в розничной торговле, например, при продаже арбузов и дынь) использовать регрессии с смешанными моделями (например, логистическая + лог-нормальная регрессии). Результаты получаются интересные, но пока не окончательные, так как у меня мало [&#8230;]</p>
<p>Сообщение <a href="https://openforecast.org/ru/2019/07/03/isf-2019/">ISF 2019, Салоники, Греция</a> появились сначала на <a href="https://openforecast.org/ru">Open Forecasting</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>В этот раз я презентовал спин-офф исследования на тему прерывистого спроса. Идея исследования в том, чтобы в случае с сезонным прерывистым спросом (часто встречающимся в розничной торговле, например, при продаже арбузов и дынь) использовать регрессии с смешанными моделями (например, логистическая + лог-нормальная регрессии). Результаты получаются интересные, но пока не окончательные, так как у меня мало данных, и достать их не откуда (все компании-ритейлеры, с которыми я пока работал, жадины). Так что, если у вас есть, например, что-нибудь вот такое:<br />
<div id="attachment_2004" style="width: 310px" class="wp-caption alignnone"><a href="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2019/07/tomatoDataExport.jpg&amp;nocache=1"><img decoding="async" aria-describedby="caption-attachment-2004" src="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2019/07/tomatoDataExport-300x180.jpg&amp;nocache=1" alt="" width="300" height="180" class="size-medium wp-image-2004" srcset="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2019/07/tomatoDataExport-300x180.jpg&amp;nocache=1 300w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2019/07/tomatoDataExport-768x461.jpg&amp;nocache=1 768w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2019/07/tomatoDataExport-1024x614.jpg&amp;nocache=1 1024w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2019/07/tomatoDataExport.jpg&amp;nocache=1 2000w" sizes="(max-width: 300px) 100vw, 300px" /></a><p id="caption-attachment-2004" class="wp-caption-text">Продажи помидоров в магазине розничной торговли</p></div>
и вы хотите со мной поработать, пожалуйста, дайте знать.</p>
<p>В любом случае, <a href="/wp-content/uploads/2019/07/2019-ISF-Svetunkov-Mixture-Distribution.pdf">вот слайды моей презентации</a>.</p>
<p>Сообщение <a href="https://openforecast.org/ru/2019/07/03/isf-2019/">ISF 2019, Салоники, Греция</a> появились сначала на <a href="https://openforecast.org/ru">Open Forecasting</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://openforecast.org/ru/2019/07/03/isf-2019/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>SMUG2019</title>
		<link>https://openforecast.org/ru/2019/04/19/smug2019-2/</link>
					<comments>https://openforecast.org/ru/2019/04/19/smug2019-2/#respond</comments>
		
		<dc:creator><![CDATA[Ivan Svetunkov]]></dc:creator>
		<pubDate>Fri, 19 Apr 2019 15:47:25 +0000</pubDate>
				<category><![CDATA[ARIMA]]></category>
		<category><![CDATA[Искусственный интеллект и машинное обучение]]></category>
		<category><![CDATA[Конференции]]></category>
		<category><![CDATA[ИИ и МО]]></category>
		<category><![CDATA[конференции]]></category>
		<category><![CDATA[презентация]]></category>
		<guid isPermaLink="false">https://openforecast.org/?p=1962</guid>

					<description><![CDATA[<p>Недавно я был приглашён в качестве выступающего на конференцию SMUG2019 (SMoothie Users Group), организованную компанией Demand Works в Нью Йорке. Меня попросили сделать презентации на две темы: &#171;Модель ARIMA в форме пространства состояний для прогнозирования в цепях поставок&#171;, на основе которой я помог разработать компании специальный модель, &#171;Искусственный интеллект в бизнесе&#187; &#8212; одна из тех [&#8230;]</p>
<p>Сообщение <a href="https://openforecast.org/ru/2019/04/19/smug2019-2/">SMUG2019</a> появились сначала на <a href="https://openforecast.org/ru">Open Forecasting</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Недавно я был приглашён в качестве выступающего на конференцию SMUG2019 (SMoothie Users Group), организованную компанией Demand Works в Нью Йорке. Меня попросили сделать презентации на две темы:</p>
<ol>
<li>&#171;<a href="/en/2019/04/05/state-space-arima-for-supply-chain-forecasting/">Модель ARIMA в форме пространства состояний для прогнозирования в цепях поставок</a>&#171;, на основе которой я помог разработать компании специальный модель,</li>
<li>&#171;Искусственный интеллект в бизнесе&#187; &#8212; одна из тех горячих тем, о которых компания хотела узнать побольше.</li>
</ol>
<div id="attachment_1957" style="width: 310px" class="wp-caption alignnone"><a href="/wp-content/uploads/2019/04/2019-04-18-NY-SMUG.jpeg"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1957" class="size-medium wp-image-1957" src="/wp-content/uploads/2019/04/2019-04-18-NY-SMUG-300x219.jpeg" alt="" width="300" height="219" srcset="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2019/04/2019-04-18-NY-SMUG-300x219.jpeg&amp;nocache=1 300w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2019/04/2019-04-18-NY-SMUG.jpeg&amp;nocache=1 768w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><p id="caption-attachment-1957" class="wp-caption-text">Презентация на SMUG2019</p></div>
<p>Сама конференция была достаточно интересной, из неё стало понятно, чем именно занимается компания и каких принципов придерживается. Вообще, судя по всему, они делают достаточно хорошую работу в области прогнозирования и управления запасами, а так же хорошо поддерживают пользователей своего софта. Кроме того, я наконец смог встретиться с основателями компании, с которыми до того общался только по Скайпу. Я так же познакомился с другими сотрудниками компании и с несколькими представителями компаний-пользователей Smoothie. В целом, это была интересная конференция, благодаря которой я теперь лучше понимаю компанию и людей вокруг неё. С удовольствием поучаствую и в других подобных мероприятиях, если они меня ещё раз пригласят.</p>
<p>Что касается самой презентации, то она, вроде бы, прошла хорошо. Слушатели были довольны. Вот слайды с презентации:</p>
<ol>
<li><a href="/wp-content/uploads/2019/04/SMUG2019-Svetunkov-ARIMA.pdf">SMUG2019 &#8212; Svetunkov &#8212; ARIMA</a></li>
<li><a href="/wp-content/uploads/2019/04/SMUG2019-Svetunkov-AI-in-Business.pdf">SMUG2019 &#8212; Svetunkov &#8212; AI in Business</a></li>
</ol>
<p>Сообщение <a href="https://openforecast.org/ru/2019/04/19/smug2019-2/">SMUG2019</a> появились сначала на <a href="https://openforecast.org/ru">Open Forecasting</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://openforecast.org/ru/2019/04/19/smug2019-2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Презентация на OR60. Экспоненциальное сглаживание: прошлое, настоящее и будущее</title>
		<link>https://openforecast.org/ru/2018/09/18/prezentaciya-na-or60-eksponencialnoe-sg/</link>
					<comments>https://openforecast.org/ru/2018/09/18/prezentaciya-na-or60-eksponencialnoe-sg/#respond</comments>
		
		<dc:creator><![CDATA[Ivan Svetunkov]]></dc:creator>
		<pubDate>Tue, 18 Sep 2018 21:01:31 +0000</pubDate>
				<category><![CDATA[GUM]]></category>
		<category><![CDATA[Конференции]]></category>
		<category><![CDATA[Экстраполяционные методы]]></category>
		<category><![CDATA[ETS]]></category>
		<category><![CDATA[OR]]></category>
		<category><![CDATA[конференции]]></category>
		<category><![CDATA[презентация]]></category>
		<guid isPermaLink="false">https://openforecast.org/?p=1874</guid>

					<description><![CDATA[<p>Роберт Файлдс попросил меня приготовить обзор на тему экспоненциального сглаживания для конференции OR60, которая прошла в Ланкастере c 11 по 13 сентября. Я решил сделать обзор в формате &#171;прошлое &#8212; настоящее &#8212; будущее&#187;, добавив в последнюю часть модель, которую мы разрабатываем с Никосом (GUM &#8212; Generalised Univariate Model, что-то типа &#171;Обобщённая одномерная модель&#187;). В конце [&#8230;]</p>
<p>Сообщение <a href="https://openforecast.org/ru/2018/09/18/prezentaciya-na-or60-eksponencialnoe-sg/">Презентация на OR60. Экспоненциальное сглаживание: прошлое, настоящее и будущее</a> появились сначала на <a href="https://openforecast.org/ru">Open Forecasting</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Роберт Файлдс попросил меня приготовить обзор на тему экспоненциального сглаживания для конференции OR60, которая прошла в Ланкастере c 11 по 13 сентября. Я решил сделать обзор в формате &#171;прошлое &#8212; настоящее &#8212; будущее&#187;, добавив в последнюю часть модель, которую мы разрабатываем с Никосом (GUM &#8212; Generalised Univariate Model, что-то типа &#171;Обобщённая одномерная модель&#187;). В конце концов получилась очень плотная презентация, и у меня едва получилось втиснуть её в предоставленные мне полчаса.</p>
<p>Вот аннотация на английском:</p>
<p>Exponential smoothing has been known in both theoretical and practical forecasting for more than 60 years. It has evolved substantially from a simple exponential smoothing method, aiming at dealing with level data to a state-space framework, covering various time series characteristics. In this presentation we discuss the key milestones in the development of exponential smoothing, show the connections between the exponential smoothing and the other forecasting models and, finally, propose a more general framework that can potentially encompass all the existing forecasting models, called &#171;Generalised Univariate Model&#187;.</p>
<p>А вот и <a href="/wp-content/uploads/2018/09/2018-OR60-Svetunkov-GUM.pdf">слайды презентации</a>.</p>
<p>Сообщение <a href="https://openforecast.org/ru/2018/09/18/prezentaciya-na-or60-eksponencialnoe-sg/">Презентация на OR60. Экспоненциальное сглаживание: прошлое, настоящее и будущее</a> появились сначала на <a href="https://openforecast.org/ru">Open Forecasting</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://openforecast.org/ru/2018/09/18/prezentaciya-na-or60-eksponencialnoe-sg/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Пакет «smooth» для R. Прерывистый спрос. Часть 1. Введение</title>
		<link>https://openforecast.org/ru/2018/09/18/intermittent-state-space-intro/</link>
					<comments>https://openforecast.org/ru/2018/09/18/intermittent-state-space-intro/#respond</comments>
		
		<dc:creator><![CDATA[Ivan Svetunkov]]></dc:creator>
		<pubDate>Tue, 18 Sep 2018 20:52:14 +0000</pubDate>
				<category><![CDATA[R]]></category>
		<category><![CDATA[О функции es()]]></category>
		<category><![CDATA[Пакет smooth для R]]></category>
		<category><![CDATA[Экстраполяционные методы]]></category>
		<category><![CDATA[smooth]]></category>
		<category><![CDATA[прерывистый спрос]]></category>
		<guid isPermaLink="false">https://openforecast.org/?p=1867</guid>

					<description><![CDATA[<p>ОБНОВЛЕНИЕ: Начиная с версии smooth v 2.5.0, модели и соответствующие функции были изменены. Теперь вместо intermittent и iss() в пакете существуют occurrence и oes(). Пожалуйста, используйте новые функции и новые параметры. Старый функционал будет удален в следующей версии пакета. Этот статья была обновлена 25 апреля 2019 года. Одно из преимуществ функций пакета smooth заключается во [&#8230;]</p>
<p>Сообщение <a href="https://openforecast.org/ru/2018/09/18/intermittent-state-space-intro/">Пакет «smooth» для R. Прерывистый спрос. Часть 1. Введение</a> появились сначала на <a href="https://openforecast.org/ru">Open Forecasting</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><strong>ОБНОВЛЕНИЕ</strong>: Начиная с версии smooth v 2.5.0, модели и соответствующие функции были изменены. Теперь вместо <span class="lang:r decode:true crayon-inline">intermittent</span> и <span class="lang:r decode:true crayon-inline">iss()</span> в пакете существуют <span class="lang:r decode:true crayon-inline">occurrence</span> и <span class="lang:r decode:true crayon-inline">oes()</span>. Пожалуйста, используйте новые функции и новые параметры. Старый функционал будет удален в следующей версии пакета. Этот статья была обновлена 25 апреля 2019 года.</p>
<p>Одно из преимуществ функций пакета <span class="lang:r decode:true crayon-inline">smooth</span> заключается во встроенной возможности работать с прерывистыми данными и с данными с периодически возникающими нулями.</p>
<p>Прерывистый спрос &#8212; это такой спрос на продукцию, который происходит нерегулярно (<a href="/en/2017/11/07/multiplicative-state-space-models-for-intermittent-time-series/">Svetuknov and Boylan, 2017</a>). Например, продажи зелёной губной помады имеют такой характер: её редко, кто покупает, но это всё-таки происходит время от времени. Данные по продажам такой продукции будут содержать много нулей, и предсказать, когда именно произойдёт продажа такого товара &#8212; крайне затруднительно. Может показаться, что я беру в пример какой-то экзотический товар, а значит и проблема прерывистого спроса надумана. Но вообще-то это не так. Если обратиться к тому, что происходит сейчас в сфере ритейла, то на себя обращает внимание увеличение частоты измерений данных. Раньше была возможность только сохранять количество проданных каких-нибудь хлопьев в неделю, сейчас же можно измерять продажи хоть раз в минуту (можно и чаще, но надо ли?). А как предсказать, когда купят хлопья в магазине, когда данные измеряются в такой частоте? В общем, проблема есть, и она вполне реальна.</p>
<p>Другая типичная проблема &#8212; это продукты, продающиеся сезонно. Например, продажи арбузов летом будут носить вполне себе непрерывный характер, а вот в остальное время года &#8212; не факт: в какие-то сезоны их не будет физически (естественные нули), а в другие спрос на них будет нестабилен.</p>
<p>В общем, со всеми этими интересными особенностями как раз и призваны справиться функции пакета <span class="lang:r decode:true crayon-inline">smooth</span>. Для этого в нём реализованы так называемые модели со смешанными распределениями.</p>
<p>В данной статье мы обсудим самую простую, можно сказать, базовую модель, реализованную в пакете.</p>
<p>Здесь мы будем делать акцент на прерывистый спрос, но вообще-то функции хорошо работают и в других случаях, в которых возникают нули в данных.</p>
<h3>Модель</h3>
<p>Во-первых, стоит заметить, что всё, что мы будем далее обсуждать основано на идее разделения ряда прерывистого спроса на две части (<a href="https://doi.org/10.2307/3007885" rel="noopener noreferrer" target="_blank">Croston, 1972</a>):</p>
<ol>
<li>Появление спроса, которая представлена бинарной переменной (0 &#8212; спроса нет, 1 &#8212; спрос есть);</li>
<li>Размер спроса, которая отражает, сколько единиц продукции было куплено, если спрос появился.</li>
</ol>
<p>Математически это всё представляется вот так вот:<br />
\begin{equation} \label{eq:iSS}<br />
	y_t = o_t z_t ,<br />
\end{equation}<br />
где \(o_t\) &#8212; это бинарная переменная появления, \(z_t\) &#8212; это объём спроса и \(y_t\) &#8212; это финальная величина, которую мы измеряем. Это уравнение было предложено в <a href="https://doi.org/10.2307/3007885" rel="noopener noreferrer" target="_blank">Croston, (1972)</a>, хотя Кростон ограничился лишь разработкой прогнозного метода, и не занимался стохастической моделью.</p>
<p>В литературе встречается несколько методов для прогнозирования прерывистого спроса: Кростон (<a href="https://doi.org/10.2307/3007885" rel="noopener noreferrer" target="_blank">Croston, 1972</a>), SBA (<a href="https://doi.org/10.1057/palgrave.jors.2601841" rel="noopener noreferrer" target="_blank">Syntetos &#038; Boylan, 2000</a> &#8212; SBA &#8212; Syntetos-Boylan Approximation) и TSB (<a href="https://doi.org/10.1016/j.ejor.2011.05.018" rel="noopener noreferrer" target="_blank">Teunter et al., 2011</a> &#8212; по фамилиям авторов метода). Это всё хорошие методы, которые себя хорошо зарекомендовали. Единственное ограничение &#8212; это то, что они &#171;методы&#187;, а не &#171;стохастические модели&#187;. Модель позволяет достаточно легко включать дополнительные компоненты и переменные, конструировать прогнозные интервалы и возможность осуществлять <a href="/forecasting_toolbox/model-selection/">выбор наилучшей модели</a> среди некоторого пула. Не имея модель, всё это сделать затруднительно. Мы с Джоном Бойланом (John Boylan) разработали модель, которая лежит в основе этих методов (<a href="/en/2017/11/07/multiplicative-state-space-models-for-intermittent-time-series/">Svetunkov &#038; Boylan, 2017</a>), с помощью \eqref{eq:iSS}. Учитывая то, что все эти методы основаны на простом экспоненциальном сглаживании, мы назвали свою модель &#171;iETS&#187; &#8212; &#171;intermittent ETS&#187; &#8212; &#171;прерывистая ETS&#187;. В статье, которая сейчас находится на стадии рецензирования в International Journal for Forecasting, мы рассматривали частный случай этой модели &#8212; iETS(M,N,N), то есть модель с мультипликативной ошибкой, без тренда и сезонности, так как именно эта модель лежит в основе простого экспоненциального сглаживания. Одно из ключевых предположений в нашей модели &#8212; это независимость появления спроса от размера спроса. Это, конечно, явное упрощение, которой мы получили по наследству от метода Кростона, но даже с ним модель работает хорошо в большинстве случаев.</p>
<p>Модель iETS(M,N,N) формулируется следующим образом:<br />
\begin{equation} \label{eq:iETS}<br />
	\begin{matrix}<br />
		y_t = o_t z_t \\<br />
		z_t = l_{z,t-1} \left(1 + \epsilon_t \right) \\<br />
		l_{z,t} = l_{z,t-1}( 1  + \alpha_z \epsilon_t) \\<br />
		o_t \sim \text{Bernoulli}(p_t)<br />
	\end{matrix} ,<br />
\end{equation}<br />
где \(z_t\) &#8212; это модель ETS(M,N,N), \(l_{z,t}\) это уровень ненулевого спроса, \(\alpha_z\) &#8212; постоянная сглаживания, а \(\epsilon_t\) &#8212; ошибка модели. Важное допущение в модели &#8212; это то, что  \(\left(1 + \epsilon_t \right) \sim \text{log}\mathcal{N}(0, \sigma_\epsilon^2) \) &#8212; нечто, что мы уже <a href="/2016/11/18/smooth-package-for-r-es-function-part-iii-pure-multiplicative-models-ru/">как-то обсуждали</a>. Это допущение важно, так как ограничивает область значений только положительными значениями. Впрочем, если в вашем контексте возможны так же и отрицательные значения, то никто не мешает вместо мультипликативных моделей использовать <a href="/2016/11/02/smooth-package-for-r-es-function-part-ii-pure-additive-models-ru/">аддитивные</a>.</p>
<p>Прелесть модели \eqref{eq:iETS} заключается в том, что она может быть легко расширена (в неё можно добавить тренд, сезонность, экзогенные переменные), и то, что все её параметры могут быть оценены путём <a href="/forecasting_toolbox/estimation-simple-methods/">максимизации функции правдоподобия</a>.</p>
<p>Для моделирования части, отвечающей за появление спроса, мы предложили следующие три модели:</p>
<ol>
<li>iETS\(_F\) &#8212; модель предполагает, что вероятность появления спроса фиксирована (\(p_t = p\)).</li>
<li>iETS\(_O\) &#8212; &#171;Odds Ratio&#187;, модель отношения шансов, которая использует логистическую кривую для обновления вероятности появления значения. В этом случае модель сфокусирована именно на вероятности появления спроса.</li>
<li>iETS\(_I\) &#8212; &#171;Inverse Odds Ratio&#187;, модель обратного отношения шансов, которая использует похожие принципы, как и iETS\(_O\), однако прогнозы её сфокусированы на вероятности не появления спроса. Эта модель даёт статистическое объяснение для метода <a href="https://doi.org/10.2307/3007885" rel="noopener noreferrer" target="_blank">Croston (1972)</a>, но использует несколько другой принцип обновления вероятности: вместо того, чтобы обновлять вероятность, когда происходит продажа, она это делает на каждом наблюдении.</li>
<li>iETS\(_D\) &#8212; &#171;Direct probability&#187;, модель непосредственной вероятности, которая использует принцип, предложенный <a href="https://doi.org/10.1016/j.ejor.2011.05.018" rel="noopener noreferrer" target="_blank">Teunter et al., (2011)</a>. В этом случае вероятность обновляется на прямую с помощью простого экспоненциального сглаживания.</li>
<li>iETS\(_G\) &#8212; &#171;General&#187;, обобщённая модель, которая фактически включает в себя все предыдущие. Она состоит из двух под-моделей для вероятности, фактически учитывая как вероятности возникновения, так и вероятность не возникновения продаж.</li>
</ol>
<p>В случае (1) модель для вероятности значительно упрощается, её можно оценить с помощью функции правдоподобия и использовать для прогноза. В остальных случаях мы предлагаем использовать ещё одну модель ETS(M,N,N) для каждой из частей процессов. Так что в каждом из этих случаев прогноз представляет собой прямую линию. Финальный прогноз для всех этих моделей считается по формуле:<br />
\begin{equation} \label{eq:iSSForecast}<br />
	\hat{y}_{t+h} = \hat{p}_{t+h} \hat{z}_{t+h} ,<br />
\end{equation}<br />
где \(\hat{p}_{t+h}\) &#8212; это прогнозируемая вероятность, \(\hat{z}_t\) &#8212; это прогнозируемый объём спроса, а \(\hat{y}_t\) &#8212; это финальный прогноз для прерывистого спроса. Фактически на выходе мы получает некую оценку того, сколько будет продано в среднем за единицу времени.</p>
<p>Для того, чтобы разделить общую модель \eqref{eq:iETS} с её частью для объёмов спроса и для появления спроса, мы предлагаем использовать разные названия. Например, iETS\(_G\)(M,N,N) обозначает полную модель \eqref{eq:iETS} (\(y_t\)), oETS\(_G\)(M,N,N) обозначает модель для появления спроса (\(o_t\)), а ETS(M,N,N) используется для обозначения модели для объёмов спроса (\(z_t\)). Во всех этих трёх случаях часть &#171;(M,N,N)&#187; показывает, что мы используем модель экспоненциального сглаживания с мультипликативной ошибкой, без тренда и сезонности. Более продвинутые обозначения для модели будут обсуждены в следующих статьях на сайте. Пока же мы будем ориентироваться на простую модель экспоненциального сглаживания.</p>
<p>Обобщая преимущества нашей модели:</p>
<ol>
<li>Она расширяема. Это означает, что в неё можно добавлять любые компоненты, которые вы пожелаете. Такая возможность уже существует в пакете <span class="lang:r decode:true crayon-inline">smooth</span>. К слову, базовая модель \eqref{eq:iSS} позволяет использовать всё, что угодно для объёма спроса и множество разных моделей для появления спроса;</li>
<li>Модель позволяет выбирать между теми самыми пятью случаями (iETS\(_F\), iETS\(_O\), iETS\(_I\), iETS\(_D\) и iETS\(_G\)) с помощью информационных критериев. Этот механизм работает хорошо на больших выборках, но не всегда показывает такие же хорошие результаты на малых;</li>
<li>Модель позволяет конструировать параметрические прогнозные интервалы на несколько шагов вперёд;</li>
<li>Оценка моделей осуществляется с помощью функции правдоподобия, которая даёт <a href="/forecasting_toolbox/statistics-and-hypothesis/">эффективные и состоятельные оценки</a>;</li>
<li>Хотя модель и предполагает непрерывную случайную величину для объёма спроса, <a href="/2017/11/07/multiplicative-state-space-models-for-intermittent-time-series-2/">мы показали в своей статье</a>, что она часто работает лучше, чем модели целочисленных случайных величин (типа Пуассона или Биномиального распределения).</li>
</ol>
<p>Что же, посмотрим, как это работает&#8230;</p>
<h3>Появление спроса</h3>
<p>В пакете <span class="lang:r decode:true crayon-inline">smooth</span> есть функция <span class="lang:r decode:true crayon-inline">oes()</span> (Occurrence Exponential Smoothing), которая отвечает за модель появления спроса. Так же, в каждой прогнозной функции пакета есть параметр <span class="lang:r decode:true crayon-inline">occurrence</span>, который может быть: &#171;none&#187; (никакой модели), &#171;fixed&#187; (oETS\(_F\)), &#171;odds-ratio&#187; (oETS\(_O\)), &#171;inverse-odds-ratio&#187; (oETS\(_I\)), &#171;direct&#187; (oETS\(_D\)), &#171;general&#187; (oETS\(_G\)) и &#171;auto&#187; (автоматический выбор). Автоматическую опцию мы пока не рассматриваем, обсудим те самые пять моделей. Рассмотрим их на условном примере:</p>
<pre class="decode">x <- c(rpois(25,5),rpois(25,1),rpois(25,0.5),rpois(25,0.1))</pre>
<p>В этом искусственном временном ряду вероятность и размер спроса меняются ступенчато каждые 25 наблюдений. Сгенерированные данные отражают нечто под названием "вымирающий спрос" или "устаревающий спрос". Построим наши три модели:</p>
<pre class="decode">oesFixed <- oes(x, occurrence="f", h=25)</pre>
<pre>Occurrence state space model estimated: Fixed probability
Underlying ETS model: oETS[F](MNN)
Smoothing parameters:
level 
    0 
Vector of initials:
level 
 0.55 
Information criteria: 
     AIC     AICc      BIC     BICc 
139.6278 139.6686 142.2329 142.3269</pre>
<pre class="decode">oesOdds <- oes(x, occurrence="o", h=25)</pre>
<pre>Occurrence state space model estimated: Odds ratio
Underlying ETS model: oETS[O](MNN)
Smoothing parameters:
level 
0.828 
Vector of initials:
 level 
14.442 
Information criteria: 
     AIC     AICc      BIC     BICc 
116.3124 116.4361 121.5227 121.8076 </pre>
<pre class="decode">oesInverse <- oes(x, occurrence="i", h=25)</pre>
<pre>Occurrence state space model estimated: Inverse odds ratio
Underlying ETS model: oETS[I](MNN)
Smoothing parameters:
level 
0.116 
Vector of initials:
level 
0.039 
Information criteria: 
     AIC     AICc      BIC     BICc 
 98.5508  98.6745 103.7611 104.0460</pre>
<pre class="decode">oesDirect <- oes(x, occurrence="d", h=25)</pre>
<pre>Occurrence state space model estimated: Direct probability
Underlying ETS model: oETS[D](MNN)
Smoothing parameters:
level 
0.115 
Vector of initials:
level 
0.884 
Information criteria: 
     AIC     AICc      BIC     BICc 
106.5982 106.7219 111.8086 112.0934</pre>
<pre class="decode">oesGeneral <- oes(x, occurrence="g", h=25)</pre>
<pre>Occurrence state space model estimated: General
Underlying ETS model: oETS[G](MNN)(MNN)
Information criteria: 
     AIC     AICc      BIC     BICc 
102.5508 102.9718 112.9715 113.9410</pre>
<p>Анализируя результаты, можно заметить, что модель oETS\(_I\) показала себя лучше на этих данных - её информационные критерии ниже, чем у других моделей. Это всё потому что данный тип модели хорошо подходит под ряды с угасающим спросом из-за того, что модель сфокусирована на вероятности исчезновения. Обратите внимание, что постоянная сглаживания в модели oETS\(_O\) достаточно высока. Это потому что модель сфокусирована на вероятности возникновения спроса, а он у нас угасает. Если бы динамика была противоположной (частота спроса возрастала), то и ситуация была бы другой: постоянная сглаживания в oETS\(_O\) была бы ниже, чем постоянная сглаживания в oETS\(_I\). Так же можно заметить, что стартовый уровень в модели oETS\(_I\) равен 0.116, что соответствует вероятности возникновения в \(\frac{1}{1+0.116} \approx 0.89\).</p>
<p>На себя так же обращает внимание модель oETS\(_G\), которая не спешит делиться деталями о моделях внутри неё. Это потому что в ней две модели (которые называются modelA и modelB в R), каждая из которых имеет свои параметры. Вот они:</p>
<pre class="decode">oesGeneral$modelA
oesGeneral$modelB</pre>
<pre>Occurrence state space model estimated: General
Underlying ETS model: oETS(MNN)_A
Smoothing parameters:
level 
    0 
Vector of initials:
level 
   16 
Information criteria: 
     AIC     AICc      BIC     BICc 
 98.5508  98.6745 103.7611 104.0460

Occurrence state space model estimated: General
Underlying ETS model: oETS(MNN)_B
Smoothing parameters:
level 
0.116 
Vector of initials:
level 
0.628 
Information criteria: 
     AIC     AICc      BIC     BICc 
 98.5508  98.6745 103.7611 104.0460 </pre>
<p>oETS\(_G\) и обе подмодели A и B имеют одно и то же значение функции правдоподобия, так как они являются частями единого целого. Однако информационные критерии у них различаются, так как у них разное число оценённых параметров: в моделях A и B их по двое, в то время как в целой модели их, соответственно, 4. Заметьте, что оптимальная постоянная сглаживания в модели A оказалась равной нулю, что означает, что компоненты её не обновляются во времени. Мы ещё вернёмся к этому наблюдению чуть позже.</p>
<p>Мы так же можем построить линейные графики по этим моделям, чтобы увидеть, как именно они работают:</p>
<pre class="decode">plot(oesFixed)</pre>
<p><a href="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/oesFixedExample.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/2018/09/oesFixedExample-300x175.png&amp;nocache=1" alt="" width="300" height="175" class="alignnone size-medium wp-image-1968" srcset="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/oesFixedExample-300x175.png&amp;nocache=1 300w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/oesFixedExample-768x448.png&amp;nocache=1 768w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/oesFixedExample-1024x597.png&amp;nocache=1 1024w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/oesFixedExample.png&amp;nocache=1 1200w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<pre class="decode">plot(oesOdds)</pre>
<p><a href="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/oesOddsExample.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/2018/09/oesOddsExample-300x175.png&amp;nocache=1" alt="" width="300" height="175" class="alignnone size-medium wp-image-1966" srcset="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/oesOddsExample-300x175.png&amp;nocache=1 300w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/oesOddsExample-768x448.png&amp;nocache=1 768w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/oesOddsExample-1024x597.png&amp;nocache=1 1024w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/oesOddsExample.png&amp;nocache=1 1200w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<pre class="decode">plot(oesInverse)</pre>
<p><a href="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/oesInverseExample.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/2018/09/oesInverseExample-300x175.png&amp;nocache=1" alt="" width="300" height="175" class="alignnone size-medium wp-image-1970" srcset="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/oesInverseExample-300x175.png&amp;nocache=1 300w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/oesInverseExample-768x448.png&amp;nocache=1 768w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/oesInverseExample-1024x597.png&amp;nocache=1 1024w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/oesInverseExample.png&amp;nocache=1 1200w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<pre class="decode">plot(oesDirect)</pre>
<p><a href="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/oesDirectExample.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/2018/09/oesDirectExample-300x175.png&amp;nocache=1" alt="" width="300" height="175" class="alignnone size-medium wp-image-1967" srcset="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/oesDirectExample-300x175.png&amp;nocache=1 300w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/oesDirectExample-768x448.png&amp;nocache=1 768w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/oesDirectExample-1024x597.png&amp;nocache=1 1024w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/oesDirectExample.png&amp;nocache=1 1200w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<pre class="decode">plot(oesGeneral)</pre>
<p><a href="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/oesGeneralExample.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/2018/09/oesGeneralExample-300x175.png&amp;nocache=1" alt="" width="300" height="175" class="alignnone size-medium wp-image-1969" srcset="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/oesGeneralExample-300x175.png&amp;nocache=1 300w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/oesGeneralExample-768x448.png&amp;nocache=1 768w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/oesGeneralExample-1024x597.png&amp;nocache=1 1024w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/oesGeneralExample.png&amp;nocache=1 1200w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Обратите внимание, что разные модели улавливают динамику вероятности по-разному: в то время как iETS\(_F\) всё усредняет, остальные модели реагируют на изменения вероятности, но не одинаково.<br />
Так oETS\(_O\) более живо реагирует на динамику появления спроса, пытаясь угнаться за меняющейся вероятностью. Модель oETS\(_I\) при этом ведёт себя спокойней, воспроизводя более гладкую линию. oETS\(_D\) оказалась реактивней предыдущей модель, но не такой резкой, как модель отношения шансов. Ну, и модель oETS\(_G\) скопировала динамику модели oETS\(_I\). Это всё из-за того, что оптимальная постоянная сглаживания в модели A в oETS\(_G\) оказалась равной нулю, что привело к тому, что модель oETS\(_G\) выродилась в oETS\(_I\). Тем не менее, все эти модели спрогнозировали, что вероятность спроса будет достаточно низкой, что соответствует динамики сгенерированного ряда.</p>
<p>Что же, перейдём к полной модели...</p>
<h3>Полная модель</h3>
<p>Для того, чтобы дать финальный прогноз для прерывистого спроса, мы можем использовать любую прогнозную функцию из пакета: <span class="lang:r decode:true crayon-inline">es()</span>, <span class="lang:r decode:true crayon-inline">ssarima()</span>, <span class="lang:r decode:true crayon-inline">ces()</span>, <span class="lang:r decode:true crayon-inline">gum()</span> - во всех них есть соответствующий параметр <span class="lang:r decode:true crayon-inline">occurrence</span>, который по умолчанию равен "none". Для простоты пока будем использовать модель ETS. И для простоты мы будем использовать iETS\(_I\), так как она хорошо себя проявила на этом ряде:</p>
<pre class="decode">es(x, "MNN", occurrence="i", silent=FALSE, h=25)</pre>
<p><a href="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/iETSMNNIMNN.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/2018/09/iETSMNNIMNN-300x175.png&amp;nocache=1" alt="" width="300" height="175" class="alignnone size-medium wp-image-1971" srcset="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/iETSMNNIMNN-300x175.png&amp;nocache=1 300w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/iETSMNNIMNN-768x448.png&amp;nocache=1 768w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/iETSMNNIMNN-1024x597.png&amp;nocache=1 1024w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/iETSMNNIMNN.png&amp;nocache=1 1200w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Прогноз этой модели - прямая линия, близкая к нулю, что вызвано снижением значений как в объёме спроса, так и в вероятности появления. Однако, зная, что спрос снижается, мы можем использовать модель с трендом для объёма спроса, ETS(M,M,N):</p>
<pre class="decode">es(x, "MMN", occurrence="i", silent=FALSE, h=25)</pre>
<p><a href="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/iETSMMNIMNN.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/2018/09/iETSMMNIMNN-300x175.png&amp;nocache=1" alt="" width="300" height="175" class="alignnone size-medium wp-image-1972" srcset="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/iETSMMNIMNN-300x175.png&amp;nocache=1 300w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/iETSMMNIMNN-768x448.png&amp;nocache=1 768w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/iETSMMNIMNN-1024x597.png&amp;nocache=1 1024w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/iETSMMNIMNN.png&amp;nocache=1 1200w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Прогноз в этом случае оказывается ближе к нулю, а уж асимптотически он точно будет нуль... Это означает, что мы имеем дело с угосающим спросом.</p>
<p>Мы можем так же построить прогнозные интервалы и использовать модель с автоматическим выбором компонент для объёма спроса. Если мы знаем, что данные не могут быть отрицательными (например, какие-нибудь продажи помидоров), то я бы рекомендовал обратиться к чистым мультипликативным моделям:</p>
<pre class="lang:r decode:true">es(x, "YYN", occurrence="i", silent=FALSE, h=25, intervals=TRUE)</pre>
<pre>Forming the pool of models based on... MNN, MMN, Estimation progress: 100%... Done! 
Time elapsed: 1.02 seconds
Model estimated: iETS(MMN)
Occurrence model type: Inverse odds ratio
Persistence vector g:
alpha  beta 
0.268 0.000 
Initial values were optimised.
7 parameters were estimated in the process
Residuals standard deviation: 0.386
Cost function type: MSE; Cost function value: 0.149

Information criteria:
     AIC     AICc      BIC     BICc 
333.4377 334.0760 348.5648 339.9301 
95% parametric prediction intervals were constructed</pre>
<p><a href="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/iETSYYNIMNN.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/2018/09/iETSYYNIMNN-300x175.png&amp;nocache=1" alt="" width="300" height="175" class="alignnone size-medium wp-image-1973" srcset="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/iETSYYNIMNN-300x175.png&amp;nocache=1 300w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/iETSYYNIMNN-768x448.png&amp;nocache=1 768w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/iETSYYNIMNN-1024x597.png&amp;nocache=1 1024w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/iETSYYNIMNN.png&amp;nocache=1 1200w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Как видим, в данном случае наиболее подходящей оказалась модель с мультипликативным трендом. Прогнозные интервалы в этом случае сужаются, так как уровень спроса приближается к нулю. Сравните этот график с графиком чистой аддитивной модели:</p>
<pre class="decode">es(x, "XXN", occurrence="i", silent=FALSE, h=25, intervals=TRUE)</pre>
<pre>Forming the pool of models based on... ANN, AAN, Estimation progress:    ... Done! 
Time elapsed: 0.23 seconds
Model estimated: iETS(ANN)
Occurrence model type: Inverse odds ratio
Persistence vector g:
alpha 
0.251 
Initial values were optimised.
5 parameters were estimated in the process
Residuals standard deviation: 1.125
Cost function type: MSE; Cost function value: 1.265

Information criteria:
     AIC     AICc      BIC     BICc 
459.8706 460.1206 472.8964 464.2617 
95% parametric prediction intervals were constructed</pre>
<p><a href="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/iETSXXNIMNN.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/2018/09/iETSXXNIMNN-300x175.png&amp;nocache=1" alt="" width="300" height="175" class="alignnone size-medium wp-image-1974" srcset="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/iETSXXNIMNN-300x175.png&amp;nocache=1 300w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/iETSXXNIMNN-768x448.png&amp;nocache=1 768w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/iETSXXNIMNN-1024x597.png&amp;nocache=1 1024w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/09/iETSXXNIMNN.png&amp;nocache=1 1200w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>В последнем случае нижняя граница интервала оказывается отрицательной, что в некоторых случаях не имеет смысла. Обратите внимание так же, что информационные критерии для чистой мультипликативной модели оказались ниже. Это из-за того, что мы имеем дело с гетероскедастичностью: дисперсия спроса меняется каждый 25 наблюдений, вместе с изменением уровня ряда.</p>
<p>Здесь нужно сделать важную ремарку. Несмотря на то, что я бы рекомендовал использовать чистые мультипликативные модели, модель ETS(M,M,N) с положительным трендом взрывоопасна. Фактически мы имеем дело с экспонентой, а значит и прогноз может быть в форме взрывного спроса. Пока что решения этой проблемы нет, так что я бы рекомендовал вручную выбирать между ETS(M,N,N) и ETS(M,Md,N) (модель с демпфированным трендом). Я не рекомендую модели с аддитивным трендом, так как в случае с низким уровнем ряда и негативным трендом может получаться всякий бред (отрицательные значения и лош-нормальное распределение - это что-то странное).</p>
<p>Как видим, теперь в нашем распоряжении оказалось на пять моделей экспоненциального сглаживания больше, что может усложнить жизнь практикующему прогнозисту. Теперь надо понять, как выбрать наиболее подходящую модель из этих пяти, как выбрать модель экспоненциального сглаживания для oETS (не останавливаться же на простом экспоненциальном сглаживании при прогнозировании вероятности возникновения) и как включать объясняющие переменные в модель. Если бы мы могли всё это сделать, то это расширило бы инструментарий для прогнозирования в разы, не так ли? Всё это, на самом деле, уже доступно в пакете <span class="lang:r decode:true crayon-inline">smooth</span>, и мы перейдём к этим деталям в следующей статье. До новых встреч!</p>
<p>Сообщение <a href="https://openforecast.org/ru/2018/09/18/intermittent-state-space-intro/">Пакет «smooth» для R. Прерывистый спрос. Часть 1. Введение</a> появились сначала на <a href="https://openforecast.org/ru">Open Forecasting</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://openforecast.org/ru/2018/09/18/intermittent-state-space-intro/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ISF 2018, Болдер, США</title>
		<link>https://openforecast.org/ru/2018/06/19/isf-2018/</link>
					<comments>https://openforecast.org/ru/2018/06/19/isf-2018/#respond</comments>
		
		<dc:creator><![CDATA[Ivan Svetunkov]]></dc:creator>
		<pubDate>Tue, 19 Jun 2018 23:12:42 +0000</pubDate>
				<category><![CDATA[ETS]]></category>
		<category><![CDATA[Конференции]]></category>
		<category><![CDATA[Экстраполяционные методы]]></category>
		<category><![CDATA[ISF]]></category>
		<category><![CDATA[конференции]]></category>
		<category><![CDATA[презентация]]></category>
		<category><![CDATA[прерывистый спрос]]></category>
		<guid isPermaLink="false">https://openforecast.org/?p=1768</guid>

					<description><![CDATA[<p>В этом году я презентовал исследование, являющееся продолжением того, что я докладывал в прошлом году в Австралии. Название презентации &#8212; &#171;Forecasting intermittent data with complex patterns&#187; (Прогнозирование прерывистых данных со сложными тенденциями). В этом исследовании мы разработали модель с логистической вероятностью, которая позволяет вылавливать сложные паттерны в переменной &#171;появления спроса&#187;. Фактически с помощью нехитрых преобразований [&#8230;]</p>
<p>Сообщение <a href="https://openforecast.org/ru/2018/06/19/isf-2018/">ISF 2018, Болдер, США</a> появились сначала на <a href="https://openforecast.org/ru">Open Forecasting</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>В этом году я презентовал исследование, являющееся продолжением того, что я <a href="/2017/07/30/isf-2017/">докладывал в прошлом году в Австралии</a>. Название презентации &#8212; &#171;Forecasting intermittent data with complex patterns&#187; (Прогнозирование прерывистых данных со сложными тенденциями). В этом исследовании мы разработали модель с логистической вероятностью, которая позволяет вылавливать сложные паттерны в переменной &#171;появления спроса&#187;. Фактически с помощью нехитрых преобразований мы можем использовать любую аддитивную модель для прогнозирования прерывистого спроса. Я попытался разнообразить эту презентацию, чтобы она была понятна более широкому кругу слушателей, но формулы я никуда, конечно же, не выкинул. Формулы &#8212; это наше всё!</p>
<p><a href="https://openforecast.org/wp-content/uploads/2018/06/2018-ISF-Presentation.pdf">Здесь</a> можно скачать слайды презентации. Над статьёй по этой теме мы сейчас работаем с коллегами, а предыдущую нашу статью можно найти <a href="/2017/11/07/multiplicative-state-space-models-for-intermittent-time-series-2/">тут</a>.</p>
<p>Сообщение <a href="https://openforecast.org/ru/2018/06/19/isf-2018/">ISF 2018, Болдер, США</a> появились сначала на <a href="https://openforecast.org/ru">Open Forecasting</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://openforecast.org/ru/2018/06/19/isf-2018/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Сравнение аддитивной и мультипликативной регрессий с помощью AIC в R</title>
		<link>https://openforecast.org/ru/2018/03/22/additive_vs_multiplicative_aic/</link>
					<comments>https://openforecast.org/ru/2018/03/22/additive_vs_multiplicative_aic/#respond</comments>
		
		<dc:creator><![CDATA[Ivan Svetunkov]]></dc:creator>
		<pubDate>Thu, 22 Mar 2018 18:57:35 +0000</pubDate>
				<category><![CDATA[R]]></category>
		<category><![CDATA[Многомерные модели]]></category>
		<category><![CDATA[Теория прогнозирования]]></category>
		<category><![CDATA[Экстраполяционные методы]]></category>
		<category><![CDATA[статистика]]></category>
		<category><![CDATA[теория]]></category>
		<guid isPermaLink="false">https://openforecast.org/?p=1698</guid>

					<description><![CDATA[<p>Один из основных принципов, которому учат студентов в курсе статистикик заключается в том, что сравнение регрессионных моделей с помощью информационных критериев возможно только в том случае, когда выходная переменная в моделях одинаковая. Например, модель с выходной переменной \(\log(y_t)\) не может быть сравнена с моделью с \(y_t\) с помощью AIC. Причина в том, что переменные имеют [&#8230;]</p>
<p>Сообщение <a href="https://openforecast.org/ru/2018/03/22/additive_vs_multiplicative_aic/">Сравнение аддитивной и мультипликативной регрессий с помощью AIC в R</a> появились сначала на <a href="https://openforecast.org/ru">Open Forecasting</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Один из основных принципов, которому учат студентов в курсе статистикик заключается в том, что сравнение регрессионных моделей с помощью информационных критериев возможно только в том случае, когда выходная переменная в моделях одинаковая. Например, модель с выходной переменной \(\log(y_t)\) не может быть сравнена с моделью с \(y_t\) с помощью AIC. Причина в том, что переменные имеют разный масштаб, а значит и значение функции правдоподобия у моделей будет разное. Но есть метод, позволяющий таки провести сравнение. Всё, что нужно сделать &#8212; это понять, как распределены обе перемемнные в исходной шкале. В нашем примере мы фактически допускаем, что \(\log(y_t) \sim \mathcal{N}(0, \sigma^2_{l}) \) (где \(\sigma^2_{l}\) &#8212; это дисперсия остатков модели в логарифмах), а значит экспонента этой переменной будет распределена лог-нормально:<br />
\begin{equation}<br />
y_t \sim \text{log}\mathcal{N}(0, \sigma^2_{l})<br />
\end{equation}<br />
В качестве напоминания, все информационные критерии основаны на значения функции правдоподобия. Вот, например, формуля для AIC:<br />
\begin{equation} \label{eq:AIC}<br />
AIC = 2k -2\ell ,<br />
\end{equation}<br />
где \(k\) &#8212; число оценённых параметров, а \(\ell\) &#8212; значение функции правдоподобия.</p>
<p>Если использовать функцию правдоподобия лог-нормального распределения вместо нормального в \eqref{eq:AIC} для переменной \(y_t\) в логарифмах, тогда  и информационные критерии будут сравнимы. Для того, чтобы понять, что нужно сделать для получения лог-нормального распределения, обратимся к соответствующим функциями. Вот нормальное для переменной \(\log y_t\):<br />
\begin{equation} \label{eq:normal}<br />
f(y_t | \theta, \sigma^2_{l}) = \frac{1}{\sqrt{2 \pi \sigma^2_{l}}} e ^{-\frac{\left(\log y_t -\log \mu_{t} \right)^2}{2 \sigma^2_{l}}}<br />
\end{equation}<br />
а вот лог-нормальное для переменной \(y_t = \exp(\log(y_t))\) (мультипликативная модель с выходной переменной в исходной шкале):<br />
\begin{equation} \label{eq:log-normal}<br />
f(y_t | \theta, \sigma^2_{l}) = \frac{1}{y_t} \frac{1}{\sqrt{2 \pi \sigma^2_{l}}} e ^{-\frac{\left(\log y_t -\log \mu_{t} \right)^2}{2 \sigma^2_{l}}} ,<br />
\end{equation}<br />
где \(\theta\) &#8212; это вектор параметров модели. Разница между \eqref{eq:normal} и \eqref{eq:log-normal} заключается в части \(\frac{1}{y_t}\). логарифм функции правдоподобия для всей выборки на основе \eqref{eq:log-normal} выглядит так:<br />
\begin{equation} \label{eq:loglikelihoodlognormal}<br />
\ell(\theta, \sigma^2_{l} | Y) = -\frac{1}{2} \left(T \log \left( 2 \pi {\sigma}^2_{l} \right) +\sum_{t=1}^T \frac{\left(\log y_t -\log \mu_{t} \right)^2}{2\sigma^2_{l}} \right) -\sum_{t=1}^T \log y_t ,<br />
\end{equation}<br />
где \(Y\) &#8212; это вектор всех фактических значений выходной перменной. Когда мы извлекаем значение функции правдоподобия модели в логарифмах, мы фактически обращаемся только к первой части \eqref{eq:loglikelihoodlognormal}, до &#171;\(-\sum_{t=1}^T \log y_t \)&#187;, что соответствует нормальному распределению. Таким образом, для того, чтобы прийти к функции правдоподобия в исходной шкале для переменной в логарифмах, нам нужно вычесть сумму логарифмов выходной переменной.</p>
<p>Функция <span class="lang:r decode:true crayon-inline">AIC()</span> в R, применённая к модели в логарифмах, даст нам значение на основе первой части \eqref{eq:loglikelihoodlognormal}. Чтобы &#171;починить&#187; информационный критерий нам нужно учесть тот самый хвост из \eqref{eq:loglikelihoodlognormal} в формуле \eqref{eq:AIC}:<br />
\begin{equation} \label{eq:AICNew}<br />
AIC^{\prime} = 2k -2\ell + 2 \sum_{t=1}^T \log y_t = AIC + 2 \sum_{t=1}^T \log y_t,<br />
\end{equation}</p>
<p>Обратимся к R. Для нашего примера мы будем использовать данные <span class="lang:r decode:true crayon-inline">longley</span> из пакета <span class="lang:r decode:true crayon-inline">datasets</span>. Для начала оценим две простые модели (аддитивную и мультипликативную):</p>
<pre class="decode">modelAdditive <- lm(GNP~Employed,data=longley)
modelMultiplicative <- lm(log(GNP)~Employed,data=longley)</pre>
<p>Теперь посмотрим на информационные критерии:</p>
<pre class="decode">AIC(modelAdditive)
> 142.7824
AIC(modelMultiplicative)
> -44.5661</pre>
<p>Как видим, значения не сравнимы. Скорректируем второй информационный критерий:</p>
<pre class="decode">
AIC(modelMultiplicative)+2*sum(log(longley$GNP))
> 145.118</pre>
<p>Теперь стало намного лучше! Можем заключить, что по информационному критерию первая модель (аддитивная) лучше второй.</p>
<p>Эти принципы преобразования информационных критериев так же можно применить и для других случаев трансформации (корень из числа или трансформация Бокса-Кокса). Однако в этом случае нужно вывыести более сложные распределения и понять, как они связаны с нормальным, что может быть отдельной нетривиальной задачей.</p>
<p>Сообщение <a href="https://openforecast.org/ru/2018/03/22/additive_vs_multiplicative_aic/">Сравнение аддитивной и мультипликативной регрессий с помощью AIC в R</a> появились сначала на <a href="https://openforecast.org/ru">Open Forecasting</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://openforecast.org/ru/2018/03/22/additive_vs_multiplicative_aic/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Пакет «smooth» для R. Общие параметры. Часть 4. Экзогенные переменные. Продвинутый уровень</title>
		<link>https://openforecast.org/ru/2018/02/10/xreg-advanced/</link>
					<comments>https://openforecast.org/ru/2018/02/10/xreg-advanced/#respond</comments>
		
		<dc:creator><![CDATA[Ivan Svetunkov]]></dc:creator>
		<pubDate>Sat, 10 Feb 2018 15:51:33 +0000</pubDate>
				<category><![CDATA[R]]></category>
		<category><![CDATA[Общая информация]]></category>
		<category><![CDATA[Пакет smooth для R]]></category>
		<category><![CDATA[Экстраполяционные методы]]></category>
		<category><![CDATA[smooth]]></category>
		<guid isPermaLink="false">https://openforecast.org/?p=1663</guid>

					<description><![CDATA[<p>В прошлый раз мы рассмотрели основы по работе с экзогенными переменными в функциях пакета smooth. Сегодня мы поговорим о более продвинутых вещах. Но прежде чем перейти к ним, нам нужно поговорить о вспомогательных функциях, которые реализованы в пакете greybox и используются в smooth. Первая из них называется xregExpander() и позволяет генерировать лаговые переменные на основе [&#8230;]</p>
<p>Сообщение <a href="https://openforecast.org/ru/2018/02/10/xreg-advanced/">Пакет «smooth» для R. Общие параметры. Часть 4. Экзогенные переменные. Продвинутый уровень</a> появились сначала на <a href="https://openforecast.org/ru">Open Forecasting</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>В прошлый раз мы рассмотрели основы по работе с экзогенными переменными в функциях пакета <span class="lang:r decode:true crayon-inline">smooth</span>. Сегодня мы поговорим о более продвинутых вещах. Но прежде чем перейти к ним, нам нужно поговорить о вспомогательных функциях, которые реализованы в пакете <span class="lang:r decode:true crayon-inline">greybox</span> и используются в <span class="lang:r decode:true crayon-inline">smooth</span>. Первая из них называется <span class="lang:r decode:true crayon-inline">xregExpander()</span> и позволяет генерировать лаговые переменные на основе предоставленного вектора или матрицы. В качестве примера возьмём ряд <span class="lang:r decode:true crayon-inline">BJsales.lead</span>, который мы обсуждали в <a href="/2018/01/15/xreg-basics/">прошлом посте</a>. Предположим, что влияние переменной на продажи носит более сложный характер, чем мы предполагали до того: <span class="lang:r decode:true crayon-inline">BJsales.lead</span> влияет на <span class="lang:r decode:true crayon-inline">BJsales</span> с лагом и 0, 5 и 10 дней. Это означает, что нам нужно учесть этот лаговый эффект, и это как раз то, что позволяет нам делать функция <span class="lang:r decode:true crayon-inline">xregExpander()</span>:</p>
<pre class="decode">newXreg <- xregExpander(BJsales.lead, lags=c(-5,-10))</pre>
<p>Переменная <span class="lang:r decode:true crayon-inline">newXreg</span> представляет собой матрицу, которая содержит оригинальную переменную, а так же её же с лагами 5 и 10. Заметим, что, если бы мы просто сдвинули переменную во времени, то у нас образовались бы пропущенные значения (NAs). Поэтому <span class="lang:r decode:true crayon-inline">xregExpander()</span> заполняет пропущенные значения их прогнозами либо с помощью функции <span class="lang:r decode:true crayon-inline">es()</span>, либо с помощью <span class="lang:r decode:true crayon-inline">iss()</span> (в зависимости от типа переменной). Это так же означает, что, если вы пытаетесь сделать лаговой бинарную переменную, то пропущенные значения будут заменены средним значением (например, 0.7812). Так что будьте внимательны с тем, что получаете на выходе. Возможно, в вашем случае будет правильней заменить эти значения на нули или единицы...</p>
<p>Иногда так же бывают нужны и ведущие переменные (с положительными лагами) - переменные, значение которых в будущем определяет значение некоторой переменной сегодня. Подобные эффекты могут наблюдаться, например, в моделировании эффектов от акций в супермаркетах, когда покупатели ожидают снижения цены на товар через какое-то время. Это всё регулирует по средствам добавления положительных значений в <span class="lang:r decode:true crayon-inline">xregExpander()</span>:</p>
<pre class="decode">newXreg <- xregExpander(BJsales.lead, lags=c(7,-5,-10))</pre>
<p>Значения в этом случае так же сдвигаются, но уже в другую сторону, а недостающие наблюдения заменяются их прогнозными значениями.</p>
<p>После того, как мы трансформировали переменные, мы можем из использовать в функциях пакета <span class="lang:r decode:true crayon-inline">smooth</span> для прогнозирования. Всё, что мы обсуждали в <a href="/2018/01/15/xreg-basics/">прошлом посте</a>, применимо и здесь:</p>
<pre class="decode">es(BJsales, "XXN", xreg=newXreg, h=10, holdout=TRUE)</pre>
<p>Но что нам делать, если в нашем распоряжении несколько переменных, и мы не уверены в том, какие лаги включать? У этой задачи есть много решений, одно из них реализовано в функциях пакета <span class="lang:r decode:true crayon-inline">smooth</span>. Стоит заметить, что это решение не обязательно гарантирует точные прогнозы, но это хоть какое-то решение. Основано оно на работе функции <span class="lang:r decode:true crayon-inline">stepwise()</span> из пакета <span class="lang:r decode:true crayon-inline">greybox</span>, которая осуществляет пошаговый отбор на основе информационных критериев и частной корреляции. Для работы данной функции, нужно, чтобы выходная переменная была в первом столбце матрицы. Идея функции проста, и весь алгоритм сводится к следующему:</p>
<ol>
<li>Строится базовая модель первой переменной от константы (что соответствует простой средней по ряду). Рассчитывается информационный критерий;</li>
<li>Рассчитываются корреляции остатков модели с имеющимися экзогенными переменными;</li>
<li>Строится регрессионная модель выходной переменной от всех уже включённых переменных, плюс той, которая сильнее всего коррелирует с остатками. Для этого используется функция <span class="lang:r decode:true crayon-inline">lm()</span>;</li>
<li>Рассчитывается информационный критерий новой модели, и сравнивается с предыдущим значением. Если новое значение меньше, то происходит переход к шагу (2). Иначе процесс прекращается и выбирается предыдущая модель.</li>
</ol>
<p>Таким образом мы не проводим поиск переменных "вслепую", но осуществляем своеобразный поиск хорошей модели по некоторой траектории: если какая-то значимая часть переменной ещё осталась необъяснённой, то корреляция по остаткам покажет её, а значит и соответствующая переменная будет включена в модель. Использование корреляций позволяет включать только "осмысленные" переменные, а использование информационных критериев позволяет обойти проблему неопределённости статистических гипотез. В целом, функция позволяет найти модель с одним из наименьших информационных критериев в сжатые временные сроки. Это, конечно же, не гарантирует наиболее точные прогнозы, но для этого эволюция как раз и наградила людей мозгом: статистика - это хорошо, но не стоит забывать о здравом смысле!</p>
<p>Взглянем на работу функции на примере с 10 лаговыми и 10 ведущими переменными:</p>
<pre class="decode">newXreg <- as.data.frame(xregExpander(BJsales.lead,lags=c(-10:10)))
newXreg <- cbind(as.matrix(BJsales),newXreg)
colnames(newXreg)[1] <- "y"</pre>
<p>Код выше гарантирует, что в нашем распоряжении будет data frame с красивыми именами, а не какой-нибудь трэш. Замети ещё раз, что для функции <span class="lang:r decode:true crayon-inline">stepwise()</span> важно, чтобы выходная переменная была в первом столбце матрицы.</p>
<pre class="decode">ourModel <- stepwise(newXreg)</pre>
<p>И вот, что у нас получилось в итоге:</p>
<pre>Call:
lm(formula = y ~ xLag4 + xLag9 + xLag3 + xLag10 + xLag5 + xLag6 + 
    xLead9 + xLag7 + xLag8, data = newXreg)

Coefficients:
(Intercept)        xLag4        xLag9        xLag3       xLag10        xLag5        xLag6  
    17.6448       3.3712       1.3724       4.6781       1.5412       2.3213       1.7075  
     xLead9        xLag7        xLag8  
     0.3767       1.4025       1.3370</pre>
<p>Переменные в функции перечислены по мере включения их в модель. Функция работает достаточно быстро, так как ей не приходится проходить через все возможные комбинации моделей.</p>
<p>Вы спросите: ну и что? А вот что! Эти две функции можно использовать вместе с функциями пакета <span class="lang:r decode:true crayon-inline">smooth</span>: в <span class="lang:r decode:true crayon-inline">es()</span>, <span class="lang:r decode:true crayon-inline">ssarima()</span>, <span class="lang:r decode:true crayon-inline">ces()</span> и <span class="lang:r decode:true crayon-inline">ges()</span> реализован механизм выбора переменных на основе <span class="lang:r decode:true crayon-inline">stepwise()</span>, регулируемый с помощью параметра <span class="lang:r decode:true crayon-inline">xregDo</span>, которые по умолчанию задан как "use" (использовать все переменные), но может быть так же принимать значение "select" (выбрать наилучшую модель). В этом случае функция <span class="lang:r decode:true crayon-inline">stepwise()</span> будет применена к остаткам модели, и, когда подходящие переменные будут найдены, итоговая модель будет переоценена для избавления от потенциального смещения в оценках параметров.</p>
<p>Посмотрим, как это работает на том же примере. Для начала просто построим модель со всеми переменными (я уберу от греха подальше первую переменную из уже имеющегося data frame, которая является выходной переменной):</p>
<pre class="decode">newXreg <- newXreg[,-1]
ourModelUse <- es(BJsales, "XXN", xreg=newXreg, h=10, holdout=TRUE, silent=FALSE, xregDo="use", intervals="sp")</pre>
<pre>Time elapsed: 1.13 seconds
Model estimated: ETSX(ANN)
Persistence vector g:
alpha 
0.922 
Initial values were optimised.
24 parameters were estimated in the process
Residuals standard deviation: 0.287
Xreg coefficients were estimated in a normal style
Cost function type: MSE; Cost function value: 0.068

Information criteria:
      AIC      AICc       BIC 
 69.23731  79.67209 139.83673 
95% semiparametric prediction intervals were constructed
100% of values are in the prediction interval
Forecast errors:
MPE: 0%; Bias: 55.7%; MAPE: 0.1%; SMAPE: 0.1%
MASE: 0.166; sMAE: 0.1%; RelMAE: 0.055; sMSE: 0%</pre>
<div id="attachment_1621" style="width: 310px" class="wp-caption alignnone"><a href="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/01/BJsalesETSXUse.png&amp;nocache=1"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1621" src="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/01/BJsalesETSXUse-300x175.png&amp;nocache=1" alt="" width="300" height="175" class="size-medium wp-image-1621" srcset="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/01/BJsalesETSXUse-300x175.png&amp;nocache=1 300w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/01/BJsalesETSXUse-768x448.png&amp;nocache=1 768w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/01/BJsalesETSXUse-1024x597.png&amp;nocache=1 1024w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/01/BJsalesETSXUse.png&amp;nocache=1 1200w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><p id="caption-attachment-1621" class="wp-caption-text">Ряд BJsales и модель ETSX со всеми переменными</p></div>
<p>Как видим, прогноз стало более точным, чем он был в <a href="/2018/01/15/xreg-basics/">прошлой статье</a>, в которой мы не использовали лаги. Это означает, что в ряде данных действительно наблюдается влияние лаговых эффектов на продажи. Впрочем, из-за того, что мы включили всё подряд, полученная модель, возможно, стала слишком сильно аппроксимировать ряд, что может плохо сказаться на точности прогнозов. Хорошо бы выкинуть все лишние переменные...</p>
<pre class="decode">ourModelSelect <- es(BJsales, "XXN", xreg=newXreg, h=10, holdout=TRUE, silent=FALSE, xregDo="select", intervals="sp")</pre>
<pre>Time elapsed: 0.98 seconds
Model estimated: ETSX(ANN)
Persistence vector g:
alpha 
    1 
Initial values were optimised.
11 parameters were estimated in the process
Residuals standard deviation: 0.283
Xreg coefficients were estimated in a normal style
Cost function type: MSE; Cost function value: 0.074

Information criteria:
     AIC     AICc      BIC 
54.55463 56.61713 86.91270 
95% semiparametric prediction intervals were constructed
100% of values are in the prediction interval
Forecast errors:
MPE: 0%; Bias: 61.4%; MAPE: 0.1%; SMAPE: 0.1%
MASE: 0.159; sMAE: 0.1%; RelMAE: 0.052; sMSE: 0%</pre>
<div id="attachment_1622" style="width: 310px" class="wp-caption alignnone"><a href="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/01/BJsalesETSXSelect.png&amp;nocache=1"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1622" src="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/01/BJsalesETSXSelect-300x175.png&amp;nocache=1" alt="" width="300" height="175" class="size-medium wp-image-1622" srcset="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/01/BJsalesETSXSelect-300x175.png&amp;nocache=1 300w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/01/BJsalesETSXSelect-768x448.png&amp;nocache=1 768w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/01/BJsalesETSXSelect-1024x597.png&amp;nocache=1 1024w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/01/BJsalesETSXSelect.png&amp;nocache=1 1200w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><p id="caption-attachment-1622" class="wp-caption-text">Ряд BJsales и модель ETSX с выбранными переменными</p></div>
<p>Несмотря на то, что по графику тяжело сказать, улучшился ли прогноз или нет, по ошибкам улучшение таки заметно: MASE уменьшилась с 0.166 до 0.159. AICc также уменьшился с 79.67209 до 56.61713. Это из-за того, что вторая модель включает только 8 переменных (вместо 21):</p>
<pre class="decode">ncol(ourModelUse$xreg)
ncol(ourModelSelect$xreg)</pre>
<p>Выбор переменных работает даже в случае с комбинированием прогнозов. Так экзогенные переменные выбираются для каждой модели отдельно, после чего производятся прогнозы, которые затем и комбинируются на основе весов IC. Пример:</p>
<pre class="decode">ourModelCombine <- es(BJsales, c("ANN","AAN","AAdN","CCN"), xreg=newXreg, h=10, holdout=TRUE, silent=FALSE, xregDo="s", intervals="sp")</pre>
<pre>Time elapsed: 1.46 seconds
Model estimated: ETSX(CCN)
Initial values were optimised.
Residuals standard deviation: 0.272
Xreg coefficients were estimated in a normal style
Cost function type: MSE

Information criteria:
(combined values)
     AIC     AICc      BIC 
54.55463 56.61713 86.91270 
95% semiparametric prediction intervals were constructed
100% of values are in the prediction interval
Forecast errors:
MPE: 0%; Bias: 61.4%; MAPE: 0.1%; SMAPE: 0.1%
MASE: 0.159; sMAE: 0.1%; RelMAE: 0.052; sMSE: 0%</pre>
<p>Учитывая то, что модель ETSX(A,N,N) оказалась значительно лучше других моделей с точки зрения AICc, вес этой модели оказался наибольшим. Поэтому прогнозы ourModelSelect и ourModelCombine фактически идентичны. Начиная с версии v2.3.2, функция <span class="lang:r decode:true crayon-inline">es()</span> возвращает матрицу с информационными критериями для моделей, которые были оценены в процессе, так что мы можем посмотреть на AICc разных моделей:</p>
<pre class="decode">ourModelCombine$ICs</pre>
<pre>               AIC      AICc      BIC
ANN       54.55463  56.61713  86.9127
AAN      120.85273 122.91523 153.2108
AAdN     107.76905 110.22575 143.0688
Combined  54.55463  56.61713  86.9127</pre>
<p>Как видим, информационные критерии модели ETS(A,N,N) действительно оказались значительно ниже критериев других моделей, что привело к её превалированию в финальной комбинации.</p>
<p>Обратим внимание, что комбинация прогнозов - это не то же самое, что и комбинации моделей. Эта функция пока не доступна в функциях пакета <span class="lang:r decode:true crayon-inline">smooth</span>, и я не уверен, что она когда-нибудь появится.</p>
<p>В заключении заметим, что метод выбора в пакете ставит на первое место динамическую часть модель (в нашем примере - это ETS), нежели часть с экзогенными переменными. Это соответствует подходу прогнозистов к моделированию: мы используем экзогенные переменные как инструмент для объяснения тех характеристик временного ряда, которые обычная модель не смогла выловить. Классический подход эконометристов обычно подразумевает обратное: построение регрессии с последующим включением динамических компонент (например, авторегрессии). У такого подхода другая цель, поэтому и результаты будут другими.</p>
<p>Сообщение <a href="https://openforecast.org/ru/2018/02/10/xreg-advanced/">Пакет «smooth» для R. Общие параметры. Часть 4. Экзогенные переменные. Продвинутый уровень</a> появились сначала на <a href="https://openforecast.org/ru">Open Forecasting</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://openforecast.org/ru/2018/02/10/xreg-advanced/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Пакет «smooth» для R. Общие параметры. Часть 3. Экзогенные переменные. Основы</title>
		<link>https://openforecast.org/ru/2018/01/15/xreg-basics/</link>
					<comments>https://openforecast.org/ru/2018/01/15/xreg-basics/#comments</comments>
		
		<dc:creator><![CDATA[Ivan Svetunkov]]></dc:creator>
		<pubDate>Mon, 15 Jan 2018 14:42:01 +0000</pubDate>
				<category><![CDATA[R]]></category>
		<category><![CDATA[Общая информация]]></category>
		<category><![CDATA[Пакет smooth для R]]></category>
		<category><![CDATA[Экстраполяционные методы]]></category>
		<category><![CDATA[ARIMA]]></category>
		<category><![CDATA[ETS]]></category>
		<category><![CDATA[smooth]]></category>
		<guid isPermaLink="false">https://openforecast.org/?p=1632</guid>

					<description><![CDATA[<p>Одно из преимуществ функций пакета smooth &#8212; это возможность использовать экзогенные переменные (регрессоры). Это потенциально может привести к росту точности прогнозов, в случае, если у вас в распоряжении есть хорошие оценки будущих значений включённых переменных. Например, в случае с ритейлом в качестве экзогенной переменной может выступать наличие акции в магазине (&#171;купите один шампунь, получите ящик [&#8230;]</p>
<p>Сообщение <a href="https://openforecast.org/ru/2018/01/15/xreg-basics/">Пакет «smooth» для R. Общие параметры. Часть 3. Экзогенные переменные. Основы</a> появились сначала на <a href="https://openforecast.org/ru">Open Forecasting</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Одно из преимуществ функций пакета smooth &#8212; это возможность использовать экзогенные переменные (регрессоры). Это потенциально может привести к росту точности прогнозов, в случае, если у вас в распоряжении есть хорошие оценки будущих значений включённых переменных. Например, в случае с ритейлом в качестве экзогенной переменной может выступать наличие акции в магазине (&#171;купите один шампунь, получите ящик пива в подарок&#187;). Эту информацию мы можем знать заранее, причём со 100% точностью, если мы планируем проводить похожие акции в будущем. И, конечно же, использование этой информации должно повысить точность прогнозов по нашей модели.</p>
<p>Для подобных целей в R уже есть функция <span class="lang:r decode:true crayon-inline">arima()</span> из пакета <span class="lang:r decode:true crayon-inline">stats</span>, но, к сожалению, любимая практикующими прогнозистами модель экспоненциального сглаживания (<span class="lang:r decode:true crayon-inline">ets()</span> из пакета <span class="lang:r decode:true crayon-inline">forecast</span>) не поддерживает экзогенные переменные. Это была одна из причин, почему я взялся за разработку функций пакета <span class="lang:r decode:true crayon-inline">smooth</span>. Теперь все функции в пакете (кроме <span class="lang:r decode:true crayon-inline">sma()</span>) предоставляют возможность по включению экзогенных переменных.</p>
<p>В <span class="lang:r decode:true crayon-inline">smooth</span> реализовано две модели для работы с экзогенными переменными: модель с аддитивными и с мультипликативными ошибками. Первая формулируется следующим образом:<br />
\begin{equation} \label{eq:additive}<br />
	y_t = w&#8217; v_{t-l} + a_1 x_{1,t} + a_2 x_{2,t} + … + a_k x_{k,t} + \epsilon_t ,<br />
\end{equation}<br />
где \(a_1, a_2, …, a_k\) &#8212; параметры соответствующих регрессоров \(x_{1,t}, x_{2,t}, …, x_{t,k}\). Все остальные переменные мы уже обсуждали <a href="/2016/11/02/smooth-package-for-r-es-function-part-ii-pure-additive-models-ru/">в предыдущих статьях</a>.<br />
Вторая модель выглядит немного по-другому, так как она основана на <a href="/2016/11/18/smooth-package-for-r-es-function-part-iii-pure-multiplicative-models-ru/">мультипликативной ETS</a>:<br />
\begin{equation} \label{eq:multiplicative}<br />
	\log y_t = w&#8217; \log(v_{t-1}) + a_1 x_{1,t} + a_2 x_{2,t} + … + a_k x_{k,t} + \log(1 + \epsilon_t) ,<br />
\end{equation}<br />
Она может быть так же представлена в следующем виде:<br />
\begin{equation} \label{eq:multiplicativeAlternative}<br />
	y_t =\exp \left({w&#8217; \log(v_{t-1})} \right) \exp(a_1 x_{1,t}) \exp(a_2 x_{2,t}) \dots \exp(a_k x_{k,t}) (1 + \epsilon_t).<br />
\end{equation}<br />
Эта модель соответствует лог-линейной. Такая форма принята для того, чтобы в качестве экзогенных можно было бы использовать фиктивные переменные. Если вам нужна лог-лог модель, то для этого достаточно всего лишь прологарифмировать экзогенную переменную перед использованием её в функции.</p>
<p>Важно отметить, что смешанные модели могут вызвать проблемы, так как в таком случае некоторые компоненты складываются, а другие &#8212; перемножаются. Поэтому я бы рекомендовал использовать либо <a href="/2016/11/02/smooth-package-for-r-es-function-part-ii-pure-additive-models-ru/">чистые аддитивные</a>, либо <a href="/2016/11/18/smooth-package-for-r-es-function-part-iii-pure-multiplicative-models-ru/">чистые мультипликативные</a> ETSX (<a href="/2017/01/24/smooth-package-for-r-es-function-part-iv-model-selection-and-combination-of-forecasts-2/">в статье про выбор моделей</a> описано, как можно осуществить выбор на основе чистых моделей).</p>
<p>Итак, для того, чтобы построить модель с заданными регрессорами, достаточно просто передать в функцию вектор, матрицу либо data.frame: </p>
<pre class="decode">ourModel <- es(BJsales, "XXN", xreg=BJsales.lead, h=10, holdout=TRUE, silent=FALSE)</pre>
<pre>Estimation progress: 100%... Done! 
Time elapsed: 0.27 seconds
Model estimated: ETSX(AAdN)
Persistence vector g:
alpha  beta 
0.939 0.301 
Damping parameter: 0.877
Initial values were optimised.
7 parameters were estimated in the process
Residuals standard deviation: 1.381
Xreg coefficients were estimated in a normal style
Cost function type: MSE; Cost function value: 1.811

Information criteria:
     AIC     AICc      BIC 
494.4490 495.2975 515.0405 
Forecast errors:
MPE: 1.2%; Bias: 91.3%; MAPE: 1.3%; SMAPE: 1.3%
MASE: 2.794; sMAE: 1.5%; RelMAE: 0.917; sMSE: 0%</pre>
<div id="attachment_1623" style="width: 310px" class="wp-caption alignnone"><a href="/wp-content/uploads/2018/01/BJsalesETSXSimple.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1623" src="/wp-content/uploads/2018/01/BJsalesETSXSimple-300x175.png" alt="" width="300" height="175" class="size-medium wp-image-1623" srcset="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/01/BJsalesETSXSimple-300x175.png&amp;nocache=1 300w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/01/BJsalesETSXSimple-768x448.png&amp;nocache=1 768w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/01/BJsalesETSXSimple-1024x597.png&amp;nocache=1 1024w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2018/01/BJsalesETSXSimple.png&amp;nocache=1 1200w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><p id="caption-attachment-1623" class="wp-caption-text">BJsales series and ETSX with a leading indicator</p></div>
<p>В этом примере мы используем данные о продажах из книги Box & Jenkins (1976). Я попросил функцию использовать провести процедуру ретропрогноза и сделать прогноз на 10 шагов вперёд, так что последние 10 наблюдений переменной <span class="lang:r decode:true crayon-inline">BJsales.lead</span> используются для построения прогнозов. Функция построила модель и доложила нам, что параметры были оценены обычным методом (7 parameters were estimated in the process). Это значит, что мы предполагаем, что коэффициенты при регрессорах не меняются во времени. Альтернативный этому подход будет рассмотрен когда-нибудь в будущем.</p>
<p>Судя по всему, выбранная модель ETS(A,Ad,N) дала не самые точные, да ещё и смещённые прогнозы (систематическое отклонение от фактических значений в проверочной выборке). Пока что особых улучшений от включения переменной не видно...</p>
<p>Если в какой-то момент времени вы, вдруг, забудете о том, какая именно модель перед вами, вы можете воспользоваться функцией <span class="lang:r decode:true crayon-inline">formula()</span>, которая в случае с функциями <span class="lang:r decode:true crayon-inline">smooth</span> носит чисто описательный характер:</p>
<pre class="decode">formula(ourModel)</pre>
<pre>"y[t] = l[t-1] + b[t-1] + a1 * x[t] + e[t]"</pre>
<p>Функция рассказала нам, что уровень l[t-1], тренд b[t-1], экзогенная переменная "x[t]" и ошибка в нашей модели складываются. Если бы мы передали матрицу с экзогенными переменными или же построили модель с динамически меняющимися параметрами, то это было бы отражено в формуле. Использовать эту формулу так же, как и это сделается в lm(), к сожалению, нельзя.</p>
<p>Для сравнения построим следующую смешанную модель и посмотрим на её формулу:</p>
<pre class="decode">ourModel <- es(BJsales, "MAN", xreg=BJsales.lead, h=10, holdout=TRUE)
formula(ourModel)</pre>
<pre>"y[t] = (l[t-1] + b[t-1]) * exp(a1 * x[t]) * e[t]"</pre>
<p>Как видим, вначале тренд и уровень складываются, а потом это всё умножается на экспоненту нашей переменной. Если по какой-то причине тренд будет негативным, а уровень окажется близок к нулю, то экзогенная переменная будет умножена на отрицательное число. В результате получится бессмысленный прогноз. Это одна из причин, почему я не люблю смешанные модели и говорю, что использовать их надо с осторожностью.</p>
<p>Однако, вернёмся к нашим баранам. Если в нашем распоряжении нет значений экзогенной переменной для проверочной части выборки, то функции пакета <span class="lang:r decode:true crayon-inline">smooth</span> автоматически построят прогнозы для каждой из экзогенных переменных с помощью <span class="lang:r decode:true crayon-inline">es()</span> или <span class="lang:r decode:true crayon-inline">iss()</span> в зависимости от того, имеем мы дело с обычной или же с бинарной переменной. В последнем случае в качестве прогноза будет получена условная средняя, поэтому не удивляйтесь, если для вашей фиктивной переменной прогнозом будет что-нибудь типа 0,784. Так что не стоит использовать функцию вслепую, когда <span class="lang:r decode:true crayon-inline">holdout=FALSE</span>, будьте осторожны. Вот как функция работает в этом случае:</p>
<pre class="decode">es(BJsales, "XXN", xreg=BJsales.lead, h=10, holdout=FALSE, silent=FALSE)</pre>
<p>Нам должны сообщить о том, что функция сделала для нас (построила прогнозы экзогенных переменных):</p>
<pre>Warning message:
xreg did not contain values for the holdout, so we had to predict missing values.</pre>
<p>Если ваши переменные по размеру превышают выходную переменную, то функция удалит последние лишние наблюдения:</p>
<pre class="decode">ourModel <- es(BJsales[1:140], "XXN", xreg=BJsales.lead, h=10, holdout=TRUE)</pre>
<p>и сообщит нам об этом:</p>
<pre>Warning message:
xreg contained too many observations, so we had to cut off some of them.</pre>
<p>Как видите, функцию можно использовать напрямую, но, если вам хочется работать с <span class="lang:r decode:true crayon-inline">forecast()</span> (что совершенно необязательно), то это можно сделать так:</p>
<pre class="decode">forecast(ourModel, h=10, xreg=BJsales.lead)</pre>
<p>Из-за того, как реализовано использование экзогенных переменных в функциях пакета <span class="lang:r decode:true crayon-inline">smooth</span>, переменная <span class="lang:r decode:true crayon-inline">xreg</span> должна содержать все значения, а не только те, которые соответствуют проверочной выборке. Если вы вместо <span class="lang:r decode:true crayon-inline">xreg</span> передадите значения из проверочной выборки, то функция решит, что у вас мало наблюдений и построит прогнозы.</p>
<p>Я бы рекомендовал плюнуть на функцию <span class="lang:r decode:true crayon-inline">forecast()</span> и использовать <span class="lang:r decode:true crayon-inline">es()</span>, <span class="lang:r decode:true crayon-inline">ssarima()</span> и другие функции пакета <span class="lang:r decode:true crayon-inline">smooth</span> напрямую. Так вы сможете подготовить свои переменные и использовать их напрямую без дополнительных строк кода.</p>
<p>Аналогично тому, как это обсуждалось <a href="/2017/06/11/prediction-intervals/">в прошлой статье</a>, вы можете попросить функцию построить прогнозные интервалы. Только имейте в виду, что параметрические интервалы на данный момент не очень точны, так как не берут в расчёт возможный корреляции между экзогенными переменными и компонентами ETS. Сделать это сложно, поэтому эта функция и не реализована. Поэтому я бы рекомендовал в случае с ETSX, ARIMAX и пр. строить полупараметрические и непараметрические интервалы.</p>
<p>Наконец, вы всегда можете задать параметры для экзогенных переменных вручную, через переменную <span class="lang:r decode:true crayon-inline">initialX</span>:</p>
<pre class="decode">ourModel <- es(BJsales, "XXN", xreg=BJsales.lead, h=10, holdout=T, initialX=c(-1))</pre>
<p>Помимо всего этого, функции достаточно умны, чтобы определить, коррелируют ли переданные регрессоры друг с другом и есть ли в них дисперсия. Если что-то из переданного функции не так, она выкинет те переменные, которые вызывают проблемы:</p>
<pre class="decode">es(BJsales, "XXN", xreg=cbind(BJsales.lead,BJsales.lead), h=10, holdout=TRUE)</pre>
<pre>Warning message:
Some exogenous variables were perfectly correlated. We've dropped them out.</pre>
<p>Из-за того, что мы включили BJsales.lead дважды, регрессор вызвал совершенную мультиколлинеарность, поэтому функция выкинула один из них.</p>
<pre class="decode">es(BJsales, "XXN", xreg=cbind(BJsales.lead,rep(100,150)), h=10, holdout=TRUE)</pre>
<pre>Warning message:
Some exogenous variables do not have any variability. Dropping them out.</pre>
<p>А тут функция заметила, что вторая переменная постоянна, а значит и не может быть использована для моделирования, и, опять же, выкинула её.</p>
<p>Если вы случайно включите выходную переменную (в нашем примере это BJsales) в число регрессоров, то функция так же выкинет её:</p>
<pre class="decode">es(BJsales, "XXN", xreg=cbind(BJsales,BJsales.lead), h=10, holdout=TRUE)</pre>
<pre>Warning message:
One of exogenous variables and the forecasted data are exactly the same. We have dropped it.</pre>
<p>На этом основы заканчиваются. Далее мы перейдём к более продвинутым и интересным аспектам по использованию экзогенных переменных в функциях пакета <span class="lang:r decode:true crayon-inline">smooth</span>.</p>
<p>Сообщение <a href="https://openforecast.org/ru/2018/01/15/xreg-basics/">Пакет «smooth» для R. Общие параметры. Часть 3. Экзогенные переменные. Основы</a> появились сначала на <a href="https://openforecast.org/ru">Open Forecasting</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://openforecast.org/ru/2018/01/15/xreg-basics/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
		<item>
		<title>Пакет «smooth» для R. Общие параметры. Часть 2. Оценка параметров</title>
		<link>https://openforecast.org/ru/2017/11/20/estimation-of-smooth/</link>
					<comments>https://openforecast.org/ru/2017/11/20/estimation-of-smooth/#respond</comments>
		
		<dc:creator><![CDATA[Ivan Svetunkov]]></dc:creator>
		<pubDate>Mon, 20 Nov 2017 17:21:15 +0000</pubDate>
				<category><![CDATA[R]]></category>
		<category><![CDATA[Общая информация]]></category>
		<category><![CDATA[Пакет smooth для R]]></category>
		<category><![CDATA[Экстраполяционные методы]]></category>
		<category><![CDATA[ARIMA]]></category>
		<category><![CDATA[ETS]]></category>
		<category><![CDATA[smooth]]></category>
		<category><![CDATA[статистика]]></category>
		<guid isPermaLink="false">https://openforecast.org/?p=1382</guid>

					<description><![CDATA[<p>Прежде чем мы приступим к обсуждению сегоднешней темы, я бы рекомендовал обратиться к статье &#171;Элементы математической статистики, проверка гипотез&#187; электронного учебника &#8212; нам понадобятся сегодня такие понятия, как несмещённость, эффективность и состоятельность. Здесь их лишний раз обсуждать нехочется. Кроме того, многое, что мы рассмотрим сегодня, уже описано в главах &#171;Простые методы оценки параметров моделей» и [&#8230;]</p>
<p>Сообщение <a href="https://openforecast.org/ru/2017/11/20/estimation-of-smooth/">Пакет «smooth» для R. Общие параметры. Часть 2. Оценка параметров</a> появились сначала на <a href="https://openforecast.org/ru">Open Forecasting</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Прежде чем мы приступим к обсуждению сегоднешней темы, я бы рекомендовал обратиться к статье &#171;<a href="/forecasting_toolbox/statistics-and-hypothesis/">Элементы математической статистики, проверка гипотез</a>&#187; электронного учебника &#8212; нам понадобятся сегодня такие понятия, как несмещённость, эффективность и состоятельность. Здесь их лишний раз обсуждать нехочется.</p>
<p>Кроме того, многое, что мы рассмотрим сегодня, уже описано в главах &#171;<a href="/forecasting_toolbox/estimation-simple-methods/">Простые методы оценки параметров моделей</a>» и &#171;<a href="/forecasting_toolbox/estimation-advanced-methods/">Продвинутые методы оценки параметров моделей</a>». Поэтому теортическую часть мы обсуждать не будем, а лучше сконцентрируемся на том, как это сделать в R.</p>
<h3>Методы оценки на основе одношаговых прогнозов</h3>
<p>Начнём с того, что выберем временной ряд, с которым будем работать. Например, вот такой:</p>
<pre class="decode">x <- ts(c(M3$N1823$x,M3$N1823$xx),frequency=frequency(M3$N1823$x))</pre>
<p>Выглядит он вот так:</p>
<pre class="decode">plot(x)</pre>
<div id="attachment_1360" style="width: 310px" class="wp-caption alignnone"><a href="/wp-content/uploads/2017/10/SmoothEstimators01.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1360" src="/wp-content/uploads/2017/10/SmoothEstimators01-300x175.png" alt="" width="300" height="175" class="size-medium wp-image-1360" srcset="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2017/10/SmoothEstimators01-300x175.png&amp;nocache=1 300w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2017/10/SmoothEstimators01-768x448.png&amp;nocache=1 768w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2017/10/SmoothEstimators01-1024x597.png&amp;nocache=1 1024w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2017/10/SmoothEstimators01.png&amp;nocache=1 1200w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><p id="caption-attachment-1360" class="wp-caption-text">Ряд N1823</p></div>
<p>Похоже, что в ряде имеется небольшая мультипликативная сезонность, но её тяжело распознать. Для простоты в нашем примере мы будем использовать простую модель ETS(A,A,N) с аддитивной ошибкой и аддитивным трендом. Как это водится в данных M3, для проверочной выборки мы будем использовать последние 18 наблюдений.</p>
<p>Начнём с модели, оценённой путём минимизации MSE.</p>
<ul>
<li>MSE.</li>
</ul>
<pre class="decode">ourModel <- es(x,"AAN",silent=F,interval="p",h=18,holdout=T)</pre>
<div id="attachment_1361" style="width: 310px" class="wp-caption alignnone"><a href="/wp-content/uploads/2017/10/SmoothEstimators02.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1361" src="/wp-content/uploads/2017/10/SmoothEstimators02-300x175.png" alt="" width="300" height="175" class="size-medium wp-image-1361" srcset="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2017/10/SmoothEstimators02-300x175.png&amp;nocache=1 300w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2017/10/SmoothEstimators02-768x448.png&amp;nocache=1 768w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2017/10/SmoothEstimators02-1024x597.png&amp;nocache=1 1024w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2017/10/SmoothEstimators02.png&amp;nocache=1 1200w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><p id="caption-attachment-1361" class="wp-caption-text">N1823 и модель ETS(A,A,N) с MSE</p></div>
<p>Вот информация о полученной модели:</p>
<pre>Time elapsed: 0.08 seconds
Model estimated: ETS(AAN)
Persistence vector g:
alpha  beta 
0.147 0.000 
Initial values were optimised.
5 parameters were estimated in the process
Residuals standard deviation: 629.249
Cost function type: MSE; Cost function value: 377623.069

Information criteria:
     AIC     AICc      BIC 
1703.389 1703.977 1716.800 
95% parametric prediction intervals were constructed
100% of values are in the prediction interval
Forecast errors:
MPE: -14%; Bias: -74.1%; MAPE: 16.8%; SMAPE: 15.1%
MASE: 0.855; sMAE: 13.4%; RelMAE: 1.047; sMSE: 2.4%</pre>
<p>Тут сложно прийти к каким-нибудь конкретным заключениям, но, судя по всему, в прогнозе наблюдается небольшое систематическое завышение (это показывает MPE). При этом относительная MAE (RelMAE) оказалась больше единицы, что говорит о том, что метод Naive лучше справляется с задачей прогнозирования этого ряда, чем ETS(A,A,N). Посмотрим на остатки модели:</p>
<pre class="decode">qqnorm(resid(ourModel))
qqline(resid(ourModel))</pre>
<div id="attachment_1363" style="width: 310px" class="wp-caption alignnone"><a href="/wp-content/uploads/2017/10/SmoothEstimators02QQ.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1363" src="/wp-content/uploads/2017/10/SmoothEstimators02QQ-300x175.png" alt="" width="300" height="175" class="size-medium wp-image-1363" srcset="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2017/10/SmoothEstimators02QQ-300x175.png&amp;nocache=1 300w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2017/10/SmoothEstimators02QQ-768x448.png&amp;nocache=1 768w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2017/10/SmoothEstimators02QQ-1024x597.png&amp;nocache=1 1024w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2017/10/SmoothEstimators02QQ.png&amp;nocache=1 1200w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><p id="caption-attachment-1363" class="wp-caption-text">График Квантиль-квантиль по остаткам модели ETS(A,A,N), оценённой MSE</p></div>
<p>Остатки выглядят ненормально - много эмпирических квантилей оказались расположены далеко от теоретических значений. Тест на нормальность Шапиро-Уилка отвергает гипотезу о нормальности распределения остатков на 5% уровне:</p>
<pre class="decode">shapiro.test(resid(ourModel))
> p-value = 0.001223</pre>
<p>Это может указывать на то, что другие методы оценки могут справиться с оценкой параметров лучше. И в функциях пакета <span class="lang:r decode:true crayon-inline">smooth</span> есть специальный волшебный параметра для этого - <span class="lang:r decode:true crayon-inline">loss</span>. Попробуем оценить ту же модель с помощью других методов.</p>
<ul>
<li>MAE.</li>
</ul>
<p>Минимум MAE находится с помощью команды:</p>
<pre class="decode">ourModel <- es(x,"AAN",silent=F,interval="p",h=18,holdout=T,loss="MAE")</pre>
<p>и даёт следующие результаты:<br />
<div id="attachment_1362" style="width: 310px" class="wp-caption alignnone"><a href="/wp-content/uploads/2017/10/SmoothEstimators03.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1362" src="/wp-content/uploads/2017/10/SmoothEstimators03-300x175.png" alt="" width="300" height="175" class="size-medium wp-image-1362" srcset="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2017/10/SmoothEstimators03-300x175.png&amp;nocache=1 300w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2017/10/SmoothEstimators03-768x448.png&amp;nocache=1 768w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2017/10/SmoothEstimators03-1024x597.png&amp;nocache=1 1024w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2017/10/SmoothEstimators03.png&amp;nocache=1 1200w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><p id="caption-attachment-1362" class="wp-caption-text">N1823 и ETS(A,A,N), оценённой с помощью MAE</p></div>
<pre>Time elapsed: 0.09 seconds
Model estimated: ETS(AAN)
Persistence vector g:
alpha  beta 
0.101 0.000 
Initial values were optimised.
5 parameters were estimated in the process
Residuals standard deviation: 636.546
Cost function type: MAE; Cost function value: 462.675

Information criteria:
     AIC     AICc      BIC 
1705.879 1706.468 1719.290 
95% parametric prediction intervals were constructed
100% of values are in the prediction interval
Forecast errors:
MPE: -5.1%; Bias: -32.1%; MAPE: 12.9%; SMAPE: 12.4%
MASE: 0.688; sMAE: 10.7%; RelMAE: 0.842; sMSE: 1.5%</pre>
<p>Что же получилось? Во-первых, постоянная сглаживания альфа оказалась меньше, чем в предыдущей модели, что говорит о том, что полученная модель менее чувствительна к выбросам и более консервативна. Во-вторых, RelMAE оказалась меньше нуля, что говорит о том, что данная модель лучше справляется с прогнозированием, чем Naive и чем предыдущая. Это, возможно, как раз вызвано робастностью данного метода оценки. В-третьих, по графику видно, что полученный прогноз проходит где-то между наблюдениями в проверочной выборке, что является желаемым поведением прогнозной модели. Остатки всё ещё распределены ненормально, но это вполне ожидаемо, так как другой метод оценки не делает их нормальными, а просто позволяет получить значения, менее чувствительные к выбросам:</p>
<div id="attachment_1364" style="width: 310px" class="wp-caption alignnone"><a href="/wp-content/uploads/2017/10/SmoothEstimators03QQ.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1364" src="/wp-content/uploads/2017/10/SmoothEstimators03QQ-300x175.png" alt="" width="300" height="175" class="size-medium wp-image-1364" srcset="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2017/10/SmoothEstimators03QQ-300x175.png&amp;nocache=1 300w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2017/10/SmoothEstimators03QQ-768x448.png&amp;nocache=1 768w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2017/10/SmoothEstimators03QQ-1024x597.png&amp;nocache=1 1024w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2017/10/SmoothEstimators03QQ.png&amp;nocache=1 1200w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><p id="caption-attachment-1364" class="wp-caption-text">График Квантиль-квантиль по остаткам модели ETS(A,A,N), оценённой MAE</p></div>
<ul>
<li>HAM – Half Absolute Moment.</li>
</ul>
<p>Здесь стоит немного остановиться, так как этот метод оценки мы ещё не рассматривали в учебнике. Формула его выглядит так:<br />
\begin{equation} \label{eq:HAM}<br />
	\text{HAM} = \frac{1}{T} \sum_{t=1}^T \sqrt{|e_{t+1}|}<br />
\end{equation}<br />
Особенность данного метода оценки заключается в том, что масштаб ошибок уменьшается за счёт взятия корня. В результате этого модель, оценённая HAM оказывается ещё более устойчивой к выбросам, чем MAE. Более того, для модели становятся важны более мелкие и часто встречающиеся отклонения, нежели крупные и редкие. Минимум этой функции на целочисленных данных соответствует моде. В случае с непрерывными - чему-то между модой и медианой. На эту тему я с коллегами сейчас провожу исследование. Этот метод оценки даёт состоятельные, но менее эффективные оценки параметров, чем MSE и MAE.</p>
<p>Посмотрим, что получится:</p>
<pre class="decode">ourModel <- es(x,"AAN",silent=F,interval="p",h=18,holdout=T,loss="HAM")</pre>
<div id="attachment_1365" style="width: 310px" class="wp-caption alignnone"><a href="/wp-content/uploads/2017/10/SmoothEstimators04.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1365" src="/wp-content/uploads/2017/10/SmoothEstimators04-300x175.png" alt="" width="300" height="175" class="size-medium wp-image-1365" srcset="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2017/10/SmoothEstimators04-300x175.png&amp;nocache=1 300w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2017/10/SmoothEstimators04-768x448.png&amp;nocache=1 768w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2017/10/SmoothEstimators04-1024x597.png&amp;nocache=1 1024w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2017/10/SmoothEstimators04.png&amp;nocache=1 1200w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><p id="caption-attachment-1365" class="wp-caption-text">N1823 и ETS(A,A,N) с HAM</p></div>
<pre>Time elapsed: 0.06 seconds
Model estimated: ETS(AAN)
Persistence vector g:
alpha  beta 
0.001 0.001 
Initial values were optimised.
5 parameters were estimated in the process
Residuals standard deviation: 666.439
Cost function type: HAM; Cost function value: 19.67

Information criteria:
     AIC     AICc      BIC 
1715.792 1716.381 1729.203 
95% parametric prediction intervals were constructed
100% of values are in the prediction interval
Forecast errors:
MPE: -1.7%; Bias: -14.1%; MAPE: 11.4%; SMAPE: 11.4%
MASE: 0.63; sMAE: 9.8%; RelMAE: 0.772; sMSE: 1.3%</pre>
<p>Судя по прогнозным ошибкам и графику, эта модель дала ещё более точные прогнозы, чем модель, оценённая с помощью MAE. Правда сделала она это приблизив обе постоянные сглаживания к нулю. Обратите внимание, что стандартное отклонение в этом случае оказалось выше, чем в случае с MAE, которое в свою очередь выше, чем MSE. Это означает, что одношаговые прогнозные интервалы будут шире у HAM, чем у MAE, чем у MSE. Однако, учитывая величину постоянных сглаживания в нашем примере, многошаговые интервалы у модель с HAM, скорее всего, будут уже остальных.</p>
<p>Кроме того, стоит заметить, что оптимизация моделей с использованием разных методов оценки происходит с разной скоростью. MSE - самый медленный метод оценки, в то время как HAM - самый быстрый. Вызвано это формой математической функции (в случае с MSE - парабола, с MAE - линейная, с HAM - корень) и тем, как работают эвристические методы оптимизации. Разница в скорости может быть существенной, особенно, если вы работаете с большими выборками. Так что, если вы спешите, а какие-нибудь оценки нужно получить быстро, попробуйте HAM. Только не забывайте, что информационные критерии в этом случае могут давать неточные результаты.</p>
<h3>Методы оценки на основе многошаговых прогнозов</h3>
<p>Следующие три метода используют идею, рассмотренную нами в главе "<a href="/forecasting_toolbox/estimation-advanced-methods/">Продвинутые методы оценки параметров</a>». Эти методы дают состоятельные, но не эффективны, а зачастую ещё и смещённые оценки параметров. Возникает вопрос, зачем ими тогда пользоваться? А всё дело в том, что эти методы "сжимают" параметры моделей, делая сами модели более "консервативными", ближе к детерминистическим и минимизируя влияние шумов на прогноз. Это оказывается особенно полезно в случаях с высокочастотными данными, когда асимптотические свойства начинают работать, а эффективность оценок растёт.</p>
<ul>
<li>MSE\(_h\) - Mean Squared Error для прогноза на h шагов вперёд:</li>
</ul>
<p>Посмотрим, что получится, если использовать его для оценки нашей модели:</p>
<pre class="decode">ourModel <- es(x,"AAN",silent=F,interval="p",h=18,holdout=T,loss="MSEh")</pre>
<div id="attachment_1366" style="width: 310px" class="wp-caption alignnone"><a href="/wp-content/uploads/2017/10/SmoothEstimators05.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1366" src="/wp-content/uploads/2017/10/SmoothEstimators05-300x175.png" alt="" width="300" height="175" class="size-medium wp-image-1366" srcset="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2017/10/SmoothEstimators05-300x175.png&amp;nocache=1 300w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2017/10/SmoothEstimators05-768x448.png&amp;nocache=1 768w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2017/10/SmoothEstimators05-1024x597.png&amp;nocache=1 1024w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2017/10/SmoothEstimators05.png&amp;nocache=1 1200w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><p id="caption-attachment-1366" class="wp-caption-text">N1823 и ETS(A,A,N) с MSEh</p></div>
<pre>Time elapsed: 0.24 seconds
Model estimated: ETS(AAN)
Persistence vector g:
alpha  beta 
    0     0 
Initial values were optimised.
5 parameters were estimated in the process
Residuals standard deviation: 657.781
Cost function type: MSEh; Cost function value: 550179.34

Information criteria:
     AIC     AICc      BIC 
30393.86 30404.45 30635.25 
95% parametric prediction intervals were constructed
100% of values are in the prediction interval
Forecast errors:
MPE: -10.4%; Bias: -62%; MAPE: 14.9%; SMAPE: 13.8%
MASE: 0.772; sMAE: 12.1%; RelMAE: 0.945; sMSE: 1.8%</pre>
<p>Как видим, обе постоянные сглаживания оказались равными нулю, в результате чего мы получили прямую линию, проходящую через все наблюдения. Если бы в нашем распоряжении было 1008, а не 108 наблюдений, тогда параметры были бы отличны от нуля, так как модель вынуждена была бы адаптироваться к изменениям в данных. Но мы получили, что получили...</p>
<ul>
<li>TMSE – Trace Mean Squared Error:</li>
</ul>
<p>Опять же, на наших данных:</p>
<pre class="decode">ourModel <- es(x,"AAN",silent=F,interval="p",h=18,holdout=T,loss="TMSE")</pre>
<div id="attachment_1666" style="width: 310px" class="wp-caption alignnone"><a href="/wp-content/uploads/2017/11/SmoothEstimators06.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1666" src="/wp-content/uploads/2017/11/SmoothEstimators06-300x175.png" alt="" width="300" height="175" class="size-medium wp-image-1666" srcset="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2017/11/SmoothEstimators06-300x175.png&amp;nocache=1 300w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2017/11/SmoothEstimators06-768x448.png&amp;nocache=1 768w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2017/11/SmoothEstimators06-1024x597.png&amp;nocache=1 1024w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2017/11/SmoothEstimators06.png&amp;nocache=1 1200w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><p id="caption-attachment-1666" class="wp-caption-text">N1823 and ETS(A,N,N) with TMSE</p></div>
<pre>Time elapsed: 0.2 seconds
Model estimated: ETS(AAN)
Persistence vector g:
alpha  beta 
0.075 0.000 
Initial values were optimised.
5 parameters were estimated in the process
Residuals standard deviation: 633.48
Cost function type: TMSE; Cost function value: 7477097.717

Information criteria:
     AIC     AICc      BIC 
30394.36 30404.94 30635.75 
95% parametric prediction intervals were constructed
100% of values are in the prediction interval
Forecast errors:
MPE: -7.5%; Bias: -48.9%; MAPE: 13.4%; SMAPE: 12.6%
MASE: 0.704; sMAE: 11%; RelMAE: 0.862; sMSE: 1.5%</pre>
<p>Сравнивая эту модель с моделью с MSE и MSE\(_h\), можно заметить, что в случае с TMSE постоянная сглаживания для уровня ряда лежит где-то между постоянными сглаживания предыдущих моделей. Это демонстрирует тот самый, эффект, который мы обсуждали в учебнике: многошаговые прогнозы тянут параметры к нулю, в то время как одношаговые их немного поднимают вверх. Тем не менее, я бы рекомендовал использовать TMSE на больших выборках, где оценки параметров становятся более эффективными и менее смещёнными.</p>
<ul>
<li>GTMSE – Geometric Trace Mean Squared Error:</li>
</ul>
<p>Этот метод оценки мы тоже уже <a href="/forecasting_toolbox/estimation-advanced-methods/">обсуждали в учебнике</a>. </p>
<pre class="decode">ourModel <- es(x,"AAN",silent=F,interval="p",h=18,holdout=T,loss="GTMSE")</pre>
<div id="attachment_1368" style="width: 310px" class="wp-caption alignnone"><a href="/wp-content/uploads/2017/10/SmoothEstimators07.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1368" src="/wp-content/uploads/2017/10/SmoothEstimators07-300x175.png" alt="" width="300" height="175" class="size-medium wp-image-1368" /></a><p id="caption-attachment-1368" class="wp-caption-text">N1823 and ETS(A,A,N) with GTMSE</p></div>
<pre>Time elapsed: 0.18 seconds
Model estimated: ETS(AAN)
Persistence vector g:
alpha  beta 
    0     0 
Initial values were optimised.
5 parameters were estimated in the process
Residuals standard deviation: 649.253
Cost function type: GTMSE; Cost function value: 232.419

Information criteria:
     AIC     AICc      BIC 
30402.77 30413.36 30644.16 
95% parametric prediction intervals were constructed
100% of values are in the prediction interval
Forecast errors:
MPE: -8.2%; Bias: -53.8%; MAPE: 13.8%; SMAPE: 12.9%
MASE: 0.72; sMAE: 11.3%; RelMAE: 0.882; sMSE: 1.6%</pre>
<p>В нашем примере этот метод оценки также сжал параметры к нулю, сделав модель детерминистической, что соответствует результатам, полученным с помощью MSE\(_h\). Однако, стартовые значения у методы получились немного другими, что привело к другим прогнозам.</p>
<p>Имейте в виду, что все эти методы оценки значительно более требовательны к расчётном времени, потому что для каждого из них нужно сделать прогноз на h шагов вперёд из каждого наблюдения в обучающей выборке.</p>
<ul>
<li>Аналитические многошаговые методы оценки.</li>
</ul>
<p>В функциях пакета <span class="lang:r decode:true crayon-inline">smooth</span> есть ещё одна полезная, незадокументированная функция (доступная пока только для чистых аддитивных моделей) – использование аналитических аналогов многошаговых методов оценки. Вызываются такие методы путём добавления буквы "a" перед названием желаемого метода оценки: aMSEh, aTMSE, aGTMSE.  В этом случае одношаговые ошибки и параметры модели будут использоваться для реконструирования многошаговых методов оценки. Эта опция полезна в том случае, когда вам нужно использовать какой-то метод оценки на малых выборках. Также эти методы могут быть полезны, если вы работаете с большими выборками, но хотите, чтобы модель была построена относительно быстро.</p>
<p>Эти методы оценки имеют свойства схожие со свойствами их эмпирических аналогов, но работают быстрее и используют асимптотические свойства.</p>
<p>Вот пример использования аналитичекого MSE\(_h\):</p>
<pre class="decode">ourModel <- es(x,"AAN",silent=F,interval="p",h=18,holdout=T,cfType="aMSEh")</pre>
<div id="attachment_1377" style="width: 310px" class="wp-caption alignnone"><a href="/wp-content/uploads/2017/10/SmoothEstimators09.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1377" src="/wp-content/uploads/2017/10/SmoothEstimators09-300x175.png" alt="" width="300" height="175" class="size-medium wp-image-1377" srcset="https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2017/10/SmoothEstimators09-300x175.png&amp;nocache=1 300w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2017/10/SmoothEstimators09-768x448.png&amp;nocache=1 768w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2017/10/SmoothEstimators09-1024x597.png&amp;nocache=1 1024w, https://openforecast.org/wp-content/webpc-passthru.php?src=https://openforecast.org/wp-content/uploads/2017/10/SmoothEstimators09.png&amp;nocache=1 1200w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><p id="caption-attachment-1377" class="wp-caption-text">N1823 и ETS(A,A,N) с aMSEh</p></div>
<pre>Time elapsed: 0.11 seconds
Model estimated: ETS(AAN)
Persistence vector g:
alpha  beta 
    0     0 
Initial values were optimised.
5 parameters were estimated in the process
Residuals standard deviation: 627.818
Cost function type: aMSEh; Cost function value: 375907.976

Information criteria:
     AIC     AICc      BIC 
30652.15 30662.74 30893.55 
95% parametric prediction intervals were constructed
100% of values are in the prediction interval
Forecast errors:
MPE: -1.9%; Bias: -14.6%; MAPE: 11.7%; SMAPE: 11.6%
MASE: 0.643; sMAE: 10%; RelMAE: 0.787; sMSE: 1.3%</pre>
<p>Итоговые постоянные сглаживания получились равными нулю, аналогично тому, что мы наблюдали в MSE\(_h\). Стартовые значения модели при этом получились немного другие, поэтому и прогноз оказался другим (по сравнению с MSE\(_h\)). На себя так же обращает внимание то, что модель была оценена и сконструирована за 0.11 секунд, а не за 0.24, как в случае с MSE\(_h\).</p>
<ul>
<li>Аналогично тому, как это было с MSE, в функциях <span class="lang:r decode:true crayon-inline">smooth</span> реализованы и многошаговые MAE и HAM (типа MAE\(_h\) и THAM). Правда, они там просто потому что я смог их сделать, а не потому что они имеют какой-то особый смысл. К их изучению я ещё даже не думал приступать.</li>
</ul>
<h3>Заключение</h3>
<p>Теперь, когда мы обсудили все возможные методы оценки функций пакета <span class="lang:r decode:true crayon-inline">smooth</span>, у вас может возникнуть закономерный вопрос: "Что же использовать?". Честно говоря, у меня пока нет однозначного ответа на этот вопрос, так как это направление ещё не до конца изучено. Но у меня есть некоторые советы, которые хотелось бы здесь привести:</p>
<p>Во-первых, <a href="http://kourentzes.com/forecasting/2015/08/20/forecasting-solar-irradiance-true-models-trace-optimisation-and-shrinkage/" rel="noopener noreferrer" target="_blank">Никос Курентзес и Хуан Рамон Траперо выяснили</a>, что в случае с высокочастотными данными использование MSE\(_h\) и TMSE приводит к увеличению точности прогнозов по сравнению с MSE. Однако, если в случае с MSE\(_h\) для этого нужно построить h моделей, TMSE позволяет построить одну, что в разы уменьшает время расчётов. Точность прогнозов при использовании TMSE и MSE\(_h\) оказывается сопостовимой.</p>
<p>Во-вторых, если вы сталкиваетесь с асимметричным распределением остатков при оценке с помощью MSE, попробуйте использовать MAE и HAM – они могут улучшить прогнозную точность моделей.</p>
<p>В-третьих, аналитические версии многошаговых методов я бы рекомендовал использовать на больших выборках, когда скорость вычислений важна, а свойства этих методов хочется использовать. Ну, или в ситуации, когда выборка наоборот маленькая, а свойства хочется использовать (эмпирические значения получить в этом случае затруднительно).</p>
<p>Наконец, не стоит спользовать MSE\(_h\), TMSE и GTMSE если вас интересуют параметры моделей (а не точность прогнозов) – они скорее всего будут неэффективными и смещёнными. Это применимо как к ETS, так и к ARIMA, которые в этом случае становятся близкими к детерминистическим моделям. Используйте MSE и не выпендривайтесь!</p>
<p>Сообщение <a href="https://openforecast.org/ru/2017/11/20/estimation-of-smooth/">Пакет «smooth» для R. Общие параметры. Часть 2. Оценка параметров</a> появились сначала на <a href="https://openforecast.org/ru">Open Forecasting</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://openforecast.org/ru/2017/11/20/estimation-of-smooth/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
