Frexp экспоненциальное представление

Содержание

Преобразование экспоненциальной записи числа в естественную

Экспоненциальная запись — представление действительных чисел в виде мантиссы и порядка. Удобна при представлении очень больших и очень малых чисел, а также для унификации их написания.

На компьютере (в частности в тексте компьютерных программ) экспоненциальную запись записывают в виде MEp, где:

E (exponent) — буква E, означающая «*10^» («…умножить на десять в степени…»),

Расшифруем число 3.5E2

Е — это 10, цифры после Е — показатель степени, в который возводится 10.

3.5E2 = 3.5 ∙ 10 2 = 3.5 ∙ 100 = 350

6.02E+3 = 6.02 ∙ 10 3 = 6.02 ∙ 1000 = 6020

6.02E+4 = 6.02 ∙ 10 4 = 6.02 ∙ 10000 = 60200

6.02E-9 = 6.02 ∙ 10 -9 = 6.02 ∙ 0.000000001 = 0.00000000602

6.02214129E23 = 6.02214129 ∙ 10 23 = 6.02214129 ∙ 99999999999999991611392 = 602214128999999968641024

экспоненциальное представление

экспоненциальное представление
Форма представления длинных чисел в виде отдельной записи мантиссы и показателя степени.
При использовании рассматриваемой формы число (А) хранится в памяти в виде двух частей (M, N), разделенных символом Е (обозначение формата Е):
A=M E N,
где: М — значащие разряды числа,
N — показатель степени.
Рассмотрим два примера. Первый касается числа больше единицы. 124 000 000. В экспоненциальном представлении это число получает вид: 124Е6, где 6 — число нулей. Аналогично этому число меньше единицы: 0,0000058. Оно получает вид: 58E — 7.
Экспоненциальный формат широко используется при записи чисел с плавающей запятой. Здесь М является значащей частью мантиссы. Например, число: 0,138. В экспоненциальном представлении оно получает вид: 138Е-3.
[Гипертекстовый энциклопедический словарь по информатике Э. Якубайтиса]
[http://www.morepc.ru/dict/]

Тематики

  • информационные технологии в целом
  • exponential notation

Справочник технического переводчика. – Интент . 2009-2013 .

Смотреть что такое «экспоненциальное представление» в других словарях:

экспоненциальное сглаживание — Метод построения нового временного ряда, менее иррегулярного; про все подобные методы говорят, что они сглаживают. Он позволяет получить более ясное представление о закономерностях, лежащих в основе этого ряда. Используется также для… … Словарь социологической статистики

научное представление — экспоненциальное представление экспоненциальный формат — [Л.Г.Суменко. Англо русский словарь по информационным технологиям. М.: ГП ЦНИИС, 2003.] Тематики информационные технологии в целом Синонимы экспоненциальное… … Справочник технического переводчика

ЛИНЕЙНЫЙ ДИФФЕРЕНЦИАЛЬНЫЙ ОПЕРАТОР — в узком смысле оператор, действующий на функции, заданные на открытом множестве и принимающий значения в поле или по формуле где функции со значениями в том же поле, наз. коэффициентами А. Если коэффициенты принимают значения во множестве матриц… … Математическая энциклопедия

ГОСТ Р 50779.10-2000: Статистические методы. Вероятность и основы статистики. Термины и определения — Терминология ГОСТ Р 50779.10 2000: Статистические методы. Вероятность и основы статистики. Термины и определения оригинал документа: 2.3. (генеральная) совокупность Множество всех рассматриваемых единиц. Примечание Для случайной величины… … Словарь-справочник терминов нормативно-технической документации

Индикатор — (Indicator) Индикатор это информационная система, вещество, прибор, устройство, отображающий изменения какого либо параметра Индикаторы графиков валютного рынка форекс, какие они бывают и где их можно скачать? Описание индикаторов MACD,… … Энциклопедия инвестора

Скользящая средняя — У этого термина существуют и другие значения, см. Скользящая средняя (значения). График исходной функции (синий) и его скользящая средняя (красная) с шириной окна n = 2 … Википедия

Дерево (структура данных) — У этого термина существуют и другие значения, см. Дерево (значения). Простой пример неупорядоченного дерева Дерево одна из наиболее широко распространённых структу … Википедия

ОРБИТ МЕТОД — метод изучения унитарных представлений групп Ли. С помощью О. м. была построена теория унитарных представлений нильпотентных групп Ли, а также указана возможность его применения к другим группам [1]. О. м. основан на следующем экспериментальном… … Математическая энциклопедия

ГРУППА — множество, на к ром определена операция, наз. умножением и удовлетворяющая спец. условиям (групповым аксиомам): в Г. существует единичный элемент; для каждого элемента Г. существует обратный; операция умножения ассоциативна. Понятие Г. возникло… … Физическая энциклопедия

ЭРГОДИЧЕСКАЯ ТЕОРИЯ — Введение Э. т. (метрическая теория динамических систем) раздел теории динамических систем, изучающий их статистич. свойства. Возникновение Э. т. (1 я треть 20 в.) было стимулировано попытками доказать эргодическую гипотезу (термин введён П. и Т.… … Физическая энциклопедия

Экспоненциальная запись чисел

Онлайн калькулятор для перевода чисел в экспоненциальный вид и обратно, другим языком для вычисления чисел с буквой E.
На компьютере (в частности в тексте компьютерных программ) экспоненциальную запись записывают в виде MEp (пример 1e-10), где:

M — мантисса,
E (exponent) — буква E в числе, означающая «*10^» («…умножить на десять в степени…»),
p — порядок.
Это необходимо для представлении очень больших и очень малых чисел, а также для унификации их написания.

Многие пользователи калькуляторов столкнулись с вопросом: Что означает буква «E» в цифровом калькуляторе?
Это Экспоненциа́льная за́пись— представление действительных чисел в виде мантиссы и порядка. Удобна для записи очень больших и очень малых чисел.

Например, расшифруем эти числа:
Е — это 10, цифры после Е — показатель степени, в который возводится 10.
0.66E004 = 0,66 * 10^4 = 0.66*10000 = 6600
0.66E-007 = 0.66 * 10^(-7) = 0.66 * 0.0000001 = 0.000000066
0.66E11 = 0.66 * 10^11 = 0.66 * 100000000000 = 66000000000

Также калькулятор способен не только расшифровать большие или малые числа с буквой E но и сделать обратное действие, т.е перевести числа в экспоненциальную запись.

Вычислим числа с буквой «е«:
1e-10 = 0.0000000001 — ноль целых одна десятимиллиардная
6e+17 = -600000000000000000000
Есть число 2.6E3. Что означает буква Е = 2 600 — две тысячи шестьсот
1Е+6 = равен миллиону 1 000 000

Функция frexp

Функции frexpf() и frexpl() добавлены в версии С99.

Каждая функция семейства frexp() разбивает число num на мантиссу mantissa , значение которой удовлетворяет неравенствам 0.5 , и целый показатель степени числа 2 (он обозначен через ехр ), притом числа mantissa и ехр выбираются так, чтобы выполнялось равенство num = mantissa * 2 exp . Значение мантиссы возвращается функцией, а значение показателя [1] присваивается переменной, адресуемой указателем ехр .

Пример

Данный фрагмент программы выводит число

в качестве мантиссы и число

в качестве показателя степени.

Зависимые функции

[1] Напомним, что представление числа num в виде num = mantissa * b exp (здесь b — основание системы счисления) называется представлением с плавающей точкой (запятой) или полулогарифмическим представлением , и что целая часть логарифма называется характеристикой . Так что ехр=χ 2 (num)+1 , где χ 2 (num)=|_log 2 (num)_| — характеристика двоичного логарифма. Число ехр часто называется порядком числа num (в нормализованном представлении). Заметим также, что терминам мантисса и характеристика часто придается и иной смысл. Так, по историческим причинам под мантиссой часто подразумевают дробную часть логарифма ; иногда ее называют также мантиссой логарифма . Что же касается характеристики , то под ней иногда понимают просто число, которое представляет порядок в представлении с плавающей запятой . (В этом смысле в большинстве машин характеристика равна порядку, если он положительный; отличия между ними, как правило, обусловлены тем, что представление порядка, который может быть также и неположительным числом, при реализации операций над числами в полулогарифмическом представлении рассматривают как представление неотрицательного числа.) Так что можно сказать, что характеристика в этом смысле — машинное представление порядка числа. Порядок в этом контексте называется также иногда экспонентой . (Не путайте с экспонентой-функцией!)

Война с экспоненциальным представлением числа

Всем добрый день. Никак не могу сдюжить с экселем, который мне любезно изменяет число в экспоненциальную его форму.

Например я получаю от источника наборы цифр, которые заношу в таблицу. По умолчанию формат ячеек стоит General (читаем описание — no specific number format). Ожидаю, что цифры будут представлены в ячейках как есть. Когда приходит значение из 14 цифр, эксель делает ему научную (экспоненциальную) форму представления. Почему? У меня формат ячейки General а не Scientific .
Если я получаю число «12345678901234», оно должно быть именно так и представлено. А не как «1,234567E+13».

Если делать ячейке формат Number без десятичных знаков, то он мне зарежет приходящее число «1,23» до «1»
Если выставлять ему десятичные знаки, то мое 14-значное число прирастет тремя лишними символами, чего мне не надо.

Если мы делаем формат Text , то эксель начинает ругаться на это число, говоря что у него неправильный формат. Да и обрабатываться такие числа будут как текст.

В общем вопрос такой:
есть ли какая-нибудь настройка, которая должна оставлять числа как они есть в general формате?
Может быть стоит использовать Custom с каким-нибудь нехитрым выражением в поле Type?

Добавлено через 4 часа 18 минут
upd1: путем проб выяснил, что максимальное значение числа в ячейке экселя может быть «1,000,000,000,000,000».

Добавлено через 1 минуту
upd2: действительно, как и предполагал, нехитрое Custom > Type > 0 оставляет число в его естественном виде. Для vba это .NumberFormat = «0»

Экспоненциальное сглаживание

Материал из MachineLearning.

Содержание

Выявление и анализ тенденции временного ряда часто производится с помощью его выравнивания или сглаживания. Экспоненциальное сглаживание — один из простейших и распространенных приемов выравнивания ряда. Экспоненциальное сглаживание можно представить как фильтр, на вход которого последовательно поступают члены исходного ряда, а на выходе формируются текущие значения экспоненциальной средней.

Пусть — временной ряд.

Экспоненциальное сглаживание ряда осуществляется по рекуррентной формуле: , .

Чем меньше α, тем в большей степени фильтруются, подавляются колебания исходного ряда и шума.

Если последовательно использовать рекуррентное это соотношение, то экспоненциальную среднюю можно выразить через значения временного ряда X.

Если к моменту начала сглаживания существуют более ранние данные, то в качестве начального значения можно использовать арифметическую среднюю всех имеющихся данных или какой-то их части.

После появления работ Р. Брауна экспоненциальное сглаживание часто используется для решения задачи краткосрочного прогнозирования временных рядов.

Постановка задачи

Пусть задан временной ряд: .

Необходимо решить задачу прогнозирования временного ряда, т.е. найти

— горизонт прогнозирования, необходимо, чтобы

Для того, чтобы учитывать устаревание данных, введем невозрастающую последовательность весов , тогда

Модель Брауна

Предположим, что D — невелико (краткосрочный прогноз), то для решения такой задачи используют модель Брауна .

Если рассматривать прогноз на 1 шаг вперед, то — погрешность этого прогноза, а новый прогноз получается в результате корректировки предыдущего прогноза с учетом его ошибки — суть адаптации.

Илон Маск рекомендует:  Что такое код ora_error

При краткосрочном прогнозировании желательно как можно быстрее отразить новые изменения и в то же время как можно лучше «очистить» ряд от случайных колебаний. Т.о. следует увеличивать вес более свежих наблюдений: .

С другой стороны, для сглаживания случайных отклонений, α нужно уменьшить: .

Т.о. эти два требования находятся в противоречии. Поиск компромиссного значения α составляет задачу оптимизации модели. Обычно, α берут из интервала (0,1/3).

Примеры

Работа экспоненциального сглаживания при α=0.2 на данных ежемесячных отчетов по продажам иностранной автомобильной марки в России за период с января 2007 по октябрь 2008. Отметим резкие падения в январе и феврале, когда продажи традиционно снижаются и повышения в начале лета.

Проблемы

Модель работает только при небольшом горизонте прогнозирования. Не учитываются тренд и сезонные изменения. Чтобы учесть их влияние, предлагается использовать модели: Хольта (учитывается линейный тренд) Хольта-Уинтерса (мультипликативные экспоненциальный тренд и сезонность), Тейла-Вейджа (аддетивные линейный тренд и сезонность).

Литература

Лукашин Ю. П. Адаптивные методы краткосрочного прогнозирования временных рядов. — М.: Финансы и статистика, 2003.

Brown R.G. Smoothing forecasting and prediction of discrete time series. — N.Y., 1963.

Brown R.G., Meyer R.F. The fundamental theorum of exponential smoothing. Oper. Res. — 1961. — Vol.9. -№ 5.

См. также

Модель Хольта — учитываются линейный тренд без сезонности.

Модель Хольта-Уинтерса — учитываются мультипликативный тренд и сезонность.

Модель Тейла-Вейджа — учитываются аддитивный тренд и сезонность.

Экспонента в жизни- 2. Зачем это нужно?

В прошлом посте мы говорили о том, как пролетели австралийцы с экспонентой.

В этом – постараюсь ответить на главный вопрос жизни Вселенной и все такое.

Где математика экспонента может пригодиться в реальной жизни?

Можно, конечно, скорчить серьезную физиономию и сказать, что,мол:

По экспоненте высыхает земля после дождя, по экспоненте падает давление, когда вы поднимаетесь в горы…. но звучит это как-то по-ботански!

Мало, кто считает диаграммы, придя домой.

Открою страшную тайну:

Вряд ли в жизни придется услышать такое:

— Дайте мне (7! – 6^2+3e^0)^1/4 помидоров и (ln (e^3) ) картофеля, пожалуйста.

— Молодой человек, я не понимаю.

— Мне плевать, я учился не напрасно.

Да, сами по себе занятия математикой неплохо качают мозги (об этом в следующих постах)

Но, если вы не инженер, конструктор, прогер (в некоторых разделах), экономист, аналитик, и прочее .

То экспонента вам в жизни не понадобится…

Вообще-то, есть одна тема, где понимание экспоненты может помочь. Тема, с которой сталкиваются все.

Она может помочь в мегаважном вопросе –

Положили вы в банк 1000 рублей под 10 процентов годовых.

То есть, за год вклад увеличится в 1,1 раза.

Через год будет 1000*1,1 =1100. Небольшая прибыль за то, чтобы отдать кому-то свои кровные.

А если надолго? Тоже мелочь какая-то, вложить лет на 30 и получить что, 3000 сверху? Да нафига?

Вот здесь останавливается большая часть людей которые задумались над тем чтобы как-то преумножать доходы. Но проблема то в том что считается все по-другому!

Но вот тут-то фишка работает по-другому. Ведь в следующий раз проценты начисляются от нового вклада, от 1100

1000*1,1^2 =1221 а не 1200. Вообще, кажется, мелочь, но это не так.

За 30 лет вклад увеличится в 17 раз, а за 40 – в 45!

А если вкладывать под 20 процентов то вклад увеличится в 40 раз уже за 20 лет

Вроде разница не очень велика, но чем дольше вкладываете, тем круче рост.

Не какая-то там примитивная линейная функция или тормознутая парабола, график растет Экспоненциально. Даша, напомни, пожалуйста.

Это ярче всего описывает история, как индейцы продали остров Манхеттен буквально за бусы.

Ну,не то что за бисер. за товары общей стоимостью в 60 гульденов (около 24 долларов, на современные – это около 700). Одеяла, котлы, топоры, ножи и . вампум (индейский бисер, который у них шел вместо денег)

И это приводят в пример того, как белые обманули индейцев. Ибо теперь Манхеттен стоит больше 50 000 000 000 $ . А купили за 30$.

Но, все не так однозначно.

Если бы индейцы положили в банк 30 баксов под 6 процентов годовых, то за 400 лет получили бы почти 400 млрд долларов!

30*1,06^400 = 397 619 212 307

И могли бы скупить весь Манхеттен на корню вместе со всем содержимым.

Есть ощущение, что к этому моменту народ постарше начинает кипеть

Тут есть важный нюанс – все это работает, если экономика и государство находятся в худо-бедно стабильном и рыночном состоянии.

Например, в США частенько были проблемы с финансами и гиперинфляцией. Так в 1865 г., после Гражданской войны, сбережения многих вкладчиков банков резко обесценились и стали мизерными. 150 лет назад.

А у нас, было как

Ну и по мелочи – 1998, 2014

Но страна-то сменилась. И теперь можно делать стандартные для инвестиций штуки, чтобы минимизировать риски: диверсификация активов, инвестирование в разных валютах и в компании разных стран.

Чтоб, если и профукать все деньги, то только, если вся Земля разом обанкротится.

А вместе оно веселей.

Да,много сложностей- и учиться инвестициям,и опасности- пирамиды, санация банков, падение рынка. Поэтому, кстати и не говорю про проценты более 20 в год- там са-а-а-авсем другие уровни рисков. Но если серьезно сесть и посчитать- 20 процентов в год,если планировать на сколько-нибудь долгий период,очень даже неплохо!

Фонд Уоррена Баффета на протяжении около 50 лет давал среднюю доходность в 20 процентов годовых,. и вот он один из трех самых богатых людей мира, в 2008 и вовсе потеснивший с первого места Билла Гейтса.

Вообще, в европейских странах, не так запуганных этим «Вжух»,

С первой зарплаты народ начинает вкладывать на свадьбу-рождение-обучение детей.

Ну, а что делать, если денег нет? И получить хочется быстрее, чем через 30 лет?

Можно заработать, запустить свое дело.

Но чтобы заработать денег – надо деньги. Стартовый капитал, так его.

Взять его можно у тех, у кого деньги уже есть

Есть более безопасный способ.

Прийти к инвесторам и сказать, дайте денег.

И когда вы пойдете просить денег, вдруг окажется, что права была Марь Петровна, приговаривая

« Учи Сидоров, экспоненту! В жизни пригодится»

Ибо люди, которые дают другим деньги на бизнес, редко когда оказываются совсем уж дебилами.

У дебилов просто не будет много денег. Ну… в теории.

И инвесторов нужно убедить, доказать, что ваш проект – хорошая инвестиция.

И вот тут-то и нужна, оказывается, математика, в том числе, экспонента.

По экспоненте, при хорошей конъюнктуре растут продажи и доход.

Для того, чтобы захватить мир, Макдональдсу оказалось достаточно расти на 15 процентов в год на протяжении 45 лет с 1950 до 1985.

И если бизнес сможет расти по экспоненте хотя бы несколько лет – это уже очень круто.

(то не какая-то абстрактная теория, это вопросы одного из моих взрослых учеников, который запускал новый бизнес. Готовил бизнес-план для представления инвесторам. Математикой занимался «для себя»)

Не всегда это работает, но без четкого плана, как и сколько зарабатывать, денег обычно не дают.

Рост акций Эппл. Похоже?

В общем, экспонента – это классная тема)

Следующий пост – про падающую экспоненту и о том, почему мы не пользуемся искусственным золотом (почти).

*Строго говоря, экспонента – это график e^x, где е

2,7… (число Эйлера)

Это число и называется экспонентой.,равно как и график. А те что здесь в математике называются показательной функцией. Но в обычной жизни все графики, которые растут пропорционально иксу часто обзывают общем названием экспонентой, а рост графика — экспоненциальным ростом,ибо растет похоже на график e^x. Почему именно 2,7? Об этом как-нибудь в другой раз.

Открытый курс машинного обучения. Тема 9. Анализ временных рядов с помощью Python

Доброго дня! Мы продолжаем наш цикл статей открытого курса по машинному обучению и сегодня поговорим о временных рядах.

Посмотрим на то, как с ними работать в Python, какие возможные методы и модели можно использовать для прогнозирования; что такое двойное и тройное экспоненциальное взвешивание; что делать, если стационарность — это не про вас; как построить SARIMA и не умереть; и как прогнозировать xgboost-ом. И всё это будем применять к примеру из суровой реальности.

UPD: теперь курс — на английском языке под брендом mlcourse.ai со статьями на Medium, а материалами — на Kaggle (Dataset) и на GitHub.

Видеозапись лекции по мотивам этой статьи в рамках второго запуска открытого курса (сентябрь-ноябрь 2020).

План этой статьи:

  1. Движемся, сглаживаем и оцениваем
    • Rolling window estimations
    • Экспоненциальное сглаживание, модель Хольта-Винтерса
    • Кросс-валидация на временных рядах, подбор параметров
  2. Эконометрический подход
    • Стационарность, единичные корни
    • Избавляемся от нестационарности и строим SARIMA
  3. Линейные и не очень модели на временных рядах
    • Извлечение признаков (Feature extraction)
    • Линейная регрессия vs XGBoost
  4. Домашнее задание
  5. Полезные ресурсы

Введение

На работе я практически ежедневно сталкиваюсь с теми или иными задачами, связанными с временными рядам. Чаще всего возникает вопрос — а что у нас будет происходить с нашими показателями в ближайший день/неделю/месяц/пр. — сколько игроков установят приложения, сколько будет онлайна, как много действий совершат пользователи, и так далее. К задаче прогнозирования можно подходить по-разному, в зависимости от того, какого качества должен быть прогноз, на какой период мы хотим его строить, и, конечно, как долго нужно подбирать и настраивать параметры модели для его получения.

Начнем с простых методов анализа и прогнозирования — скользящих средних, сглаживаний и их вариаций.

Движемся, сглаживаем и оцениваем

Небольшое определение временного ряда:

Временной ряд – это последовательность значений, описывающих протекающий во времени процесс, измеренных в последовательные моменты времени, обычно через равные промежутки

Таким образом, данные оказываются упорядочены относительно неслучайных моментов времени, и, значит, в отличие от случайных выборок, могут содержать в себе дополнительную информацию, которую мы постараемся извлечь.

Импортируем нужные библиотеки. В основном нам понадобится модуль statsmodels, в котором реализованы многочисленные методы статистического моделирования, в том числе для временных рядов. Для поклонников R, пересевших на питон, он может показаться очень родным, так как поддерживает написание формулировок моделей в стиле ‘Wage

В качестве примера для работы возьмем реальные данные по часовому онлайну игроков в одной из мобильных игрушек:

Rolling window estimations

Начнем моделирование с наивного предположения — «завтра будет, как вчера», но вместо модели вида будем считать, что будущее значение переменной зависит от среднего её предыдущих значений, а значит, воспользуемся скользящей средней.

Реализуем эту же функцию в питоне и посмотрим на прогноз, построенный по последнему наблюдаемому дню (24 часа)

Илон Маск рекомендует:  Четвертый borland с и его окружение d

К сожалению, такой прогноз долгосрочным сделать не удастся — для получения предсказания на шаг вперед предыдущее значение должно быть фактически наблюдаемой величиной. Зато у скользящей средней есть другое применение — сглаживание исходного ряда для выявления трендов. В пандасе есть готовая реализация — DataFrame.rolling(window).mean() . Чем больше зададим ширину интервала — тем более сглаженным окажется тренд. В случае, если данные сильно зашумлены, что особенно часто встречается, например, в финансовых показателях, такая процедура может помочь с определением общих паттернов.

Для нашего ряда тренды и так вполне очевидны, но если сгладить по дням, становится лучше видна динамика онлайна по будням и выходным (выходные — время поиграть), а недельное сглаживание хорошо отражает общие изменения, связанные с резким ростом числа активных игроков в феврале и последующим снижением в марте.

Модификацией простой скользящей средней является взвешенная средняя, внутри которой наблюдениям придаются различные веса, в сумме дающие единицу, при этом обычно последним наблюдениям присваивается больший вес.

Экспоненциальное сглаживание, модель Хольта-Винтерса

Простое экспоненциальное сглаживание

А теперь посмотрим, что произойдёт, если вместо взвешивания последних значений ряда мы начнем взвешивать все доступные наблюдения, при этом экспоненциально уменьшая веса по мере углубления в исторические данные. В этом нам поможет формула простого экспоненциального сглаживания:

Здесь модельное значение представляет собой средневзвешенную между текущим истинным и предыдущим модельным значениями. Вес называется сглаживающим фактором. Он определяет, как быстро мы будем «забывать» последнее доступное истинное наблюдение. Чем меньше , тем больше влияния оказывают предыдущие модельные значения, и тем сильнее сглаживается ряд.

Экспоненциальность скрывается в рекурсивности функции — каждый раз мы умножаем на предыдущее модельное значение, которое, в свою очередь, также содержало в себе , и так до самого начала.

Двойное экспоненциальное сглаживание

До сих пор мы могли получить от наших методов в лучшем случае прогноз лишь на одну точку вперёд (и ещё красиво сгладить ряд), это здорово, но недостаточно, поэтому переходим к расширению экспоненциального сглаживания, которое позволит строить прогноз сразу на две точки вперед (и тоже красиво сглаживать ряд).

В этом нам поможет разбиение ряда на две составляющие — уровень (level, intercept) и тренд (trend, slope). Уровень, или ожидаемое значение ряда, мы предсказывали при помощи предыдущих методов, а теперь такое же экспоненциальное сглаживание применим к тренду, наивно или не очень полагая, что будущее направление изменения ряда зависит от взвешенных предыдущих изменений.

В результате получаем набор функций. Первая описывает уровень — он, как и прежде, зависит от текущего значения ряда, а второе слагаемое теперь разбивается на предыдущее значение уровня и тренда. Вторая отвечает за тренд — он зависит от изменения уровня на текущем шаге, и от предыдущего значения тренда. Здесь в роли веса в экспоненциальном сглаживании выступает коэффициент . Наконец, итоговое предсказание представляет собой сумму модельных значений уровня и тренда.

Теперь настраивать пришлось уже два параметра — и . Первый отвечает за сглаживание ряда вокруг тренда, второй — за сглаживание самого тренда. Чем выше значения, тем больший вес будет отдаваться последним наблюдениям и тем менее сглаженным окажется модельный ряд. Комбинации параметров могут выдавать достаточно причудливые результаты, особенно если задавать их руками. А о не ручном подборе параметров расскажу чуть ниже, сразу после тройного экспоненциального сглаживания.

Тройное экспоненциальное сглаживание a.k.a. Holt-Winters

Итак, успешно добрались до следующего варианта экспоненциального сглаживания, на сей раз тройного.

Идея этого метода заключается в добавлении еще одной, третьей, компоненты — сезонности. Соответственно, метод применим только в случае, если ряд этой сезонностью не обделён, что в нашем случае верно. Сезонная компонента в модели будет объяснять повторяющиеся колебания вокруг уровня и тренда, а характеризоваться она будет длиной сезона — периодом, после которого начинаются повторения колебаний. Для каждого наблюдения в сезоне формируется своя компонента, например, если длина сезона составляет 7 (например, недельная сезонность), то получим 7 сезонных компонент, по штуке на каждый из дней недели.

Получаем новую систему:

Уровень теперь зависит от текущего значения ряда за вычетом соответствующей сезонной компоненты, тренд остаётся без изменений, а сезонная компонента зависит от текущего значения ряда за вычетом уровня и от предыдущего значения компоненты. При этом компоненты сглаживаются через все доступные сезоны, например, если это компонента, отвечающая за понедельник, то и усредняться она будет только с другими понедельниками. Подробнее про работу усреднений и оценку начальных значений тренда и сезонных компонент можно почитать здесь. Теперь, имея сезонную компоненту, мы можем предсказывать уже не на один, и даже не на два, а на произвольные шагов вперёд, что не может не радовать.

Ниже приведен код для построения модели тройного экспоненциального сглаживания, также известного по фамилиям её создателей — Чарльза Хольта и его студента Питера Винтерса.
Дополнительно в модель включен метод Брутлага для построения доверительных интервалов:

где — длина сезона, — предсказанное отклонение, а остальные параметры берутся из тройного сглаживани. Подробнее о методе и о его применении к поиску аномалий во временных рядах можно прочесть здесь

Кросс-валидация на временных рядах, подбор параметров

Перед тем, как построить модель, поговорим, наконец, о не ручной оценке параметров для моделей.

Ничего необычного здесь нет, по-прежнему сначала необходимо выбрать подходящуюю для данной задачи функцию потерь: RMSE, MAE, MAPE и др., которая будет следить за качеством подгонки модели под исходные данные. Затем будем оценивать на кросс-валидации значение функции потерь при данных параметрах модели, искать градиент, менять в соответствии с ним параметры и бодро опускаться в сторону глобального минимума ошибки.

Небольшая загвоздка возникает только в кросс-валидации. Проблема состоит в том, что временной ряд имеет, как ни парадоксально, временную структуру, и случайно перемешивать в фолдах значения всего ряда без сохранения этой структуры нельзя, иначе в процессе потеряются все взаимосвязи наблюдений друг с другом. Поэтому придется использовать чуть более хитрый способ для оптимизации параметров, официального названия которому я так и не нашел, но на сайте CrossValidated, где можно найти ответы на всё, кроме главного вопроса Жизни, Вселенной и Всего Остального, предлагают название «cross-validation on a rolling basis», что не дословно можно перевести как кросс-валидация на скользящем окне.

Суть достаточно проста — начинаем обучать модель на небольшом отрезке временного ряда, от начала до некоторого , делаем прогноз на шагов вперед и считаем ошибку. Далее расширяем обучающую выборку до значения и прогнозируем с до , так продолжаем двигать тестовый отрезок ряда до тех пор, пока не упрёмся в последнее доступное наблюдение. В итоге получим столько фолдов, сколько уместится в промежуток между изначальным обучающим отрезком и всей длиной ряда.

Значение длины сезона 24*7 возникло не случайно — в исходном ряде отчетливо видна дневная сезонность, (отсюда 24), и недельная — по будням ниже, на выходных — выше, (отсюда 7), суммарно сезонных компонент получится 24*7.

В модели Хольта-Винтерса, как и в остальных моделях экспоненциального сглаживания, есть ограничение на величину сглаживающих параметров — каждый из них может принимать значения от 0 до 1, поэтому для минимизации функции потерь нужно выбирать алгоритм, поддерживающий ограничения на параметры, в данном случае — Truncated Newton conjugate gradient.

Передадим полученные оптимальные значения коэффициентов , и и построим прогноз на 5 дней вперёд (128 часов)

Судя по графику, модель неплохо описала исходный временной ряд, уловив недельную и дневную сезонность, и даже смогла поймать аномальные снижения, вышедшие за пределы доверительных интервалов. Если посмотреть на смоделированное отклонение, хорошо видно, что модель достаточно резко регирует на значительные изменения в структуре ряда, но при этом быстро возвращает дисперсию к обычным значениям, «забывая» прошлое. Такая особенность позволяет неплохо и без значительных затрат на подготовку-обучение модели настроить систему по детектированию аномалий даже в достаточно шумных рядах.

Эконометрический подход

Стационарность, единичные корни

Перед тем, как перейти к моделированию, стоит сказать о таком важном свойстве временного ряда, как стационарность.
Под стационарностью понимают свойство процесса не менять своих статистических характеристик с течением времени, а именно постоянство матожидания, постоянство дисперсии (она же гомоскедастичность) и независимость ковариационной функции от времени (должна зависеть только от расстояния между наблюдениями). Наглядно можно посмотреть на эти свойства на картинках, взятых из поста Sean Abu:

  • Временной ряд справа не является стационарным, так как его матожидание со временем растёт
  • Здесь не повезло с дисперсией — разброс значений ряда существенно варьируется в зависимости от периода
  • Наконец, на последнем графике видно, что значения ряда внезапно становятся ближе друг ко другу, образуя некоторый кластер, а в результате получаем непостоянство ковариаций

Почему стационарность так важна? По стационарному ряду просто строить прогноз, так как мы полагаем, что его будущие статистические характеристики не будут отличаться от наблюдаемых текущих. Большинство моделей временных рядов так или иначе моделируют и предсказывают эти характеристики (например, матожидание или дисперсию), поэтому в случае нестационарности исходного ряда предсказания окажутся неверными. К сожалению, большинство временных рядов, с которыми приходится сталкиваться за пределыми учебных материалов, стационарными не являются, но с этим можно (и нужно) бороться.

Чтобы бороться с нестационарностью, нужно узнать её в лицо, потому посмотрим, как её детектировать. Для этого обратимся к белому шуму и случайному блужданию, чтобы выяснить как попасть из одного в другое бесплатно и без смс.

График белого шума:

Итак, процесс, порожденный стандартным нормальным распределением, стационарен, колеблется вокруг нуля с отклонением в 1. Теперь на основании него сгенерируем новый процесс, в котором каждое последующее значение будет зависеть от предыдущего:

На первом графике получился точно такой же стационарный белый шум, который строился раньше. На втором значение увеличилось до 0.6, в результате чего на графике стали появляться более широкие циклы, но в целом стационарным он быть пока не перестал. Третий график всё сильнее отклоняется от нулевого среднего значения, но всё ещё колеблется вокруг него. Наконец, значение равное единице дало процесс случайного блуждания — ряд не стационарен.

Происходит это из-за того, что при достижении критической единицы, ряд перестаёт возвращаться к своему среднему значению. Если вычесть из левой и правой части , то получим , где выражение слева — первые разности. Если , то первые разности дадут стационарный белый шум . Этот факт лёг в основу теста Дики-Фуллера на стационарность ряда (наличие единичного корня). Если из нестационарного ряда первыми разностями удаётся получить стационарный, то он называется интегрированным первого порядка. Нулевая гипотеза теста — ряд не стационарен, отвергалась на первых трех графиках, и принялась на последнем. Стоит сказать, что не всегда для получения стационарного ряда хватает первых разностей, так как процесс может быть интегрированным с более высоким порядком (иметь несколько единичных корней), для проверки таких случаев используют расширенный тест Дики-Фуллера, проверяющий сразу несколько лагов.

Бороться с нестационарностью можно множеством способов — разностями различного порядка, выделением тренда и сезонности, сглаживаниями и преобразованиями, например, Бокса-Кокса или логарифмированием.

Илон Маск рекомендует:  Резиновый дизайн. Двухколонный макет

Избавляемся от нестационарности и строим SARIMA

Попробуем теперь построить ARIMA модель для онлайна игроков, пройдя все круги ада стадии приведения ряда к стационарному виду. Про саму модель уже не раз писали на хабре — Построение модели SARIMA с помощью Python+R, Анализ временных рядов с помощью python, поэтому подробно останавливаться на ней не буду.

Как и следовало ожидать, исходный ряд стационарным не является, критерий Дики-Фуллера не отверг нулевую гипотезу о наличии единичного корня. Попробуем стабилизировать дисперсию преоразованием Бокса-Кокса.

Уже лучше, однако критерий Дики-Фуллера по-прежнему не отвергает гипотезу о нестационарности ряда. А автокорреляционная функция явно намекает на сезонность в получившемся ряде. Возьмём сезонные разности:

Критерий Дики-Фуллера теперь отвергает нулевую гипотезу о нестационарности, но автокорреляционная функция всё ещё выглядит нехорошо из-за большого числа значимых лагов. Так как на графике частной автокорреляционной функции значим лишь один лаг, стоит взять еще первые разности, чтобы привести наконец ряд к стационарному виду.

Наконец, получили стационарный ряд, по автокорреляционной и частной автокорреляционной функции прикинем параметры для SARIMA модели, на забыв, что предварительно уже сделали первые и сезонные разности.

Начальные приближения Q = 1, P = 4, q = 3, p = 4

Лучшие параметры загоняем в модель:

Проверим остатки модели:

Что ж, остатки стационарны, явных автокорреляций нет, построим прогноз по получившейся модели

В финале получаем достаточно адекватный прогноз, в среднем модель ошибалась на 1.3 K пользователей, что очень и очень неплохо, однако суммарные затраты на подготовку данных, приведение к стационарности, определение и перебор параметров могут такой точности и не стоить.

Линейные и не очень модели на временных рядах

Снова небольшое лирическое отступление. Часто на работе приходится строить модели, руководствуясь одним основополагающим принципом – быстро, качественно, недорого. Поэтому часть моделей могут банально не подойти для «продакшн-решений», так как либо требуют слишком больших затрат по подготовке данных (например, SARIMA), либо сложно настраиваются (хороший пример – SARIMA), либо требуют частого переобучения на новых данных (опять SARIMA), поэтому зачастую гораздо проще бывает выделить несколько признаков из имеющегося временного ряда и построить по ним обычную линейную регрессию или навесить решаюший лес. Дешево и сердито.

Возможно, этот подход не является значительно подкрепленным теорией, нарушает различные предпосылки, например, условия Гаусса-Маркова, особенно пункт про некоррелированность ошибок, однако на практике нередко выручает и достаточно активно используется в соревнованиях по машинному обучению.

Извлечение признаков (Feature extraction)

Помимо стандартных признаков вроде лагов целевой переменной, много информации содержат в себе дата и время. Про извлечение признаков из них уже здорово описано в одной из предыдущих статей курса.

Добавлю только про еще один вариант кодирования категориальных признаков – кодирование средним. Если не хочется раздувать датасет множеством дамми-переменных, которые могут привести к потере информации о расстоянии, а в вещественном виде возникают противоречивые результаты а-ля «0 часов datetime , и извлекаем из него hour и weekday .

y hour weekday is_weekend
Time
2020-01-01 00:00:00 34002 6 1
2020-01-01 01:00:00 37947 1 6 1
2020-01-01 02:00:00 41517 2 6 1
2020-01-01 03:00:00 44476 3 6 1
2020-01-01 04:00:00 46234 4 6 1

Посмотрим на средние по дням недели

Помимо перечисленных преобразований для увеличения числа признаков используют и множество других метрик, например, максимальное/минимальное значение, наблюдавшееся в скользящем по ряду окне, медианы, число пиков, взвешенные дисперсии и многое другое. Автоматически этим занимается уже упоминавшаяся в курсе библиотека библиотека tsfresh.

Для удобства все преобразования можно записать в одну функцию, которая сразу же будет возвращать разбитые на трейн и тест датасеты и целевые переменные.

Линейная регрессия vs XGBoost

Обучим на получившихся данных простую линейную регрессию. При этом лаги будем брать начиная с двенадцатого, таким образом модель будет способна строить предсказания на 12 часов вперёд, имея фактические наблюдения за предыдущие пол дня.

Получилось достаточно неплохо, даже отбора признаков модель ошибается, в среднем, на 3K пользователей в час, и это учитывая огромный выброс в середине тестового ряда.

Также можно провести оценку модели на кросс-валидации, тому же принципу, что был использован ранее. Для этого воспользуемся функцией (с небольшими модификациями), предложенной в посте Pythonic Cross Validation on Time Series

На 5 фолдах получили среднюю абсолютную ошибку в 4.6 K пользователей, достаточно близко к оценке качества, полученной на тестовом датасете.

Почему бы теперь не попробовать XGBoost.

Те же 3 K пользователей в средней абсолютной ошибке, и неплохо пойманные аномалии на тестовом датасете. Конечно, чтобы уменьшить ошибку, еще можно повозиться с параметрами, настроить при необходимости регуляризацию, отобрать признаки, понять, на сколько лагов нужно уходить вглубь истории и т.д.

Заключение

Мы познакомились с разными методами и подходами к анализу и прогнозированию временных рядов. К сожалению, или к счастью, серебряной пули для решения такого рода задач пока не появилось. Методы, разработанные в 60-е годы прошлого века, (а некоторые и в начале 19-го), по-прежнему пользуются популярностью наравне с неразобранными в рамках данной статьи LSTM или RNN. Отчасти это связано с тем, что задача прогнозирования, как и любая другая задача, возникающая в процессе работы с данными — во многом творческая и уж точно исследовательская. Несмотря на обилие формальных метрик качества и способов оценки параметров, для каждого временного ряда часто приходится подбирать и пробовать что-то своё. Не последнюю роль играет и баланс между качеством и трудозатратами. Не раз уже упоминавшаяся здесь SARIMA-модель хотя и демонстрирует выдающиеся результаты при должной настройке, может потребовать не одного часа танцев с бубном манипуляций с рядом, в то время как простенькую линейную регрессию можно соорудить за 10 минут, получив при этом более-менее сравнимые результаты.

Домашнее задание

Актуальные домашние задания объявляются во время очередной сессии курса, следить можно в группе ВК и в репозитории курса.

В демо-версии домашнего задания вы будете предсказывать просмотры wiki-страницы «Machine Learning». Веб-форма для ответов, там же найдете и решение.

Полезные ресурсы

Материал статьи доступен в GitHub-репозитории курса
в виде тетрадок Jupyter.

Двойное экспоненциальное сглаживание

Описание и пример двойного экспоненциального сглаживания.

Продолжаем тему экспоненциального сглаживания, начатую статьей Экспоненциальное сглаживание.

В прошлый раз было рассмотрено простое экспоненциальное сглаживаниеsingle exponential smoothing, сегодня я рассмотрю двойное экспоненциальное сглаживаниеdouble exponential smoothing.

Простое экспоненциальное сглаживание проявляет не особо выдающиеся характеристики на данных показывающих наличие четкой тенденции или тренда. Ну то есть, оно его вроде как «ловит», но не очень хорошо.

Чтобы работать с данными, показывающими четкую тенденцию, придумали двойное экспоненциальное сглаживание.

Идея его такова — в формулу простого экспоненциального сглаживания, см. Экспоненциальное сглаживание, вводят дополнительный член, который изменяет вклад предыдущего значения в зависимости от тенденции.

Обобщенные формулы выглядят так:

,
где принимает значение из диапазона [0;1)

,
где принимает значение из диапазона [0;1]

Обратите внимание, что здесь для расчета текущего S используется текущее же значение y.

Как и в случае простого экспоненциального сглаживания, существует несколько способов выбора начальных параметров, а именно, S и b, которые оказывает влияние на конечный результат.

Как правило, используют следующие способы (и я тоже их использую):

Также для расчета начального b предлагают и такие варианты:

И опять-таки, как и в случае простого экспоненциального сглаживания, выбор оптимальных показателей и — задача нетривиальная, и один из способов — метод перебора с последующим выбором оптимального значения по критерию минимума среднеквадратической ошибки.

Есть, правда, одна тонкость — так как в формуле присутствует текущее значение y, то ошибку нельзя считать как разность между текущим S и текущим y — очевидно, она будет равна 0 при равном 1 (это, в общем, выколотый случай). Поэтому в качестве ошибки используют разность между прогнозируемым значением (см. ниже) и следующим фактическим значением.

Теперь про прогнозирование.

Для прогнозирования следующего значения используется формула

для прогнозирования нескольких значений

В калькуляторе ниже можно изменять значения и , а также сравнить результат с простым экспоненциальным сглаживанием.
На графике для справки показано следующее прогнозируемое значение, т. е. сглаженные средние продлены на один отсчет дальше фактических данных.

Экспоненциальное сглаживание

Материал из MachineLearning.

Содержание

Выявление и анализ тенденции временного ряда часто производится с помощью его выравнивания или сглаживания. Экспоненциальное сглаживание — один из простейших и распространенных приемов выравнивания ряда. Экспоненциальное сглаживание можно представить как фильтр, на вход которого последовательно поступают члены исходного ряда, а на выходе формируются текущие значения экспоненциальной средней.

Пусть — временной ряд.

Экспоненциальное сглаживание ряда осуществляется по рекуррентной формуле: , .

Чем меньше α, тем в большей степени фильтруются, подавляются колебания исходного ряда и шума.

Если последовательно использовать рекуррентное это соотношение, то экспоненциальную среднюю можно выразить через значения временного ряда X.

Если к моменту начала сглаживания существуют более ранние данные, то в качестве начального значения можно использовать арифметическую среднюю всех имеющихся данных или какой-то их части.

После появления работ Р. Брауна экспоненциальное сглаживание часто используется для решения задачи краткосрочного прогнозирования временных рядов.

Постановка задачи

Пусть задан временной ряд: .

Необходимо решить задачу прогнозирования временного ряда, т.е. найти

— горизонт прогнозирования, необходимо, чтобы

Для того, чтобы учитывать устаревание данных, введем невозрастающую последовательность весов , тогда

Модель Брауна

Предположим, что D — невелико (краткосрочный прогноз), то для решения такой задачи используют модель Брауна .

Если рассматривать прогноз на 1 шаг вперед, то — погрешность этого прогноза, а новый прогноз получается в результате корректировки предыдущего прогноза с учетом его ошибки — суть адаптации.

При краткосрочном прогнозировании желательно как можно быстрее отразить новые изменения и в то же время как можно лучше «очистить» ряд от случайных колебаний. Т.о. следует увеличивать вес более свежих наблюдений: .

С другой стороны, для сглаживания случайных отклонений, α нужно уменьшить: .

Т.о. эти два требования находятся в противоречии. Поиск компромиссного значения α составляет задачу оптимизации модели. Обычно, α берут из интервала (0,1/3).

Примеры

Работа экспоненциального сглаживания при α=0.2 на данных ежемесячных отчетов по продажам иностранной автомобильной марки в России за период с января 2007 по октябрь 2008. Отметим резкие падения в январе и феврале, когда продажи традиционно снижаются и повышения в начале лета.

Проблемы

Модель работает только при небольшом горизонте прогнозирования. Не учитываются тренд и сезонные изменения. Чтобы учесть их влияние, предлагается использовать модели: Хольта (учитывается линейный тренд) Хольта-Уинтерса (мультипликативные экспоненциальный тренд и сезонность), Тейла-Вейджа (аддетивные линейный тренд и сезонность).

Литература

Лукашин Ю. П. Адаптивные методы краткосрочного прогнозирования временных рядов. — М.: Финансы и статистика, 2003.

Brown R.G. Smoothing forecasting and prediction of discrete time series. — N.Y., 1963.

Brown R.G., Meyer R.F. The fundamental theorum of exponential smoothing. Oper. Res. — 1961. — Vol.9. -№ 5.

См. также

Модель Хольта — учитываются линейный тренд без сезонности.

Модель Хольта-Уинтерса — учитываются мультипликативный тренд и сезонность.

Модель Тейла-Вейджа — учитываются аддитивный тренд и сезонность.

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL