Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Cómo detener el fraude con Neo4j

45 views

Published on

Speaker: Max de Marzi

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Cómo detener el fraude con Neo4j

  1. 1. Detenga el fraude complejo con Neo4j
  2. 2. github.com/maxdemarzi Cerca de 200 repositorios públicos Max De Marzi Neo4j Ingeniero de Campo Sobre Mi ! 01 02 03 04 maxdemarzi.com @maxdemarzi 160 entradas de blog
  3. 3. ¿Quiénes son los estafadores de hoy?
  4. 4. Organizado en grupos Identidades Sintéticas Identidades Robadas Sesiones secuestradas ¿Quiénes son los estafadores de hoy?
  5. 5. Tipos de fraude • Fraude de Tarjeta de Credito • Fraude de Comerciantes • Anillos de Fraude • Fraude de Seguro • Fraude de Comercio Electrónico • Fraude que aún no conocemos…
  6. 6. “No considere la tecnología tradicional adecuada para mantenerse al día con las tendencias criminales.” Market Guide for Online Fraud Detection, April 27, 2015
  7. 7. Detección de Fraude
  8. 8. Análisis del comportamiento de navegación y patrones sospechosos. Centrado en el Dispositivo Análisis de los usuarios y sus dispositivos 1. Centrado en la Navegación 2. Centric en la Identidad Análisis del comportamiento de anomalías por canal. 3. Computadora, Teléfonos Móviles Direcciones IP y ID del Usuario Transacción Comparativa Verificación de Identidad Métodos Tradicionales de 
 Detección de Fraude
  9. 9. Incapaz de detectar: • Anillos de Fraude • Direcciones IP falsas • Dispositivos secuestrados • Identidades Sintéticas • Identidades Robadas • Y más… Debilidades ANÁLISIS DISCRETO Métodos Tradicionales de 
 Detección de Fraude Centrado en el Dispositivo Análisis de los usuarios y sus dispositivos 1. Centrado en la Navegación Análisis del comportamiento de navegación y patrones sospechosos. 2. Centric en la Identidad Análisis del comportamiento de anomalías por canal. 3.
  10. 10. ANÁLISIS CONECTADOANÁLISIS DISCRETO Entre Canales Análisis del comportamiento de anomalías correlacionado entre canales. 4. Enlace de Entidades Análisis de las relaciones para detectar el crimen organizado y la colusión. 5. Detección de Fraude Aumentada Centrado en el Dispositivo Análisis de los usuarios y sus dispositivos 1. Centrado en la Navegación Análisis del comportamiento de navegación y patrones sospechosos. 2. Centric en la Identidad Análisis del comportamiento de anomalías por canal. 3.
  11. 11. INVESTIGAR Deuda Rotatoria Numero de Cuentas INVESTIGAR Comportamiento Normal Detección de Fraude con 
 Análisis Discreto
  12. 12. Deuda Rotatoria Numero de Cuentas Comportamiento Normal Patrón Fraudulento Detección de fraude con 
 Análisis Conectado
  13. 13. Detección de fraude con Graphos
  14. 14. Patrones de Subgrapho Ni: numero de vecinos de un nodo Ei: numero de relaciones en un subgrapho Wi: “peso” total the una subgrapho λw,i: mayor variabilidad de los "pesos" de un subgrafo
  15. 15. Power Law Densidad slope=2 slope=1 slope=1.35 proporción de relaciones a nodos
  16. 16. Power Law Peso proporción de “peso” a las relaciones
  17. 17. Power Law Variabilidad de Peso proporción de variabilidad a el “peso”
  18. 18. •Influencia •Poder •Posición Social •Control •Independencia •Información ¿Qué nodos son importantes? Famoso en el Grapho
  19. 19. •PageRank •ArticleRank •Betweenness Centrality •Closeness Centrality •Eigenvector Centrality •Degree Centrality •Harmonic Centrality Centralidad
  20. 20. Agregue funciones gráficas a sus modelos de detección de fraude existentes Account ID Community Size Degree PageRank 1 31 15 10.7 3 4 12 3.4 5 98 9 11.2 •Influencia •Relaciones •Comunidades
  21. 21. Anillos de Fraude
  22. 22. Vamos a crear algunos usuarios CREATE (john:User {name:"John"})
 CREATE (sheila:User {name:"Sheila"})
 CREATE (karen:User {name:"Karen"})
  23. 23. Sheila Modelando un anillo de fraude como un gráfico John Karen
  24. 24. John tiene algunas cuentas CREATE (cc1:Card {number:"4012888888881881", balance: 493.23}) CREATE (ba1:Account {number:"85474584", balance:1322.30, type:”Checking"}) CREATE (us1:Loan {number:"63493639", balance:5000.00, type:"Loan”}) CREATE (john)-[:HAS_ACCOUNT]->(cc1) CREATE (john)-[:HAS_ACCOUNT]->(ba1) CREATE (john)-[:HAS_ACCOUNT]->(us1)
  25. 25. Sheila también tiene un número de identificación CREATE (ba2:Account {number:"25384738", balance:2983.99, type:"Checking"}) CREATE (cc2:Card {number:"5105105105105100", balance: 893.11}) CREATE (ssn2:Identification {number:"000-42-4329", type:”SSN"}) CREATE (sheila)-[:HAS_ACCOUNT]->(ba2) CREATE (sheila)-[:HAS_ACCOUNT]->(cc2) CREATE (sheila)-[:HAS_ID]->(ssn2)
  26. 26. Karen tiene un número de teléfono CREATE (ba3:Account {number:"63493639", balance:3204.83, type:"Checking"}) CREATE (us2:Loan {number:"28372342", balance:5000.00, type:"Loan"}) CREATE (phone2:Phone {number:”312-606-0842"}) CREATE (karen)-[:HAS_ACCOUNT]->(ba3) CREATE (karen)-[:HAS_ACCOUNT]->(us2) CREATE (karen)-[:HAS_PHONE]->(phone2)
  27. 27. Sheila John Karen TARJETA DE CRÉDITO CUENTA DE CHEQUES CUENTA DE CHEQUES NÚMERO DE TELÉFONO PRESTAMO NO ASEGURADO SSN 2 PRESTAMO NO ASEGURADO Nada sospechoso todavía TARJETA DE CRÉDITO CUENTA DE CHEQUES
  28. 28. John y Sheila están compartiendo un número de teléfono CREATE (phone1:Phone {number:"312-876-5309"}) CREATE (john)-[:HAS_PHONE]->(phone1) CREATE (sheila)-[:HAS_PHONE]->(phone1)
  29. 29. John y Karen comparten un número de identificación CREATE (ssn1:Identification {number:"000-91-7434", type:"SSN"}) CREATE (john)-[:HAS_ID]->(ssn1) CREATE (karen)-[:HAS_ID]->(ssn1)
  30. 30. Todos comparten la misma dirección CREATE (ad:Address {line1:"175 N. Harbor Drive", city:"Chicago", state:"IL", zip:”60601"}) CREATE (john)-[:HAS_ADDRESS]->(ad) CREATE (karen)-[:HAS_ADDRESS]->(ad) CREATE (sheila)-[:HAS_ADDRESS]->(ad)
  31. 31. Sheila John Karen TARJETA DE CRÉDITO CUENTA DE CHEQUES CUENTA DE CHEQUES NÚMERO DE TELÉFONO PRESTAMO NO ASEGURADO SSN 2 PRESTAMO NO ASEGURADO Comenzando a conectar los puntos ... TARJETA DE CRÉDITO CUENTA DE CHEQUES DIRECCION NÚMERO DE TELÉFONO SSN 1
  32. 32. Agreguemos a Robert CREATE (robert:User {name:"Robert"}) CREATE (ba4:Account {number:"8374927", balance:1273.39, type:"Checking"}) CREATE (cc3:Card {number:"378282246310005", balance: 134.72}) CREATE (robert)-[:HAS_ACCOUNT]->(ba4) CREATE (robert)-[:HAS_ACCOUNT]->(cc3)
  33. 33. • Triangle Count • Clustering Coefficients • Connected Components (Union Find) • Strongly Connected Components • Label Propagation • Louvain Modularity • Balanced Triad (identification) Community Detection • Degree Centrality • Closeness Centrality • CC Variations: Harmonic, Dangalchev, Wasserman & Faust • Betweenness Centrality • Approximate Betweenness Centrality • PageRank • Personalized PageRank • ArticleRank • Eigenvector Centrality • Euclidean Distance • Cosine Similarity • Jaccard Similarity • Overlap Similarity • Pearson Similarity Centrality / Importance Similarity Link Prediction • Adamic Adar • Common Neighbors • Preferential Attachment • Resource Allocations • Same Community • Total Neighbors Algoritmos Gráficos
  34. 34. Algoritmo de grafico Union Find Encuentra conjuntos donde todos los nodos pueden llegar a todos los demás nodos •Detección de fraude •Deduplicación •Resolución de la entidad Consulte la publicación del blog “The Real Property Graph”
  35. 35. Algoritmo de grafico Union Find CALL algo.unionFind.stream(   'MATCH (p:User) RETURN id(p) as id',   'MATCH (p1:User)-->()<--(p2:User)    RETURN id(p1) as source, id(p2) as target',   {graph:'cypher'} ) YIELD nodeId, setId RETURN algo.asNode(nodeId).name AS user, setId
  36. 36. Algoritmo de grafico Union Find
  37. 37. Componentes Conectados Conjunto 3 Conjunto 0
  38. 38. Sheila John Karen TARJETA DE CRÉDITO CUENTA DE CHEQUES CUENTA DE CHEQUES NÚMERO DE TELÉFONO PRESTAMO NO ASEGURADO SSN 2 PRESTAMO NO ASEGURADO Supongamos que no son tan estúpidos TARJETA DE CRÉDITO CUENTA DE CHEQUES
  39. 39. Llamaron desde el mismo número MATCH (john:User {name:"John"}), (sheila:User {name:"Sheila"}) CREATE (ani:ANI {number:"312-666-1234"}) CREATE (ani)-[:CALLED]->(john) CREATE (ani)-[:CALLED]->(sheila)
  40. 40. Ingresaron usando el mismo navegador en su computadora MATCH (john:User {name:”John"}), (robert:User {name:”Robert"}) CREATE (fg:Browser {fingerprint:”asdf7373jsdf3rw"}) CREATE (fg)-[:ACCESSED]->(john) CREATE (fg)-[:ACCESSED]->(robert)
  41. 41. Sheila John Robert TARJETA DE CRÉDITO CUENTA DE CHEQUES CUENTA DE CHEQUES NÚMERO DE TELÉFONO PRESTAMO NO ASEGURADO SSN 2 PRESTAMO NO ASEGURADO Conectados por sus "conexiones" TARJETA DE CRÉDITO CUENTA DE CHEQUES BROWSER ANI NUMBER
  42. 42. Algoritmo de grafico Union Find otra vez CALL algo.unionFind.stream(   'MATCH (p:User) RETURN id(p) as id',   'MATCH (p1:User)<-[:ACCESSED]-()-[:ACCESSED]->(p2:User)    RETURN id(p1) as source, id(p2) as target',   {graph:'cypher'} ) YIELD nodeId, setId RETURN algo.asNode(nodeId).name AS user, setId
  43. 43. Algoritmo de grafico Union Find
  44. 44. Componentes Conectados Conjunto 0 Conjunto 2
  45. 45. Almacene los resultados de Union Find CALL algo.unionFind(   'MATCH (p:User) RETURN id(p) as id',   'MATCH (p1:User)--()--(p2:User)    RETURN id(p1) as source, id(p2) as target',   {graph:'cypher'} ) YIELD setCount
  46. 46. Veamos estas particiones MATCH (n:User) RETURN n.partition, COUNT(*) AS members, COLLECT(n.name) AS names ORDER BY members DESC
  47. 47. Nuestros estafadores están todos conectados
  48. 48. Nuestros estafadores están todos conectados
  49. 49. Fraude de Tarjeta de Credito
  50. 50. De un Cajero Automático Violaciones de Datos Sofisticadas Robo de información de Tarjeta de Crédito Comerciante Fraudulento
  51. 51. UTILIZA EMITE Terminal ATM Violacíon de Datos Titular de la tarjeta Banco Estafador UTILIZA $5HACE $1 HACE $2 HACE HACE $4000 CON Pruebas Comerciantes CON HACE Tx
  52. 52. Transacciones con tarjeta de crédito como un gráfico CREATE (john:User {name:"John"}) CREATE (m1:Merchant {name:"Computer Store"}) CREATE (m2:Merchant {name:"Gas Station"}) CREATE (m3:Merchant {name:"Jewelry Store"}) CREATE (m4:Merchant {name:"Furniture Store"}) CREATE (tx1:Transaction:Fraudulent {amount: 2000.00, date:datetime()}) CREATE (tx2:Transaction {amount: 35.00, date:datetime() - duration('P1D')}) CREATE (tx3:Transaction {amount: 25.00, date:datetime() - duration('P2D')}) CREATE (tx4:Transaction {amount: 12.00, date:datetime() - duration('P3D')}) CREATE (tx1)-[:AT_MERCHANT]->(m1) CREATE (tx2)-[:AT_MERCHANT]->(m2) CREATE (tx3)-[:AT_MERCHANT]->(m3) CREATE (tx4)-[:AT_MERCHANT]->(m4)
  53. 53. CREATE (john)-[:MAKES]->(tx1) CREATE (john)-[:MAKES]->(tx2) CREATE (john)-[:MAKES]->(tx3) CREATE (john)-[:MAKES]->(tx4) Transacciones con tarjeta de crédito como un gráfico
  54. 54. // The last week of John's transactions MATCH p = (n:User {name:"John"})-[:MAKES]->(tx) WHERE tx.date > datetime() - duration('P7D') RETURN p Transacciones de John la semana pasada
  55. 55. Transacciones de John la semana pasada
  56. 56. Transacciones con tarjeta de crédito como una lista MATCH (u:User) WHERE SIZE((u)-[:PREV_TX]->()) = 0 AND SIZE((u)-[:MAKES]->()) > 0 WITH u LIMIT 100 MATCH (u)-[r:MAKES]->(tx) WITH u, tx ORDER BY tx.date DESC WITH u, COLLECT(tx) AS transactions, HEAD(COLLECT(tx)) AS last CREATE (u)-[:PREV_TX]->(last) FOREACH (n IN RANGE(0, SIZE(transactions)-2) | FOREACH (next IN [transactions[n]] | FOREACH (prev IN [transactions[n+1]] | CREATE (next)-[:PREV_TX]->(prev) )))
  57. 57. // The last week of John's transactions MATCH p = (n:User {name:"John"})-[:PREV_TX*]->(tx) WHERE NONE (tx IN tail(nodes(p))           WHERE tx.date <= datetime() - duration('P7D')) RETURN p Transacciones de John la semana pasada
  58. 58. Transacciones de John la semana pasada
  59. 59. TxTx Tx TxTx Tx Tx TxTxTx TxJuan
  60. 60. Tx $20000 TxTx Tx Tx TxTxTxTx Tx Tx Tienda Computad Juan
  61. 61. Tx $20000 Tx Tx $250$100$40 TxTx Tx Tx TxTxTx Tienda de Computadoras Juan
  62. 62. Siguiendo los pasos en la arena // All the transactions marked fraudulent in the last week // and the transactions that came before them // up to two weeks ago. MATCH p = (fraud:Fraudulent)-[:PREV_TX*]->(tx) WHERE fraud.date > datetime() - duration('P7D')   AND NONE (tx IN tail(nodes(p)) WHERE tx.date <= datetime() - duration('P14D')) RETURN p
  63. 63. Siguiendo los pasos en la arena
  64. 64. Tx Tx $20000 Tx Tx $250$100$40 TxTx Tx Tx TxTxTx Tienda de Computadoras Juan Maria $20 TxTx TxTxTx Tx Tx TxTx $30000 Tx Joyería Tx $30
  65. 65. Tx Tx $20000 Tx Tx $250$100$40 TxTx Tx Tx TxTxTx Tienda de Computadoras Juan Maria $20 TxTx TxTxTx Tx Tx TxTx $30000 Tx Joyería Tx $30 Roberto TxTxTx Tx TxTx TxTxTx Tx Tx
  66. 66. TxTx $20 TxTx Tx $20000 Tx Tx $250$100$40 TxTx Tx Tx TxTxTx Tienda de Computadoras Juan María Roberto $30 Sofía TxTxTx Tx Tx TxTx $30000 Tx Joyería Tx $30 TxTxTx Tx Tx TxTx TxTx TxTx TxTx Tx Tx TxTx $80 $120 Tx $50000 Tienda de Muebles Tx Tx Tx
  67. 67. Encuentra a los comerciantes sospechosos // Top 5 common merchants from fraudulent transaction chains up to two weeks ago. MATCH p = (fraud:Fraudulent)-[:PREV_TX*]->(tx) WHERE fraud.date > datetime() - duration('P7D')   AND NONE (tx IN tail(nodes(p))             WHERE tx.date <= datetime() - duration('P14D')) WITH nodes(p) AS transactions UNWIND transactions AS tx WITH DISTINCT tx MATCH (tx)-[:AT_MERCHANT]->(merchant) RETURN merchant.name, COUNT(*) AS txCount ORDER BY txCount DESC LIMIT 5
  68. 68. Encuentra a los comerciantes sospechosos
  69. 69. TxTx $20 TxTx Tx $20000 Tx Tx $250$100$40 TxTx Tx Tx TxTxTx Tienda de Computadoras Juan Gasolinera María Roberto $30 Sofía TxTxTx Tx Tx TxTx $30000 Tx Joyería Tx $30 TxTxTx Tx Tx TxTx TxTx TxTx TxTx Tx Tx TxTx $80 $120 Tx $50000 Tienda de Muebles Tx Tx Tx
  70. 70. Cómo Neo4j encaja en su Arquitectura
  71. 71. Transferencia de Dinero Compras Servicios Bancarios Base de Datos Relacional Desarrollar Patrones Equipo de Ciencia de Datos + Bueno para análisis discreto – Sin visión holística de las relaciones de datos – Velocidad de consulta lenta para conexiones
  72. 72. Transferencia de Dinero Compras Servicios Bancarios Base de Datos Relacional Lago de Datos + Bueno para “Map Reduce” + Bueno para cargas de trabajo analíticas – Sin visión holística – Cargas de trabajo no operacionales – Procesos de semanas a meses Desarrollar Patrones Equipo de Ciencia de Datos Datos del comerciante Datos de Crédito Otra Información
  73. 73. Transferencia de Dinero Compras Servicios Bancarios Tiempo Real Neo4j Cluster DETECTAR Flujo de Transacciones RESPONDER Alertas y Notificaciones CARGAR DATOS RELEVANTES Base de Datos Relacional Lago de Datos Visualización Patrones de Ajuste Fino Desarrollar Patrones Equipo de Ciencia de Datos Datos del comerciante Datos de Crédito Otra Información
  74. 74. Transferencia de Dinero Compras Servicios Bancarios Tiempo Real Neo4j Cluster DETECTAR Flujo de Transacciones RESPONDER Alertas y Notificaciones CARGAR DATOS RELEVANTES Base de Datos Relacional Lago de Datos Visualización Patrones de Ajuste Fino Desarrollar Patrones Equipo de Ciencia de Datos Datos del comerciante Datos de Crédito Otra Información Conjunto de datos utilizado para explorar nuevas ideas
  75. 75. El Sumario
  76. 76. Nosotros hablamos acerca de… Los Estafadores de Hoy Ejemplos: Anillos de fraude Prueba de Tarjeta de Crédito Origen del Fraude Cómo Neo4j encaja en una Arquitectura
  77. 77. Detectar y prevenir fraudes en tiempo real Análisis y transacciones de riesgo crediticio más rápidos Reduce las devoluciones de cargo Adaptarse rápidamente a nuevos métodos de fraude ¿Por qué Neo4j? ¿Quién lo está usando? Las Instituciones Financieras usan Neo4j para: FINANCE Empresas de Tarjetas de Crédito Comerciantes
  78. 78. No realmente, ¿por qué Neo4j?
  79. 79. Registros de tamaño fijo en dos formaciones “Uniones” desde la creación A través de esta estructura de datos Acceso directo en lugar de búsquedas1 2 3 4 La Receta Secreta de Neo4j Saltamos de la colección de nodos a la colección de relaciones y otra vez a nodos
  80. 80. Particiones Las relaciones de cada nodo están divididas por tipo y dirección.
  81. 81. ¡Recursos Valiosos! neo4jsandbox.com https://neo4j.com/use-cases/fraud-detection/ neo4j.com/product Sandbox Detección de Fraude Producto
  82. 82. Preguntas y Respuestas

×