
Введение
Первое знакомство с человеком должно быть лёгким, приятным и ни к чему не обязывающим. Возможно, тогда захочется это знакомство продолжить.
Первое знакомство с таким предметом как «большие данные» тоже не должно быть слишком сложным и слишком болезненным. Первые сто страниц ещё не сделают из вас специалиста — вспомним правило десяти тысяч часов. Для достижения мастерства в любой области придётся потратить примерно такое количество времени на изучение и практику. Зато общее знакомство с темой и основными терминами может быть очень даже полезным.
Ссылки на источники приводятся в конце каждой главы. Наш материал также доступен в видеоформате.
Глава 1. Сбор и предобработка больших данных
Во всем есть своя мораль,
нужно только уметь ее найти!
Льюис Кэрролл «Алиса в стране чудес».
Введение
Технологии анализа больших данных — есть, оказывается и такое. И мы начнем рассматривать методы сбора и предобработки больших данных. Для начала посмотрим, как менялось количество запросов с ключевыми словами Big Data, см. рис.
Можно видеть, что начиная примерно с 2012 года резко увеличился интерес к этой теме. Затем в течение нескольких лет мы вышли на «установившийся режим», на стабильный уровень интереса. И в последнее время интерес немного уменьшился в связи с тем, что публика уже насытилась первоначальной информацией по данному предмету. Картина очень напоминает «цикл хайпа» по Гартнеру. Сначала этого просто нет, затем оно появляется и мы видим первый всплеск, затем падение интереса, затем второй неторопливый рост и участок «плато». Но и это пройдёт, как написано в мудрых книгах.
Понятие и классификация больших данных
Для начала попробуем определить, что же такое «большие данные». В соответствии с названием это данные с большим «чем-то». Прежде всего, это большой размер, или объём, или проще говоря количество данных. И мнения здесь немного различаются, но в целом обычно имеется в виду такое количество данных, которое сложно или даже невозможно обработать традиционными методами. Такое количество данных, которое не умещается на обычном настольном компьютере. На самом деле, все эти технологии применимы к любым размерам выборки. Итак, первое свойство больших данных это объем.
На самом деле, в определении больших данных есть несколько слов, которые начинаются на английскую букву V. Их так и называют: три буквы V, пять букв V и так далее, см. рис.
Второе слово на букву V — это velocity, то есть скорость поступления данных. Имеется в виду, что данные поступают с очень большой скоростью. Данные создаются, обрабатываются, поступают, и их нужно либо хранить, либо обрабатывать на ходу. В этом случае используются технологии обработки потоков данных. Их так и называют — «потоковые данные».
Третье свойство больших данных — это различные типы, различные форматы. И это у нас третья буква V — variety, разнообразие. Имеется в виду данные, которые отличаются от того, что обычно хранится в реляционных базах данных в виде таблиц, связанных между собой по ключевому полю. Данные могут быть не только красиво структурированными в виде таблиц, но и не структурированными или частично структурированными. Примером может быть аудиозапись разговора или лекции. Здесь вообще никакой структуры нет. Частично структурированные данные — это могут быть документы с более или менее типовыми полями. Хотя работа с текстом — это отдельная проблема. Но тем не менее из текста можно попытаться извлечь отдельные свойства, которые более или менее повторяются.
Следующее свойство — достоверность. И здесь речь идет о том, что данные, которые собирают из различных источников, могут быть достоверными, а могут и не быть таковыми. И это значит, что то, что мы добываем из различных интернет-источников… с этим нужно что-то делать, определять качество данных и устанавливать степень нашего доверия к ним.
Наконец, еще одно свойство — Value. Тоже слово на букву V, условно это называют «ценностью». Здесь надо вспомнить основные определения из области информатики. Данные — это любые сведения, в том числе и те, в которых ничего полезного нет. А вот информацией называют то, что содержится в этих данных. То, что уменьшает неопределенность. То, что увеличивает наше понимание процесса или объекта. Следующим уровнем понимания в анализе данных является знание.
Итак, у нас есть данные на нижнем уровне, это любые сведения или факты. Далее идет информация, которая может представлять полезность или ценность. И следующий уровень — это понимание, знание или, как еще его называют, «инсайт». Это новое понимание, новые взаимосвязи, новые закономерности.
В качестве упражнения мы предлагаем вам подробнее познакомиться, в частности, с определениями того, что такое большие данные. Здесь нам может помочь «народная энциклопедия». Конечно, это не самый лучший и не самый надежный источник. Однако, это более или менее стабильный ресурс. Эти данные совершенно не обязательно являются качественными, правильными, полными, исчерпывающими и так далее (это мы намекаем на одно из свойств больших данных — см. выше). Рассматривайте это просто как упражнение и как пример того, как могут выглядеть те самые большие данные.
Больше информации находится в англоязычном варианте того же текста. Находим статью под названием Big Data. Если имеются трудности с пониманием английского языка, можно включить автоматический перевод. Такая функция доступна во многих современных инструментах. Достаточно нажать кнопочку «Перевести», и мы получаем достаточно приличный перевод.
Обратите внимание, что здесь говорится по поводу слов на букву V. Три слова на букву V, пять слов на букву V и так далее. Сколько всего здесь таких слов собрано. В принципе, это всё расширяет наше понимание самой концепции, что такое большие данные.
Ещё одно упражнение, которое нам предстоит выполнить. Посмотрите, что общего и чем отличаются технологии анализа больших данных и технологии бизнес-аналитики (или как её в настоящее время называют, BI-аналитика). Это прежде всего анализ информации, которая присутствует в корпоративных информационных системах. Для того, чтобы обобщить эти сведения и получить ответы на наши вопросы, вам предлагается не только заняться привычным поиском по ключевым словам, но и позвать на помощь наших интеллектуальных помощников. Заодно можно будет разобраться, как именно ими пользоваться.
ИИ-помощники
Работа с интеллектуальными помощниками отличается от простого поиска в интернете и иногда бывает достаточно полезной. Хотя, опять же, качество ответов не всегда будет удовлетворительным. Поэтому здесь требуется проверять факты, руководствоваться здравым смыслом и заниматься тем, что называется «факт-чекинг». Fact Checking. Проверка правильности фактов.
Есть несколько источников, которые можно порекомендовать. Опять же, это не самые лучшие, не самые подробные сведения, но тем не менее, в достаточно доступном изложении. Ссылки приведены в конце главы.
Можно также предложить вводное описание технологии больших данных — обзор проблемы из серии «Для чайников»: Hurwitz (2013) Big Data For Dummies. «Большие данные для чайников», или «для сомневающихся», написана на достаточно популярном языке. Здесь на простых примерах объясняют основные проблемы и технологии.
Еще одна книга, которая посвящена данной проблеме: Лесковец (2016) Анализ больших наборов данных. В оригинале называется «Разведочный анализ», или «Дата майнинг». Книга основана на материалах университетского курса Стэнфорда. Желающие могут найти в открытом доступе и полный текст книги, и отдельные главы, и даже слайды для чтения лекций.
И здесь просматривается идея, которая продвигалась лет за 10—15 до всплеска интереса к большим данным. Это так называемый «дата майнинг» — разведочный анализ данных, или, как его ещё переводят, интеллектуальный анализ данных. Здесь более подробно описаны сами методы, сами технологии анализа. И меньше внимания выделяется облачным сервисам, которые служат для организации такой работы.
Отметим, что книга Лесковец доступна в университетской библиотечной системе. Если в вашей организации есть подписка, то вы совершенно свободно можете получить доступ к этой книге на русском языке.
Поскольку нас интересует литература по данной теме, попробуем составить такой список силами интеллектуальных помощников. В качестве упражнения попробуйте дать такое задание той системе, которая вам больше нравится. Мы будем рассматривать пример ИИ-помощника под названием perplexity, что переводится как «замешательство», или «запутанность». Видимо, он помогает эту «запутанность» распутать. Дальнейшие технические подробности мы обсуждаем в рамках лабораторной работы.
Мы формируем очень подробное задание, и оно звучит так. Вначале мы определяем роль. Мы говорим: «Твоя роль — опытный методолог онлайн-курсов». От того, как мы определим роль, будет зависеть поведение системы искусственного интеллекта. Дальше мы даём собственно задание: «Составь список из топ-10 книг на русском языке по методам и технологиям анализа больших данных».
Обычно большинство пользователей ограничивается этой фразой. Но мы пойдем немножко дальше. Мы определяем роль, даём задание, а дальше мы объясняем контекст. Можно явно вставить слово «контекст», либо указать, для кого будет предназначен ответ, это будущее произведение. Итак, мы говорим: «Твоя аудитория — слушатели курсов повышения квалификации с высшим образованием». Если бы мы сказали: «Твоя аудитория — школьники» или «Твоя аудитория — академики», ответ был бы совсем другим.
Дальше мы описываем формат вывода. Что именно мы хотим? Просто список? Или подробное описание книг? Или ссылки на сайты издательства? Или анализ цен? Или просто сводную табличку? Можно попросить всё, что угодно. В нашем случае мы говорим: «Выведи результаты в виде списка с заголовками». Значит, это должен быть текст, разбитый на абзацы с заголовками. Можно даже привести примеры того, что нам нужно, и сообщить, что это примеры.
Дальше мы уточняем: «Для каждой книги приведи краткое содержание в одном абзаце». И, наконец, мы просим, нам оформили ссылки на книги в соответствии с требованиями действующего государственного стандарта на библиографическое описание. Тогда можно будет использовать данный список практически один к одному, скопировать и вставить в список литературы, см рис.
При большом желании поэкспериментировать можно дополнительно указать «температуру». Этот параметр управляет вариативностью ответов и фантазией нашего помощника.
Конечно, нам понадобится проверить факты и убедиться, что это не придуманные названия, что эти книги действительно существуют. И для этого у нас в рассматриваемом инструменте для каждого ответа приводятся ссылки на источники, которые всегда можно открыть и посмотреть. Как минимум, мы можем убедиться, что указанные источники существуют.
Для наших экспериментов мы создаем новый thread, то есть новую «нить», новую «ветку» или «беседу», в рамках которой будет поддерживаться определённый контекст, и интеллектуальная система будет помнить наши предыдущие запросы и ее ответы. Теперь мы вставляем наш запрос — так называемый промпт. Смотрим на него еще раз. У нас есть роль, у нас есть задание, у нас есть контекст, формат вывода и все прочее. Запускаем и удивляемся.
Предупреждаем, что результаты могут быть непредсказуемыми. Более того, если вы отправите один и тот же запрос несколько раз, вы можете получить совершенно разные ответы. Возможно, вы получите похожие книги или те же книги, но в другом порядке. Здесь есть такая вариативность ответов, ее обычно называют параметром «температура». Чем она «горячее», тем больше вариативность. И её тоже можно указать в своём запросе к нейросети. Теперь посмотрим на полученный ответ, см. рис.
В ответе в начале указаны источники, которые можно открыть и увидеть, из каких текстов было собрано, обобщено то, что нам выведено на экран.
Просматриваем ответ. Пункт первый: «Революция в аналитике». Здесь идёт абзац текста с пояснением, о чём эта книга. И далее идет ссылка, очень похожая на требования стандарта. Здесь может быть указано количество страниц. Или не указано — в зависимости от настроения нашего инструмента. Мы можем более подробно описать требования к оформлению библиографии с указанием того, что именно мы хотим получить: количество страниц, серийный номер книги ISBN, использовать ли тире и так далее. Можно даже дать несколько примеров оформления ответа. Все эти требования мы можем дополнительно указывать. И так постепенно дорабатывать свой запрос — подобно тому, как программист отлаживает свою программу. Фактически, промпт — это и есть программа, просто она написана человеческим языком.
Итак, мы получили список. Он действительно состоит из 10 пунктов. Это радует. Далее. У нас есть кнопочка «копировать в буфер». Мы копируем ответ в буфер. На месте этой кнопки на экране появилась галочка. Далее мы можем перенести этот текст в интерактивный блокнот/тетрадку Jupyter Notebook. В том числе, это средство работает и как локально установленная программа. Подробнее он обсуждается в других разделах нашего курса.
Мы создаём новый блокнот, в нём создаём текстовую ячейку, дважды щелкаем по этой ячейке, комбинацией клавиш [Ctrl + V] вставляем из буфера наш результат, нажимаем [Shift + Enter] и рассматриваем полученный результат, см. рис.
Мы видим пронумерованные заголовки наших абзацев. Они выделены жирным шрифтом — двойные звёздочки. Чтобы текст не сливался в один абзац, вставляем пустые строчки. Ещё раз нажимаем [Shift + Enter]. На самом деле, формат ответа соответствует технологии под названием Markdown.
В рамках такого диалогового блокнота, или «тетрадки» Jupyter — в рамках одного документа — можно объединить и текст программы в кодовых ячейках, и любые необходимые пояснения и комментарии в текстовых ячейках — причем с форматированием.
Markdown — это язык разметки текста. На досуге можете поподробнее с этим ознакомиться и поэкспериментировать в рамках текстовой ячейки интерактивного блокнота Jupyter Notebook.
Простейшие элементы форматирования выглядят так. Одиночные звездочки выделяют курсив, двойные звездочки — жирный шрифт. Вставка фрагментов кода — это обратный апостол. Списки могут выделяться звездочкой, черточкой, плюсиком, а также цифрой с точкой. При этом нумерованный список не обращает внимания на сами цифры, и элементы будут нумероваться по порядку. Наконец, символы решетки — это уровни заголовка. Заголовки будут выделяться жирным шрифтом.
При каждом обращении к нейросети мы получаем очень похожие результаты, но книги расположены немножко в другом порядке. При этом ссылки на веб-ресурсы практически те же. Форматирование в стиле библиографии делается более или менее грамотно — с указанием количества страниц. В остальном мы получаем примерно тот же результат.
Ваша задача: попробовать ввести это задание нейросети несколько раз и сравнить полученные результаты.
Теперь обратим внимание на вторую книгу. Если в первой в названии участвует Big Data, а также говорится про операционную аналитику бизнеса, во втором названии сочетаются такие вещи, как «большие данные» и «математика». И это подводит нас к вопросу истории и эволюции, см. рис.
Краткая история аналитики
Анализ истории аналитики
Мы очень кратко пройдемся по некоторым историческим этапам, основным вехам в развитии данного предмета, данной области знания, данной области деятельности (информация не строгая и тоже рекомендуется к «проверке фактов»). Похоже, что во времена Древней Греции математика оформилась как отдельная наука. Само слово «математика» буквально переводится с древнего варианта греческого языка как «наука». По крайней мере, так утверждает этимологический словарь. Похоже, древние греки считали, что математика — это наука (единственная в своём роде), а всё остальное — в лучшем случае «искусство».
Следующим шагом было выделение экономики в отдельную область знания, в отдельную область деятельности. Напомним, что экономика буквально переводится как «ведение хозяйства». «Эко» означает «дом или хозяйство», а «ном» — это менеджер, управляющий — эконом, который вёл хозяйство. Это тоже сведения из этимологического словаря. Постепенно эта профессия оформилась как отдельная область знания, наука, дисциплина. Естественно, существует экономика как область человеческой деятельности, связанная с производством, распределением, обменом и потреблением товаров и услуг. Есть и такое определение. И есть экономика как учебная дисциплина, экономика как наука — экономическая теория. Можно обнаружить книги самого разного толка на эту тему. В последнее время на Западе стало популярным одно из направлений экономической теории, которое называется «экономикс». В русском варианте обычно говорят «экономика» или «экономическая теория».
Далее, параллельно с этой областью деятельности сформировалась статистика. Появилась она не так давно, лет 200—300 назад. И первоначально слово «статистика» означало «описание достопримечательностей государства», «изучение страны» или даже «государствоведение». Фактически это была попытка подсчитать и измерить всё, что происходит внутри страны. Сколько живет людей, какой у страны бюджет, сколько собирают налогов, какая нужна армия, какая площадь земельных владений и прочих богатств. Сколько и чего нужно для управления страной. Таким образом, статистика оформилась как самостоятельный предмет, связанный с управлением страной. И по сути это «сбор и обработка данных для принятия решений на основе фактов». В данном случае для управления страной.
Одновременно те же самые методы и те же самые закономерности развивались, открывались применительно к другим областям деятельности, к другим областям знания. В частности, математики применяли эти же самые методы к природным процессам, к примеру, для вычисления астрономических прогнозов движения планет.
Примерно полвека назад на основе статистики и экономической теории был создан искусственный, синтетический предмет под названием эконометрика. Название буквально расшифровывается как «измерения в экономике». Это построение статистических моделей для экономических объектов и процессов на основе реальных, фактических данных.
Аналогичная область деятельности в технических системах называется идентификация систем. Во многом эти области деятельности пересекаются — статистика, эконометрика, идентификация.
Далее начал развиваться Data Mining — «разведочный» анализ данных, или интеллектуальный анализ данных. Эти названия время от времени всплывают, они присутствуют в различных программных продуктах. Но внутри каждый раз мы обнаруживаем ту же самую статистику, тот же самый анализ распределения, корреляцию, вариацию и прочие привычные статистические методы. Просто каждый раз появляется новое «зонтичное» название, к примеру, «дата-майнинг». Буквально это означает «добыча полезной информации из больших массивов сырых, необработанных данных». Дата-майнинг до сих пор присутствует как элемент меню в электронных таблицах и в системах управления базами данных.
Следующим шагом стало появление целого семейства или целой линейки продуктов под названием Business Intelligence (BI). В русском варианте может называться бизнес-аналитика, в последние годы чаще говорят: «BI-аналитика». Что имеется в виду? Само название Business Intelligence сложно перевести, потому что, во-первых, слово «бизнес» в данном случае означает «любое предприятие», ну а слово intelligence — это не обязательно «интеллект». Слово intelligence может иметь отношение к разведке и к анализу данных.
Речь идет об анализе данных в масштабах предприятия, причём исходные данные берутся из учётных систем. Это системы, например, из области бухгалтерского учета. Здесь все события, связанные с жизнью предприятия, фиксируются в какой-то базе данных и постепенно накапливаются. Ну а для задач управления предприятием, для задач принятия решений, нужны обобщённые данные. И теперь нужны не конкретные сведения о конкретной операции, о продаже, скажем, одного мешка картошки. А речь идет об обобщённых, укрупнённых, усреднённых показателях. К примеру, выручка за конкретный месяц, за сентябрь такого-то года, в таком-то городе, в таком-то магазине.
Так вот, обобщением, получением обобщенных показателей и красивым визуальным представлением на экране занимается BI-система. В чём-то они пересекаются с тем, что сейчас называется большими данными.
Последний пункт в нашем списке — большие данные, а также наука о данных. Эти термины очень близкие, но есть некоторая разница. Большие данные подразумевают работу с этими данными, в том числе получение таких данных, хранение таких данных и организация всех этих процессов, чаще всего с использованием больших серверов и облачных технологий. А что именно делают с этими данными? Вот этим занимается Data Science — так называемая «наука о данных». Но если открыть любую книгу по поводу больших данных, то обнаруживаем ту же самую статистику и бизнес-аналитику. Тот же самый разведочный анализ данных и интеллектуальный анализ данных. И в том числе мы обнаруживаем методы статистики и эконометрики, которые известны уже довольно давно. Теперь те же самые методы, к примеру, регрессия, классификация, прогнозирование на основе моделей, на основе реальных данных применяются к большим массивам данных. Они большие, и их нельзя обработать вручную.
Здесь могут выделяться особые технологии, связанные с тем, что данные непрерывно поступают в виде потока событий, потока сообщений. Это так называемые «потоковые данные».
А в целом мы обнаруживаем всё те же методы анализа, которые известны уже десятки, а то и сотни лет. Просто теперь у нас есть компьютерная реализация и облачные технологии.
Источники больших данных
Далее рассмотрим основные источники тех самых больших данных, см. рис. Один из популярных источников — это социальные сети. Каждый пользователь социальных сетей вводит огромное количество информации своими руками. Загружает фотографии, пишет посты, пересылает сообщения, ставит отметки о том, что ему нравится и не нравится, ставит лайки и дизлайки — и так далее. Заводит друзей, отправляет запросы дружбы, отклоняет эти запросы либо принимает. Все эти события фиксируются на платформах социальных сетей и представляют собой огромное количество информации.
Аналогично работают платформы, где размещаются медиаресурсы — фотографии, звук, видео — всё, что угодно. Это тоже огромный источник данных — и самих данных, и того, как ими пользуются. Если это видео — платформа фиксирует, сколько минут этот ролик смотрели, перематывали, рекомендовали и так далее.
Следующий источник — это интеллектуальные устройства, подключенные к сети передачи данных. Теперь это называется интернет вещей — Internet of Things (IoT).
Кроме этого, работают отдельные датчики, сенсоры и другие специализированные устройства, которые порождают большие потоки информации. Например, видеопотоки, которые практически невозможно записать и хранить длительное время — в лучшем случае несколько дней.
Далее идут учетные системы или транзакционные системы. Система обработки транзакций в реальном времени — OnLine Transaction Processing (OLTP). Здесь огромное количество событий, связанных с покупкой и продажей товаров.
Отдельной строкой идут так называемые «логи». Это протоколы, или журналы — то есть файлы, где просто фиксируются события. Например, когда пользователь регистрируется в информационной системе, вводит логин и пароль, и когда он завершает работу с системой. В журнале также автоматически фиксируются все действия пользователя внутри компьютерной системы. На самом деле логи — это просто текстовые файлы, где указана дата, время и события. Переходы от одной страницы к другой, вызов пункта меню и так далее. Все эти записи характеризуют действия пользователя.
По логам можно анализировать индивидуальное поведение пользователя либо можно выводить некие усредненные закономерности.
Ну и поскольку данные имеют огромные размеры, объемы, скорости передачи, разнообразие — те самые три первых буквы V — с этим связаны и особенности проблемы. Данные такого большого объёма хранить сложно и в некоторых случаях просто невозможно. Ну и обрабатывать традиционным способом тоже не получится, см. рис.
Другой ряд проблем связан с тем, что большие данные содержат сведения о конкретном человеке — на сегодняшний день это называется «персональные данные» — и эти сведения могут использоваться, в том числе, и злоумышленниками. Вопрос безопасности здесь встает очень серьёзным образом. Даже если в данных компьютерной системы нет фамилии человека и его фотографий, можно, сравнивая сведения в разных системах, сопоставляя их, очень легко выяснить и фамилию, и номер телефона, и номер автомобиля, и домашний адрес, и всё, что потребуется. С точки зрения служб безопасности это, возможно, плюс, а вот с точки зрения мошенников — это колоссальные возможности для нанесения вреда.
Далее, поскольку большие данные нужно хранить и обрабатывать особым образом, здесь требуются совсем другие аппаратные решения. Эта область деятельности называется высокопроизводительное вычисление или High Performance Computing (HPC). Это целая профессия: как написать программу, которая будет производить нужные вычисления, но не на одном компьютере, а, к примеру, на тысяче или на миллионе процессоров. Как разделить задачу на небольшие части так, чтобы не потерять в производительности? Или, по крайней мере, достичь приемлемого ускорения?
Ускорение — это, кстати, одна из характеристик вычислений (и измеряется ускорение не обязательно в метрах на секунду в квадрате). Фактически, ускорение отвечает на вопрос, во сколько раз быстрее удалось выполнить расчеты. И совсем не обязательно, что на тысяче процессоров можно работать в тысячу раз быстрее. Потому что, во-первых, нужно передать исходные данные, распределить задания между вычислителями, а затем собрать и агрегировать результаты вычислений. И при большом количестве вычислительных узлов совсем не обязательно достигаются хорошие показатели ускорения. Фактически, нынешние высокопроизводительные системы могут эффективно использовать только единицы процентов своей вычислительной мощности при решении больших сложных задач.
Следующая проблема — это качество данных, особенно если они вводятся людьми, например, сведения, собранные из социальных сетей. Ну и, наконец, отдельной строкой мы выделили понятие масштабирование. Здесь речь идёт о том, что при необходимости нарастить вычислительную мощность приходится решать особый класс задач. Совсем не обязательно добавление вычислительных узлов позволяет пропорционально ускорять вычисления. Не говоря уже о том, что изменение схемы вычислений может повлиять на эффективность расчетов.
Инструменты анализа
Далее мы обсудим несколько популярных технологий, имеющих отношение к работе с большими данными, см. рис. Ну, во-первых, есть фреймворки, или платформы, для работы с большими данными. Это прежде всего Hadoop, Spark, MapReduce и аналогичные инструменты. У каждого инструмента свои особенности, свои плюсы и минусы. К примеру, Hadoop лучше работает с пакетными заданиями, а Spark лучше предназначен для обработки потоковых данных. При этом они могут работать совместно, и, к примеру, Hadoop обеспечивает распределенное хранение данных на нескольких носителях или на нескольких компьютерах. А Spark позволяет перенести вычисления и хранение промежуточных результатов в оперативную память. И это тоже инструмент для ускорения вычислений. Далее, при анализе данных появляются особые сложности, связанные с обработкой баз данных. Жизнь заставила программистов-разработчиков изменить способы хранения данных — для того, чтобы их легче было агрегировать. Задача агрегирования — это, прежде всего, подсчеты сумм или средних значений по столбцам. Напомним, что и в базах данных, и в электронных таблицах переменные хранятся по столбцам. Но при этом реляционные базы данных записывают файлы, в которых записи в таблицах хранятся по строчкам. Просто потому что новые данные приходят в виде очередной записи. А это и есть новая строка в таблице. Так вот, извлечение и обработка данных, которые расположены в одном столбце, гораздо легче будет происходить, если каждый столбец хранится непрерывным фрагментом файла. Вот этим занимаются так называемые колоночные базы данных.
Далее у нас перечислены инструменты, связанные с потоковыми данными и названо несколько облачных платформ.
Если рассматривать типы данных, которые предстоит обрабатывать, то очень условно выделяются структурированные, неструктурированные и слабо-, частично-, или «полу-структурированные» данные, см. рис. Идеально структурированные данные — это таблица, одна или несколько таблиц, где в каждом столбце находятся данные одного типа, относящиеся к одному и тому же параметру, или, как говорят, полю. Противоположностью структурированным данным является неструктурированные данные, где нельзя выделить однотипные поля или столбцы. Это может быть изображение, текст или видео. Есть файлы типа XML или JSON, которые ближе всего в программировании соответствуют понятию словарь или dictionary, когда у нас есть поле и соответствующие ему значения. Причём для разных объектов может быть разный набор полей — в зависимости от свойств объекта и от имеющихся данных. Про это мы еще отдельно поговорим.
Второй вид классификации — это источники данных. И прежде всего можно выделить данные, которые создаются людьми, и данные, которые создаются с помощью оборудования. Пользователи могут сами вводить огромное количество сведений, — с учетом того, что на Земле проживает несколько миллиардов человек, и многие из них регулярно выходят в интернет. Соответственно, есть социальные сети, блоги и тому подобное. Такие ресурсы являются источником больших данных. Ну, а то, что генерирует оборудование, это сенсоры, логи и интернет вещей. Это самый быстрорастущий сегмент больших данных.
Далее, в том, что касается создания и генерации данных, можно обсуждать обработку того, что лежит в архивах и того, что поступает в виде потока, который практически невозможно записать и хранить. То есть нужна обработка данных по мере поступления — практически в реальном времени — и возможно с каким-то небольшим учётом предыстории. Это особая технология, здесь есть свои особенности.
Применение технологий больших данных в различных отраслях
На следующем рисунке перечислено несколько примеров того, в каких областях деятельности могут применяться большие данные. Анализируя поведение человека, можно заниматься таргетированной рекламой (от слова target — «цель», «целиться» — то есть «прицельная реклама»). Это означает, что человек будет получать рекламные предложения, подходящие к его профилю, связанные не только с возрастом, местом проживания, областью деятельности, но и с какими-то особенностями его поведения в сети.
Далее, многие компании всё больше начинают анализировать поведение своих клиентов. И, к примеру, для сотовых компаний существенным является своевременное прогнозирование так называемого оттока клиентов (churn). В какой момент человек начинает задумываться о том, чтобы перейти к другому поставщику услуг. Он ещё даже не задумывался об этом, но в его поведении появляются «подозрительные», характерные изменения. Ну и задача компании удержать клиента. А это значит, что нужно подобрать ему такое предложение, которое будет лучше, чем у конкурентов — с точки зрения этого конкретного человека.
Следующий шаг — это рекомендательные системы. Это, к примеру, рекомендации фильмов, или аудиотреков, или книг, или товаров. Когда человека рассматривают, анализируют, относят к какому-то классу или кластеру, здесь в чистом виде работает кластерный анализ. И этому клиенту рекомендуют то, что уже сработало для других клиентов, похожих на него по каким-то характеристикам, по каким-то особенностям поведения.
Следующий пример — это прогнозы, в том числе прогнозы нежелательных событий. Если имеется достаточное количество записей об истории какого-то экономического, технического или природного процесса, можно прогнозировать его дальнейшее развитие. Естественно, при выполнении ряда условий, с рядом оговорок. И звучит постановка задачи примерно так: если и дальше события будут развиваться, как прежде, тогда можно ожидать то-то и то-то. В самых разных ситуациях прогнозы могут быть очень эффективными, даже если они не слишком точны.
Особая область деятельности — это оптимизация бизнес-процессов, то есть того, что происходит на конкретном предприятии (напомним, что слово «бизнес» может означать «предприятие»), см. [Вики: Бизнес]. И здесь начинает работать анализ так называемых логов. Эта область деятельности на сегодняшний день становится все более популярной, и она называется Process Mining, что очень напоминает предыдущий термин Data Mining.
Теперь это «разведочный анализ» бизнес-процессов. И речь идёт о том, что, анализируя большое количество журналов событий, так называемых логов, определяют типовое, типичное, усреднённое поведение разных видов клиентов в рамках корпоративной информационной системы. И далее можно уже определять возможности улучшения бизнес-процессов, исходя из типового поведения разных классов пользователей.
Следующий пример — это медицина. Это диагностика с применением машинных рекомендаций. Это может быть обсуждение различных лабораторных анализов, это может быть исследование рентгеновских снимков, томографии, просто целой истории болезни. Имея большое количество статистики, можно улучшить качество прогнозов, качество диагнозов и качество рекомендаций по лечению. Тем более, что компьютерные системы могут распознать многие заболевания на ранней стадии и сделать лечение более успешным. Такие системы не устают, работают круглые сутки и замечают малейшее отклонение от того, что можно считать здоровым состоянием организма.
Ну и наконец, то, что развивается в настоящее время в связи с развитием онлайн-образования. Многие онлайн-платформы накапливают большие массивы данных о том, как ведут себя обучающиеся. Благодаря анализу таких сведений, можно выяснять, как происходит обучение, насколько оно идёт успешно, где возникают трудности у большинства пользователей и что можно улучшить, как можно усовершенствовать эту деятельность. Чем-то это перекликается с оптимизацией бизнес-процессов в целом.
Далёкое светлое будущее
После того, как мы рассмотрели примеры применения больших данных, стоит упомянуть перспективы дальнейшего развития. В этой области всё меняется очень быстро. Поэтому то, что сегодня мы называем перспективами, на самом деле где-то уже реализуется. Вот, например, аналитика в реальном масштабе времени, то есть с той же скоростью, как поступают новые данные. В том числе, это будет полезно для того, чтобы в самих бизнес-процессах происходило использование аналитики.
Так что мы отмечаем такую тенденцию, как интеграцию аналитики в бизнес-процессы. Некоторые зачатки этого мы уже наблюдаем, когда BI-аналитика, то есть аналитика данных из учетных систем, становится доступной любому руководителю любого уровня. Теперь это называется «аналитика для конечного пользователя» или самообслуживание: self-service BI. Этот инструмент можно использовать либо с минимальным знанием программирования, либо вообще без использования программирования — с визуальной настройкой нужных показателей и визуализации.
Следующая тенденция — это всё большее использование технологий машинного обучения искусственного интеллекта. Требования к уровню владения программированием могут быть и не такими серьезными, как сейчас, для того, чтобы реализовать готовые алгоритмы с помощью готовых программ.
Соответственно, можно ожидать, что результаты обработки больших данных всё больше будут использоваться при принятии решений. Если раньше был девиз: «Принятие решений на основе фактов», потом «на основе данных». Появился термин Data Driven Decision Making. Сейчас, соответственно, Big Data будет всё больше проникать в этот процесс принятия решений.
Ну и поскольку данные так или иначе затрагивают личность конкретного человека, появляется все больше внимания к вопросам, насколько это закономерно, насколько это законно — использовать данные. Насколько это этично и морально — использовать данные о человеке, причём чаще всего без согласия самого человека. Так что вопросы этичного использования данных и законодательного регулирования этих действий — это тоже большая проблема.
Умные устройства, такие как интернет вещей, и всё, что сегодня называется «умный город», Smart City, — это всё большее количество устройств, подключенных к интернету и работающих автоматически. Они тоже являются источником растущего количества данных.
Размерность и объем данных
Когда мы говорим о количестве данных, о том, что они «большие», что у нас «большой объем данных» — здесь есть еще один аспект. И это то, что называется «размерность» — Dimensionality. Вообще слово dimension означает «измерение». Можно сказать, что размерность — это количество осей координат, если мы попробуем изобразить любую запись в нашей базе данных в виде точки в каком-то многомерном пространстве. Можно сказать, что речь идет о количестве факторов, которые учитываются при построении машинных моделей. Их можно также называть словом «признаки», или по-английски «feature». Можно также называть их «свойства», «атрибуты», «переменные», «параметры». Важно понимать, что речь идет о свойствах, которые мы фиксируем. Применительно к каждому объекту или, как говорят в статистике, к «статистической единице». Если у нас два измерения, это плоская двумерная картина, это значит, что мы смотрим на ширину и высоту. Но на самом деле для самых разных объектов можно получить гораздо больше характеристик.
Ну, в частности, если мы будем пытаться что-то прогнозировать в отношении человека, то придется рассматривать буквально десятки, а может быть и сотни разных характеристик. Это значит, что в нашей модели будет учитываться и возраст, и уровень дохода, и уровень образования, и стаж, и профессия, и пол, и семейное положение, и владение какими-то объектами недвижимости, и задолженности и так далее.
Всёе это может влиять на тот конечный признак, который нас будет интересовать в плане прогнозирования. А это может быть и здоровье, и шансы найти работу, и возможность вернуть кредит. Всё, что угодно, можно пытаться спрогнозировать, если мы располагаем достаточным количеством данных. И здесь-то и появляется самая большая проблема.
Проклятие размерности
Когда мы пытаемся учитывать большое количество факторов, признаков, «фичей», нужно будет фиксировать значение каждого признака для каждой записи, то есть для каждого объекта выборки. Это значит для каждого человека или объекта недвижимости, или технического устройства, или экономического объекта.
Соответственно, для построения моделей увеличение числа признаков существенно увеличивает потребный объём данных. А это приведёт к огромному количеству дополнительных вычислений. Есть даже утверждение, что такая проблема разрастается «экспоненциально». Так что мы рассмотрим простой пример для демонстрации «сложности», связанной с этим ростом количества данных. Эту ситуацию упоминает Беллман в своей книге «Динамическое программирование», написанной в середине прошлого века, см. [Беллман Размерность].
Задача выглядит так. Если у нас одно-единственное измерение, один признак «икс», и мы заполняем интервал от 0 до 1 значениями с шагом 0,1 — то очевидно, что у нас будет 100 точек. И если нас будет интересовать так называемая «представительная выборка», то будет желательно обеспечить самые разные значения этого самого х.
Теперь представим, что у нас будет два измерения — две переменных х1, х2, и для каждого измерения диапазон значений от 0 до 1 нужно будет заполнить шагом 0,1. Понятно, что теперь это уже двумерная картина, соответственно, для количества данных мы получаем оценку 100 в квадрате.
Для трёх признаков, чтобы заполнить все это многомерное пространство с равномерным шагом, потребуется уже 100 в третьей степени.
Таким образом, наша задача начинает разрастаться очень быстро. Достаточно добавить ещё один признак, и мы увеличиваем степень на единицу. Вот поэтому говорят про экспоненциальный рост количества данных.
Теперь рассмотрим проблему размерности применительно к задаче регрессии, см. рис. Большое количество данных затрудняет и процесс построения модели, и процесс визуализации, интерпретации построенной модели. Во-первых, появляется так называемая разреженность данных. То есть мы не имеем достаточное количество данных в каждой точке многомерного пространства. Если мы хотим охватить самые разные комбинации значений признаков, то не все они в природе могут быть представлены, или в нашей выборке, в нашем датасете. Если мы попытаемся собрать данные, относящиеся к каждой точке, с определенным шагом, или хотя бы приблизительно с таким шагом, как на предыдущем слайде, задача становится «неподъёмной».
В связи с этим, статистики сразу же попытались предложить решение и немножко «проредить» данные с помощью технологии планирования эксперимента — Experiment Design. Что это значит? Это значит, что мы заранее вносим пропуски в наши данные. И некоторые точки в пространстве заведомо будут отсутствовать.
Вторая проблема, которая вытекает из этого, называется «переобучение». Это значит, что модель начинает подстраиваться под конкретные данные. Она просто запоминает значения для конкретных комбинаций «иксов» при прогнозировании «игрека». А машинная модель строится совсем с другой целью — с целью обобщения. Обобщающая способность модели — это попытка вывести закономерность и не отвлекаться на шум, не отвлекаться на случайности, выделять самые общие свойства. Вместо этого модель подстраивается под случайное отклонение, под конкретные объекты. Соответственно, теряется обобщающая способность и происходит подстройка под данные, то есть переобучение. И это значит, что на обучающей выборке результаты прогнозов будут хорошими, будут совпадать с исходными данными, а вот на контрольной выборке, или, как говорят, на тестовой выборке, все будет гораздо хуже.
Наконец, интерпретировать и визуализировать результаты становится всё труднее. Если в двух измерениях график построить достаточно легко. Постепенно добавляя количество «иксов», мы совершенно затрудняем, усложняем возможности построения графиков. Многомерные графики практически невозможно воспринять. Даже трехмерные воспринимаются сложно. В разных дисциплинах есть соответствующие приёмы, в частности, третье измерение вводится как расслоение характеристик. Это характерно и для задач механики, и для задач в области электроники, и в теории управления. Но это даже не четыре измерения, а всего три. А при этом график мы должны построить на плоскости — то есть в двух измерениях. Дальше все становится практически не интерпретируемо.
Поэтому сложно объяснить в соответствии с нашей моделью, какой признак каким образом влияет на результативный. Соответственно, принятие решений на основе таких «необъяснимых» моделей становится достаточно безответственным занятием. Каждый раз говорить, что «у нас нет оснований не доверять искусственному интеллекту…» На самом деле, у нас есть такие основания.
Подведем итоги, см. рис. Высокая размерность задачи, попытка учитывать большое количество признаков, вначале действительно немного улучшает точность прогнозов, но затем качество модели начинает ухудшаться — по нескольким причинам. Первое — это усложнение вычислений и требование всё большего количества данных. А это так называемая «вычислительная сложность», вплоть до полной невозможности решения задачи — в том, в чистом виде, как она поставлена. С тем количеством признаков.
Далее у нас имеется проблема переобучения и настройки под шум. И как здесь указано, некоторые признаки становятся излишними, избыточными, дублирующими, слишком сильно коррелированными с остальными признаками. И в принципе их можно было бы и исключить из рассмотрения. Но об этом мы поговорим чуть позже.
Визуализация тоже становится всё более затруднённой.
Вся эта проблема была названа проклятием размерности, или по-английски The Curse of Dimensionality, см. рис. При увеличении количества измерений мы получаем многомерное пространство, в котором всё хуже решаются задачи классификации или кластеризации. То есть расстояние между точками становится настолько большим, что становится практически невозможно с этими данными работать (и замечать на этом фоне различия между классами).
Поскольку увеличение размерности является нежелательным, очевидным решением проблемы является уменьшение этой самой размерности, см. рис. Как же это достигается? Количество факторов, количество признаков, каким-то образом нужно уменьшить. Либо нужно оставить только самые информативные и убрать малоинформативные, зашумленные, или постоянные значения, или слишком коррелированные признаки. Так появляется отбор признаков — Feature Selection.
С другой стороны, можно попытаться сохранить всю имеющуюся информацию, но при этом уменьшить количество признаков. И это приводит нас к созданию, «конструированию» новых признаков — небольшого количества новых признаков на основе большого количества имеющихся. Для этого используются технологии понижения размерности (или снижения размерности) — Dimensionality Reduction — путём преобразования данных в пространство с меньшей размерностью. Были разработаны, в частности, метод главных компонентов и дискриминантный анализ (уже лет эдак сто тому назад).
Плюс к этому существуют технологии регуляризации, когда при обучении модели в критерий вводится дополнительная поправка –штраф за сложность модели. С помощью дополнительного критерия в уравнение вводится ограничение, например, на величину коэффициентов при наших параметрах.
Все эти технологии известны и присутствуют даже в библиотеке под названием sklearn, см. [Вики: Scikit-learn] и [scikit-learn].
Этапы большого пути: Жизненный цикл аналитики данных
Теперь рассмотрим жизненный цикл аналитики данных, см. рис. Понятие «жизненный цикл» применимо к самым разным ситуациям и к самым разным объектам. Но в любом случае имеется в виду повторяющаяся последовательность действий, потому что цикл — это движение по кругу.
В данном случае идея жизненного цикла применяется к анализу данных. И мы напомним определение, что речь идет о том, как собрать данные, что с ними сделать и что делать с результатами обработки данных. Так вот, жизненный цикл включает в себя основные этапы, начиная от постановки задачи и заканчивая готовым решением.
Бесплатный фрагмент закончился.
Купите книгу, чтобы продолжить чтение.