Давайте посмотрим, как выглядит анализ данных с использованием инструмента предиктивной аналитики от SAP.
Попробуем применить настольную версию SAP Predictive Analytics для анализа курса рубля по отношению к доллару. Попытки такого анализа делались неоднократно и с использованием различного инструментария. Но это не мешает повторить анализ еще раз на новом инструментарии, чтобы продемонстрировать возможности этого решения.
Рис. 1 Данные торговых котировок. Информация загружена с сайта Финам
Данные имеют 15-минутную гранулярность. Open, High, Low, Close, соответственно цена начала 15-минутного интервала, максимальная цена за промежуток времени, минимальная цена и цена закрытия. Значение Volume – это объем торгов.
Для моделирования были загружены данные за год и имеют более 14 тыс. строк.
Подготовка данных
Можно просто загрузить временной ряд в инструмент анализа данных, но без предварительной обработки данных полученная модель будет невысокого качества. При подготовке данных необходимо выполнение двух этапов обработки. Первый этап — это Data Engineering, то есть сбор, понимание, очистка и первоначальная обработка данных. Второй этап — Feature Engineering, формирование описательных признаков к данным, с информацией о различных аспектах поведения объекта, модель которого строится. С точки зрения методологии CRISP-DM эти этапы аналогичны Data Understanding и Data Preparation.
Рис. 2 Шаги методологии CRISP-DM с возможными направлениями перехода между этапами
Визуализация информации о котировках имеет форму коротких штрихов, размер и положение которых отражает то, как двигалась цена за указанный промежуток времени.
Рис. 3 Так выглядит визуализация ценового ряда (верхний график). Красные линии – экспоненциальное сглаживание. Другие три графика – отображают изменение различных индикаторов технического анализа
Что будем предсказывать? Ценовой ряд содержит много шума. Для того, чтобы увидеть достаточно сильное изменение цены, необходимо подождать несколько часов. Поэтому предсказание того, куда двинется цена в следующие 15 минут, имеет мало смысла. Полезный сигнал утонет в шуме. Что же делать?
Специалисты по техническому анализу придумали индикатор ZigZag. Он показывает то, как надо было торговать, чтобы получить максимальную прибыль. Это похоже на Грааль, но для того, чтобы его рассчитать, необходимо знать будущее изменение цены. Выглядит он примерно так:
Рис. 4 Индикатор ZigZag. Линия проводится между крайними точками изменения цен
Хотя с точки зрения торговли ZigZag бесполезен, но он может дать информацию о том, как надо было торговать в прошлом. Также он используется для генерации целевого ряда. Если цена росла, то значение целевой функции в этот отрезок времени принимает 1, если снижалась, то 0. В результате получается разметка для временного ряда цен.
Дополнительно к цене можно вычислить набор значений индикаторов технического анализа. К примеру, простое скользящее среднее SMA14 усредняет цену последних 14-ти отсчетов. И отношение текущей цены к скользящему среднему показывает то, выше или ниже находится текущая цена в отношении средних 14-ти отсчетов.
Детальное описание различных индикаторов оставим за рамками этой статьи – это отдельная предметная область. Более детальное погружение в эту тему можно начать отсюда.
Если обобщить, то индикаторы Технического анализа – это цифровые фильтры, накладываемые на временной ряд. Вычисление значений индикаторов технического анализа для ряда цен рубля выполнено при помощи языка R, где присутствует библиотека для расчета индикаторов технического анализа. Кроме того, аналогичную информацию позволяют получить платформы для проведения технического анализа. Процесс расчета значений индикаторов также опустим. Детально описание этого процесса можно найти в этой статье
В результате подготовки и обработки получен следующий набор значений индикаторов технического анализа.
Input | Техническое имя | Индикатор технического анализа |
---|---|---|
I01 | EMA5Cross | Пересечение EMA5 и цены открытия |
I02 | EMA17Cross | Пересечение EMA17 и цены открытия |
I03 | EMA5_17Cross | Пересечение EMA17 и EMA5 |
I04 | VolumeROC1 | Rate of Change / Momentum |
I05 | CCI12 | Commodity Channel Index 12 |
I06 | MFI14 | Money Flow Index 14 |
I07 | MOM | Momentum 3 / Rate of Change |
I08 | Lag1 | Движение цены на текущем баре (1) |
I09 | Lag2 | Движение цены на текущем баре (2) |
I10 | Lag3 | Движение цены на текущем баре (3) |
I11 | Lag4 | Движение цены на текущем баре (4) |
I12 | Lag5 | Движение цены на текущем баре (5) |
I13 | fastK | Stochastic Fast %K |
I14 | fastD | Stochastic Fast %D |
I15 | slowD | Stochastic Slow %D |
I16 | stochWPR | William's %R |
I17 | RSI14 | Relative Strength Index (open) 14 |
I18 | williamsAD | Williams Accumulation / Distribution |
I19 | WPR | William's %R 14 |
I20 | AO | (Awesome Oscillator, AO) SMA5 — SMA34 |
I21 | AC | AO сглаженный 5-периодной средней AO — SMA(AO, 5) |
I22 | MACD | EMA12 — EMA26 |
I23 | MACD_SMA9 | MACD сглаженный 9-периодной скользящей MACD- SMA(MACD, 9) |
I24 | DIp | The positive Direction Index |
I25 | DIn | The negative Direction Index. |
I26 | DX | The Direction Index |
I27 | ADX | The Average Direction Index (trend strength) |
I28 | ar | aroon(HL, n) — 1 out (oscillator) |
I29 | chv16 | Chaikin Volatility — chaikinVolatility (HLC,n) — 1 out |
I30 | cmo16 | Chande Momentum Oscillator — CMO(Med, n) — 1 out |
I31 | macd12_26 | MACD Oscillator 12, 26, 9 |
I32 | osma | Moving Average of Oscillator |
I33 | rsi16 | Relative Strength Index med 16 |
I34 | fastK14_3_3 | Stochastic Oscillator 14 3 3 fastK |
I35 | fastD14_3_3 | Stochastic Oscillator 14 3 3 fastD |
I36 | slowD14_3_3 | Stochastic Oscillator 14 3 3 slowD |
I37 | smi13_2SMI | Stochastic Momentum Index SMI 13 2 |
I38 | smi13_2signal | Stochastic Momentum Index signal 13 2 |
I39 | vol16 | Volatility 16 |
I40 | SMA24Cross | Логарифм отношения цены открытия и SMA24 |
I41 | SMA60Cross | Логарифм отношения цены открытия и SMA60 |
I42 | SMA24_60Cross | Логарифм отношения SMA24 и SMA60 |
I43 | SMA24Trand | Логарифм отношения SMA24 по сравнению с предыдущим значением |
I44 | SMA60Trand | Логарифм отношения SMA24 по сравнению с предыдущим значением |
I45 | MOM24 | Momentum 24 / Rate of Change |
I46 | MOM60 | Momentum 60 / Rate of Change |
PCA | PC1-PC16 | Сжатие признаков I01-I46 методом главных компонент в 16 значений |
Таблица 1.
Перечень индикаторов технического анализа, рассчитанных для задачи предсказания валютного курса
Пусть вас не пугает цифра в 62 рассчитанные величины. В реальных задачах автоматически могут генерироваться сотни и даже тысячи признаков. Для современных методов машинного обучения их число становится не важным. Для каждого признака автоматически рассчитывается значимость – достоверность того, что изменение величины влияет на прогноз целевой переменной.
Отбор признаков
Неотъемлемой частью начальных этапов процесса машинного обучения является отбор признаков (feature selection), т.е. переменных, на основе которых обучается модель. Отбор может осуществляться с помощью различных инструментов, а также зависеть от множества факторов, например, таких как корреляция признаков с целевой переменной, или качество данных. Следующим (и более продвинутым) шагом может стать создание новых признаков на основе уже имеющихся, т.н. feature engineering — инжиниринг, создание признаков. Эта операция может позволить улучшить качество модели, одновременно получив более полное объяснение данных, в случае если модель интерпретируемая. В нашем случае первым этапом построения модели в SAP Predictive Analytics стало создание новых признаков при помощи встроенного решения Data Manager.
В подготовленном наборе данных имеются показатели индикаторов, которые влияют на целевую переменную в текущий момент времени. Однако, можно получить дополнительную информацию, если установить влияние этих индикаторов за определенный период до текущего момента. В нашем случае были выбраны временные интервалы: за 1 час и за 1 день до текущего момента во времени и созданы новые переменные с учетом этого «временного лага». Еще более информативной может оказаться степень изменения индикаторов от момента в прошлом до текущего момента. В качестве метода был выбран натуральный логарифм частного текущих индикаторов и индикаторов с временным лагом 1 час и 2 дня. Таким образом, удалось получить степень изменения индикатора от момента в прошлом (увеличился он или уменьшился), и если да, то насколько.
Резюмируя, удалось установить не только зависимость между текущими значениями индикаторов и целевой переменной, но и принять во внимания эти индикаторы в прошлом, а также степень их изменения.
Реализация в Data Manager
На вкладке Data Manager создается новая манипуляция данными.
Рис. 5 Интерфейс выбора модели SAP Predictive Analytics
После загрузки заранее сформированного набора данных к названию предикторов был добавлен префикс “NOW” (Rename -> Add Prefix) — таким образом мы маркируем предикторы на текущий момент времени.
Рис. 6 Переименование переменных для упрощения последующих манипуляций
Чтобы создать временную задержку, сгенерируем новые переменные “date_MIN1HR” и “date_MIN1DAY” с соответствующей зависимостью от переменной “date”. Используется expression editor:
Рис. 7 Создание нового выражения в Data Manipulation Editor
В Expression Editor добавляется функция сдвига даты по часам (для второй переменной — по дням), для каждой из которых выставляется зависимое поле “date” (от которого идет вычисление), а также параметр “-1”, т.к. нас интересует прошлое.
Рис. 8 Созданная переменная со сдвинутой датой
После создания этих переменных они появляются в полях:
Рис. 9 Вычисляемые поля с датой стали доступны в общем списке переменных
Можно наглядно видеть зависимость на наборе данных:
Рис. 10 Визуализация сдвижки времени в 1 час и в 1 сутки
Далее поля таблицы (индикаторы) присоединяются к этой же таблице, при этом ключевым полем каждой присоединяемой таблицы является поле даты со смещением. Проводится 2 join’a: предикторов со сдвигом на 1 час назад и на 1 день назад с помощью функции “Merge”:
Рис. 11 Генерация соединения наборов данных с разным сдвигом по времени
Соответствующим полям при присоединении таблицы, были присвоены префиксы (“MIN1HR” и “MIN1DAY”):
Рис. 12 Сформированный список признаков после объединения по времени
Стоит отметить источник происхождения переменных (Колонка “Source”). И сопоставить эти значения со значениями в окне “Merge”. Переменные из источника “CST0009USDRUB2_1” присоединены по полю «date_MIN1HR» и имеют префикс «MIN1HR», что корректно.
Для создания тренда изменений переменных за разные периоды времени, необходимо взять натуральный логарифм из отношения текущего значения индикатора к его прошлому значению. С помощью expression editor выстраивается следующая зависимость:
Рис. 13 Определение групповой логарифмической функции для отношения изменения величин во времени
Где функция ln – натуральный логарифм от отношения текущего значения всех предикторов к их значению 1 час назад. Таким образом, символы «@» и «$» на рисунке выше являются подстановочными знаками, обозначающими конец названия переменной после префикса. Эта функция сохраняет большое количество времени, автоматически сопоставляя пары предикторов и создавая 69 новых переменных (69=кол-во предикторов с префиксом):
Рис. 14 Сообщение об успешности очередного шага генерирования новых признаков
Важно указать, что необходимо сопоставлять предикторы «По значению» таким образом, чтобы значение конкретного предиктора было правильно сопоставлено со значением этого же предиктора 1 час назад:
Рис. 15 Необходимая настройка для успешного сопоставления признаков
В результате получился набор дополнительных переменных, которые были использованы при построении модели.
Пример: переменная «P1|25» на текущий момент, 1 час назад, 1 день назад, и тренд (отношение текущего значения к значению 1 час и 1 день назад):
Рис. 16 В результате манипуляций в SAP Predictive Analytic созданы дополнительные признаки к первоначальному значению переменной
Построение модели
Была построена стандартная модель в SAP Predictive Analytics. Степень многочлена гребневой регрессии = 1, автоматический выбор переменных включен. Результат модели следующий:
Рис. 17 Базовые статистики рассчитанной модели
Из 345 переменных в конечном уравнении с наименьшей ошибкой была оставлена 91 переменная. Лучшая итерация отбора переменных — номер 7. Финальная прогностическая сила модели = 0.7209, робастность (устойчивость результата к новым наборам данных) = 0.9704. Это означает, что модель качественная и устойчивая.
Диаграмма степени влияния переменных в модели представлена на Рис.18. Чем выше предиктор в списке, тем он более значимый при принятии решения конечной моделью.
Рис. 18 Значимость предикторов для итоговой модели. 37-й базовый предиктор «Stochastic Momentum Index SMI 13 2» имеет наибольшую прогностическую силу.
В предикторах можно видеть, как индикаторы на текущий момент (префикс NOW), так и индикаторы за 1 час и 1 день до текущего момента (префиксы MIN1HR и MIN1DAY), а также тренд изменения показателя (префикс LOGRATIO).
Например, показатель P1|25 оказывает наибольшее влияние за 1 час до текущего наблюдения (3й сверху). Тогда как его текущее значение не так важно (см. NOW_P1|25). Также имеет значение, хоть и не слишком высокое, отношение текущего показателя P1|25 к нему же 1 день назад (LOGRATIO_NOW_MIN1DAY__P1|25).
Наиболее значимым является показатель P1|37 на текущий момент времени.
Predictive Analytics автоматически разделяет объясняющие переменные на категории (помещает значения непрерывной переменной в рамки интервалов, т.н. “binning”) и строит график влияния этих категорий на целевую переменную. В данном случае видно, что наибольшее влияние на целевую переменную на текущий момент времени индикатор P1|37 оказывает, находясь в интервале от 33.39 до 67.97, а наименьшее – на интервале от -26.6 до -10.7.
Рис. 19 Сила влияния различных диапазонов величин признака на целевую переменную
Рассматривая другую переменную, степень изменения индикатора P1|25, становится ясно, что при снижении индикатора по отношению ко вчерашнему значению (отрицательный логарифм, категория от -2.29 до -0.47) растет влияние на целевую переменную. Если же индикатор показывал рост, влияние снижается.
Рис. 20 Еще один пример анализа значений признака по диапазонам
Вместо заключения
В статье были продемонстрированы подходы к анализу данных и возможности SAP Predictive Analytics для анализа рыночных данных. Высокий уровень автоматизации и простота интерпретации позволяют не только создать качественную модель, но и объяснить причины наступления события, а также конкретные диапазоны влияющих переменных.
Предиктивная аналитика находится на стыке хранилищ данных, бизнес-задач и математики. Синергия этих направлений позволяет по-новому взглянуть на уже привычные и устоявшиеся бизнес процессы. Как правило, они были построены на основе представлений человека о влияющих на процесс факторов. Но человек может проанализировать без применения специальных средств лишь небольшое число самых значимых факторов. Искусственный интеллект может создать модель с гораздо большим числом значимых факторов. Это позволяет точнее выявлять влияние и предсказывать развитие событий.
Авторы статьи — Андрей Ржаксинский и Павел Соломеин. Андрей Ржаксинский занимается хранилищами данных, прогнозной аналитикой, анализом клиентской активности, работает в команде SAP Analytics & Insights. Павел Соломеин — консультант по прогнозной аналитике в подразделении SAP Digital Business Services.
Комментарии (6)
SAP Автор
21.12.2017 14:00В данном примере курс валют зависит от различных аспектов колебания курсов в предыдущие дни. Внешние факторы учтены в самом характере рынка. Волантильность и объем очень чувствительны к событиям и макроэкономическим факторам.
Сейчас торговля направлена не на один инструмент, а на управлении портфелями с большим числом инструментов с различной волантильностью. Для этого есть отдельные математические методы.
BelerafonL
22.12.2017 14:04Ну а можно привести какой-то интуитивно-понятный результат предсказания по итоговой модели? Ну типа там на ранее не виденных моделью данных график реальной цены и предсказанной цены, или там среднеквадратичную ошибку между предсказанием и реальностью на новых данных для полученной модели и, скажем, модели предсказания погоды «через час будет примерно та же цена, что и сейчас».
А то показатель «Финальная прогностическая сила модели» как-то не очень понятен интуитивно, что же оно всё-таки предсказывает на новых данных.SAP Автор
22.12.2017 14:13Если объяснить просто, то модель в 78% случаев верно сделает прогноз в том, что направление движения цены в следующие 15 минут будет положительным или отрицательным. При этом предположение о том, сколько пройдет цена, не делается.
mouze1976
Основная проблема при прогнозировании курса это появление внешних факторов влияющих на курс. Интересен вопрос как вы обоснуете перечень выбранных вами анализируемых факторов? Вы готовы поставить на такой прогноз годовую зарплату?