Что такое Data Science? Часть 3

Продолжение статьи «Что такое Data Science».

Работа с данными в масштабе

Все мы слышали о big data, «больших данных». Но «большие» — это, на самом деле, вводящая в заблуждение характеристика. Нефтяные, телекоммуникационные и другие ориентированные на работу с данными отрасли уже давно работали с огромными наборами данных. Но поскольку емкость носителей продолжает расти, «большие» сегодня — это «средние» завтра и «маленькие» на следующей неделе. Самое разумное определение «больших данных», которое мне приходилось слышать, звучит так: «большие данные» — это когда сам по себе размер данных становится частью проблемы. Мы говорим о проблеме данных объемом от гигабайтов до петабайтов — в определенный момент традиционные методы работы с данными в случае с такими объемами становятся непригодными для использования. Что же нам делать с этими «особенными» данными? Как считает Джеф Хаммербахер (Jeff Hammerbacher, @hackingdata), мы пытаемся построить «информационные платформы» или «пространства данных». Информационные платформы похожи на традиционные хранилища данных, но имеют свои особенности. Они предоставляют исследователям функционально насыщенные API и предназначены для изучения и понимания данных, а не для традиционной аналитики и генерации отчетов. Они поддерживают все форматы данных, включая самые «грязные», а внутреннее устройство моделей хранения  изменяется с увеличением понимания смысла данных. Многие создавшие платформы данных организации сочли необходимым выйти за рамки реляционной модели данных. Традиционные реляционные системы управления базами данных перестают быть эффективными на данном уровне. Управлять шардированием и репликацией сквозь полчище серверов реляционных баз данных — это сложно и медленно. Необходимость заранее определять модель данных конфликтует с реальностью — многочисленностью и неструктурированностью источников данных, когда вы можете не знать, что на самом деле важно, пока не проанализируете все доступные данные.

Реляционные базы данных созданы с учетом поддержки консистентности данных и сложных транзакций, которые можно легко откатить, если что-то пошло не так. В то время, как стопроцентная целостность играет решающую роль для многих приложений, она не так уж важна для тех задач, которые мы сейчас обсуждаем. Вам действительно так важно, 1010 у вас фолловеров в Твиттере или 1012? Точность привлекательна, но в случае с большинством приложений, основанных на данных (за исключением финансов), эта привлекательность обманчива. Большинство исследований данных играют роль в сравнении: когда вы спрашиваете, растут ли продажи в Северной Европе быстрее, чем в Южной Европе, вас мало волнует разница между 5,92 и 5,93 процентами ежегодного роста. Для эффективного хранения огромных наборов данных появляются новые виды баз данных. Их часто называют NoSQL или нереляционными, хотя оба эти термина не слишком удачны — они объединяют в одну группу принципиально разные продукты. Многие из этих баз данных являются логическими потомками Google BigTable и Amazon Dynamo, и созданы так, чтобы допускать распределение данных между большим количеством узлов, обеспечивать ослабленную консистентность, и имеют очень гибкую, пригодную к постоянном изменениям, модель данных. Cуществует пара десятков таких продуктов (почти все они с открытым исходным кодом), но есть и несколько зарекомендовавших себя лидеров:

  • Cassandra: разработана в Facebook, используется в Twitter, Rackspace, Reddit и на других крупных сайтах. Cassandra высокопроизводительна, надежна и обладает возможностью автоматической репликации. Имеет очень гибкую модель данных. Недавно появившаяся компания Riptano оказывает коммерческую поддержку.
  • HBase: часть проекта Apache Hadoop, сделана по образцу Google BigTable. Используется для очень больших баз данных (миллиарды строк, миллионы столбцов), распределенных среди тысяч узлов. Как и для Hadoop, коммерческую поддержку HBase осуществляет Cloudera.

Однако, хранение данных является лишь одной из частей построения информационной платформы. Данные полезны только тогда, когда с ними можно что-то сделать, поэтому огромные наборы данных порождают вычислительные задачи. Google популяризировал подход MapReduce, по сути являющийся реализацией принципа «разделяй и влавствуй», для распределения очень больших задач по очень большому вычислительному кластеру. На стадии Map задачи делятся на несколько одинаковых подзадач, которые затем распределяются среди множества процессоров. Затем, промежуточные результаты объединяются одной операцией Reduce. Оглядываясь назад, MapReduce кажется очевидным решением самой сложной задачи Google — проведения масштабного поиска. Легко распределить поиск по тысячам процессоров, а затем объединить результаты в единое множество ответов. Менее очевидно, что MapReduce оказался широко применим ко многим задачам анализа данных, от поиска до машинного обучения.

Самая популярная реализация MapReduce с открытым кодом — это проект Hadoop. Заявление Yahoo о том, что они создали самое большое в мире приложение на Hadoop, задействующее 10000-ядерный кластер под управлением Linux, вывело компанию на первый план. Многие ключевые разработчики Hadoop нашли пристанище в комании Cloudera, которая обеспечивает коммерческую поддержку платформы. Elastic MapReduce, продукт Amazon, позволяет значительно упростить работу с Hadoop без необходимости закупать стойками машины с Linux, предоставляя предварительно сконфигурированные образы Hadoop для своих кластеров EC2. Вы сможете активировать и деактивировать процессоры по необходимости, оплачивая только время их использования.

Hadoop выходит далеко за рамки одной из реализаций MapReduce, являясь ключевым элементом информационной платформы. Он включает в себя HDFS, распределенную файловую систему, обеспечивающую производительность и надежность для больших наборов данных, базу данных HBase, Hive, позволяющий разработчикам изучать данные из Hadoop при помощи SQL-подобных запросов; высокоуровневый язык для анализа данных Pig и другие компоненты. Если что-то и можно назвать универсальной информационной платформой, то это именно Hadoop.

Hadoop сыграл важную роль в обеспечении «быстрого» (agile) анализа данных. В разработке программного обеспечения «быстрые» методы связаны с ускоренными продуктовыми циклами, более тесным взаимодействием между разработчиками и потребителями и тестированием. Традиционный анализ данных был затруднен слишком длинными периодами отклика. Если вы начинали вычисления, закончиться они могли через несколько часов или даже дней. Но Hadoop (и, в частности, Elastic MapReduce) позволяет легко создавать кластеры, способные быстро выполнять расчеты по большим наборам данных. Быстрые вычисления облегчают задачу тестирования различных предположений, наборов данных и алгоритмов. Гораздо проще становится консультироваться с клиентами чтобы выяснить, задаете ли вы правильные вопросы, а также появляется возможность рассматривать интригующие гипотезы, от проверки которых раньше вы бы отказались из-за нехватки времени.

Hadoop по сути является системой пакетной обработки данных, но экспериментальный проект Hadoop Online Prototype (HOP) дает возможность потоковой обработки. Hadoop обрабатывает данные по мере их поступления и позволяет видеть промежуточные результаты практически в режиме реального времени. Анализ данных в режиме реального времени позволяет существовать таким функциям как trending topics на сайтах подобных Twitter. Эти функции могут работать и в режиме почти реального времени — отчеты о trending topics не требуют миллисекундной точности. Как и число фолловеров в Твиттере, trending topics должны быть актуальны на последние 5 минут или даже час. По словам Хилари Мэйсон (Hilary Mason, @hmason), ученого в области анализа данных (data scientist) из bit.ly, можно заранее провести большинство вычислений, а затем использовать один из экспериментов в MapReduce реального времени, чтобы получить окончательные результаты.

Машинное обучение (machine learning) — еще один важный инструмент ученых в области анализа данных (data scientists). Сейчас мы ожидаем в любом мобильном и веб-приложении увидеть систему рекомендаций. Разработка такой системы — как раз и есть типичная задача искусственного интеллекта. Вам не придется долго искать среди современных веб-приложений такие, в которых можно найти примеры использования классификации, обнаружения ошибок, сличения изображений (лежащего в основе Google Goggles и SnapTell) и даже распознавания лиц — мобильное приложение позволит вам сфотографировать кого-нибудь на свой телефон и установить личность этого человека, используя доступные в онлайне фото. Курс Machine Learning, который ведет Эндрю Нг (Andrew Ng), — один из самых популярных курсов в области информатики (computer science) в Стэнфордском университете, его слушают сотни студентов (рекомендую к просмотру это видео).

Нам доступно много библиотек для машинного обучения: PyBrain для Python, Elefant и Weka для Java и Mahout (вместе с Hadoop). Google недавно анонсировала Prediction API, который позволяет свободно использовать их собственные алгоритмы машинного обучения через RESTful-интерфейс. А для машинного зрения (computer vision) библиотека OpenCV — фактически стандарт в этой области.

Mechanical Turk также является важной частью инструментария. Машинному обучению почти всегда требуется обучающее множество — значительное количество заранее известных данных для разработки и настройки приложения. Mechanical Turk – отличный метод разработки обучающих множеств. Как только вы собрали массив данных для обучения (например, большую коллекцию публично доступных фото из Твиттера), вы можете нанять людей, которые за небольшую плату будут классифицировать их по категориям, обведут кругами лица, автомобили или что-нибудь еще, что вас интересует. Это отличный способ классифицировать несколько тысяч единиц данных, заплатив по несколько центов за каждую. Даже относительно объемная работа будет стоить всего несколько сотен долларов.

Хоть я и не акцентирую внимание на традиционной статистике, построение статистических моделей играет важную роль в любом анализе данных. По словам Майка Дрисколла (Mike Driscoll@dataspora), статистика — это грамматика Data Science. Очень важно, чтобы данные были согласованны. Мы все слышали шутку о том, что употребление в пищу соленых огурцов приводит к смерти, потому что все, кто умирают, ели соленые огурцы. Эта шутка не работает, если вы понимаете, что такое корреляция. Если говорить более конкретно, легко заметить, что одна реклама книги R in a Nutshell производит на 2 процента больше конверсии, чем другая. Но требуется обратиться к статистике чтобы понять, значимое это различие или же просто случайное отклонение. Data Science — это наука не только о существовании данных или предположениях о том, что они могут означать. Она также предполагает проверку гипотез и понимание, что сделанные на базе данных выводы верны. Статистика играет роль во всем: от традиционной бизнес-аналитики (business intelligence, BI) до понимания того, как работают аукционные системы рекламы в Google. Статистика стала базовым навыком. Она не заменяет новые методы из машинного обучения и других дисциплин, а дополняет их.

Несмотря на существование множества коммерческих статистических пакетов, язык программирования R с открытым исходным кодом и всеобъемлющая библиотека его расширений CRAN — основной инструмент. Хоть R и является необычным и причудливым языком, особенно для тех, у кого есть опыт в computer science, он максимально близок к универсальному методу выполнения большинства статистических работ. В R есть прекрасные графические средства, CRAN содержит парсеры для анализа большого количества типов данных, а новые расширения позволяют использовать R для распределенных вычислений. Если и есть какой-то один инструмент, способный предоставить пользователю полный спектр средств решения статистических задач, то это язык R.

Продолжение статьи

Оригинал: What is Data Science

Перевод: Светлана Фаткуллина

2 thoughts on “Что такое Data Science? Часть 3

  1. Pingback: Что такое Data Science? Часть 4 | InfoClod

  2. Pingback: Что такое Data Science? Часть 2 | InfoClod

Comments are closed.