Осмысление больших данных

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

Как мы построили и повторили модель машинного обучения для выявления случаев незаконной торговли оружием из России.

Автор: Эллиот Ганн

Команда специалистов по анализу данных: Шон Антосяк, Эллиот Ганн, Эндрю Микол, Джейсон Нова

Руководитель проекта: Элан Ризнис

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

Россия - второй по величине экспортер оружия в мире. Огромный объем имеющихся данных о торговле представляет собой проблему и возможность для исследователей и правительственных агентств в области нераспространения оружия. Недавно наша команда специалистов по данным работала с C4ADS, некоммерческой организацией в Вашингтоне, округ Колумбия, чтобы выяснить, можем ли мы применить методы машинного обучения к очень большому набору торговых данных, который у них был, и найти примеры потенциального распространения российского оружия.

Перед нами стояла двоякая задача: можно ли было бы применить ML-решение в этом случае, и если да, то как бы мы структурировали наш подход? В ходе нашего исследования мы обнаружили только один проект, в котором пытались применить методы машинного обучения к аналогичному варианту использования. Проект Альфа в Королевском колледже Лондона работает над созданием платформы больших данных для аналитиков по вопросам нераспространения.

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

Работа в Amazon Web Services (AWS)
Это было первое знакомство нашей команды с AWS, поэтому время обучения было довольно крутым. Мы узнали о файлах паркета и о том, как работает информация о схеме. Мы потратили неделю на изучение различных вариантов, в том числе некоторое время, проведенное в AWS Glue, где нам не удалось написать сценарии жизненного цикла.

В конце концов мы остановились на EMR (Spark & ​​Livy) в сочетании с SageMaker, поскольку он идеально подходил для нашего случая использования. Мы выбрали эти два из-за их простоты использования в совместной рабочей среде и возможности использовать несколько кластеров для обработки нашего большого набора данных. Процесс настройки был существенным и требовал некоторых из того, что можно было бы назвать набором навыков системного администратора. Короче говоря, мы создали кластер в сервисе EMR перед настройкой записной книжки SageMaker. Мы использовали записную книжку в корневом каталоге записной книжки SageMaker в качестве центрального места для установки соответствующих библиотек для среды conda_python3.

Образцы наборов данных были исследованы с помощью Dask (паркетные файлы), а затем очищены с помощью Spark.

Анализ и очистка данных
Набор данных «trade» был больше 170 ГБ и содержал более 65 миллионов строк данных об импорте и экспорте из России за 2016–2018 годы. Сюда входили 59 компаний, помеченных как наша целевая переменная для крупного российского экспортера оружия, и стороны, которые, как известно, переправляли партии от его имени.

Было несколько серьезных препятствий при чтении наборов данных, поскольку они не поставлялись со словарями данных; некоторые столбцы были загадками. Ключевой столбец Description Good был на кириллице - хотя нам посчастливилось иметь двух членов команды со способностями к кириллице, этот столбец должен быть переведен, чтобы учесть функции, производные от NLP, в будущих итерациях построения модели. Компании включили имена и уникальные идентификаторы в виде своего идентификационного номера налогоплательщика (ИНН).

Мы отфильтровали только экспортеров и активно использовали регулярное выражение для очистки `trade` в PySpark. Чтобы обработчик регулярных выражений обработал, нам пришлось преобразовать часть русского языка (Русский язык) в его эквивалент в Юникоде. Мы либо брали точные слова, которые нам были нужны (например, ПАО, ООО, ОО), либо нам приходилось выбирать варианты слова для сопоставления (например, ТАМОЖНИ, ПОСТ среди других), чтобы обеспечить наиболее элементарный стандарт чистоты для этих столбцов. Мы также думали о применении регулярного выражения к описанию Good, но попытка разобраться в тонкостях спряжения глагола / существительного / прилагательного в русском языке оказалась настоящим подвигом.

Это сократило набор торговых данных с 170+ ГБ до менее 4 ГБ, или около 9 миллионов строк. Хотя мы были обеспокоены тем, что это было слишком большим сокращением, было трудно гарантировать, что наше регулярное выражение не было слишком строгим или мягким при очистке данных. Это сокращение позволило нам использовать Pandas для машинного обучения вместо того, чтобы изучать другой новый инструмент, MLlib от Apache Spark. Пример фрагмента кода процесса очистки, в результате которого были получены два фрейма данных:

Разработка функций
Мы в основном использовали udf для применения лямбда-функций, чтобы разрешить только указанные значения (например, нули и нули должны быть установлены как 0,0 для столбцов с плавающей запятой). В качестве первого прохода по данным мы вручную ввели все методы и параметры, но в будущих итерациях будет более понятным более программный подход.

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

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

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

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

Прототипирование и обучение
Мы одновременно использовали методы обучения как с учителем, так и без него.

Под контролем
Используя список из 59 экспортеров в качестве целевой переменной, мы попробовали несколько классификаторов, прежде чем остановились на scikit-learn GradientBoostingClassifier. GBC позволяет нам построить прогностическую функцию с низким смещением и более низкой дисперсией по сравнению с глубоким деревом решений. Повышение соответствует деревьям последовательно на каждом шаге, при этом новые деревья обучаются остаточным ошибкам в предыдущих деревьях. GBC решает проблему переобучения, используя скорость обучения (от 0,1) для масштабирования вкладов нового дерева на каждом этапе.

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

Наши начальные итерации в значительной степени полагались на одну функцию, поэтому мы удалили ее и переобучили модель. Чтобы обратиться к сильно несбалансированным классам, мы обучились на подмножестве набора данных, где мы отобрали 25 000 и 250 000 известных и неэкспортеров соответственно (это соотношение 1:10 лучше всего работало для нашей модели). Наши метрики оптимизированы для отзыва, так как было лучше выявить легальную торговлю (ложные срабатывания), чем пропустить нелегальную торговлю (ложноотрицательные) из-за юридических последствий. В результате контролируемого подхода было получено 50 прогнозируемых INN, которых нет в исходном списке из 59. У нас было ощущение, что мы достигли хорошей базы после поиска INN на российском веб-сайте реестра, где многие из них имели описания, относящиеся к военным.

Без учителя
Мы использовали библиотеку Ближайшие соседи scikit-learn, которая реализует неконтролируемое обучение ближайших соседей.

В алгоритме ближайших соседей параметрами являются n_neighbors и тип используемого алгоритма. BallTree использовался для алгоритма из-за его использования «для быстрых обобщенных N-точечных задач». N_neighbors использовалось для группирования соседей в кластере. Число 10 000 было выбрано для создания набора прогнозов, который был достаточно широким, чтобы определить группировку торговых транзакций INN известного экспортера и использовать эту транзакцию для идентификации других компаний, представляющих интерес. Из 37 467 известных строк предиктора INN первые 1000 использовались для прогнозирования фрейма данных 10 000 000 соседей. Затем этот фрейм данных отфильтровал известных соседей INN, и результаты были подсчитаны, чтобы найти новые потенциальные INN. Успех этого подхода был признан неубедительным после изучения первых результатов.

Методология
В нашем подходе мы сделали несколько допущений:

  • Незаконные и законные экспортеры оружия демонстрируют схожие черты в своих торговых сделках (например, в торговых партнерах, пространстве, товарах, объеме). Нашей целевой переменной был список из 59 известных экспортеров оружия в России. Использование этого списка законных экспортеров было способом показать, как нелегальные экспортеры оружия также могут фигурировать в торговых данных. Поскольку мы на самом деле не знаем, чем нелегальные экспортеры делают иначе, чем легальные экспортеры, это могло быть большим скачком.
  • Торговые данные содержат точную и достоверную информацию. Более вероятно, что незаконные экспортеры оружия скрывают свои маршруты, пункты назначения, объемы товаров или даже то, что на самом деле представляет собой товар. Хорошо известным примером является российский торговец оружием Виктор Бут, который использовал многочисленные подставные компании, перевозил оружие на самолетах и ​​перерегистрировал воздушные суда, пытаясь уйти от контроля, используя сочетание законных и незаконных средств. Другие экспортеры могут использовать обходные маршруты по пути к своему истинному пункту назначения, перемещая товары между подставными компаниями, и эти страны или компании транзита не будут отражены в данных.

Извлеченные уроки и перспективы на будущее

У нас было 8 недель, чтобы изучить новые инструменты и составить доказательство концепции для заинтересованных сторон проекта в C4ADS. Мы были рады услышать, что наши базовые результаты были эффективным MVP для дальнейшего изучения и положительно восприняты заинтересованными сторонами.

  • Во-первых, жизненно важна документация: другие команды ранее сотрудничали с ними по этой задаче, но без какой-либо документации (особенно в отношении настройки архитектуры) мы потратили значительное количество времени, пробуя разные настройки, прежде чем настраивать ту, которая лучше всего подходит для проекта. уникальные потребности. С этой целью мы старались документировать как можно раньше и часто, и передали очень подробную 22-страничную документацию для воспроизводимости и для того, чтобы следующая группа могла быстрее наращивать объемы работы.
  • Во-вторых, управление проектами держало нас в курсе: мы все время работали удаленной командой и смогли так быстро перейти от 0 до многообещающего базового результата, поскольку у нас был замечательный менеджер проекта (спасибо Элан!), Который работал с нами в тесном сотрудничестве. во всех часовых поясах. У нас были ежедневные стендапы, регулярные презентации релизов, оценка основных этапов и регулярные видеозвонки с заинтересованными сторонами, чтобы лучше понять бизнес-проблемы и ожидания.
  • В результате мы проводили итерации рано и часто: с такой четкой структурой работы и ориентацией нашего менеджера проекта на предоставление MVP к 12-й неделе, нас поощряли пробовать что-то на раннем этапе, отбрасывая инструменты или рабочие процессы, которые быстро оказывались бесплодными. . Нам не удалось добиться настройки гиперпараметров или NLP для ключевых столбцов кириллицы за короткий промежуток времени, но мы рады, что наша документация и базовые результаты позволят следующей команде расширить возможности машинного обучения в этой области. .

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