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

Так в чем же смысл синтетических данных и почему это важно, если у нас уже есть доступ к реальным данным?

При разработке программного обеспечения, инженерии данных, науке о данных или машинном обучении нам часто требуется доступ к реальным данным для разработки систем. К сожалению, мы живем в мире утечек данных и проблем с конфиденциальностью, которые могут серьезно повлиять на организации, отдельных лиц и общество в целом; это делает использование синтетических данных более безопасным подходом к разработке в определенных случаях.

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

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

  1. Разработка программного обеспечения
  2. Инженерия данных
  3. Наука о данных

В этих случаях одним из основных драйверов использования синтетических данных является упрощение разработки при одновременном повышении безопасности.

Создание синтетических данных

Помня о простоте и безопасности доступа к данным, моя команда в лаборатории Capital One в исследовательском парке Университета Иллинойса в Урбане-Шампейн разработала библиотеку Python для помощи в процессе создания данных. В этой статье мы назовем его классом SyntheticDataGenerator *.

Требуется всего несколько строк кода, чтобы принять реальный образец данных и создать модель с безопасным совместным доступом, которая генерирует синтетические данные:

Сама библиотека может генерировать синтетические данные для форматов структурированных данных (CSV, TSV), полуструктурированных форматов данных (JSON, Parquet, Avro) и форматов неструктурированных данных (необработанный текст).

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

Синтетические структурированные данные

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

Первый пример, который мы рассмотрим, - использование SyntheticDataGenerator в алмазном наборе данных:

По схеме и образцу сложно различить.

Если мы пойдем дальше и начнем рассматривать статистические свойства синтетических и реальных данных, вы начнете замечать разницу; однако часто он будет незначительным. Возьмем, к примеру, распределение огранки алмаза; они очень похожи:

Часто реальные и синтетические наборы данных имеют незначительные различия между распределением данных, часто в пределах нескольких процентов от исходного распределения данных. Возможно, что более важно, взаимосвязь между различными распределениями данных, проясняемая ковариационной матрицей, также остается примерно одинаковой.

Ниже приведен пример из Висконсинского набора данных по раку, который можно использовать для задачи классификации выборки (например, для определения злокачественной или доброкачественной опухоли):

В этом случае, поскольку ковариационная матрица, распределения данных и другие аспекты данных очень похожи, модель классификации, которую мы обучили, на самом деле работает не только с обучением на синтетических данных, но и на реальных данных.

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

Синтетические полуструктурированные данные

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

Возьмем, к примеру, логи прокси. Ниже представлены реальные журналы (неструктурированные данные):

Если вы сравните их с синтетическим бревном, они выглядят почти одинаково:

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

В частично структурированном случае, таком как объекты JSON, RNN будет изучать структуру объекта JSON. Это будет даже включать распределение ключей, небольшие изменения в схеме или вложенные объекты JSON, такие как {«json»: {«embedded json»: «value»}.

Пример ниже демонстрирует такой случай:

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

Синтетические токенизированные данные

Еще один момент, который следует затронуть, - это токенизация или замена частей данных, которые необходимо защитить с помощью токена. Это поддерживает реальные отношения в данных - например, любой идентификатор, который появляется в строке данных, будет содержать один и тот же токен, позволяя каждой из строк оставаться связанной.

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

Возьмем пример ниже, где мы токенизировали поля адреса, SSN и кредитной карты в примере набора данных о закупках (примечание: набор данных был создан путем объединения этого общедоступного набора данных Kaggle со случайно сгенерированными поддельными SSN, кредитными картами, адреса и имена):

Исходный набор данных

Синтетически токенизированный набор данных

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

Преимущества синтетических данных

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

Для инженеров, аналитиков и специалистов по обработке данных, в частности, это означает, что теперь мы можем выполнять свою работу лучше и безопаснее. Обычно в течение нескольких секунд мы можем найти набор данных, загрузить модель генерации синтетических данных и начать разработку, запрашивая доступ только к реальным данным, когда и если это необходимо.

Для нас в Capital One это означает, что мы можем развиваться быстрее и безопаснее благодаря синтетическим данным.

Библиотека SyntheticDataGenerator была разработана командой Data Innovation из Университета Capital One в Иллинойсе, лаборатория Урбана-Шампейн. В первую очередь Ан Чыонг, Фардин Абди, Винсент Фам, Марк Уотсон, Джереми Гудситт и Остин Уолтерс.

Это мнение автора. Если в этом посте не указано иное, Capital One не является аффилированным лицом и не одобрен ни одной из упомянутых компаний. Все используемые или отображаемые товарные знаки и другая интеллектуальная собственность являются собственностью соответствующих владельцев. Эта статья © Capital One, 2018.