Правительство Российской Федерации Федеральное государственное автономное образовательное учреждение высшего профессионального образования «Национальный исследовательский университет «Высшая школа экономики» Отделение программной инженерии Кафедра Управления разработкой программного обеспечения ВЫПУСКНАЯ КВАЛИФИКАЦИОННАЯ РАБОТА по направлению 231000.62 Программная инженерия подготовки бакалавра На тему «ПРОГРАММА ОПРЕДЕЛЕНИЯ КОЛМОГОРОВСКОЙ СЛОЖНОСТИ ВРЕМЕННОГО РЯДА» Студент группы № 471 ________________ Стафеев Артём Алексеевич Подпись 26.05.2014 (Дата) Научный руководитель д.т.н., проф. ________________ Ульянов Михаил Васильевич Подпись 26.05.2014 (Дата) Москва 2014 г Реферат 73 страницы, 5 глав, 6 приложений,7 иллюстраций,5 таблиц, 15 источников. Объектом разработки выпускной квалификационной работы является программа определения колмогоровской сложности временного ряда. Цель работы – анализ временных рядов в рамках сложности по Колмогорову для дальнейшего повышения качества прогнозирования и применения методов статистического анализа. В ходе работы проводились анализы существующих подходов к сегментации данных во временных рядах, а также исследование эффективности бикритериального метода построения гистограмм применительно к сегментации временного ряда. Работа предлагает подход к исследованию временных рядов на основе сложности по Колмогорову, который может быть использован для улучшения качества прогнозирования. Колмогоровская сложность – численная характеристика временного ряда, представляющая собой отношение длины исходной строки символов закодированного временного ряда к длине сжатого кода. Основным элементом предложенного подхода является способ построения символьного кода, который основан на бикритериальном методе. Метод использует две переменных для построения сегментов: надежность среднегруппового значения в сегментах и достоверность эмпирической и гистограммной функции распределения. В рамках работы разработано программное средство, позволяющее вычислить колмогоровскую сложность и критерий качества разбиения на сегменты для заданного временного ряда. Ключевые слова: колмогоровская сложность, временные ряды, бикритериальный метод, символьный код, кластеризация, прогнозирование. Содержание Введение ................................................................................................................................. 4 1. Существующие методы разбиения временного ряда на сегменты ....................... 6 2. Постановка целей и задач на разработку ................................................................... 8 2.1. Цели проекта ........................................................................................................ 8 2.2. Задачи для разработки ....................................................................................... 9 2.3. Организация входных/выходных данных ...................................................... 9 3. Теоретическое описание проекта ............................................................................... 10 3.1. Математическая и алгоритмическая основа ............................................... 10 3.2. Бикритериальный метод................................................................................. 11 3.3. Надежность среднегруппового значения ..................................................... 12 3.4. Достоверность аппроксимации...................................................................... 12 3.5. Процедура сжатия строки символов ............................................................ 13 3.6. Оценка колмогоровской сложности ............................................................. 14 3.7. Кластеризация временных рядов .................................................................. 14 4. Программная реализация ............................................................................................ 16 4.1. Архитектура программы ................................................................................. 16 4.2. Пользовательский интерфейс ......................................................................... 18 5. Анализ полученных результатов ............................................................................... 20 Заключение.......................................................................................................................... 22 Приложение 1. Сравнение гистограмм .......................... Error! Bookmark not defined. Приложение 2. Зависимость критерия качества от количества сегментов .... Error! Bookmark not defined. Приложение 3. Техническое задание ………………………………………………………………….. 25 Приложение 4. Текст программы ………………………………………………………………………. 34 Приложение 5. Программа и методика испытаний ………………………………………….... 58 Приложение 6. Руководство оператора …………………………………………………………..….. 66 Введение При анализе временных рядов отдельной задачей является максимизация точности работы таких математических моделей как регрессия, кластеризация и построение доверительных интервалов. Научная работа руководителя проекта М.В. Ульянова и его коллеги Ю.Г. Сметанина «Подход к определению характеристик колмогоровской сложности временных рядов на основе символьных описаний» [13] предлагает построение кластерного пространства временных рядов для улучшения точности прогноза. Данное исследование позволяет классифицировать временные ряды в пространстве характеристики их сложности по Колмогорову. Колмогоровская сложность является характеристикой строки символов, которая отражает трудоемкость в терминах длины символов [8]. Численно данное значение равно отношению исходной строки к ее сжатому представлению. Причем точность прогнозирования временного ряда обратно пропорциональна сложности по Колмогорову [15]. Основными задачами при определении колмогоровской сложности являются: 1) способ сегментирования данных и 2) процедура символьного кодирования. Существующие подходы не являются универсальными и строго обоснованными математически, что может вести к манипулированию и неправильной интерпретации данных. Предлагаемый подход вводит критерий качества сегментирования данных и называется бикритериальным [12]. Бикритериальный метод использует два критерия: надежность среднегруппового значения и достоверность эмпирической и гистограммной функции распределения. Надежность подсчитывается итеративным методом с использованием доверительного интервала для среднегруппового значения. Достоверность вычисляется как вероятность ошибки первого рода критерия Колмогорова или, иными словами, качеством аппроксимации эмпирической функции. Общий критерий качества равен произведению двух рассчитанных критериев [11]. Важная деталь метода заключается в том, что критерии обратно пропорциональны друг другу. Соответственно, возникает еще одна подзадача максимизации критерия качества при построении сегментов. Оценка колмогоровской сложности производится как последний шаг алгоритма: длина сжатой строки делится на длину исходного кода. При этом выбор алгоритма сжатия не принципиален – достаточно, чтобы он был универсален для всех обрабатываемых рядов. В предлагаемой работе используется алгоритм сжатия GZIP. Целью данной работы является разработка программного средства, которое: 1) Для заданного временного ряда вычисляет сложность по Колмогорову и критерий качества разбиения на сегменты; 2) Наглядно визуализирует структуру разбиения временного ряда на сегменты; 3) По результатам тестовых экспериментов классифицирует заданный временной ряд относительно уже исследованных временных рядов в рамках колмогоровской сложности. Результат разработки размещен в открытом доступе на облачном сервисе Windows Azure и доступен по адресу: http://kolmogorov.azurewebsites.net/ . Размещенная программа позволяет загружать временной ряд в текстовом формате и подсчитывать колмогоровскую сложность и критерии качества, а также содержит информацию по ранее приведенным экспериментам в разделе в «Результаты экспериментов». Раздел «Кластерный анализ» включает в себя разбиения ранее обработанных временных рядов по параметрам критерия качества и колмогоровской сложности. 1. Существующие методы разбиения временного ряда на сегменты В основе определения колмогоровской сложности лежит соответствующий способ символьного кодирования временного ряда, поскольку численно сложность по Колмогорову равна отношению длины сжатой строки символов к длине исходной строки. Иными словами, процедура символьного кодирования эквивалента разбиению временного ряда на сегменты. Каждое наблюдение относится к определенному сегменту, а каждый сегмент, в свою очередь, кодируется определенным символом алфавита [12]. Существующие подходы к разбиению данных на сегменты можно проиллюстрировать следующей таблицей. Таблица 1 «Существующие подходы к определению числа сегментов» Методы, базирующиеся на выборе числа групп Название метода Формула Примечание k-число сегментов, n – объем выборки Формула Стержесса [6] 𝑘 = ⌊1 + log 2 𝑛⌋ Формула применима только к биномиальному распределению с объемом выборки равным степени двойки. Формула числа групп [13] 𝑘 = |√𝑛| Методы с первоначальным определением длин сегментов Формула Скотта [5] ℎ = 3,5 ∗ 𝑆 ∗ 𝑛 −1⁄ 3 h – длина сегмента S – стандартное отклонение выборки Формула Фридмана – ℎ = 2 ∗ (𝐼𝑄) ∗ 𝑛 Диакониса [1] −1⁄ 3 h IQ – длина сегмента – межквартильный ранг – разница между верхним и нижним квартилем Основной проблемой при применении на практике методов, базирующихся на выборе числа групп, является отсутствие возможности определения объема сегментов, которые общепринято определяются равномерно. Кроме того, данные методы не учитывают стандартного отклонения выборки [12]. В отличие от методов, базирующихся на выборе числа групп, методы с первоначальным определением длин сегментов, учитывают стандартное отклонение, но, тем не менее, задают сегменты равной длины [14]. Экспериментально можно проверить, что для одинакового объема выборки n количество сегментов и их объем будет сильно варьироваться в зависимости от использования различных формул, что создает возможности для некачественного и некорректного разбиения данных. Таблица 2 «Зависимость числа и объема сегментов от различных методов» Метод Формула Значения Предположения Формула Стержесса 𝑘 = ⌊1 + log 2 𝑛⌋ 𝑘 = 11 𝑛 = 1024 𝑘 = |√𝑛| 𝑘 = 32 𝑛 = 1024 Формула числа групп К другой группе методов разбиения данных на сегменты относится методы, основанные на законе распределения случайной величины. Однако закон распределения временного ряда далеко не всегда известен, что затрудняет применения данной группы методов [13]. В предлагаемом исследовании центральным элементом является бикриетриальный метод, который доказал свою эффективность на реальных данных [12].Метод также вводит критерий качества, который можно использовать как инструмент для оценки разбиения данных на сегменты. После определения символьного кода временного ряда, каждый сегмент которого соответствует определенному символу алфавита, представляется возможным определить сложность по Колмогорову как отношение длины сжатой строки символов к длине исходной строки. В качестве алгоритма сжатия используется утилита GZIP и алгоритм DEFLATE [11]. В результате работы над проектом была разработана и запущена для тестирования эффективная программная реализация предложенного подхода. 2. Постановка целей и задач на разработку 2.1. Цели проекта Основной функционал программы заключается в определении колмогоровской сложности временного ряда. Для решения данной задачи необходимо выполнить следующие шаги: 1. Реализовать бикритериальный метод разбиения временного ряда на сегменты. 2. Рассчитать критерий качества разбиения временного ряда на сегменты с целью максимизации и выбора наилучшего способа сегментации временного ряда. 3. Поставить в соответствие каждому сегменту символ и применить алгоритм сжатия к полученной символьной последовательности. 4. Рассчитать колмогоровскую сложность временного ряда как отношение длины сжатой строки символов к длине исходной строки. 5. Организовать вывод результата работы программы в виде разбиения временного ряда на графике с подсчитанными значениями критерия качества, колмогоровской сложности и полученным символьным кодом. 6. Отобразить положение временного ряда по колмогоровской сложности относительно ранее обработанных временных рядов. В дальнейшем полученная колмогоровская сложность временного ряда может использоваться исследователем для построения кластерного пространства временных рядов и всестороннего анализа перед применением статистических методов. На этапе проектирования программной системы был создан прототип программы, который использовался для тестирования и проведения экспериментов. В дальнейшем данный прототип послужил основой для создания веб-приложения на платформе ASP.NET с использованием облачного хостинга Windows Azure. Публикация программы в открытом доступе позволит исследователям временных рядов осуществлять первичную обработку данных. 2.2. Задачи для разработки 1. Прототипирование программы для тестирования и проведения экспериментов на основе Windows Forms. 2. Проектирование архитектуры программы. 3. Реализация, тестирование и доработка алгоритмов. 4. Разработка веб-версии проекта и публикация программы в открытом доступе. 5. Разработка технической документации. 6. Тестирование программы и проведение экспериментов. 2.3. Организация входных/выходных данных Входные данные – временной ряд - собранный в разные моменты времени статистический материал о значении исследуемого процесса, характеризирующийся временем измерения и соответствующим значением. Выходные данные – вычисленная сложность временного ряда по Колмогорову, вычисленная как отношение длины сжатой строки символов к длине исходной строки; границы сегментов временного ряда, отображаемые на графике. 3. Теоретическое описание проекта 3.1. Математическая и алгоритмическая основа Алгоритм определения колмогоровской сложности может быть представлен как последовательность следующих шагов: Таблица 3 «Основные этапы алгоритма» Этап Результат Загрузка данных Значения временного ряда Обработка бикритериальным методом Закодированная строка символов Оценка качества полученного символьного Если кода качество удовлетворяет перейти на полученного критерию следующий кода качества, шаг; то иначе, вернуться назад с пониженным критерием качества. Обработка символьного кода Колмогоровская сложность представляет собой отношение длины сжатой строки символов к длине исходного кода. Данные о временном ряде могут быть загружены исследователем вручную или автоматически с использованием программных настроек. Наиболее используемым источником данных является данные о финансовых рынках, цены на товары и услуги, прогнозы погоды, демографические данные и другие данные, изменяющиеся за определенный период времени. Значения временного ряда, содержащие численные значения и соответствующие временные промежутки загружаются в программу на первом шаге. На втором шаге результатом является закодированная последовательность символов после применения бикритериального метода. Полученная строка символов оценивается при помощи достоверности аппроксимации эмпирической функции распределения или другими словами вероятности ошибки первого рода критерия Колмогорова. Алгоритм максимизирует критерий качества и выбирает наиболее эффективное разбиение на сегменты. Метод может итеративно изменить численные значения критериев на основе характеристик временного ряда. На последнем шаге полученный код сжимается с использованием сторонних библиотек – в проекте используется GZIP [12]. Ключевым шагом алгоритма является бикритериальный метод, которые будет рассмотрен более подробно в следующем разделе. 3.2. Бикритериальный метод Бикритериальный метод определяется как процедура, состоящая из следующего набора шагов [12, с. 6]: 1) Определение критерия качества Q как произведения двух переменных γ и , где γ – надежность закодированных сегментов и - соответствие эмпирической и гистограммной функции распределения. Необходимо также отметить, что коэффициенты γ и являются обратно пропорциональными, поэтому исследователь может задавать вес w1 для одного критерия и, соответственно, вес w2 для второго критерия будет равен 1-w1. 2) Вычисление надежности сегмента γj=√γ , основанное на общем значении γ. 3) Расчет объема групп основан на попадании в доверительный интервал, который определяется следующей системой неравенств: − 𝑥 − 𝛿𝑗 > 𝑋𝑗𝑚𝑖𝑛 {− 𝑥 + 𝛿𝑗 < 𝑋𝑗𝑚𝑎𝑥 – где 𝑥 среднее значение в рамках данного сегмента ,𝛿𝑗 = t(γ j,n j)∗S j √n j , 𝑋𝑗𝑚𝑖𝑛 и 𝑋𝑗𝑚𝑎𝑥 – минимальные и максимальные значения в сегменте; j – номер сегмента, S j - стандартное отклонение. 4) Построение гистограммной функции распределения и вычисление критерия , основанное на формуле Колмогорова: = 1 − 𝐾(√𝑛 ∗ 𝐷𝑛) 𝐷𝑛 = 𝑚𝑎𝑥|𝐹𝑣(𝑋𝑖) − 𝐹𝑔(𝑋𝑖) | 5) Если качество аппроксимации не удовлетворяет заданным значениям, то алгоритм переходит на шаг 2 с понижением критерия γ 6) Вычисление критерия качеств Q= γ * полученного символьного кода. 3.3. Надежность среднегруппового значения Первой переменной бикритериального метода является надежность среднегруппового значения.При заданном значении критерия качества возможно подсчитать надежность, исходя из следующего условия [12]: − 𝑥 − 𝛿𝑗 > 𝑋𝑗𝑚𝑖𝑛 {− 𝑥 + 𝛿𝑗 < 𝑋𝑗𝑚𝑎𝑥 Если одно из условий неравенства в рамках заданного сегмента нарушается, тогда алгоритм должен элемент в другой сегмент, иными словами – увеличить доверительный интервал среднегрупповго значения. Главной целью критерия является получение правильного доверительного интервала (см. Рисунок 1) для среднего значения, если значение превышает заданное, то алгоритм убирает элементы в другой сегмент. Рисунок 1 «Среднее значение и бикритериальный метод» 3.4. Достоверность аппроксимации Достоверность аппроксимации вычисляется как вероятность ошибки первого рода критерия Колмогорова. Критерий задается следующей аналитической формулой [12]: = 1 − 𝐾(√𝑛 ∗ 𝐷𝑛) 𝐷𝑛 = 𝑚𝑎𝑥|𝐹𝑣(𝑋𝑖) − 𝐹𝑔(𝑋𝑖) |, где ∞ 𝐾(𝑥) = 1 + 2 ∗ ∑(−1𝑘 )𝑒 −2𝑘 2𝑥2 𝑘=1 Формула сравнивает два распределения в терминах колмогоровской метрики, которая равна максимальной разнице между гистограммной и эмпирической функцией распределения. Если качество аппроксимации не удовлетворяет критерию, то алгоритм повторяет процедуру символьного кодирования заново с пониженным значением надежности [13]. Принципиальным преимуществом колмогоровской величины является возможность сравнивать функции распределения в терминах максимальной разности, что позволяет учитывать экстремальные различия. Вычисление достоверности аппроксимации производится как завершающий шаг алгоритма, главная цель которого – верифицировать надежность построенного символьного кода. После подсчета достоверности аппроксимации бикритериальный метод завершает свою работу и отправляет результат на вход алгоритму сжатия. 3.5. Процедура сжатия строки символов Процедура сжатия выполняется с помощью стандартных алгоритмов, главным итогом этого этапа метода является получение сжатого кода. Рекомендуемые алгоритмы могут включать: • RAR • ZIP •L • GZIP Упомянутые алгоритмы имеют разные подходы и принципы применительно к сжатию данных, в рамках данной задачи выбор конкретного алгоритма сжатия не играет роли – главное, чтобы сжатия закодированных сегментов осуществлялось универсально при помощи единого алгоритма. На этапе проектирования был сделан выбор в пользу алгоритма DEFLATE, который входит в утилиту GZIP, встроенную в поставку NET 4.5.Алгоритм Deflate является алгоритмом сжатия без потерь, в котором сжатие осуществляется в два этапа [11]: 1) Повторяющиеся строки заменяются указателями LZ77. 2) На основе частот повторения символов с использованием алгоритма Хаффмана происходит замена повторяющихся символов. Итог процедуры символьного сжатия передается на вход методу оценки сложности по Колмогорову, который возвращает конечные характеристики временного ряда. 3.6. Оценка колмогоровской сложности Колмогоровская сложность определяется как отношение длины исходной символьной строки к длине сжатого кода. Математический смысл этого отношения заключен в том, насколько хорошо строка символов может быть сжата, и значение сложности по Колмогорову обратно пропорционально возможности по применению методов прогнозирования. Kolmogorov value= Lcompressed Loriginal Где Lcompressed - длина сжатой строки и Loriginal - длина исходного символьного кода. Содержательно значение сложности по Колмогорову демонстрирует коэффициент сжатия символьного кода временного ряда. Функция сжатия и символьный код можно интерпретировать как меру тенденции: например, изменение в символьной последовательности сигнализирует, что произошло изменение шаблона в конкретный момент времен, что отразилось на значении временного ряда. Именно поэтому исследователь с использованием данного инструментария может диагностировать различные изменения тренда во временном ряде. Улучшенный критерий Колмогорова [13] может также включать не только символьный код на основе значений временного ряда, но и код, который указывает изменение шаблона (паттерна); предлагаемый критерий может быть также включена в кластерный анализ для повышения точности прогноза. 3.7. Кластеризация временных рядов Одним из возможных вариантов применения программы может являться кластеризация временных рядов в зависимости от сложности по Колмогорову. Исходя из полученного колмогоровского значения, можно построить пространство временных рядов и применять различные приемы и методы прогнозирования [12]. Например, возможные кластерами могут быть финансовые данные, социальные, макроэкономические индикаторы, цены на сырье и других сферы. Колмогоровская сложность потенциально может быть одной из возможных показателей для такого кластерного пространства и одним из результатов дипломного проекта является возможность предоставить специалистам и исследователей временных рядов подходящего инструментом для первоначального анализа данных. Будущие исследования в области кластеризации могут включать в себя построение различных координатных осей с использованием дополнительных метрик, потому что чем больше показателей определяют кластеры, тем более достоверная точность кластеризации. Другим объектом исследования может быть введение надлежащей функции для вычисления расстояния между временными рядами; например, исследователь может быть заинтересован в том, как далеко кластеры расположены на оси координат по той или иной метрике. Сценарием использования программы исследователем является загрузка данных по временному ряду в формате текстового файла на облачный сервис http://kolmogorov.azurewebsites.net/. Загруженный временной ряд будет размещен на оси координат по критерию качества разбиения на сегменты и колмогоровской сложности. Рисунок 2 «Кластерное пространство временных рядов» 4. Программная реализация 4.1. Архитектура программы Разработанная программа представляет собой веб-приложение, написанное с использованием платформы ASP.NET на языке программирования C# с частичным использованием Javascript. Архитектуру программы можно описать моделью веб-форм с использованием подхода Model – View – Controller (MVC) или Модель – Представление – Контроллер [4]. Рисунок 3 «Представление архитектуры приложения в модели MVC» Под моделью (Model) приложения понимаются классы, реализующие логику программы. В программной реализации к такому классу относится Kolmogorov.cs, в котором содержатся основные методы подсчета характеристик временного ряда, в том числе и бикритериальный метод. Представления (View) служат для отображения пользовательского интерфейса. В программном коде к ним относятся файлы, содержащие html-разметку, такие как Default.aspx, Cluster.aspx и Experiments.aspx. Контроллеры (Controllers) представляют собой обработчики данных загруженных пользователем. В программе к ним относятся обработчики действий пользователя такие как, например, нажатие на кнопку «Обработать данные». Приложение преимущества: выполнено на основе веб-форм, что обеспечивает следующие 1) Быстрое развертывание приложений, в том числе с использованием облачных ресурсов Windows Azure; 2) Тесная интеграция всех компонентов и элементов управления веб-страницы; 3) Высокий уровень контроля над поведением приложения. Веб-форму ASP.NET можно определить как программируемую веб-страницу [7], которая служит пользовательским интерфейсом в приложении и комбинирует html, программный код и элементы управления. Если рассматривать архитектуру приложения в контексте различных слоев, то можно использовать три основных слоя: слой представления (html), слой логики представления (webforms) и слой логики приложения (например, реализованный бикритериальный метод). Слой представления (html) Слой логики представления (веб-формы) Слой логики приложения (бикритериальный метод) Рисунок 4 «Представление архитектуры в виде уровней по слоям» Также на этапе проектирования программы была составлена диаграмма вариантов использования (use case diagram), которая затем легла в основу архитектуры программы в целом. Рисунок 5 «Диаграмма вариантов использования» В рамках диаграммы вариантов использования можно выделить три роли: логикаприложения, веб-приложение (веб-формы) и пользователь. Классы логики приложения ответственны за вычисления конечного результата обработки временного ряда, в то время как приложение осуществляет взаимодействия с пользователем через пользовательский интерфейс. В качестве среды развертывания проекты выбрана облачная инфраструктура Windows Azure. К достоинствам такого подхода можно отнести: 1) Интеграция с Visual Studio и платформой .NET, которая обеспечивает простую публикацию приложения; 2) Автоматизированное управление и доступ к приложениям через пользовательский интерфейс Windows Azure; 3) Независимость от инфраструктуры, так как приложение развернуто не на конкретном сервере, а в целом в «облаке»; 4.2. Пользовательский интерфейс Для динамического отображения данных в программе используется Google Visualization API вместе со скриптами JavaScript. <script type="text/javascript" src="https://www.google.com/jsapi"></script> <script type="text/javascript"> google.load("visualization", "1", { packages: ["corechart"] }); google.setOnLoadCallback(drawChart); function drawChart() { var data = new google.visualization.DataTable(); data.addColumn('string', 'Column Name'); data.addColumn('number', 'Column Value'); for (var i = 0; i < dataValues.length; i++) { data.addRow([dataValues[i].ColumnName, dataValues[i].Value]); } var options = { title: 'Кластеризация временных рядов по колмогоровской сложности', hAxis: { title: 'Колмогоровская сложность' }, vAxis: { title: 'Критерий качества' }, bubble: { textStyle: { fontSize: 11 } } }; var chart = new google.visualization.BubbleChart(document.getElementById('chart_div')); chart.draw(data, options); } </script> Скрипт Visualization [2] загружает и подключает основные библиотеки API, метод drawChart инициализирует таблицу с данными, полученными от контроллера, добавляет колонки и строки. В конце инициализируется метод Bubble Chart и происходит отображение соответствующего графика на веб-странице (см. Рисунок 2). Трудность, однако, заключается в том, что в ASP.NET нет элементов управления, связанных непосредственно с библиотекой Google Visualization, поэтому для корректного отображения содержания веб-страницы была использована сторонняя библиотека для интеграции с ASP.NET контроллерами. <%@ Register Assembly="GoogleChartsNGraphsControls" Namespace="GoogleChartsNGraphsControls" TagPrefix="cc1" %> Это дало возможность добавлять данные в соответствующую связанную таблицу, работая с контроллерами напрямую: for (int i = 0; i < km.quantityOfSegments.Count(); i++) { for (int j = 0; j < km.quantityOfSegments[i]; j++) { List<object> objectList = new List<object>(); objectList.Add(km.sortedpricesDates.ElementAt(indexOfTimeSeries).Key); for (int k = 0; k < numberOfSegments; k++) { objectList.Add(0); } objectList[i % alphabet.Length + 1] = km.sortedpricesDates.ElementAt(indexOfTimeSeries).Value; object[] objectToAdd = objectList.ToArray(); dt2.Rows.Add(objectToAdd); dt1.Rows.Add(objectToAdd); ++indexOfTimeSeries; } } // Create DataView DataView view = new DataView(dt2); view.Sort = "Дата"; DataTable sortedDT = view.ToTable(); GVAreaChart1Sber.ChartData(sortedDT); dt2.TableName = "Отсортированный временной ряд по сегментам"; GVAreaChart2Sber.ChartData(dt1); 5. Анализ полученных результатов В рамках тестирования программы был проведен ряд экспериментов, которые подтвердили эффективность бикритериального метода – в среднем разница по качеству по предложенному критерию качества по сравнению с равномерным методом составила 24.4%. Таблица 4 «Результаты экспериментов» Название эксперимента Количество наблюдений Критерий качества (бикритериальный) Критерий качества (равномерный) Колмогоровская сложность 0,7655 Разница по качеству (%) 21% Акции Сбербанка 469 0,9293 Гособлигации США Курс рубля 163 0,9997 0,7538 33% 0,6871 413 0,9659 0,764 26% 0,6295 Индекс индустриального производства 917 0,9986 0,7765 29% 0,7241 Цены на пшеницу 804 0,9976 0,8855 13% 0,8657 0,8443 Интересно отметить тот факт, что проанализированные временные ряды имеют высокий разброс по показателю колмогоровской сложности, что косвенно подтверждает гипотезу о значимости данного критерия. Высокие значения критерия качества объясняются тем, что в основном алгоритме осуществляется цикл с целью максимизации критерия. public void maximize() { int n = pricesDates.Count(); double max = Int32.MinValue; for (double reliability = 0.8; reliability < 1; reliability += 0.0009) { string code = kolmogorov(reliability); if (quality > max) { final_code = code; max = quality; alpha = Medium_alpha; gamma = Medium_gamma; } } final_quality = max; //сжатая строка символов string compressed = Compression.CompressionString(final_code); compressedLength = compressed.Length; //колмогоровское значение final_value = KolmogorovValue(final_code, compressed); } В качестве исходных данных для тестирования были выбраны временные ряды с вебсайта http://www.finam.ru/. К преимуществу данного источника можно отнести простоту организации, поскольку текстовый файл представляет собой лишь пары значений время фактическое значение: Таблица 5 «Фрагмент исходных данных» 04.05.2011 20.9500000 05.05.2011 20.3000000 06.05.2011 20.2500000 08.05.2011 20.2500000 09.05.2011 20.6300000 10.05.2011 21.1600000 На веб-сайте http://kolmogorov.azurewebsites.net/ можно осуществить загрузку исходных данных временного ряда и получить на выходе разбиение временного ряда на сегменты и рассчитанное значение колмогоровской сложности, при необходимости есть возможность сохранить результат в файл. Рисунок 7 «Разбиение временного ряда на сегменты» Заключение Подводя итог, стоит упомянуть, что исследование включало в себя три основных этапа. Первая часть представляет собой разработку бикритериального алгоритма и интеграции метода сжатия символьного кода. Как результат, программное средство для анализа и оценки временных рядов создано на первом этапе. Программное обеспечение включает алгоритмическую процедуру, пользовательский интерфейс и документацию для исследователя по функционалу программы. На втором этапе тестирование программы выполняется с помощью открытых данных различных из различных источников, таких как финансовые индексы, различные группы товаров, макроэкономические показателей и других общедоступных данных. Разнообразие типов данных обуславливается целями исследования, одна из которых - доказать гипотезу о работоспособности бикритериального метода независимо от типа временного ряда. Построение кластерного пространства предлагается в качестве конечной стадии исследования. Если эксперименты подтвердят корректность определения колмогоровской сложности, то следует продолжить исследования в области кластеризации временных рядов и критерий Колмогорова может быть одной из метрик для создания кластерного пространства. Итогом исследования является опубликованный в открытом доступе по адресу http://kolmogorov.azurewebsites.net/ инструмент для исследований и оценки временных рядов. Обработка и анализ данных временных рядов являются ключевыми сферами в математической статистике с многими приложениями для решения практических проблем. Поэтому первичная обработка данных крайне важна для повышения качества прогноза. В программной документации представлен обзор функциональных требований и программного кода проекта. Основным элементом алгоритма является бикритериальный метод, который обеспечивает основу для более надежного и математически корректного анализа временных рядов. Результаты данного исследования могут быть полезны для исследователей, которые заинтересованы в эффективном анализе данных. Временные ряды мог быть первоначально исследованы с использованием предлагаемой программы. Будущие исследования в данной области могут быть продолжены в контексте введении дополнительных метрик для кластерного пространства при оценке временных рядов, что позволит улучшить точность и эффективность прогнозов. Библиография 1. Freedman, D. & Diaconis, P. (1981). On the histogram as a density estimator, Heidelberg: Springer Berlin. 2. Google Visualization [Электронный ресурс]: Документация библиотеки Google Visualization: https://code.google.com/p/googlevisualizationsdotnet/ (дата обращения 15.05.2014) 3. Lothaire M. (2001). Algebraic Combinatorics on Words, Cambridge University Press, С. 40-437. 4. MSDN [Электронный ресурс]: Общие сведения о ASP.NET MVC. URL: http://msdn.microsoft.com/ru-ru/library/dd381412%28v=vs.108%29.aspx?ppud=4 (дата обращения 20.05.2014) 5. Scott, D. W. (1979). On optimal and data-based histograms, Biometrika, С. 505-610. 6. Sturges, H. (1926). The choice of a class-interval, J. Armer. The American Statistical Association, С. 60-66. 7. Techdays [Электронный ресурс]: Архитектура ASP.NET приложения. URL: http://www.techdays.ru/videos/1193.html (дата обращения 21.05.2014) 8. Верещагин Н.К., Успенский В.А., Шень А. Колмогоровская сложность и алгоритмическая случайность. – М.: МЦНМО, 2013. 9. Елисеева И.И., Юзбашев М.М. Общая теория статистики: Учебник – 4-е изд., перераб. и доп. – М.: Финансы и статистика, 2002. – 480 с: ил. 10. Лагутин, M. Б. Иллюстрированная математическая статистика. Москва: Бином, 2007. 11. Михальчик Е.В., Ульянов М.В. Описание формата сжатия данных Deflate. [Электронный ресурс]. URL: http://compression.ru/download/articles/lz/mihalchik_deflate_decoding.html (дата обращения 25.03.2014) 12. Петрушин В.Н., Ульянов М.В. Бикритериальный метод построения гистограмм //Информационные технологии и вычислительные системы. – 2012. – № 4. – С. 22-31. 13. Сметанин Ю.Г., Ульянов М.В. Подход к определению характеристик колмогоровской сложности временных рядов на основе символьных описаний. [Электронный ресурс]. URL: http://ecsocman.hse.ru/hsedata/2013/08/06/1290854518/7.pdf (дата обращения 24.03.2014) 14. Тарасов И.Е. О выборе интервалов гистограммирования // Системы управления и информационные технологии, 2011, № 2.1 (44), С. 181 - 184. 15. Верещагин Н.К., Успенский В.А., Шень А. Колмогоровская сложность и алгоритмическая случайность. – М.: МЦНМО, 2013.