Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
У Колумбийского университета есть хорошая история о плохих данных. Проект в сфере здравоохранения был нацелен на снижение затрат на лечение пациентов с пневмонией. В нём использовалось машинное обучение (machine learning, ML) для автоматической сортировки записей пациентов, чтобы выбрать тех, у кого опасность смертельного исхода минимальна (они могут принимать антибиотики дома), и тех, у кого опасность смертельного исхода высока (их нужно лечить в больнице). Команда разработчиков использовала исторические данные из клиник, а алгоритм был точным.
Но за одним важным исключением. Одним из наиболее опасных состояний при пневмонии является астма, поэтому врачи всегда отправляют астматиков в отделение интенсивной терапии, что приводило к минимизации уровня смертности для этих пациентов. Благодаря отсутствию смертельных случаев у астматиков в данных алгоритм предположил, что астма не так уж опасна при пневмонии, и во всех случаях машина рекомендовала отправлять астматиков домой, несмотря на то, что для них риск осложнений при пневмонии был наибольшим.
ML сильно зависит от данных. Это самый критически важный аспект, благодаря которому и возможно обучение алгоритма; именно поэтому машинное обучение стало столь популярным в последние годы. Но вне зависимости от терабайтов информации и экспертизы в data science, если ты не можешь понять смысл записей данных, то машина будет практически бесполезной, а иногда и наносить вред.
Проблема в том, что во всех массивах данных есть изъяны. Поэтому подготовка данных является очень важным этапом процесса машинного обучения. Если вкратце, то подготовка данных (data preparation) — это набор процедур, помогающий сделать массив данных более пригодным для машинного обучения. В более широком смысле под подготовкой данных также понимают создание подходящего механизма сбора данных. И эти процедуры потребляют подавляющее большинство времени, тратящегося на машинное обучение. Иногда до построения первого алгоритма проходят месяцы!
Можете посмотреть наше 14-минутное видео о подготовке данных:
Как данные подготавливают для машинного обучения
Подготовка массива данных часто оказывается проектом «сделай сам»
Если бы мы рассматривали сферическое машинное обучение в вакууме, то всей подготовкой данных должен был бы заниматься отдельный дата-саентист. И так поступать совершенно правильно. Если у вас в команде нет дата-саентиста, занимающегося очисткой всех данных, то у вас нет и машинного обучения. Но как мы говорили в истории о структуре команд data science, жизнь компаний, не способных позволить себе наличие собственного дата-саентиста, непроста. Им приходится обучать работать в этой сфере собственных инженеров ИТ. Кроме того, подготовка массива данных не сводится только к компетенциям дата-саентиста. Проблемы с массивами данных для машинного обучения проистекают из структуры организации, её сложившихся рабочих процессов и того, придерживаются ли инструкций работники, отвечающие за ведение учёта.
Как работают команды data science
Да, можно полностью положиться в подготовке массивов данных на дата-саентиста, однако если вы заранее будете знать некоторые техники, то это существенно облегчит нагрузку на этого человека, которому предстоит совершать почти геракловы подвиги.
Давайте рассмотрим самые распространённые проблемы с массивами данных и способы их решения.
0. Как собирать данные для машинного обучения, если у вас их нет
Возможность экспериментов с ML зависит от того, собирали ли вы данные в течение многих лет. Некоторые организации настолько успешно копят записи в течение десятков лет, что теперь для их перевозки в облако им требуется грузовик, потому что полосы пропускания Интернет-канала недостаточно.
Молодые организации сталкиваются с нехваткой данных, однако, к счастью, есть способы превратить этот минус в плюс.
Во-первых, используйте для начала работы с ML опенсорсные массивы данных. Существуют целые горы данных для машинного обучения, а некоторые компании (например, Google) с готовностью делятся ими. О возможностях использования публичных массивов данных мы поговорим чуть позже. Хотя такие возможности существуют, реальную ценность обычно представляют данные, полученные из бизнес-решений и действий вашей собственной компании.
Во-вторых, у вас есть шанс собирать данные правильным образом. Компании, начавшие собирать данные ещё с бумажных бухгалтерских книг и закончившие файлами .xlsx и .csv, скорее всего, будут испытывать бОльшие трудности с подготовкой данных, чем гордые обладатели маленького, но удобного для ML массива данных. Если знаешь задачи, которые должно решать машинное обучение, то можно заранее подстроить под них механизм сбора данных.
А что насчёт big data? Это очень популярный термин, кажется, что «большими данными» должны заниматься все. Изначально нацеливаться на big data — это хорошая задумка, однако big data — это не про петабайты. Это о возможности их правильной обработки. Чем больше массив данных, тем сложнее правильно использовать его и делать правильные выводы. Наличие большого количества древесины не означает, что вы обязательно сможете превратить её в склад, заполненный стульями и столами. Поэтому в общем случае новичкам рекомендуется начинать с малого и снижать сложность данных.
1. Формулировать задачу на ранних этапах
Понимание того, что вы хотите прогнозировать, поможет вам решить, какие данные важнее собирать. При формулировании задачи нужно выполнять исследование данных и пытаться думать в категориях классификации, кластеризации, регрессии и ранжирования, о которых мы говорили в нашей статье о применении машинного обучения в бизнесе. Если говорить доступным языком, эти задачи можно разделить следующим образом:
Классификация. Вам нужно, чтобы алгоритм отвечал на простые двоичные вопросы «да или нет» (кошки или собаки, плохо или хорошо, овцы или козы, и так далее), или чтобы он выполнял многоклассовую классификацию (трава, деревья или кусты; кошки, собаки или птицы, и так далее.) Также нужно размечать правильные ответы, чтобы алгоритм мог на них учиться. Прочитайте наше руководство о том, как выполнять разметку данных в организации.
Кластеризация. Вам нужно, чтобы алгоритм находил правила классификации и количество классов. Основное отличие от задач классификации заключается в том, что вы не знаете групп и принципов их разделения. Например, это обычно происходит, когда нужно сегментировать клиентов и выработать отдельный подход к каждому сегменту в зависимости от его качеств.
Регрессия. Вам нужно, чтобы алгоритм выдавал какое-то числовое значение. Например, если вы тратите слишком много времени на подбор подходящей цены на свой продукт, потому что она зависит от множества факторов, алгоритмы регрессии могут помочь в вычислении этого значения.
Ранжирование. Некоторые алгоритмы машинного обучения ранжируют объекты по различным признакам. Ранжирование активно используется для рекомендаций фильмов в сервисах потокового воспроизведения видео или для отображения продуктов, которые покупатель может с высокой вероятностью приобрести, исходя из его предыдущих запросов поиска и покупок.
Вероятно, задачу вашего бизнеса можно решить в рамках этой простой сегментации и вам можно начать соответствующим образом адаптировать массив данных. Как правило, на этом этапе стоит избегать слишком сложных задач.
2. Создать механизмы сбора данных
Создание культуры управления данными в организации — это, вероятно, самая сложная часть всего процесса. Мы вкратце раскрыли этот пункт в статье о стратегии машинного обучения. Если вы стремитесь использовать ML для прогностической аналитики, первым делом нужно решить проблему фрагментации данных.
Например, если взглянуть на технологии сферы туризма — одной из ключевых областей опыта нашей компании — то фрагментация данных здесь является одной из важнейших проблем аналитики. В гостиничном бизнесе отделы, отвечающие за физические свойства, узнают довольно интимные подробности о своих гостях. Отели знают номера кредитных карт гостей, выбираемые ими удобства, иногда домашние адреса, используемые услуги в номере и даже напитки и еду, заказанные во время проживания. Однако веб-сайт, на котором люди бронируют номера, может работать с ними как с совершенно незнакомыми пользователями.
Эти данные накапливаются в разных отделах и даже в разных точках сбора в рамках одного отдела. У маркетологов может быть доступ к CRM, но клиенты в ней не связаны с веб-аналитикой. Если у вас множество каналов привлечения, сопровождения и удержания, объединить все потоки данных в централизованное хранилище возможно не всегда, но в большинстве случаев это вполне можно реализовать.
Обычно сбор данных является задачей дата-инженера — специалиста, отвечающего за создание инфраструктур данных. Однако на ранних этапах можно задействовать разработчика ПО, имеющего опыт работы с базами данных.
Data engineering
Существует два основных типа механизмов сбора данных.
Data Warehouse и ETL
Первый — это размещение данных в warehouse. Эти хранилища обычно создаются для структурированных (или SQL) записей, то есть сохранённых в стандартных табличных форматах. Можно с уверенностью сказать, что к этой категории относятся данные о продажах, зарплатах и CRM. Ещё один традиционный атрибут работы с warehouse — преобразование данных перед загрузкой их в хранилища. Ниже мы подробнее рассмотрим техники преобразования данных, но в общем случае это значит, что вы знаете, какие данные вам нужны и как они должны выглядеть, поэтому перед сохранением выполняете всю необходимую обработку. Такой подход называется Extract, Transform and Load (ETL).
Проблема такого подхода заключается в том, что вы заранее не всегда знаете, какие данные будут полезными, а какие нет. Поэтому warehouse обычно используются для доступа к данным при помощи интерфейсов business intelligence, визуализирующих метрики, которые нам нужно отслеживать. Но существует и другой путь.
Data Lakes и ELT
Data lake («озёра данных») — это хранилища, способные хранить и структурированные, и неструктурированные данные, в том числе изображения, видео, аудиозаписи, файлы PDF, и так далее. Но даже если данные структурированы, перед сохранением они не преобразуются. Данные загружаются в своём исходном виде, а решение о том, как их использовать и обрабатывать, принимается по необходимости. Такой подход называется Extract, Load and Transform.
Подробнее о различиях между ETL и ELT можно прочитать в нашей статье. Так что же вам выбрать? В общем случае следует использовать оба подхода. Считается, что data lake лучше подходят для машинного обучения. Но если вы уверены, по крайней мере, в части данных, стоит хранить их подготовленными, поскольку их можно использовать для аналитики ещё до того, как вы начнёте проект data science.
И помните о том, что современные поставщики услуг облачных data warehouse поддерживают оба подхода.
Учёт человеческого фактора
Ещё одним аспектом является человеческий фактор. Сбор данных может быть монотонным занятием, обременяющим ваших работников и утомляющим их инструкциями. Если люди постоянно должны вручную вести учёт, они могут решить, что их задачи — ещё одна бюрократическая причуда, поэтому пустят их на самотёк. Например, у Salesforce есть хороший набор инструментов для отслеживания и анализа действий торгового персонала, однако ручной ввод данных и логирование действий отталкивает продавцов.
Эту проблему можно решить при помощи систем роботизированной автоматизации процесса (RPA). Алгоритмы RPA — это простые, управляемые правилами боты, способные выполнять монотонные и повторяющиеся задачи.
3. Проверьте качество данных
Первый вопрос, которым нужно задаться: доверяете ли вы своим данным? Даже самые изощрённые алгоритмы машинного обучения не могут работать с некачественными данными. Подробно о качестве данных мы говорили в отдельной статье; в целом вам следует учитывать несколько ключевых моментов.
Насколько ощутимы человеческие ошибки? Если данные собираются или размечаются людьми, то проверьте подмножество данных и определите частоту возникновения ошибок.
Существуют ли технические проблемы с передачей данных? Например, некоторые записи могут дублироваться из-за ошибки на сервере, может произойти сбой хранилища или кибератака. Оцените, насколько эти события повлияли на ваши данные.
Сколько пропущенных значений в ваших данных? Хотя способы работы с пропущенными записями существуют (о них мы поговорим ниже), оцените, насколько критично их количество.
Адекватны ли данные вашей задаче? Если вы продавали бытовую технику в США, а теперь планируете расшириться и на Европу, то можно ли использовать те же данные для прогнозирования наличия и спроса?
Есть ли дисбаланс в данных? Представьте, что мы хотите уменьшить риски в цепочках поставок и отфильтровать тех поставщиков, которых вы считаете ненадёжными; при этом вы используете набор атрибутов (например, местоположение, размер, рейтинг и так далее). Если в размеченном массиве данных 1500 записей помечено как надёжные, и только 30 считаются ненадёжными, то у модели не будет достаточного количества примеров, чтобы обучиться информации о ненадёжных поставщиках.
4. Форматируйте данные, чтобы они были согласованными
Под форматированием данных иногда понимают сам используемый формат файлов. И не так уж сложно преобразовать массив данных в формат файлов, лучше всего соответствующий вашей системе машинного обучения.
Но мы говорим о согласованности форматов самих записей. Если вы собираете данные из разных источников или ваш массив данных вручную дополнялся разными людьми, стоит убедиться, что все переменные для конкретных атрибутов записаны согласовано. Такими переменными могут быть форматы дат, суммы денег (4.03 или $4.03, или даже 4 dollars 3 cents), адреса и так далее. Формат ввода должен быть одинаков для всего массива данных.
У согласованности данных есть и другие аспекты. Например, если у вас в атрибуте есть заданный числовой интервал от 0.0 до 5.0, то убедитесь, что в массиве отсутствуют значения 5.5.
5. Снижайте объём данных
Есть искушение добавлять в массив как можно больше данных, ведь нам нужны «большие данные»! Но такой подход неверен. Да, разумеется, вам нужно собрать все возможные данные. Но если вы подготавливаете массив данных с учётом конкретной задачи, лучше снизить его объём.
Как только вы узнаете, каким является целевой атрибут (значение, которое вы хотите спрогнозировать), дальше вами будет руководить здравый смысл. Вы можете предполагать, какие значения критически важны, а какие добавят массиву данных новые размерности и сложность, никак не влияя на прогнозирование.
Такой подход называется сэмплированием атрибутов.
Например, вы хотите спрогнозировать, какие покупатели склонны делать крупные покупки в вашем онлайн-магазине. Возраст покупателя, его местонахождение и гендер могут лучше предсказывать покупки, чем его номер кредитной карты. Но это работает и в другую сторону. Подумайте, какие ещё значения вам потребуется собирать, чтобы раскрыть другие зависимости. Например, добавление процента отказов может повысить точность прогнозирования конверсии.
На этом этапе важную роль играет опыт в соответствующей сфере. Возвращаясь к истории из начала статьи, надо сказать, что не все дата-саентисты знают, что астма может приводить к осложнениям при пневмонии. То же самое работает и с уменьшением крупных массивов данных. Если вы не наняли гения, имеющего опыт и в основах здравоохранения, и в data science, то высока вероятность, что дата-саентист с трудом поймёт, какие значения действительно важны для массива данных.
Ещё один подход называется сэмплированием записей. Он подразумевает, что вы просто удаляете записи (объекты) с отсутствующими, ошибочными или менее репрезентативными значениями, чтобы сделать прогноз более точным. Эту технику также можно использовать на поздних этапах, когда вам нужен прототип модели, чтобы понять, выдаёт ли выбранный метод машинного обучения нужные результаты, и определить ROI вашего проекта ML.
Также можно уменьшать объём данных, выполняя их агрегирование в более масштабные записи при помощи разделения всех данных атрибутов на несколько групп и вычисляя значение для каждой группы. Вместо того, чтобы изучать продукты, самые покупаемые в заданный день на протяжении пяти лет существования онлайн-магазина, можно агрегировать их в еженедельные или ежемесячные показатели. Это поможет уменьшить размер данных и время вычислений без существенных потерь в точности прогнозов.
6. Выполните очистку данных
Так как отсутствующие значения могут осязаемо снизить точность прогнозирования, сделайте эту проблему приоритетной. С точки зрения машинного обучения, предполагаемые или аппроксимируемые значения «более точны» для алгоритма, чем просто отсутствующие. Даже если вы не знаете точного значения, существуют способы лучшего «угадывания» отсутствующего значения или обхода этой проблемы. Как очищать данные? Выбор правильного подхода тоже сильно зависит от данных и сферы деятельности:
- Замена отсутствующих значений подставными, например, n/a для категорических значений или 0 для числовых значений
- Замена отсутствующих числовых значений средними значениями
- В случае категорических значений можно использовать наиболее часто используемые элементы.
Если вы используете какую-то платформу ML as a service, очистку данных можно автоматизировать. Например, Azure Machine Learning позволяет выбирать из доступных техник, а Amazon ML вообще делает это без вашего вмешательства. Прочитайте наше сравнение систем MLaaS, чтобы лучше понимать, какие системы есть на рынке.
7. Создавайте новые признаки из уже существующих
Некоторые значения в вашем массиве данных могут быть сложными и разбиение их на несколько частей поможет в выявлении более специфических взаимосвязей. Этот процесс противоположен снижению объёму данных, так как вам нужно добавлять новые атрибуты на основании имеющихся.
Например, если показатели продаж зависят от дня недели, то отделение дня недели от даты в новое категорическое значение (Mon; 06.19.2017) может предоставить алгоритму более подходящую информацию.
8. Объединение данных транзакций и атрибутов
Данные транзакций состоят из событий, фиксирующих определённые моменты, например, какой была цена на ботинки, и время, когда пользователь с этим IP нажал на кнопку Buy now.
Данные атрибутов более статичны, например, это демография или возраст пользователей, они не имеют прямой связи с конкретными событиями.
Возможно, у вас есть множество источников данных или логов, где хранятся эти типы данных. Оба типа могут усиливать друг друга, повышая точность прогнозов. Например, если вы отслеживаете показания датчика станка, чтобы обеспечить прогнозируемое техобслуживание, то с большой вероятностью вы генерируете логи данных транзакций, но можно добавить в них и такие качества, как модель оборудования, партия и его местоположение, чтобы поискать зависимости между поведением оборудования и его атрибутами.
Также можно агрегировать данные транзакций в атрибуты. Допустим, вы собираете логи сессий работы с веб-сайтом, чтобы назначать разным пользователям разные атрибуты, например, исследователь (в среднем посещает 30 страниц, редко покупает), читатель обзоров (от начала до конца изучает страницу обзоров), мгновенный покупатель и так далее; тогда вы можете использовать эти данные, например, для оптимизации кампаний ретаргетинга или прогнозирования жизненного цикла клиента.
9. Ремасштабируйте данные
Ремасштабирование данных относится к группе процедур нормализации данных, нацеленных на улучшение качества массива данных уменьшением размерностей и устранением ситуаций, когда одно из значений перевешивает другие. Что это значит?
Представьте, что вы управляете сетью центров по продаже автомобилей и большинство атрибутов в вашем массиве данных является или категорическим (описание моделей и типов кузовов — седан, хэтчбек, вэн и так далее), или содержат числа из 1-2 разрядов, допустим, длительность пользования автомобилем в годах. Однако цены состоят из 4-5 разрядов ($10000 или $8000), а вам нужно спрогнозировать среднее время продажи автомобиля в зависимости от его характеристик (модель, сколько лет им пользовались, тип кузова, цена, состояние и так далее). Хотя цена является важным критерием, она не должна перевешивать все остальные из-за того, что имеет большее значение.
В данном случае можно использовать нормализацию (min-max normalization). При нормализации числовые значения преобразуются в интервалы, например, от 0.0 до 1.0, где 0.0 обозначают минимальные, а 1.0 — максимальные значения для выравнивания веса атрибута цены с другими атрибутами в массиве данных.
Немного более простым подходом является десятичное масштабирование. При нём данные масштабируются перемещением запятой в десятичной дроби с теми же целями.
10. Дискретизация данных
Иногда можно повысить эффективность прогнозов, превратив числовые значения в категорические. Этого можно достичь, например, разделив весь интервал значений на несколько групп.
При отслеживании значений возраста нет особой разницы между 13 и 14 годами или между 26 и 27 годами. Следовательно, их можно преобразовать в соответствующие возрастные группы. Превратив значения в категорические, вы упрощаете работу алгоритма и делаете прогнозы более релевантными.
Публичные массивы данных
Ваши частные массивы данных отражают специфику вашего уникального бизнеса и потенциально могут содержать все релевантные атрибуты, которые потребуются для прогнозов. Но когда же можно использовать публичные массивы данных?
Публичные массивы данных берутся у организаций и бизнесов, которые готовы ими делиться. Эти массивы обычно содержат информацию об общих процессах в широком диапазоне сфер жизни, например, медицинские данные, исторические климатические данные, метрики транспортирования, коллекции текстов и переводов, записи об использовании оборудования и так далее. Хотя они не помогают выявлять зависимости между данными в вашем собственном бизнесе, их можно использовать для глубокого понимания вашей отрасли и её ниш, а иногда и сегментов клиентов.
Подробнее об открытых источника данных можно прочитать в нашей статье про лучшие публичные массивы данных и ресурсы, хранящие эти данные.
Ещё один способ применения публичных массивов данных — в стартапах и бизнесах, использующих техники машинного обучения для выпуска продуктов на основе ML. Если вы получаете рекомендации о достопримечательностях города и ресторанах на основании генерируемого пользователями контента, то вам не нужно размечать тысячи изображений для обучения алгоритма распознавания изображений, сортирующего присылаемые пользователями фотографии. Существует созданный Google массив данных Open Images. Похожие массивы данных существуют для распознавания речи и текста. Также на GitHub можно найти коллекцию публичных массивов данных. Часть публичных массивов является коммерческой и распространяется платно.
Поэтому даже если вы собирали данные в течение многих лет, стоит поискать что-то ещё. Возможно, существуют массивы, которые вы можете использовать без подготовки.
Заключение: вам всё равно нужен дата-саентист
Описанные в статье способы подготовки данных просты и понятны. Однако вам всё равно нужно найти дата-саентистов и дата-инженеров, если требуется автоматизация механизмов сбора данных, создание инфраструктуры и масштабирование до сложных задач машинного обучения.
Смысл в том, что глубокое понимание сферы деятельности и задач поможет в правильном структурировании значений ваших данных. Если вы находитесь на этапе сбора данных, возможно, будет разумно пересмотреть существующие подходы к получению и форматированию информации.