В этой главе мы познакомим вас с примером применения методов анализа графовых данных (GDS) для расследования и прогнозирования финансового мошенничества. После ознакомления с образцом финансового

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

Как найти хороший набор данных о мошенничестве

Чтобы смоделировать хороший набор данных о мошенничестве, вы хотите создать реалистичные синтетические данные для описания мошеннических транзакций, поэтому в этом разделе мы даем вам модель финансовой сети, в которой пользователи совершают транзакции с продавцами и друг с другом через мобильные устройства. Это похоже на традиционные сети кредитных карт, более распространенные в США, Канаде и Европе. На рис. 5–1 показан пример графа, в котором используется подмножество доступных узлов и отношений из данных, которые мы модифицировали с помощью дополнительных идентификаторов.

В этом примере используются следующие метки узлов:

» Клиенты: люди, у которых есть личная информация (PII), такая как номера социального страхования (SSN), номера телефонов и адреса электронной почты.

» Мулы: клиенты, о которых известно, что они мошенническим путем переводили деньги

» Персональные данные клиентов:

  • SSN
  • Телефон: Номера телефонов
  • Электронная почта: Адреса электронной почты

Эти узлы связаны следующими типами отношений:

»(Клиент)-[:HAS_PHONE]-›(Телефон)

»(Клиент)-[:HAS_SSN]-›(SSN)

»(Клиент)-[:HAS_EMAIL]-›(Электронная почта)

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

Удаление выбросов

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

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

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

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

ВЫЗОВ gds.alpha.grade.stream({

nodeQuery:’MATCH (n) WHERE n:Phone OR n:Email OR n:SSN RETURN id(n) as id’,

Запрос отношения: 'ПОИСКПОЗ (n1)‹-[:HAS_PHONE|HAS_EMAIL|HAS_SSN]-(c:Клиент),

(n2)‹-[:HAS_PHONE|HAS_EMAIL|HAS_SSN]-›© ВОЗВРАТИТЬ id(n1) в качестве источника,

id(n2) в качестве цели’ })

YIELD nodeId, оценка
С gds.util.asNode(nodeId) AS node, nodeId,

score
RETURN labels(node) as label, nodeId, score, node.

электронная почта, node.phoneNumber, node.ssn ORDER BY score DESC
LIMIT 10

Когда вы выполняете этот запрос, вы получаете много подключений к поддельным идентификаторам. Результат показан на рис. 5–2. См. приложение для полнофункционального просмотра этой фигуры.

Четыре больших выброса представляют высокие баллы (столбец три) за количество соединений. Эти выбросы представляют собой узлы с поддельными учетными записями электронной почты, SSN и телефонными номерами.

Исключите эти поддельные узлы результатов из своего анализа, потому что, скорее всего, эти люди предпочли не заполнять форму точно, а не представлять мошенническую деятельность. Если не исключить, вы обнаружите много ложных срабатываний, основанных на том, что люди делятся распространенной фальшивой информацией-заполнителем, такой как электронное письмо «[email protected]».

Затем обновите метки на этих узлах, чтобы их было легче исключить из будущего анализа. Следующие запросы удаляют исходные метки при добавлении новых меток «Плохо»:

MATCH (n:Email)
ГДЕ n.email=’[email protected]’ или n.email=’no@

gmail.com’
SET n:BadEmail REMOVE n:Email; MATCH (n:SSN)
WHERE n.ssn='000–00–0000'
SET n:BadSSN REMOVE n:SSN;
MATCH (n:Phone)
WHERE n.phoneNumber='000–000–0000' SET n:BadPhone REMOVE n:Phone;

Поиск подозрительных кластеров

Хотите найти настоящих мошенников? Сейчас ваше время! При мошенничестве от первого лица поддельные учетные записи создаются без намерения погашать кредиты или долги. Обычный способ найти этих мошенников — найти учетные записи, которые имеют общие идентификаторы, такие как SSN, номера телефонов и адреса электронной почты.

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

Алгоритм Weakly Connected Components — это алгоритм обнаружения сообществ, который находит наборы связанных узлов в неориентированном графе, где каждый узел достижим из любого другого узла в том же наборе.

Следующий запрос запускает слабо связанные компоненты по спроецированному графу клиентов:

CALL gds.wcc.write({
nodeQuery:’MATCH (c:Client) RETURN

id(c) как id’, requestQuery:’MATCH

(c1:Клиент)-[:HAS_PHONE|HAS_EMAIL|HAS_SSN]- ›(промежуточный)‹-[:HAS_PHONE|HAS_EMAIL|HAS_SSN]- (c2:Клиент)

ГДЕ не(промежуточный:BadSSN)
И не(промежуточный:BadEmail)
И не(промежуточный:BadPhone)
ВОЗВРАТИТЬ id(c1) в качестве источника, id(c2) в качестве цели', writeProperty :'componentId'

});

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

Этот алгоритм слабосвязанных компонентов сопоставляет клиентов, которые имеют общий адрес электронной почты, номер телефона или SSN, и присваивает метку свойству componentId для каждого клиентского узла. Узлы с одинаковыми значениями componentID считаются находящимися в одном кластере.

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

MATCH (c:Client)
WITH c.componentId AS componentId, count(*) AS

size
WITH size, count(*) AS count
RETURN CASE WHEN 1 ‹= size ‹= 2 THEN «1–2»

КОГДА 3 ‹= размер ‹= 5, ТОГДА «3–5» КОГДА 6 ‹= размер ‹= 9, ТОГДА «6–9» ИНАЧЕ «›= 10» ЗАКАНЧИВАЕТСЯ КАК размер,

сумма(число)
ORDER BY size

Результат этого запроса показывает, что большинство клиентов находятся в небольших кластерах только с 1 или 2 клиентами, как показано на рис. 5–3. См. приложение для полнофункционального просмотра этой фигуры.

Большинство клиентов находятся в кластерах из 1 или 2 клиентов, больше, чем в кластерах от 3 до 5 и от 6 до 9, а затем очень немногие являются частью кластеров из десяти или более клиентов. Вы можете ожидать увидеть это; у большинства людей нет общих личных идентификаторов, но есть девять кластеров с десятью или более клиентами, имеющими по крайней мере один идентификатор. Если вы увеличите масштаб только этих кластеров с десятью или более клиентами и изучите их подробнее, вы получите следующий запрос:

MATCH (c:Client)
WITH c.componentId AS componentId, count(*) AS

numberOfClients, соберите (c) КАК клиентов, ГДЕ numberOfClients ›= 10

WITH componentId, numberOfClients,
// Находим все идентификаторы клиентов в

кластер apoc.coll.toSet(apoc.coll.flatten(

[клиент в клиентах | [(клиент)-[:HAS_ SSN|HAS_EMAIL|HAS_PHONE]-›(id) | id]])) AS id,

клиенты
возвращают componentId, numberOfClients,

// Узнать, сколько из этих идентификаторов
являются общими

// Возвращаем только идентификаторы, совместно используемые › 1
клиентом в кластере

size([запись в [id in ids | { id: id,

sharedClients: size([(id) ← (client:Client) ГДЕ клиент в клиентах | клиент])

}] ГДЕ record.sharedClients › 1 | запись]) AS sharedIdentifiers

ЗАКАЗАТЬ ПО КОЛИЧЕСТВУ КЛИЕНТОВ DESC

Результаты этого запроса показаны на рис. 5–4. См. приложение для полнофункционального просмотра этой фигуры.

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

Визуальное изучение подозрительного кластера

Изучение кластера 106 с помощью такого инструмента, как Neo4j Bloom, который мы рассмотрим в главе 4, может помочь вам лучше понять эту группу. Вы можете визуализировать отношения между клиентами в этом кластере с помощью поисковой фразы Bloom. Поисковая фраза Блума — это способ, с помощью которого вы можете определить конструкцию естественного языка, которая выполняет запрос к базе данных для вас. Поисковая фраза «исследовать кластер 106» находит отношения на рис. 5-5 между клиентами в кластере 106.

Узлы со значками подковы представляют мулов, узлы со значками людей — клиенты, узлы со значками почты — адреса электронной почты, а остальные — SSN.

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

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

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

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

Запустите этот алгоритм, выполнив следующий запрос:

ВЫЗОВ gds.betweenness.write({ nodeQuery: 'MATCH (c:Client) WHERE

c.componentId=106 ВОЗВРАТИТЬ id(c) как id’, ratioQuery: ‘MATCH

(c1:Клиент)-[:HAS_PHONE|HAS_EMAIL|HAS_SSN]- ›(промежуточный)‹-[:HAS_PHONE|HAS_EMAIL|HAS_SSN]- (c2:Клиент)

ГДЕ не(промежуточный:BadSSN)
И не(промежуточный:BadEmail)
И не(промежуточный:BadPhone)
ВОЗВРАТИТЬ id(c1) в качестве источника, id(c2) в качестве цели', writeProperty :'betweennessCentrality'

})

Этот запрос сохраняет показатель центральности между в свойстве BetweennessCentrality на каждом клиентском узле для этого кластера. После этого вы можете обновить правила стиля в Neo4j Bloom, чтобы просмотреть результаты на рис. 5–6.

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

Прогнозирование мошенников с помощью графических функций

В реальном наборе данных вы на самом деле не знаете, кто такие мулы, но в наборе данных, который мы используем, они идентифицированы. Эта идентификация позволяет вам проверить свой прогноз о том, что более высокая оценка центральности по промежуточности является предиктором мошенничества с использованием всего графа. Быстрая проверка вашей теории показывает, что клиенты с ярлыком мула в среднем имеют показатель центральности между 0,9685, что значительно выше, чем у не-мула, как показано на рис. 5-7. См. приложение для полнофункционального просмотра этой фигуры.

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

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

»Показатель центральности промежуточности

»Количество клиентов, совместно использующих идентификаторы

»Вес общих идентификаторов

»Количество известных мулов в ‹n› прыжках

»Размер кластеров

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

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

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

Читать далее…