cambridge-intelligence.com
Open in
urlscan Pro
2606:4700:10::ac43:29ce
Public Scan
URL:
https://cambridge-intelligence.com/financial-fraud-detection-with-arangodb/?utm_content=188747919&utm_medium=social&utm_source=link...
Submission: On July 08 via manual from IN — Scanned from DE
Submission: On July 08 via manual from IN — Scanned from DE
Form analysis
1 forms found in the DOMPOST https://forms.hsforms.com/submissions/v3/public/submit/formsnext/multipart/5505991/fbc8242d-11b1-4c84-8266-bb23d5910298
<form novalidate="" accept-charset="UTF-8" action="https://forms.hsforms.com/submissions/v3/public/submit/formsnext/multipart/5505991/fbc8242d-11b1-4c84-8266-bb23d5910298" enctype="multipart/form-data" id="hsForm_fbc8242d-11b1-4c84-8266-bb23d5910298"
method="POST" class="hs-newsletter-form hs-form hs-form-private hsForm_fbc8242d-11b1-4c84-8266-bb23d5910298 hs-form-fbc8242d-11b1-4c84-8266-bb23d5910298 hs-form-fbc8242d-11b1-4c84-8266-bb23d5910298_98c53893-cb98-45ba-833e-8adf11bf3843"
data-form-id="fbc8242d-11b1-4c84-8266-bb23d5910298" data-portal-id="5505991" target="target_iframe_fbc8242d-11b1-4c84-8266-bb23d5910298" data-reactid=".hbspt-forms-0" data-hs-cf-bound="true">
<div class="hs_firstname hs-firstname hs-fieldtype-text field hs-form-field" data-reactid=".hbspt-forms-0.1:$0"><label id="label-firstname-fbc8242d-11b1-4c84-8266-bb23d5910298" class="" placeholder="Enter your First Name"
for="firstname-fbc8242d-11b1-4c84-8266-bb23d5910298" data-reactid=".hbspt-forms-0.1:$0.0"><span data-reactid=".hbspt-forms-0.1:$0.0.0">First Name</span><span class="hs-form-required" data-reactid=".hbspt-forms-0.1:$0.0.1">*</span></label>
<legend class="hs-field-desc" style="display:none;" data-reactid=".hbspt-forms-0.1:$0.1"></legend>
<div class="input" data-reactid=".hbspt-forms-0.1:$0.$firstname"><input id="firstname-fbc8242d-11b1-4c84-8266-bb23d5910298" class="hs-input" type="text" name="firstname" required="" value="" placeholder="First name*" autocomplete="given-name"
data-reactid=".hbspt-forms-0.1:$0.$firstname.0" inputmode="text"></div>
</div>
<div class="hs_lastname hs-lastname hs-fieldtype-text field hs-form-field" data-reactid=".hbspt-forms-0.1:$1"><label id="label-lastname-fbc8242d-11b1-4c84-8266-bb23d5910298" class="" placeholder="Enter your Last Name"
for="lastname-fbc8242d-11b1-4c84-8266-bb23d5910298" data-reactid=".hbspt-forms-0.1:$1.0"><span data-reactid=".hbspt-forms-0.1:$1.0.0">Last Name</span><span class="hs-form-required" data-reactid=".hbspt-forms-0.1:$1.0.1">*</span></label>
<legend class="hs-field-desc" style="display:none;" data-reactid=".hbspt-forms-0.1:$1.1"></legend>
<div class="input" data-reactid=".hbspt-forms-0.1:$1.$lastname"><input id="lastname-fbc8242d-11b1-4c84-8266-bb23d5910298" class="hs-input" type="text" name="lastname" required="" value="" placeholder="Last name*" autocomplete="family-name"
data-reactid=".hbspt-forms-0.1:$1.$lastname.0" inputmode="text"></div>
</div>
<div class="hs_email hs-email hs-fieldtype-text field hs-form-field" data-reactid=".hbspt-forms-0.1:$2"><label id="label-email-fbc8242d-11b1-4c84-8266-bb23d5910298" class="" placeholder="Enter your Email"
for="email-fbc8242d-11b1-4c84-8266-bb23d5910298" data-reactid=".hbspt-forms-0.1:$2.0"><span data-reactid=".hbspt-forms-0.1:$2.0.0">Email</span><span class="hs-form-required" data-reactid=".hbspt-forms-0.1:$2.0.1">*</span></label>
<legend class="hs-field-desc" style="display:none;" data-reactid=".hbspt-forms-0.1:$2.1"></legend>
<div class="input" data-reactid=".hbspt-forms-0.1:$2.$email"><input id="email-fbc8242d-11b1-4c84-8266-bb23d5910298" class="hs-input" type="email" name="email" required="" placeholder="Email*" value="" autocomplete="email"
data-reactid=".hbspt-forms-0.1:$2.$email.0" inputmode="email"></div>
</div>
<div class="hs_content_requested__c hs-content_requested__c hs-fieldtype-text field hs-form-field" style="display:none;" data-reactid=".hbspt-forms-0.1:$3"><label id="label-content_requested__c-fbc8242d-11b1-4c84-8266-bb23d5910298" class=""
placeholder="Enter your Content Requested" for="content_requested__c-fbc8242d-11b1-4c84-8266-bb23d5910298" data-reactid=".hbspt-forms-0.1:$3.0"><span data-reactid=".hbspt-forms-0.1:$3.0.0">Content Requested</span></label>
<legend class="hs-field-desc" style="display:none;" data-reactid=".hbspt-forms-0.1:$3.1"></legend>
<div class="input" data-reactid=".hbspt-forms-0.1:$3.$content_requested__c"><input name="content_requested__c" class="hs-input" type="hidden" value="Newsletter" data-reactid=".hbspt-forms-0.1:$3.$content_requested__c.0"></div>
</div>
<div class="legal-consent-container" data-reactid=".hbspt-forms-0.2">
<div class="hs-richtext" data-reactid=".hbspt-forms-0.2.2">
<p>You can unsubscribe at any time.</p>
</div>
</div>
<div class="hs_submit hs-submit" data-reactid=".hbspt-forms-0.5">
<div class="hs-field-desc" style="display:none;" data-reactid=".hbspt-forms-0.5.0"></div>
<div class="actions" data-reactid=".hbspt-forms-0.5.1"><input type="submit" value="Subscribe" class="hs-button primary large" data-reactid=".hbspt-forms-0.5.1.0"></div>
</div><noscript data-reactid=".hbspt-forms-0.6"></noscript><input name="hs_context" type="hidden"
value="{"rumScriptExecuteTime":746.5,"rumServiceResponseTime":1100.1000003814697,"rumFormRenderTime":2.3000001907348633,"rumTotalRenderTime":1103.6000003814697,"rumTotalRequestTime":336.1000003814697,"disableCookieSubmission":true,"renderRawHtml":"true","lang":"en","legalConsentOptions":"{\"legitimateInterestSubscriptionTypes\":[5974142,6712702,6407002,6503294,5974148],\"communicationConsentCheckboxes\":[{\"communicationTypeId\":5974145,\"label\":\"<p>I agree to receive marketing communications from Cambridge Intelligence.</p>\",\"required\":false}],\"legitimateInterestLegalBasis\":\"LEGITIMATE_INTEREST_PQL\",\"communicationConsentText\":\"Cambridge Intelligence is committed to protecting and respecting your privacy, and we’ll only use your personal information to administer your account and to provide the products and services you requested from us. From time to time, we would like to contact you about our products and services, as well as other content that may be of interest to you. If you consent to us contacting you for this purpose, please tick below to say how you would like us to contact you:\",\"processingConsentType\":\"IMPLICIT\",\"processingConsentText\":\"In order to provide you the content requested, we need to store and process your personal data. If you consent to us storing your personal data for this purpose, please tick the checkbox below.\",\"processingConsentCheckboxLabel\":\"I agree to allow Cambridge Intelligence to store and process my personal data.\",\"privacyPolicyText\":\"<p>You can unsubscribe at any time.</p>\",\"isLegitimateInterest\":true}","embedAtTimestamp":"1657299216684","formDefinitionUpdatedAt":"1653306725701","pageUrl":"https://cambridge-intelligence.com/financial-fraud-detection-with-arangodb/?utm_content=188747919&utm_medium=social&utm_source=linkedin&hss_channel=lcp-5289249","pageTitle":"Visualizing financial fraud detection with ArangoDB","source":"FormsNext-static-5.508","sourceName":"FormsNext","sourceVersion":"5.508","sourceVersionMajor":"5","sourceVersionMinor":"508","timestamp":1657299216684,"userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Safari/537.36","originalEmbedContext":{"portalId":"5505991","formId":"fbc8242d-11b1-4c84-8266-bb23d5910298","cssClass":"hs-newsletter-form","target":"#hs-newsletter"},"redirectUrl":"https://cambridge-intelligence.com/thank-you-newsletter/","urlParams":{"utm_content":"188747919","utm_medium":"social","utm_source":"linkedin","hss_channel":"lcp-5289249"},"renderedFieldsIds":["firstname","lastname","email"],"formTarget":"#hs-newsletter","correlationId":"27192e8b-3940-4221-ab17-963abd54b574","hutk":"740d5af63cef2d88fdfed3a8762724dd","captchaStatus":"NOT_APPLICABLE"}"
data-reactid=".hbspt-forms-0.7"><iframe name="target_iframe_fbc8242d-11b1-4c84-8266-bb23d5910298" style="display:none;" data-reactid=".hbspt-forms-0.8"></iframe>
</form>
Text Content
Cookie Control WE HAVE PLACED COOKIES ON YOUR DEVICE TO HELP MAKE THIS WEBSITE BETTER. AcceptCookie PreferencesCookie Control Close Icon * Contact us Cambridge Intelligence * Our products * KeyLines * ReGraph * KronoGraph * Use cases * About us * Resources * Downloads * Webinars * Customer success stories * Careers * Opportunities * Cambridge Intelligence Life * Blog * Request a trial * Contact Us VISUALIZING FINANCIAL FRAUD DETECTION WITH ARANGODB by Dan Williams, 23rd November 2021 This blog post explores the complex world of financial fraud detection. We look at how ArangoDB’s powerful query language, combined with our data visualization technology, creates an effective anti-fraud application. A powerful financial fraud detection app, built with ReGraph and KronoGraph, for analyzing ArangoDB data THE FINANCIAL FRAUD DETECTION CHALLENGE Detecting fraud is a difficult business, and investigating fraudulent banking transactions comes with its own complex challenges. An individual transaction might seem perfectly legitimate, but when it’s analyzed in the context of multiple transactions, patterns emerge that uncover criminal behavior. But how do you find a particular pattern of transactions in a huge dataset of background activity? Here’s where a graph query language is very useful. ArangoDB are experts in handling scalable, fully managed graph databases. Their ArangoDB Query Language (AQL) is declarative, client-independent and easy to understand. When they shared some example AQL queries with us, we were keen to run them against a fictional financial fraud dataset. We wanted to find out: * How can we present query results to analysts so they can easily investigate each candidate pattern? * How can we help them to spot false positives and determine the next course of action fast? Data visualization has the answers. It’s both an effective analytical tool (“Is this really a fraudulent pattern?“) and a presentational tool (“How can I explain to others why I came to this conclusion?“) We took representative results of the AQL queries and put together some tips and tricks on how to make compelling, interactive visualizations for financial fraud detection. Let’s see how. Read our ultimate guide to fraud detection Download the white paper MODELING THE FINANCIAL FRAUD DATASET * account holders are linked to the accounts they own * accounts are linked to each other by transactions * transactions include timestamps and transaction sizes as properties We’ll build a simple React application on top of this database using ReGraph, one of our graph visualization toolkits, and KronoGraph, our timeline visualization toolkit. By using these two different SDKs, our application will display the same transactions as both a network graph and a timeline of events simultaneously. Now we need to decide on the visual graph model for our database schema. It’s easy to mistakenly assume that every node and link in your database should become an item in your chart. But our focus is on patterns of transactions – not every individual transaction. For this reason, we’ll choose a single node and link type for our visual representation of the data. We’ll show accounts as nodes, with account holder information as a property of those nodes. Here’s what a fragment of the dataset looks like in ReGraph: Our basic ReGraph chart represents the key elements of our data without overwhelming users with too much information With a few lines of ReGraph code I added a font icon to the nodes – one of many styling options for providing real-world context. I’ve also displayed the account number and the account holder’s name as labels. I’ve stuck with a simple monochrome color scheme for now. Later we’ll use color to draw attention to important areas of the view. QUERYING THE DATABASE The first query we’ll try detects a fraudulent pattern known as a fraud ring, where money passes around a chain of accounts and ends up back where it started. Here’s the AQL query to detect suspicious rings of between 5 and 10 hops: WITH transaction, account FOR suspicous_account IN account FOR acct, tx, path IN 5..10 OUTBOUND suspicous_account._id GRAPH 'fraud-detection' PRUNE tx._to == suspicous_account._id FILTER tx._to == suspicous_account._id RETURN path It’s a really compact way of finding sub-patterns within the graph. The output of this query is a JSON object which we can quickly and easily translate to our ReGraph data format. The query result looks like this: A financial fraud ring visualized from one simple AQL query The question is, is this a helpful view for a fraud investigator? Some crucial questions remain unanswered. How much money is involved? Who is the originator of the ring? Is there an innocent explanation for the pattern? To answer the first question and reveal what each transaction is worth, we’ll add a simple tooltip using ReGraph’s onPointerMove event: Give fraud analysts the power to discover detail on demand. Tooltips are just one of many ways to do this using ReGraph. Now we have an easy way to find out the transaction value. Restricting this information to a tooltip saves cluttering the chart with too much detail, giving fraud analysts the option to display useful details only when they need it. ADDING THE TIME DIMENSION To help with the other questions – who started the ring and what’s behind the pattern – we need a timeline view. So let’s add a KronoGraph visualization to the app. Find out what you can achieve with timeline visualization Download the white paper You can style KronoGraph however you like: for inspiration, check out the examples in 5 popular use cases for KronoGraph timeline analysis. We’ll use a neutral white theme and add rounded corners and a subtle shadow to the containing element so that it appears to ‘float’ above the chart. For the data model, we’ll mirror the chart nodes as timeline entities, and use the groupBy property to group accounts which share a common account holder. Each transaction is then mirrored as a timeline event, and we order the entities chronologically using the firstEvent option. We’ll also apply a bright purple highlight color to both the timeline and the chart. Finally, we synchronize the hover events in both views so that when we highlight somebody in one view, it’s also highlighted in the other. (To learn more about coupling views in a React app, see using our timeline visualization React component.) Our hybrid ReGraph and KronoGraph app provides two powerful views of the same ArangoDB data The timeline gives immediate new insight. The firstEvent ordering brings one of Peter Brown’s accounts to the top of the list, and we can clearly see the sequence of transactions as money passes around the ring and, eventually, back to Peter. Not only have we drawn out the originator of the fraud ring, but the pattern we can see also confirms our suspicions that this is not innocent behavior. The spread of events on the timeline takes place in the space of a single day – very unlikely to be a coincidence. BUILDING OUT THE FINANCIAL FRAUD DETECTION APP We’ll add stylish UI and visual touches to make my demonstrator app more useful. One common question we get asked is how much additional data should I bring in from the backend for context? It’s a difficult one to answer. If we brought in, say, all of Peter Brown’s transactions, we’d end up with an awful starburst problem on the chart (think how many bank transactions you’ve made in the last year!) This is where KronoGraph is really effective. Unlike a graph visualization chart, KronoGraph doesn’t suffer from starbursts or hairballs. In this app, we loaded a year’s worth of transactions from the members of the fraud ring into the timeline, but not into the chart. This shows us the context of the fraud ring events (red) against other events (black): Styling events is an effective way to make items of interest stand out We combine the two visualizations and set KronoGraph to heatmap mode. Even with the timeline minimized at the bottom of the screen, we can still spot our potential financial fraud detection alerts as red areas and see if there’s a pattern to when in the year they occurred: KronoGraph uses smart aggregation techniques – like heatmaps – so that data can reveal patterns at every scale Of course, we still only show the one alert which took place in early June. Let’s consider the case where we need to manage multiple alerts in the app. ADDING MULTIPLE ALERTS Another common strategy for financial fraud is a fan-out-fan-in pattern. In this scenario, the fraudster splits money into smaller amounts that fall below a certain threshold and sends them to multiple recipients who then funnel the money back to the fraudster. This pattern ensures that no single transaction is above a certain value that might arouse suspicion. Again, ArangoDB’s AQL language makes it easy to find such patterns hiding in our graph database: WITH account, transaction LET accountOutDegree = (FOR transaction IN transaction COLLECT accountOut = transaction._from WITH COUNT INTO outDegree RETURN {account : accountOut, outDegree : outDegree}) LET accountInDegree = (FOR transaction IN transaction COLLECT accountIn = transaction._to WITH COUNT INTO inDegree RETURN {account : accountIn, inDegree : inDegree} ) LET accountDegree = (FOR inRecord IN accountInDegree FOR outRecord IN accountOutDegree FILTER inRecord.account == outRecord.account RETURN MERGE(inRecord, outRecord)) LET maxAccount = (FOR maxDegree IN accountOutDegree FILTER maxDegree.outDegree == MAX(accountOutDegree[*].outDegree) RETURN maxDegree)[0] FOR account, transaction IN 1..4 OUTBOUND maxAccount.account transaction RETURN transaction So how do we handle more than one alert? Let’s think about a financial fraud investigator or analyst’s typical workflow. They’re often presented with a list of alerts to review, perhaps all those discovered in the last 24 hours, and they’ll want to switch between and understand them quickly. In our app, we’ll add a simple checkbox list React component where we can turn on and off various query results: We’ve used the sequential layout to neatly arrange the directional flow of money between accounts Here we see another UX challenge – it looks like my AQL queries have found a situation where a fraud ring and a fan are joined together. You might be tempted to use a color scheme here, perhaps show the fan in blue and the ring in red. But I generally wouldn’t recommend itemizing things by color. It doesn’t scale – the human eye struggles to distinguish more than a half dozen discrete colors in a visualization, even with a helpful legend. Also, if you look closely at the bottom of the network, you’ll see that there’s a fraud ring which is a subset of this fraud fan. That means some of those links would need to be both blue and red at the same time. (For other useful tips, see choosing colors for your data visualization) A better UX technique is to use interactions to spot the difference. Our checkbox UI means we can turn on and off the different components. Even better, we could add a hover interaction to preview the results of clicking a checkbox. In this example we’ve used color, link width, link style and animation to make the hovered fraud pattern stand out. INTERACTION DESIGNS THAT REVEAL INSIGHT The real benefit of using a custom visualization with a multi-model graph database like ArangoDB is that there are no limits to the information you can store and the insight you can provide to your users. Imagine that, as well as managing your transactional data, your backend is storing detailed risk calculations against every account holder. It could be useful for an analyst to see this information when assessing whether these fraud patterns are genuine. As a finishing touch, we’ll add a control panel React component so that the user can visualize a risk score using ReGraph’s donut feature. These allow you to display relative data values as color-coded node borders, providing an at-a-glance understanding of volumes relating to each node. Now we can spot that it’s not just the timing of the fraud ring that’s suspicious. This fraudulent activity also involves several people with higher (orange) risk scores. We can see that Peter Brown has a high (red) risk score which makes him a definite person of interest. VISUALIZE YOUR ARANGODB DATA The combination of a powerful graph query language like ArangoDB’s AQL with flexible data visualization tools like KeyLines, ReGraph and KronoGraph is compelling. We’ve shown how the results of an AQL query can be brought to life with some simple techniques like interactions, styling and timeline analytics. Want to read more about integrating ArangoDB with our graph visualization SDKs? Read our KeyLines-ArangoDB integration tutorial. FREE: START YOUR TRIAL TODAY Visualize your data! Request full access to our SDKs, demos and downloadable code. TRY OUR TOOLKITS BROWSE OUR BLOG * All posts * KeyLines posts * ReGraph posts * KronoGraph posts * Graph visualization use cases * Database integrations * Graph visualization best practice * Our company news SUBSCRIBE TO OUR NEWSLETTER * Sign up for the latest news READ NEXT ELASTIC UI FRAMEWORK & REGRAPH TUTORIAL USING ANGULAR CLI TO GET STARTED WITH KEYLINES HOOKING KEYLINES UP TO THE NEO4J BOLT PROTOCOL HOW CAN WE HELP YOU? READY TO START? Request a free trial WANT TO LEARN MORE? Read our white papers LOOKING FOR SUCCESS STORIES? Read our case studies COMPANY * About us * Our customers * Corporate information * Technology Alliance * Our impact * The CambridgeJS Meetup CAREERS * Opportunities * Graduates * Paid internships * How we work * Meet the team * Company news PRODUCTS * KeyLines * ReGraph * KronoGraph * Pricing * Evaluation FAQs * Procurement FAQs REGISTER FOR NEWS & UPDATES First Name* Last Name* Email* Content Requested You can unsubscribe at any time. Registered in England and Wales with Company Number 07625370 | VAT Number 113 1740 61 6-8 Hills Road, Cambridge, CB2 1JP. All material © Cambridge Intelligence 2022. Read our Privacy Policy.