Предсказание рынка на основе макроэкономических показателей - страница 12

 
avtomat:


справедливо лишь для того ограниченного класса моделей, которому тебя обучили "твои университеты".


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

Мой инетерес к этому топику возник после просмотра рыночных новостей, где профессор Steve Keen хвастался как его экономическая модель предсказала крах 2008 года, а DSGE модель изпользуемая фед резёрв банком ничего не предсказала. Я занялся изучением DSGE модели и модели Кина. Для желающих пройти по моему пути, советую начать вот с этой матлабовской статьи о DSGE модели. Там есть все необходимые коды, включая код подкачки экономических данных из фед резёрв базы данных FRED:

http://www.mathworks.com/help/econ/examples/modeling-the-united-states-economy.html

Федовская модель изпользует следующие предсказатели:

% FRED Series     Description
% -----------     ----------------------------------------------------------------
% COE             Paid compensation of employees in $ billions
% CPIAUCSL        Consumer price index
% FEDFUNDS        Effective federal funds rate
% GCE             Government consumption expenditures and investment in $ billions
% GDP             Gross domestic product in $ billions
% GDPDEF          Gross domestic product price deflator
% GPDI            Gross private domestic investment in $ billions
% GS10            Ten-year treasury bond yield
% HOANBS          Non-farm business sector index of hours worked
% M1SL            M1 money supply (narrow money)
% M2SL            M2 money supply (broad money)
% PCEC            Personal consumption expenditures in $ billions
% TB3MS           Three-month treasury bill yield
% UNRATE          Unemployment rate 


Потом посмотрите ютюб лекции Стива Кина:

https://www.youtube.com/watch?v=aJIE5QTSSYA 

https://www.youtube.com/watch?v=DDk4c4WIiCA 

https://www.youtube.com/watch?v=wb7Tmk2OABo

и почитайте его статьи. 

Modeling the United States Economy - MATLAB & Simulink Example
  • www.mathworks.com
The Smets-Wouters model (2002, 2004, 2007) is a nonlinear system of equations in the form of a Dynamic Stochastic General Equilibrium (DSGE) model that seeks to characterize an economy derived from economic first principles. The basic model works with 7 time series: output, prices, wages, hours worked, interest rates, consumption, and...
 
Программа minsky (economic simulator) в прикрепе, и сайт откуда тянуто, на сайте есть куча видео с пояснениями работы проги, и много других материалов. 

/go?link=http://www.ideaeconomics.org/minsky/

Файлы:
 
ProfSteveKeen
ProfSteveKeen
  • www.youtube.com
Rethinking Economics at the London School of Economics I was invited by the Rethinking Economics student association at the London School of Economics to give a talk about Greece, Austerity, Post Keynesian Economics and anticipating the crisis. There...
 
А для слаборазвитых на удобочитаемом языке
 
Vinin:
А для слаборазвитых на удобочитаемом языке

Для немцев :)

https://translate.google.com.ua/translate?sl=en&tl=ru&js=y&prev=_t&hl=ru&ie=UTF-8&u=http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FSteve_Keen&edit-text= 

 
gpwr:

Итак, задача предсказать S&P 500 индекс на основе имеющихся экономических показателей.

Шаг 1: Находим показатели. Показатели имеются в общем доступе здесь: http://research.stlouisfed.org/fred2/ Их там 240 тысяч. Самым главным является рост GDP. Этот показатель расчитывается каждый квартал. Отсюда наш шаг - 3 месяца. Все индикаторы на более коротком периоде перерасчитываются на 3-х месячный период, остальные (годовые) отбрасываются. Отбрасываем также показатели для всех стран кроме США и показатели, у которых нет глубокой истории (по крайней мере 15 лет). Итак кропотливым трудом отсеиваем кучу показателей и получаем порядка 10 тыс показателей. Формулируем более конкретную задачу прдесказать S&P 500 индекс на один или два квартала вперёд имея в наличии 10 тыс экономических показателей с квартальным периодом. Я делаю всё в МатЛабе, хотя можно и в R.

Шаг 2: Преобразуем все данные к стационарному виду путём дифференцирования и нормирования. Методов тут много. Главное чтобы из преобразованных данных можно было восстановить первоначальные данные. Без стационарности не одна модель работать не будет. S&P 500 ряд до и после преобразования показан внизу.

 

Шаг 3: Выбираем модель. Можно нейронную сеть. Можно много-переменную линейную регрессию. Можно много-переменную полиномную регрессию. После опробования линейных и нелинейных моделей приходим к выводу что данные настолько зашумлены что вписывать нелинейную модель смысла нет т.к. y(x) граф, где y = S&P 500 и x = один из 10 тыс показателей, бредставляет собой почти круглое облако. Таким образом формулируем задачу ещё более конкретно: предсказать S&P 500 индекс на один или два квартала вперёд имея в наличии 10 тыс экономических показателей с квартальным периодом используя много-переменную линейную регрессию.

Шаг 4: Выбираем из 10 тыс экономических показателей наиболее главные (уменьшаем размерность задачи). Это самый главный и трудный шаг. Допустим берём историю S&P 500 длинной в 30 лет (120 кварталов). Чтобы представить S&P 500 в виде линейной комбинации экономических показателй разного рода, достаточно иметь 120 показателей чтобы точно описать S&P 500 за эти 30 лет. Причём показатели могут быть совершенно любыми чтобы создать такую точную модель из 120 показателей и 120 значений S&P 500. Значит нужно уменьшать количество входов ниже количества описываемых значений функции. Например ищем 10-20 наиболее важных показателей-входов. Такие задачи описания данных небольшим количеством входов, выбранных из огромного количества кандидатов-базисов (словаря), называются разряжённым кодированием (sparse coding).

Методов отбора входов-предсказателей много. Я перепробовал их все. Вот главные два:

  1. Классифицируем все 10 тыс данных по их предсказауемой способности S&P 500. Предсказуемая способность может измеряться коэффициентом кореляции или взаимной информацией.
  2. Перебираем все 10 тыс показателей по дному и выбираем тот, который дал линейную модель y_mod = a + b*x1 описывающую S&P 500 с наименьшей ошибкой. Потом выбираем второй вход опять же перебором оставшихся 10 тыс -1 индикаторов таким образом чтобы он описал остаток y - y_mod = c + d*x2 с наименьшей ошибкой. И так далее. Такой метод называется stepwise regression или matching pursuit. 

Вот первые 10 индикаторов с максимальным коэффициентом корреляции с S&P 500:

Series ID Lag Corr Mut Info
'PPICRM' 2 0.315 0.102
'CWUR0000SEHE' 2 0.283 0.122
'CES1021000001' 1 0.263 0.095
'B115RC1Q027SBEA' 2 0.262 0.102
'CES1000000034' 1 0.261 0.105
'A371RD3Q086SBEA' 2 0.260 0.085
'B115RC1Q027SBEA' 1 0.256 0.102
'CUUR0000SAF111' 1 0.252 0.117
'CUUR0000SEHE' 2 0.251 0.098
'USMINE' 1 0.250 0.102

Вот первые 10 индикаторов с максимальной взаимной информацией с S&P 500:

Series ID Lag Corr Mut Info
'CPILEGSL' 3 0.061 0.136
'B701RC1Q027SBEA' 3 0.038 0.136
'CUSR0000SAS' 3 0.043 0.134
'GDPPOT' 3 0.003 0.134
'NGDPPOT' 5 0.102 0.134
'OTHSEC' 4 0.168 0.133
'LNU01300060' 3 0.046 0.132
'LRAC25TTUSM156N' 3 0.046 0.132
'LRAC25TTUSQ156N' 3 0.046 0.131
'CUSR0000SAS' 1 0.130 0.131

 

Lag это задержка входного ряда по отношению к моделируемому ряду S&P 500. Как видно из этих таблиц, разные методы выбора наиважнейших входов приводят к разным наборам входов. Так как моей конечной целью является минимизация ошибки модели, то я выбрал второй метод выбора входов, т.е. перебор всех входов и выбор того входа который дал наименьшую ошибку.

Шаг 5: Выбираем метод расчёта ошибки и коэффициентов модели. Наипростейшим методом является метод СКО, поэтому линейная регрессия, использующая этот метод, так популярна. Проблема метода СКО в том что он чувствителен к выбросам (outliers), т.е. эти выбросы существенно влияют на коэфициенты модели. Чтобы уменьшить эту чувствительность, вместо суммы квадратов ошибок можно использовать сумму абсолютных значений ошибок, что ведёт к методу наименьших модулей (МНМ) или robust regression. Этот метод не имеет аналитического решения для коэффициентов модели в отличие от линейной регрессии. Обычно модули заменяются на плавные/дифференцируемые аппроксимирующие функции и решение ведётся численными методами и долго. Я пробовал оба метода (лин регрессии и МНМ) и особого преимущества МНМ не заметил. Вместо МНМ, я пошёл в обход. На втором шагу получения стационарных данных путём их дифференцирования, я добавил операцию нелинейной нормализации. То есть, исходный ряд x[1], x[2], ... x[i-1], x[i] ... сначала преобразуется в ряд разниц x[2]-x[1] ... x[i]-x[i-1] ... и потом каждая разница нормализуется путём её замены на sign(x[i]-x[i-1])*abs(x[i]-x[i-1])^u, где 0 < u < 1. При u=1, мы получаем классический метод СКО с его чувствительностью к выбросам. При u=0, все значения входного ряда заменяются на бинарные значения +/-1 практически без выбросов. При u=0.5, получаем что-то близкое к МНМ. Оптимальное значение u лежит где-то между 0.5 и 1.

Следует отметить что одним из популярных методов преобразования данных к стационарному виду является замена значений ряда на разницу логарифмов этих значений, т.е. log(x[i]) - log(x[i-1]) или log(x[i]/x[i-1]). Выбор такого преобразования опасен в моём случае так как в словаре 10 тыс входов много рядов с нулевыми и отрицательными значениями. Логарифм также имеет преимущетсво уменьшения чувствительности метода СКО к выбросамы По существу, моя функция преобразования sign(x)*|x|^u имеет ту же цель что и log(x), но без проблем связанных с нулевыми и отрицательными значениями.

Шаг 6: Расчитывем предсказание модели путём подстановки свежих входных данных и расчёта выхода модели используя те же коэффициенты модели, кторые были найдены линейной регрессией на предыдущем участки истории. Тут важно иметь в виду что квартальные значения экономических показателей и S&P 500 приходят почти одновременно (с точностью до 3 месяцев). Поэтому чтобы предсказать S&P 500 на следующий квартал, модель должна быть построена между текущим квартальным значением S&P 500 и входами задержанными по крайней мере на 1 квартал (Lag>=1). Чтобы предсказать S&P 500 через один квартал вперёд, модель должна быть построена между текущим квартальным значением S&P 500 и входами задержанными по крайней мере на 2 квартала (Lag>=2). И так далее. Точность предсказаний существенно снижается с увеличением задержки больше 2.

Шаг 7: Проверяем точность предсказаний на предыдущей истории. Первоначальная методика описанныя выше (вписываем каждый вход в предыдущую историю, выбираем вход дающий наименьшую СКО и рассчитывем предсказание по свежему значению этого входа) дала СКО предсказания, которая была ещё хуже чем случайные или нулевые предсказания. Задался таким вопросом: а почему вход, который хорошо вписался в прошлое, должен иметь хорошую предсказуемую способность будущего? Имеет смысл выбирать входы модели на основе их предыдущей ошибки предсказаний, а не на основе наименьшей ошибки регрессии на известных данных.

В конце концов, моя модель может быть пошагово описанa так:

  1. Закачиваем экономические данные из stlouisfed (около 10 тыс индикаторов). 
  2. Преобразеум данные к стационарному виду и нормализуем.
  3. Выбираем линейную модель индекса S&P 500, аналитечески решаемую методом СКО (линейная регрессия).
  4. Выбираем длинну истории (1960 - Q2 2015) и разбиваем её на обучающий отрезок (1960 - Q4 1999) и тестируемый отрезок (Q1 2000 - Q2 2015).
  5. Начинаем предсказания с 1960 + N + 1 года, где N*4 это начальное количество известных квартальных значений S&P 500.
  6. На первых N данных строится линейная модель y_mod = a + b*x для каждого экономического показателя, где y_mod - модель S&P 500, а x - один из экономических показателей. 
  7. Предсказываем N + 1 бар каждой моделью.
  8. Расчитываем ошибки предсказаний N + 1 бара каждой моделью. Запоминаем эти ошибки.
  9. Увеличиваем количество известных значений S&P 500 на 1, т.е. N + 1, и повторяем шаги 6-9 до тех пор пока не достигнем конца обучающего отрезка (Q4 1999). На этом шагу у нас запомнены ошибки предсказаний начиная с 1960 + N +1 года и кончая Q4 1999 каждым экономическим показателем.
  10. Начинаем тестирование модели на втором отрезкe истории (Q1 2000 - Q2 2015).
  11. Для каждого из 10 тыс входов расчитывем средне-квадратичную ошибку предсказаний за 1960 - Q4 1999.
  12. Из 10 тыс входов выбираем тот который имел наименьшую СКО предсказания за 1960 - Q4 1999.
  13. Строим линейную модель y_mod = a + b*x для каждого экономического показателя за 1960 - Q4 1999. 
  14. Предсказывем Q1 2000 каждой моделью.
  15. Предсказание выбранного входа с наименьшей СКО предсказаний за предыдущий отрезок времени (1960 - Q4 1999) выбираем как наше главное предсказание Q1 2000.
  16. Расчитываем ошибки предсказаний всех входов на Q1 2000 и добавляем их к СКО этих же входов за предыдущий отрезок времени (1960 - Q4 1999).
  17. Переходим к Q2 2000 и повторяем шаги 12-17 пока не достигнем конца тестируемого участка (Q2 2015) с неизвестным значением S&P 500, предсказание которого является нашей главной целью.
  18. Накопляем ошибки предсказаний за Q1 2000 - Q4 2014 сделанными входами с наименьшей СКО предсказаний на предыдущих отрезках. Эта ошибка (err2) и является нашей out-of-sample ошибкой предсказания моделью. 

Вкратце, выбор предсказателя зависит от его СКО предсказний предыдущих значений S&P 500. Заглядывания в будущее нет. Предсказатель может меняться по времени, но в конце тестируемого отрезка он в основном перестаёт меняться. Моя модель выбрала PPICRM с задержкой в 2 квартала как первый вхoд для предсказания Q2 2015. Линейная регрессия S&P 500 выбранным входом PPICRM(2) за 1960 - Q4 2014 показана внизу. Чёрные кружки - линейная регрессия. Разноцветные кружки - исторические данные за 1960 - Q4 2014. Цвет кружка означает время.


Предсказания S&P 500 в стационарном виде (красная линия):

 

Предсказания S&P 500 в исходном виде (красная линия):

 

Из графика видно что модель предсказывает рост S&P 500 во втором квартале 2015 года. Добавление второго входа увеличивают ошибку предсказаний:

1 err1=0.900298 err2=0.938355 PPICRM (2)

2 err1=0.881910 err2=0.978233 PERMIT1 (4) 

где err1 это ошибка регрессии. Очевидно что она уменьшается от добавления второго входа. err2 это средне-квадратичная ошибка предсказания, делённая на ошибку случайных предсказаний. То есть err2>=1 означает что предсказание моей моделью не лучше чем случайные предсказания. err2<1 означает что предсказание моей моделью лучше чем случайные предсказания.

PPICRM = Producer Price Index: Crude Materials for Further Processing

PERMIT1 = New Private Housing Units Authorized by Building Permits - In Structures with 1 Unit

Описанная выше модель может быть перефразирована таким образом. Собираем 10 тыс экономистов и просим их предсказать рынок на квартал вперёд. Каждый экономист проходит со своим предсказанием. Но вместо того чтобы выбрать какое-то предсказание на основе количества написанных ими учебников или полученных Нобелевских премий в прошлом, мы ждём несколько лет, собирая их предсказания. После существенного количества предсказаний, мы видим какой экономист более точный и начинаем верить его предсказаниям до тех пор пока какой-нибудь другой экономист не превзойдёт его по точности.

Ответ то простой - торгуйте на годовых таймфреймах....
 
IvanIvanov:
Ответ то простой - торгуйте на годовых таймфреймах....
Шутка что ли?
 
gpwr:
Шутка что ли?

:-) ну не знаю.... если анализ идет на годах..... то не знаю уж на чем торговать... на м5 вряд ли это будет иметь какой-то практический эффект...

Как вариант, попробуйте свои выкладки применить к Н4... 

 

gpwr:

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


Мнмм, это как бы противоречит Талебу с его чёрным лебедем. Как экономисты которые хорошо предсказывают в одних условиях могут предсказать крах?

 Вернее не как, а почему это произойдёт? ведь они вполне уверены в своей правоте, с чего они будут эту правоту пересматривать, вот и получим лемингов с энтузиазмом несущихся в пропасть.

 

Вот статья Кина о его модели:

http://keenomics.s3.amazonaws.com/debtdeflation_media/papers/PaperPrePublicationProof.pdf

Хотя я сразу скажу что мне его модель не нравится. Её целью является обьяснение экономических циклов и крахов, а не предсказание рынка или экономических показателей как GDP с какой то точностью. Например, его модель предсказала что рост долга населения приведёт к краху экономики. Но когда точно его модель не предсказала. Она также не способна предсказать что произойдёт после краха. Все его теоретические кривые уходят в бесконечность и там сидят неопределённое время хотя рынок и экономика в США восстановились в 2009 году. Наверно поэтому он продолжает быть очень негативным по поводу этого восстановления, не веря в него и утверждая что наступает великая депрессия похуже чем в Японии, длившаяся два десятилетия. Мне кажется что эта проблема всех динамических экономических моделей: их трудно стабилизировать и если они становятся нестабильными то зацикливают и предсказать будущее больше не могут. Хотя известный хедж фонд наняли Кина как эконимического советника.