Принято считать, что две базовые операции «машинного обучения» — это регрессия и классификация. Регрессия — это не только инструмент для выявления параметров зависимости y(x) между рядами данных x и y (чему я уже посвятил несколько статей), но и частный случай техники их сглаживания. В этом примере мы пойдем чуть дальше и рассмотрим, как можно проводить сглаживание, когда вид зависимости y(x) заранее неизвестен, а также, как можно отфильтровать данные, которые контролируются разными эффектами с существенно разными временными характеристиками.

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




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

Сглаживание при помощи «скользящего среднего»
Принцип сглаживания на основе «скользящего среднего» (МА — от англ. «moving average») состоит в расчете для каждого значения аргумента yi среднего значения по соседним w данным.



Число w называют окном скользящего усреднения: чем оно больше, тем больше данных участвуют в расчете среднего, соответственно, тем более гладкая кривая получается. На верхнем рисунке окно w=50, а вот как будет выглядеть скользящее усреднение при w=200.



Как меняется Фурье-спектр данных при скользящем усреднении?
Очевидно, что при малых w сглаженные кривые практически повторяют ход изменения данных, а при больших w — отражают лишь закономерность их медленных вариаций. Это типичный пример фильтрации данных, т.е. устранения одной из составляющих зависимости y(xi). Наиболее часто целью фильтрации является подавление быстрых вариаций y(xi), которые обычно обусловлены шумом. В результате из быстроосциллирующей зависимости y(xi) получается другая, сглаженная зависимость, в которой доминирует более низкочастотная составляющая.

Эти рассуждения плавно перевели нас к терминологии спектров. Давайте нарисуем график Фурье-преобразования («Фурье-спектр») исходных данных:



и убедимся в том, что спектр скользящего среднего вырезает из него высокие частоты (начиная примерно с частоты 0.005 Гц):



Пояснение: Фурье-спектр суммы синусов и ее МА
Для того чтобы пояснить принцип расчета Фурье-спектра, рассмотрим вместо (случайных) исходных данных простую модель суммы нескольких детерминированных сигналов (синусоид с разной частотой и амплитудой) и псевдослучайного шума:



Приведем графики этой суммы и ее МА (с тем же окном w=200):



а также их Фурье-спектры:



Из них видно, что скользящее усреднение вырезает из сигнала высокие частоты, начиная с частоты 0.005 Гц. Лучше это видно на крупном плане низкочастотной области спектра:



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

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



Также интерес представляют смешанные задачи выделения среднемасштабных вариаций путем подавления как более быстрых, так и более медленных вариаций. Одна из возможностей решения связана с применением «полосовой фильтрации», которая реализуется так:
1. Устранение из сигнала y высокочастотной составляющей, имеющее целью получить сглаженный сигнал middle, например, с помощью скользящего усреднения с малым окном (например, w=200).
2. Выделение из сигнала middle низкочастотной составляющей slow, например, путем скользящего усреднения с большим окном w.
3. Вычитание из сигнала middle тренд slow, тем самым выделяя среднемасштабную составляющую исходного сигнала y.

Оставляю заинтересовавшемуся читателю возможность самому реализовать полосовую фильтрацию в Mathcad Express (с небольшой оговоркой, что в бесплатной версии Маткада алгоритм БПФ расчета Фурье-спектров отключен, и с ним поиграться не получится). Сами расчеты находятся здесь.

Литература:
1. Кирьянов Д.В., Кирьянова Е.Н. Вычислительная физика (PDF, гл.1, п.6 и 7). М.: Полибук Мультимедиа, 2006.
2. Бат М. Спектральный анализ в геофизике. М., Наука, 1980.

Комментарии (13)


  1. zed91
    22.04.2015 06:28

    Есть СС основанная на КИХ-фильтре. В основе лежит вектор весов. 1. Не знаете как оценить оптимизацию/переоптимизацию при обучении вектора весов? 2. Не знаете лучший способ обучения вектора весов?


    1. Daemon_Hell
      22.04.2015 08:45
      +1

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


    1. SADKO
      22.04.2015 12:25

      ИМХО наибольшее значение тут имеет подготовка данных, их не противоречивость…
      Как не крути, а вектора весов будут оптимизированы для статистически более значимых состояний исследуемой системы.
      Одно дело когда у нас зашумленный но вполне конкретный сигнал датчика, и совсем иное рынок который по определению противоречив.


  1. MaxxxZ
    22.04.2015 11:43

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


  1. kosmonaFFFt
    22.04.2015 11:55

    Результат сглаживания похож на непараметрическую оценку регрессии. Не хотите ли и про нее в дальнейшем написать?


    1. alexeykuzmin0
      22.04.2015 17:30

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


      1. polybook Автор
        22.04.2015 18:12

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

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


        1. alexeykuzmin0
          22.04.2015 18:20

          Мне в свое время показались ОЧЕНЬ хорошими лекции товарища Воронцова (линк), если хочется разбираться дальше — есть Бишоп =)


          1. polybook Автор
            22.04.2015 19:06

            Ну, собственно на видеолекции Воронцова в ШАД и я дал ссылку. Еще я бы отметил книжки Trevor Hastie+Robert Tibshirani+ по Statistical Learning и видеокурс NG на Курсере.


  1. SADKO
    22.04.2015 12:00
    +1

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

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


  1. VT100
    22.04.2015 23:27

    типа скользящего среднего, медиан и т.д.

    Про медиану поисследуйте, пожалуйста. Насколько помню, она и фильтрует (удаляет ВЧ шум) и не сглаживает резкие изменения.


  1. polybook Автор
    23.04.2015 09:42

    Да, скользящие медианы хорошо убирают выбросы. Смысл очень простой — по окну берется не среднее, а медианное значение. Например:
    image
    А по 5 точкам:
    image
    (это расчеты данных ионосферной станции с орбитального комплекса «Мир»)


  1. PsyHaSTe
    23.04.2015 15:46

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