Video: Graph Reasoning with Neo4j Virtual Graph | Duration: 7408s | Summary: Graph Reasoning with Neo4j Virtual Graph | Chapters: Workshop Introduction (14.735s), Available Resources (213.445s), Session Introduction (344.99s), Graph Reasoning Challenges (681.49s), Virtual Graph Setup (1227.785s), Fraud Ring Detection (1517.425s), Virtual Graph Setup (1763.94s), Virtual Graph Mapping (2221.05s), SQL Baseline Comparison (2809.95s), Jupyter Notebook Setup (3072.705s), Ground Truth Validation (3743.32s), Document Intelligence Integration (4130.945s), Fraud Investigator Agent (4413.635s), Self-Hosted Setup (4700.44s), Graph Query Technologies (5210.7s), Technology Landscape (5301.29s), Results and Precision (5590.755s), Virtual Graph vs Neo4j (5769.6s), Key Lessons Learned (6006.825s), Key Takeaways (6260.55s), Resources and Documentation (6392.935s), Q&A and Wrap-Up (6444.53s), Pricing and Access (6816.01s), Scaling Limitations (6998.895s), Closing Remarks (7243.7s), Closing Remarks (7355.24s)
Transcript for "Graph Reasoning with Neo4j Virtual Graph":
Looks good. I think we're ready. Final final preparation here just before, before getting getting ready on our, road to notes workshop. We have the session today that's called, excuse me, Graph Reasoning with Neo4j Virtual Graphs and is obviously about Neo4j Virtual Graph, which is a relatively new feature we have announced a while ago. It allows you to run a cipher or a graph directly against the data that sits in your, you know, Snowflake like Databricks. I'm super happy about this. It's very, very interesting to have also Akmal join us today. Akmal is going to be running the workshop. Akmal is a part of the GraphAcademy team and a technical writer. He's got great experience across databases, AI, and developer enablement. And he's written lots of books, lots of context, lots of stories. If you happen to jump over at dZone recently, you've seen a couple of his publications around graphs and around virtual graphs as well. So he's done a lot of things there in the past. So very, very happy to have Akmal join us today and to run through the session. Because virtual graphs is a paid feature and obviously depends on a paid for instance of, let's say, an object or something, we won't be able to do as in the previous sessions to have you run along with us all the way. Instead, Akmal will show you how it's done and how you can run virtual graphs with data provided that you have in your instances. And we will, at the end, publish a repo and publish everything, all the materials. So you can then take what you've seen today and deploy it on your own and run it on your own and explore yourself. But it's going to be less... I mean, it's going to be very hands on, but handled by Akmal Chaudhri. So, so so you see how it's done and it's what what... What's what, but less so for you to, to do it right right with us, I would say, during this workshop. If you have any questions, however, since we're here obviously live, we'd like you to submit your questions. There is a q and a tab in the chat window. Use that. Send your questions. We will see if we can find some time during the session or definitely at the end. If we cannot get through all the questions, there's always the community forum. We will try to get through as many as possible. We can get back to you if you have certain questions that. we can't answer today and then follow-up with those after the workshop is done. And like I said, all the material and all the important bits about, the technicalities will be shared in a in a repo. And I will send that to you together with the video of this workshop today as a follow-up, probably tomorrow. So you'll get everything there and you can obviously watch this workshop at any time. This will stay as long as it's available available to you. As... And as... One more thing before, handing it over to Akmal Chaudhri. All the other previous road to notes workshops... And I'll put the chat... Let me quickly get that open. I'll put the link into the chat for all the previous and upcoming Road to Notes workshops in the chat so you can check that out and can see what's happened before, what we did in the last couple of weeks, and what we're going to do in the next few weeks until now. So, it would be nice for you to join another workshop there. And there's a question that I can quickly answer. Is there a related GraphAcademy course? I think not yet, but there will be one. So we will... Basically, all what you see today will blow into a GraphAcademy course. Right, Akmal? This will... Yeah. Nice. Okay. Yeah. If it it, I can try and help with that, Akmal. So a little bit of late breaking news. So, actually, there are two, courses available on virtual graph. They need some updates though because I... Yeah. I've been working on them for a little while, but we want to make them better. So they are available currently on GraphAcademy. The other thing is there is also a document intelligence course as well that's available. And so, I mean, those are two sort of key technologies I'll be using today. So, document intelligence doesn't require anything special. That is available through Aura anyway. Okay? You don't have to pay for that. So Yeah. Yeah. that's I think. so. Alright? And and like, yeah, like we said, virtual graph, we will, release some material and there will be... know, In like free future, stuff too. there will? be a course, that you can also, through Aura, the, run know, on GraphAcademy. Aura console, it's a, paid for service. that's it. the issue. I will be here you can actually deploy the chat as well as in. the Q and? A as much as things, that you can think about. how it goes. So, that... Hopefully, yeah, that's that, helped answer handing question there, over. to you, Akmal. So... Thank you for running this. Thank you for participating, everybody. I see people from all over. California, Washington, Mexico, Yes. India, Thailand, UK, France. Very nice. Pakistan, India, Boston. Welcome, everybody. Let's have fun. Let's see virtual graphs in action. Over to you, Akmal. Okay. Great. Thank you very much, Alexander. Thank you for your kind words and generous introduction there. I I just realized my glasses are giving a terrible reflection, so I'm sorry about that. I have the same problem internally on Google Meet, you know, whenever we have these internal calls, but, hopefully, it won't detract too much from the experience now. So let me just share my screen. Okay? And I'll do the sound as well. So bear with me. I I... I'm someone that uses Zoom a lot, so this Goldcast platform is slightly new to me. And, Alexander, please tell me if I... I'm just talking and you're not seeing anything. Alright? So we we make sure that everything is, working according to plan. So there we go. Hopefully, you can all see the slide deck there, which says, Neo4j graph reasoning with Neo4j virtual graph. And very interesting, obviously, because this is, I think, running starting at 9AM Pacific time, naturally, expect from California and North America, in general. But, for Asia and APAC, it's very late in the night for you people. I'm sorry about that. But, it's it's not too bad for me here in London. You know, it's just gone a little after five 5PM. And I will do my best to keep it under two hours. Okay? So there's a lot of material to cover, lots of stuff to show you, notebooks and insights, and stuff that I'll share with you. Okay? Because I've been learning this as well for a a little while, so key gotchas and things that will help you on your journey, with this technology as well. Alright then. So, in terms of agenda, this is roughly what I think we will be able to do. Okay. So two hours, hundred and twenty minutes. So what we'll do is I'll introduce, essentially the, the problem that we're trying to solve. We'll then discuss a little bit about how virtual graph works. Set up deep dive. Okay. So I'll need to walk through that with you and show you a few things. Okay? Because you can become unstuck. And the example that I want to go through with you in detail is fraud detection. Okay? Simply because it's something that Neo4j is very good at being a graph database and virtual graph. Graph is in the word. Okay? I mean, the fact that it's virtual is, neither here nor there. I mean, yes, there are some limitations, but the thing is from an engineering perspective, it's advancing significantly and moving along. So that could be very, very useful for you. And we've got lots of stuff to show you in terms of, demo stuff. So part of it, I will be running in the Snowflake environment and partly locally on my laptop. Now the reason for that... For the split is because, Virtual Graph as it is available today, and if you look at it from Aura, it's available for three platforms. Platforms. Okay? So the two platforms that I'm most familiar with is Databricks and Snowflake. And Snowflake is great because... Well, Databricks is great too. I used to work for them. But Snowflake is good because, you create an account, and they give you $400 worth of credits in terms of usage. And for our purposes, that is more than sufficient, and, you know, you can continue using it for a period of time after that. And then once your credits run out, I mean, you just create a new account with exactly the same email. So I think the only major risk... Restriction there is that some of their advanced, sort of capabilities and features are not available, but for our purposes, it's perfect. And the other nice thing is that, even when the credits run out, you can create exactly the same account again with exactly the same email again, and you still get another $400 in credits. Okay? So that's the key thing there. We'll wrap up towards the end with a little bit of comparison and discussion between virtual graph and native Neo4j. Hey, what's the big difference and what are the kind of strengths and weaknesses? And then we'll talk a little bit about GraphRack and AgenTic AI. And one of the things that I've tried to do today is not only show you virtual graph, but show you the benefits of integrating that with a couple of the other technologies that are available through the Aura console. One of them is document intelligence. Okay? So you'll see a little bit of that later on. And then the other one is agents. So we kind of discussed that in the slides a little bit of which there aren't that many, but, that is the kind of overall plan. Okay? And, as Alexander was saying, he he was very kindly helping with the q and a, and I I did discuss this with him. So what we'll do is roughly halfway through, we'll stop for a short time as well. And if there's any burning questions that, he has that you have asked, I'd be more than happy to spend a couple of minutes answering those. Anything, you know, else, leave towards the end. And anything we can't answer today, we'll be happy to follow-up with you subsequently. Okay. So graph reasoning, the problem with multi hop questions on warehouse data. Right. So this is the issue. Right? Finding patterns, especially with things like fraud detection. Circular multi hop patterns in SQL is slow, complex, and hard to read. Right? You can use, you know, common table expressions. These, CTE... Recursive CTE. This is a fairly well known technology. You'll see some examples of that in the notebooks. So, the challenge there is that making the code adapt to new requirements can be a little bit brittle. Right? You have to change some things, and it's a lot easier to do if you're using a graph database. And specifically for financial fraud, which is the problem we're gonna look at today, you know, a a ring of, sort of, fraudulent activity looks a bit like, you know, money is moving from one account to another account to another account and so on. Okay? It's a kind of a circular thing, and that might be three, four, five, six, or more times. And it's a way that the bad guys are trying to hide the paper trail. Okay? They're moving, shifting money around generally and trying to do that. And so our goal is to be able to see, well, is there something that we can do to be able to help that, mitigate that, be able to get some insights? And this is the problem we're gonna look at today with the virtual graph. So key questions for us then, and can we query a data warehouse, as a graph without moving any of the data? And can Cypher, which is the query language that Neo4j supports, replace recursive SQL? Can governance and security stay intact? That is very important in an enterprise environment. And many of you, I'm sure, who work in enterprise environments, perhaps your users of Databricks or Snowflake technology or, in updated warehouses from other vendors, Microsoft, Google, and others, You know and you appreciate some of the capabilities that these platforms provide in in providing in terms of supporting sort of restricted access. You know, you you see just what you need to see and nothing else and and then the kind of operations that you need to do, whether it's read only or read, write, and so on, it's limited to the parts of the system that, you you you you need to see. Okay? So the... This is the real nub of the problem and thing that virtual graph is really trying to solve. Alright. So how does it work? Essentially, if we take a look at this, we have a bunch of warehouse tables. Okay? Let me just highlight that. There we go. And then in order to be able to utilize graph technology, we need to be able to map those relational tables, k, using schema mapping here. And our query language of choice in terms of graph is Cypher, and then we get some kind of graph result. Okay? So virtual graph, SQL struggles with circular multi hop patterns, particularly important as far as fraud is concerned. Virtual graph maps these tables to a graph model without copying any data. That's the key thing. Okay? You're not shifting any data out of your platform, out of your environment. Cypher queries compile down to optimize SQL run by the warehouse, and this is the kind of key trick. Okay? So you are issuing your queries in Cypher. This is being converted to optimize SQL, which is then pushed down into the data warehouse. It's actually run-in the data warehouse environment, and then you are getting some results back. So results stream back to Neo4j and render as an interactive graph, which then you can do other things with. Okay? And that is the... What we're gonna be doing today to show you some examples of that. And so, architecturally, then you could kind of look at it like this. Okay? So, us, people, you know, users, we are over here on the left hand side. And then typically, we'll use something like the Neo4j browser or Jupyter Notebooks, which is what I'm gonna be using shortly. Okay? Although I will show you perhaps one or two queries, using the query capability in Aura. On the extreme right hand side, you can see there is our data warehouse. Okay? And in this particular case, for this particular demo, we have two tables that are created for the... For detection, okay, or consisting of accounts and transactions. Okay? So we've got something like 1,000 accounts that are generated and 50,000 transactions, and it's configurable. So if you want to scale that up, you know, create, say, 10,000 accounts, you know, half a million, transactions if you wish or larger, you know, depending on how far you want to go, that's absolutely fine. Bear in mind though that the discussion as far as the notebooks are concerned all relate to that particular configuration set, okay, with a thousand, accounts and 50,000 transactions. Okay? So in terms of analysis and the results and the visualizations and all of that, they are related to that specific configuration. And then the magic here happens in the middle. Okay? This is what virtual graph is doing for you. Okay? We need to provide some information in terms of schema mapping, okay, that is supported by three techniques. You could either do it manually, which is the approach that I chose to do for this particular example today. You can automatically do it based upon the schema that it sees, or you can use AI. Alright? So there's three, options. And then, you know, you decide what gives you the best results or what is the best approach that, you feel would work in your, circumstances. And if one approach doesn't fulfill those needs, customize it, tweak it, or just go for the manual approach, which, you will get exactly what you want. The Neo4j Cypher to SQL. Okay? So the Neo4j Cypher queries that we issue here, they are converted to optimized SQL, as you can see here. Okay? And then the sort of row to graph mapping as well. So we get back rows from the, data warehouse, and these are converted to a graph structure. And this is what we then see on the left hand side. Okay? So this is the, kind of flow. So key things from here. Zero copy. There's no data movement. K? Everything still resides within your data warehouse. And there are some advanced techniques that we use in terms of the virtual graph, in terms of SQL push down and so on. And so, essentially, your warehouse is doing all the heavy lifting, all the work, behind the scenes. Okay? So that's the key thing here. Alright. So just to emphasize that, all your data stays in the warehouse. Okay? Tables and rows in Snowflake. Security and access control, they are still there. You know? Nothing has changed. Your single source of truth. Okay? So you're not shifting anything around. What the virtual graph does, maps the tables to a graph model. Okay? I chose to do it manually. Compiles Neo4j Cypher into SQL. Okay. So it does a pretty good job there. Where it does fall down a little bit is in... When you start to deal with much more current kind of complex chains. Let's say in in the case of fraud detection, rather than saying three hops, okay, and you'll see in a short time, we can probably deal with four and five. But once you start getting the larger numbers, remember, Cypher has to create that optimized SQL, and and SQL can get rather complex. And it's being pushed down to the data warehouse, and that data warehouse is now running fairly complex SQL statements. Alright? So be aware of that. Alright? You don't get something for nothing. Alright? Nothing is free. There are sort of limits and capabilities that you have to be aware of. Use it sensibly, and then, you know, if necessary, redesign your schema, whatever you need to do in order to get the best performance out of it. Okay? So there are some issues and things to think about there. But overall, you know, it does a very good job, and, there's very little for you to have to tweak and customize. So why does this matter? Well, no pipeline to build or maintain. No second copy to secure answers on current data. So this is the thing. There is no ETL. Okay? You're not moving or shifting any data around. You're not losing all the governance and security that you have within your data warehouse, and now you're getting something extra on top of that that allows you to do additional analysis of the data that you have to be able to get greater insights. And that's the key strength that this brings. Alright. Now set up deep dive. So let me just tell you what I'm gonna show you. Okay? And then I'll show it to you in a few moments. So we'll look at the warehouse tables in Snowflake, okay, of which, as I've been... Mentioned before, we've got two. K? Accounts and transactions. And then I'll show you how to connect virtual graph to Snowflake. Okay? How to do the schema mapping manually, which is the approach that I used. Okay? And then what you can do then is once it's created the virtual graph, simple thing to do is just run a a simple sort of count query of some sort just to check if everything is working okay. And so... But, you know, if you wish to do so, Other than that, I mean, the system will give you a status update in terms of when it's created, and you'll see it, in terms of, you know, a green icon to say it's ready and and ready to accept queries. And then queries with Cypher from Neo4j browser or Jupyter. I chose to do most of the work today using Jupyter notebooks principally because as as good as the query capability is, either through the browser or the query, you know, when you see it in the left hand nav and... Or a console, those are fine. But then one of the nice things about Jupyter is that you can run a query. You can see the results. You can modify the query. So it's a kind of an iterative thing. You can just sit there and look at it. And, you know, if it doesn't quite meet your expectations, it allows you to just change it quickly, execute it again, and so on. And then, you know, if you've got five or six of these in a notebook, you can see all of the results straight away in front of you. It's just a personal preference. Okay? You may prefer it the other way. That's absolutely fine. Okay? So we'll look at that momentarily. Okay? And in terms of the mapping then, well, I... I've told you there are going to be two tables, that we are going to analyze as far as the data warehouse is concerned. Okay. One is called accounts, and the other one is transactions. Now does that necessarily mean that we have to map those to two types of nodes as far as graph technology is concerned. No. The the way that I chose to map it is that, yes, accounts become nodes in my graph, but the transactions become relationships because they are things that connect notes together, different things. And again, it... It's a case of, having the relationship carry some information. So it's got some properties. Okay? So what is the amount of the transaction, the time stamp, the description? Okay? And it is a a perfectly viable, way to be able to do the modeling. So this is one of the kind of gotchos when you're working with graph technology. Don't think that there is necessarily a one to one mapping between, you know, taking a table and then mapping that to a sort of a particular node. Think carefully about the benefits that you... Graph brings you, and there may be alternatives that are far superior. In this particular case, I believe, personally, that this is a better approach in terms of the mapping, and that comes out very nicely in terms of the queries as well and in terms of visualizing it and seeing the relationships between these different accounts as far as the transactions are concerned. Okay? So this is the approach that I chose to use. Now within the data that's created in Snowflake, we have a ground truth. There is a column. It's called is fraud ring. Okay? So it's kind of marks a particular fraud ring as yes. This is a fraud ring. In the real world, it's highly unlikely that you'll get something like that. Okay? It is something you have to discover. Okay? So the reason for doing this is that we want to test how good is the analysis that we can do on the graph side. So what I've done is I've done one mapping that, excludes the is fraud ring. Okay? I've created one virtual graph, and then I've created a second virtual graph which includes the ground truth, the is fraud ring. And then and then it gives me the opportunity to compare the two then. Okay? So if I hide that from virtual graph and then I run some queries and some, you know, do some analysis, Is it good enough to be able to figure out what the fraud rings are and be able to identify them? And then how would I test that? Well, I would test that by comparing it against the one where I've actually specified and carried that column across as a property here. And so this is one of the analysis that we do, a little bit later on. Alright then. So key thing then is just to summarize. So we've got a thousand accounts, 50,000 plus transactions. There are a number of seeded rings. K? Some of them are fraudulent, some of them are not. Now look at that number. Absolutely tiny. Right? 33. So in the real world... And I've come across another fraud sort of dataset. So I'm creating my own one for this purpose, but I have seen something on Kaggle, for example, where the percentage in terms of fraudulent transactions has been roughly the same. K? So you're looking at a tiny proportion, point 3%, hidden in data, and that is what our our purpose is, to discover as many of these fraudulent, rings as we possibly can. And so here below, again, you can see the graph model. So we've got this notion of an account. Okay? It's a node. And then an account, another node, and then another account here, another node, and these are connected together using this relationship called transacted to. Okay? So that is what's carrying the amount and the description and so are are sort of properties and as well as that, ground truth, in in one case. K? So, here is an example of a fraud ring. So we've got this kind of loop as you can see on the right hand side. So money moves in circles. Right? So we start off at a particular node, a, and then it goes to b, goes to c, and then back to a. Okay? On the right hand side, you can see here that we've got this thing here. If we start at this one, here's the first one, and then the second one, and then the third one, and then it's back to the, back to the start. Now in this particular case, what we see is that one of the clues that will kind of tells us that this is potentially a fraud ring is the fact that these amounts are very similar. So that's $5,000. That's almost $5,000. That's almost $5,000, and that's almost $5,000 as well. And, also, the speed with which this money kind of moves between the accounts. Fraudulent transactions, I think, okay, and this is my judgment and my understanding, correct me if I'm wrong, tend to be a lot faster. I mean, in the in the sense that they don't sit around in your account for weeks and weeks and weeks, you you shift them quickly. You are the bad guy. Okay? You wanna move things along. You wanna get that money out of your account and move it along the chain to the next one. Okay? However, thing is that, you know, just because it's a ring doesn't necessarily imply that it's a fraudulent ring. Could be genuine. And just below, we can see a chance cycle. So here, again, we can see we start off here. We go to the second one. We go to the third one here, and then back to the fourth one. But if we look at the amounts in terms of what's being moved, they are quite variable. So we've got everything from, like, 8,000 plus, US dollars, to about 3,500 to about 6, thousand, to about 9,500. So quite variable in terms of, the amount that's being shifted. So this is one sort of challenge for us to look at. Maybe a clue that we should be looking for, you know, transactions that are very similar in size. And speed is another one in terms that they are moving very quickly. These are kind of clues that we should look for. So each hop carries a similar amount. K? 97 to a 100% of the base amount. That... That's a strong clue. Transfers happen in short bursts, minutes apart typically. Okay? Another strong clue. No single transaction looks wrong on its own. K? And then finding it means following money across several accounts, and that's where the graph really comes into its own because it gives us the opportunity to traverse these kind of networks very, very quickly, and that's one of the benefits that we get. Okay. Now why can't we do this in SQL? What's the what's the issue there? Well, self join. Okay? So if, for example, you're looking for exactly three hops, say a to b to c and then back to a, you have to hard code it. Alright? Four hops means you need to rewrite the, the the query, and you need pairwise amount checks and a deduplication as well. Because think about it. If I say a to b to c back to a, is it is it not conceivable that you could say b to c to a and then back to b? Okay? That's similar in the sense that it's covering exactly the same accounts. Or if we say c to a to b, and then back to c. Yeah. The the... It's it's using all of those letters, different accounts, but the chain... The loop is the same. Alright? So there's an element of deduplication that we have to do. Recursive CTEs, as I said, common table expressions, very useful. I mean, it's a great feature of SQL that allows it to be able to do things like bill of materials and networks and graphs. The thing is that it it gets a little bit challenging once you're starting to run these across large quantities of data, and then, the code can really get quite large. Okay? So in the examples in the notebooks, for example, I think one of them has got 45 lines for rings of three to six hops. There is a manual depth cap. I mean, you don't want the recursion to go on indefinitely. You have to stop it at some point and can be slow and may time out at scale. Okay? These are gen... Generalizations. I appreciate, you know, there are specific implementations that they use that might be a lot better and understood and accepted. Okay? And then the d view wrapper as well. So sort account arrays to canonicalize, fragile string manipulation, 56 lines for the full query. Okay? And, again, these these numbers are taken from the notebook examples that we have. Excuse me. Alright. Now let's shift to some code. Okay? And then I promised you that I would show you, a couple of things as well. So first thing to do then is just switch tabs here for a moment. So this is Neo4j Aura, and, I'm specifically looking at instances here. K. You can see on the... As I highlight this on the left hand tab. So remember, you can create a free account, and, I am actually running a free instance here, which your account will allow you one. K? And this is for the document intelligence. But at the top here, you can see I've got this option here, virtual graphs. Now, fortunately for me, because I work for Neo4j, I get to use this for free. Okay? So I don't need to give my credit card out. At the moment, because this is preview and because I I think that, Neo4j really wants to work with customers who want to utilize this technology, it's a paid for service. Okay? So that's the thing that Alexander mentioned a little bit earlier on. And so what I would say to you is that, you know, through your employer, if you have, you know, working with someone that manages your account at, Neo4j, talk to them, see if you can get access to this technology. There is a self hosting option as well. Okay? So that's another possibility that you can look into, if, if you're interested. But here, what I've I've essentially got are the two virtual graphs that I mentioned. So I've got one, this one here, virtual graph zero one, which does not contain the is fraud ring. And then in order to kind of test it really and see, you know, how good are the results in terms of analysis of these fraud rings, this, virtual graph two, I created, which does contain the is fraud ring because I want to compare against the ground truth to see how accurate the results are. So that's the basis for that. Okay? Why we've got two of these. Now the way to create this, is very straightforward. So what you need here... And, here you can see on the right hand side, there is a big blue button with some white text that just says create virtual graph. So if I select this, it just prompts me for some details. K. So, you know, provider name, and it's all auto filled this in for me. And then the cloud provider... So as you can see, you've got the choice of the three major cloud providers, AWS, Microsoft Azure, or Google Cloud. And then, I'll choose AWS for this instance. And then here you can see it's filled it in with Europe, Ireland, EU West 1. You can configure a little bit of memory here as well. I've taken the default, which is four gigabytes. Absolutely fine. There's slight differences in terms of cost there. K. So eight gigabytes is, slightly more, double the, price of four. That's fine. K. Even those are quite small. And then what we need to do then, you'll see down at the bottom here that I've already got a Snowflake data source, which I created previously, but I promised that I would walk you through the steps. So we select this option here on the right hand side, add new data source. Okay? So if we select this, here it shows you the three, alternative, technology providers that we work with at the moment. So this is Google BigQuery, okay, Databricks, and Snowflake. Okay. So I'll choose Snowflake simply because it'll be a little bit easier for me, today. That's what I set up previously. And then here, the form is very straightforward. So call this, give it a name. I'll just call it test. Okay? And then from your Snowflake environment, you need to fill in the details here. Okay? The host, which you'll be able to get from your environment. The ports, prefilled for you, it's, 443. And then what is the database? In our case, it would be fraud underscore demo. Notice, all caps there, upper case in terms of text. Okay? Schema is public. K. The warehouse and the role are optional. You leave that. And then you do need your username. Unflatteringly, this is mine. Okay? So if you read any of my decent articles or, you know, my GitHub handle, it's exactly the same. And then here, what you need to do is put in a private key. Okay? So when I was working with this, I just generated public private key on my Mac, and then, you know, the private key part goes here. The public key, I'll show you in the Snowflake environment momentarily. Okay? So you need to run that there as well, and then just click next here at the bottom. Okay? So there we go. And that's all you need to do. And then it will check these credentials. It will connect. And then once it connects... Okay. So I won't go through this because I've already done that, but, essentially, that's it. Alright? So those are the key things. Most of the information you can garner from the, from your Snowflake or Databricks or Google BigQuery environment. Okay? Have those to hand. You can get the various details. They'll be slightly different for each flat... Platform. Okay? So this is specific to Snowflake. But, once you've done that, essentially, you've got a connection. So let me just cancel this. Okay? And then at the bottom here, you can see that I've got something already, which I've gone through that process. That was set up a couple of days ago on the nineteenth. And, once that's done, again, it would just, just select next in the bottom right hand corner there. And then here, you will be given a couple of options. Now you can see my two existing virtual graphs here, number two and number one. K. So here, this option to create a new model, select this. K. And then just say next. So this is using exactly the same connection details, but giving me the opportunity to, create a different virtual graph. Okay? So it takes a couple of minutes, okay, because it verifies things behind the scenes. Fingers crossed it will be okay and happy with that one. So let's just give that a moment. Meantime... Oh, there we go. So here we are. Now can you see, it's automatically picked up the accounts and the transactions, okay, because I set up that connection previously. And if I look carefully at all of the all of the columns, indeed, you know, the account ID, the customer name, the risk score, and the transactions here, the source account, target account, the amount, time stamp, description, is fraud ring, all of those are brought over. And then here, you recall, I mentioned a few moments ago that you've got several ways that you can create the mapping. I chose to do it manually. Okay? Define manually, but you can do it automatically from schema or you can use AI here, generate with AI. So the reason for doing it manually is that it allows you a lot more customization. So let me just try and get a little bit more real estate here, move this across. I've got this set at a large font size. You can see... So things are a bit squished up. So sorry about that. But we've got an empty node here. K? It's got no name. And so what we're doing, we're gonna add a name in the top here, this label, and we're gonna call it... If I can spell account. Alright? So then we can choose the table and we tell it that we want the accounts table. And then we have this thing map from table. So if I select this, it gives me all the fields that are available currently, and I can just say select all. So that would be the account ID, the customer name, the risk score, and we just say confirm. Right? So all that's done. I'm happy with that. And then what I need to do is to include the transactions. And so for those transactions, as I mentioned before, I'm gonna add a relationship. So notice what this looks like. Okay? So this is... It's kind of recursive. Can you see? It's kind of pointing to itself. And so I need to give this a name, transacted to. Alright. Let's just get rid of my arrow there. And then again, I just tell it that this is gonna be from the transactions table. So take that one. And again, we select map from table. I could say select all and then deselect the is fraud ring. Alright? So remember, in the real world, it's highly unlikely you're gonna have something that actually tells you that, yes, this is really a fraud. And it... It's been bonafide and a 100% verified. So this is what we're... You know, our challenge is to kinda discover these rings without having the ground truth available to us. So we select all of that and just say confirm. Right? And then the next thing we do, we show the mapping. So he wants to know, okay, you've got this kind of relationship from an account going to an account. Tell me how that relationship is organized. And so we say, okay. Take the source account as from and then the target account as to. Alright? And then, optionally, we could add an identifier here as well if you wish. And then we just say create virtual graph in the bottom. So it takes a few moments, and it will just create that for you then. Okay? Now, obviously, I'm... I don't need this. Right? I've already done this twice, but I wanted to walk through that with you to show you this approach. And as I said before, you know, choose whichever approach works well for you. I decided to do it manually because what I found, if I ask it to pick it from the schema or use AI, it comes up with a very different way in order to do this mapping. I like this approach because I like the fact that the relationship is carrying information and it's kind of connected to accounts in this way, and that suits my purposes, perfectly. Okay? So that's the key thing there. And one thing then is the public private key. So on the Snowflake side, and here you can see I'm now looking at Snowflake. So this is a notebook that I've got set up here. So you do need to, set this up. Okay? So in this particular case, set my username equals current user, which is me, and then alter user identifier, and then set RSA public key. Standard sort of process within the Snowflake environment. You can see part of the key there. That's fine. And then you put the other part of the key into the connection panel that you saw a few moments ago. And once you've got that, you're all good. And then here, this is the, kind of generator. Now I've kind of put the heart... You know, the the the horse before the cart. Cartier... Or the cart before the horse, I think, is the correct way of saying it. In a sense, I've showed you the mapping before I actually showed you the data generator. No worries. Right? So here is the notebook that actually generates the account and transaction data, fraud ring dataset generator. Okay? So this is specific to Snowflake. So what we have here is some configuration, and we can choose to set it to higher numbers than a thousand, but the default is a thousand there. And we've got 50,000 transactions. There's other sort of configuration options here you can set in terms of the number of fixed rings, for example, random rings, okay, just to make it a bit more interesting, for example. And then the, as we run this, it will set this up for us. So it it verifies that this is the configuration that we've got, a thousand accounts, 50,000 transactions. The number of fixed rings is 13, and then randomly, it's generated another 20 that gives it a total of 33. Okay? Some of those are fraudulent, some are not. Okay? Now, a little bit further down then, we issue the standard kind of SQL statements into creating the database, creating the schema, and so on. And so it does this, fraud demo and, public schema. And then we've got some helper utilities here. So we, you know, we've got some names. It's a bit like faker. Okay? We we choose some names, first name, last name. So we construct something that's kind of really realistic, and choosing those at random. And then some descriptions of the types of transactions. So these are the actual bonafide type of transactions, online purchase, utility bill payment, salary deposit, and so on. Okay? Things that look as though they would be genuine transactions. And then we've got some fraudulent or things that could potentially be fraudulent in terms of description. So a layered payment of amount via linked account chain, circular fund movement of a account... Sorry, amount across coordinated accounts, split transfer of amount routed through intermediary. It looks a bit suspicious. Okay. So the wording there kind of hints at the fact that this may not be, you know, all that it seems. So we take this, define our helpers, and then we create the table here. This is the account table. We populate it with a thousand accounts then using the, data generator there, and then we build the fraud rings. Okay? Both the fixed and the random. There we go. Code does that, and it plants 33 rings. Okay? There are thirteen three hop rings. Okay? So that like a to b to c, back to a, and then nine four hop rings, bit more complicated. Nine... Five hop rings, even more complicated, and then two six hop rings. And they were really kind of pushing the boundaries of the technology at that point, okay, in terms of... If you were doing this in using recursive CDE. So it's a 132 ring transactions across a 132 unique accounts. Then, of course, that's fine, but we need to generate our legitimate transactions as well. So this is what we do here, 50,000 of them. And then we populate all of this, and that gives us a total of 50,132 transactions. K. And then just to summarize at the end here, it tells us, all of the, all of the above that we've, successfully completed this. Now one of the things that the data generator does is, again, to kind of help us along in terms of discovery is that the legitimate transactions can be quite variable, as you saw in the example in the slides. But the fraud ring transactions are a little bit more, you know, smaller in scale, similar in scope, within a certain percentage of each other, just as a kind of a clue. And in terms of the time stamp as well, much faster in terms of movement between accounts, again, as another clue that potentially these might be fraudulent to help us discover that. Okay? So it's just to give us something more interesting to work with. The SQL baseline here, this is showing you some examples of how you might do it with recursive CTE. So this is a a kind of a simple, naive self join for three hops. Okay? So you can see the bit of code there. The SQL kinda goes on there, for a fair few lines. I don't know how many lines that is. How many is that? It's over 20. It's about 22, 23 lines of SQL code there in order to to to deal with, a three hop ring, and then it's successfully run and actually found 10. So it shows you that it's going from, account a... Oh, sorry. My magnifier is not working there. So to account b, to account c, and then back to account a. And then it's... If we look at the amounts here, indeed, they are looking of a similar sort of scale. They are very similar in terms of size, which kind of tends to hint that, yes, this might be something that we should investigate. And so here, again, recursive CTE, a bit more in terms of code. That goes on for a fair few lines as well. Not quite 75 lines, I think, but we're fast approaching roughly 50 lines of code in order to deal with this. And this becomes... Again, it successfully ran here. It's been able to find some transactions for us, and 20 of them, for example, 20 rings found. Each ring appears once per starting account. So that's successfully run. But remember, the challenge here is once you're starting to do multiple hops, as that number increases, this becomes more and more difficult and more challenging for, something like this. Okay? Whereas with graph, it's a much more natural way to do this. And then the deduplication, which I kinda mentioned, why we need this. Okay? Because it it depends where you start. Okay? You know? A to b to c to a is equivalent to b to c to a to b is equivalent to c to a to b to c. Okay? It's the same thing. There are three rows for one ring. So we need to do this deduplication in order to handle these kind of situations, and this is what this is doing here. Okay. So there we go. And then the last part here is that once we've done all this and our virtual graph is set up... Okay. So, initially, what we need to do is to run, both notebook one, which is the critical one. That's the data generator. Two, you can run if you wish. I mean, just to see the outcome, how would a recursive CDE handle it, for example, might be quite fast. Snowflake is great. I mean, in in terms of their, compute and processing, and the the optimizations that they provide, this could be, you know, many of those queries could run quite fast. But I think as you scale for, our dataset, you know, the the response may come back very quickly. So feel free to to execute those queries if you wish to do so. And then this one acts as the kind of reference. Okay? This is the ability for us to check, from the virtual graph side, can we run these queries? So these are kind of copy and paste. Right? So what I would do is take one of these queries. So this one, for example, okay, is a three hop hop hop ring, and then we're simply looking at the amount, in terms of going between one account and another. Okay? And then we've got another one here that, again, is, taking this slightly further. K. So all of these notebooks have, generous amounts of comments and, information about what's actually going on. Okay? Unfortunately, we don't have time to cover all that. There's a full hop ring here. Oh, and quite, quite a bit of code there, hefty bit of code there. Understood. But the thing is that in order to amend this code to deal with more complex rings, it's literally just like adding one or two lines depending on how much more, you want to, traverse in terms of, that that chain of accounts. So all of these are actually in the Jupyter notebook as well. Alright? So this is, where I'm going to switch to now. Okay? So, as Alexander mentioned, we will share all of the notebooks with you. Okay? So one, two, and three, load them into your Snowflake environment. And, with this set of... Oh, let me just... Wait a minute. What's it complaining about? Alright. Let me just, close. Alright. Let me just refresh this screen. Okay. Alright. The reason for this... And if you're smart, you will know that I'm actually in the wrong directory. That's why it's not running. Okay? So bear with me. Let's just minimize this a moment. I need to get to the terminal. Okay. There we go. Hang on. So what we want want to do... Alright. Let's just check where we are. Alright. That's fine. Oh, what's happened? Desktop. Interesting. For some reason, it's, not letting me, let's try it from here. So... See the... What show? Alright. So deactivate. Let me just leave this. Oh, okay. I have a feeling terminal is not feeling very well. Let me just exit from here. Just quit the whole thing. Okay? And then just rest... Let's relaunch that. There we go. Okay. CD desktop. There we are. Seems much more happier. Sorry about that. I think it's, one of the things... There we go. So that is the directory, and then we want to source k slash v n bin activate. So I'm using a a virtual environment. Okay. So this is Python three twelve, and let's launch Jupyter. It's I saw some error messages there. No. Seems happy this time. Oh, okay. There we go. So that's much better. There we go. Sorry about that. So let's have a look then. So, this is notebook zero. Okay? So, essentially, this will tell you the structure of all the notebooks, what what it is that we're trying to run, and then what the outcome is. It provides a nice summary of, everything that we're, trying to achieve and, you know, briefly tells you what each notebook is trying to do and then gives you a... There's a some summary of the sort of, the numbers there as well. Okay? So no code to execute in this one, which is fine. And then let's go to this one, which is the Neo4j internal. So remember, in the Snowflake environment, I was just showing you the code and suggesting that you copy and paste that. And where would you execute that then? Then across here, you can see that one of the options that we have in the left nav here is called query. K? And so typically, you'd select this. K? You'd need to connect, and why don't... Actually, why don't we do that? Why don't we just pick one of these things here? And, let's take this one, okay, which is the three hop ring and see if I can copy that, and we can take this across. Now if I just paste it here, I think it's gonna complain that you're not connected to anything. Let's have a look. So let's see. Instance. It's the wrong one. Okay? So what do you want to do? Yeah. So this is actually talking to the, I should just go back here. Bear with me. I... What we want to do is URL switch switch instance. Okay. So currently, this is set up for document intelligence, and what I want is virtual graph. Okay? So we'll select this one, virtual graph one, and let me just clear this. K. Just to get these out of the way, and let's paste that in here and run this. Okay? So there we go. Okay? So it executes fine, and it shows us these rings. We can click on these. Okay? You can see it pulls up the values. It shows us what the account number is, who the name, the customer is, okay, and what the risk is... The risk score. Okay? Presumably, if they're gonna borrow from, from the bank or something. So that is one way that we could do it. However, from our Jupyter environment, equally, we could do the same. Okay? So you can see these, queries here. Yeah. So there we go. There we go. So we could run this. Just... Oops. Just run all cells. Let's try that. So a lot easier to do. Right. What's happened? What is it complaining about? Let's take a look at this. Oh, I see. It... It's, I'll make sure this is fixed. My apologies for that. So it's complaining that the snowflake is, not installed there, so I'll take care of that. So why don't we do four? If if you've been watching closely, you'll know the... Exactly the mistake that I've made. Right? What was the mistake? The mistake was that that notebook was identical to the notebook in the, Snowflake environment. This is the one I should be showing you. Alright? There we go. Sorry. Pay attention, Chaudhri. There we go. Run all cells. Let's just execute this. Okay? There we go. So if we take a look here, let's just go to the top here. And so what we've done is we've got some dependencies. Okay? So Neo4j, pandas, Let me just see if I can make this a little bit bigger. There we go. And so we've got some environment variables, okay, that it picks up. So nothing is hard coded. This tells it where to where to point to. It connects to the virtual graph here, and then we got some helpers here in terms of doing the query execution As a sanity check to confirm that we are working with a thousand accounts, 50,132 transactions. Remember, we had that figure from, Snowflake. And then here, again, a whole bunch of helpers. So we are checking to see, here that we could execute this query. K. Query one. So this is identical to what we saw in the, in the Snowflake notebook number three. Okay? And then here you can see the output from this. Now a couple of these you'll see we execute and we have the opportunity to use, this package that... If you're familiar with Neo4j in Bloom, for example, these kind of, things here very nicely can be repositioned. So these are three hop rings. Excuse me. And then we can zoom in as well. Let me just scroll down a little bit. Okay. So here we select this. So we can get a bit more detail, move across like so, and these are the actual, I think, node IDs that we have available. So I was kind of very minimal in terms of the output here. Okay? You could output a lot more detail, and some of the, graphs further down actually give you more information. Okay? So here, we've got another one. Lots of textual output as you can see, and this is a three hop ring with similar amounts. So now we're doing a comparison. So remember, one of the clues is that typically for fraudulent transactions, you want to shift them across very quickly from one account to another one. And then this is showing you these. And then four hop rings, even in... There you can see four notes, connections, and then, this one is three hop ring with high risk account. Okay? So there is a definition of that as well. And here you can see, this looks a little bit more useful. It's quite a bit larger, and you can see the relationship is carrying the information here as well in terms of amounts of transactions. Yeah. That looks highly suspicious. K. They're looking very, very similar in terms of... And so I'd I'd probably want to investigate this. Alright? And check this out, see what's going on there. Alright? And so on. Okay? So then... Now sometimes you'll come across cases like this one here, for example, where you've got more than four connected together. Why is this? Well, the reason is... Think about it. It is a graph database. So there may be some natural connections that exist anyway. And therefore, it's there are ways that you can limit this as you can see in the other cases that, we've got slightly further down here. These are all four except for that one, which has obviously got some other connections in there. And again, there there are some explanations for this. Okay? So just the fact that you want three hot rings isn't necessarily... You're gonna get three hot rings. Okay? You may get more, and it's a case of then investigating those and looking at those in detail. So this is the the benefit that you get. Okay? And so on. So this gives us that initial kind of analysis and, ability to look into those. So using the clues, for example, we could identify some of these. Now the next step from here then would be... Suppose we want to then compare against the ground truth. So we did not bring in the is fraud, column in one of those virtual graphs, but we did in the other one because what we'd like to do then is to compare the results between the two. You know? Is there something that we can use apart from the clues that we've talked about that might help us? So the window, for example, cycles whose hops are between 3,000 and 10,000 sort of US dollars. Window plus similarity. Now are the amounts similar? Is the window also suggesting that it's fraudulent? So a couple... The clues kinda build up if you like. And then if we were to widen the clue, let's say we wanted to allow larger amounts of transaction values in, could we do that as well? Yes. We can. We can change that. And by doing these things, in the virtual graph that does not have the ground truth, actually, we get some very good results. And then when we compare this against the virtual graph where we do have the ground truth, surprisingly, we can see that there is a really good match as far as the virtual graph is and the analysis is concerned because it's allowed us to find, those, accounts and transactions that are taking place where there is suspicion that there's something fraudulent going on. Okay? So this is a kind of like a... If you like a sanity check or something to verify how the results are coming through and is the analysis proving, to be useful or not. So let me try and find something useful here. So here we go. So we we can do some discovery. Okay? So remember, window is just simply the amount range. Similarity is the fact that the amounts themselves are close enough. I think it's between within sort of roughly 3%. And then if we were to extend the window itself to allow a a larger range of values to be considered, would that be able to reveal, the the fraudulent rings? Indeed, it does. It shows us all of them. That's the key thing here. K? So we're looking at true positive, full post positive, false negative, and overall precision and recall is very good. And let me just take you down towards the end. Again, this is a lot of stuff here. I I appreciate. I mean, we we simply don't have the time to go through this, but there we go. One of the nice things there is that through these visualizations then... Excuse me. Here, where we are kind of being able to draw some conclusions from this that the red, for example, are those suspicious transactions. The blue ones, in this particular case, we're looking for three hops. They just coincidentally happen to be three hops. Right? They still appear here, but now we've managed to identify them and separate them out to say, well, okay. These are less likely to be fraudulent. And then it's not perfect. Okay? It... We don't get a perfect answer. So the gray ones here are the ones that we actually missed but are really fraudulent. So the the lesson here is that the technology can only go so far. Ultimately, it may require some human in the loop in terms of looking at that, doing some analysis, and so on, and and that can be very useful. So... And, again, some... Similar example here. So the red here is fraudulent. The gray is fraudulent, but we missed it. We misclassified them and said that these are actually okay. Now in the in the case of misclassification, the fact that we miss these ones could be expensive. Right? That is a a a sort of serious mistake. There's something that we need to think about. Is there other technology that could help us in terms of, giving us greater confidence and being able to give us better results? But overall, results are very good. I mean, it does a pretty good job. It identifies the... Most of those fraud... Fraudulent rings, and we can verify that against the ground truth, you know, where we actually know that they are fraud and compare the two, the results are very, very good. And then finally, if you want to do a little bit more sort of machine learning here as well, this is using scikit learn. Okay? And keep in mind that all of these notebooks are running against the virtual graph, and the virtual graph is talking to your data warehouse. So, again, nothing is leaving your data warehouse as far as data being copied across. The queries are being pushed, The results are being sent back, and then we're able to render them here. That's the key thing. So in this particular case, again, using a little bit of machine learning, and taking it a step further to see, you know, could we do more? Is there anything beneficial that we could, utilize to help us get greater insights? And so here's an example where, for example, the real rings, are all in terms of... I think this is measuring time. You can see they're all bunched up on one side. That's a strong indicator. Whereas these other ones, on the right hand side are the other rings, but they take kind of weeks, months, sometimes years in order to complete. So, again, this is a different way to look at the data, and here's another way that we could utilize that, a slightly different representation. Okay. So this is using a couple of techniques here. K. Standard machine learning tooling and then just giving us some insights into this. Lots of data as you can see out there. Pour over this in your own time, okay, when you have a chance to run this. So this is... And there's absolutely no harm in doing this. I mean, by no means are we claiming that, Neo4j will give you 100% sort of results. You know, use it as one tool in your toolbox, and then it can give you a great initial analysis for this particular problem, but augment it with other tools and techniques that you're familiar with as well to support and to investigate and to look at the evidence, and this is what this is doing. K? Just giving you a bit more to choose from and greater confidence in the output. Okay? Alright. So lots... As I said before, lots and lots of analysis here. And there we go. And so one of the key things here is that, with the analysis that we did, purely based upon the window, you know, that looks at the the lower and upper bound of the amounts that we would consider, In the case of false alarms, we got a lot. 727 here. Okay? And, you know, yes, it picked out many of the ones that were correct, but it also misclassified many that were genuine. Alright. You know, you're erring on the side of safety here. You... Probably some customer's gonna be a bit unhappy if you're phoning them up and saying, yo, did you do these transactions and so on. And so here with the similarity rule and the window, you can see the second result is a lot better. No misclassifications. We're almost got perfect result there. And then using this machine learning, it helps to identify a couple and this... The isolation forest there as well, a bit better, and there's decision tree as well. So just using these extra sort of, tools to improve the result if we can. And, yes, they can help to a point, but you can see that, you know, this is the outstanding result here that, you know, just taking account of the window itself in terms of the lower and upper bounds as well as the fact that these transactions are very similar in value gets us almost all the way, gives us almost a 100% in terms of result there. Yep. Alright. There we go. So that's that one. And then the last one, this is utilizing document intelligence. So what I've done is, I I pretended that I am the CEO of a bank. Okay? My bank has produced a half yearly analysis of fraudulent transactions. I have read that document into, this, document intelligence. Okay? There's the model that it's created. So I fed it my PDF document. It's been able to draw a lot of information out of that, and it's been able to create this, you know, analysis based upon the count and so on. So it picked out the entities and the relationships between them. And, again, happy to provide the PDF document as part of this as well. Alright? So you you can try this for yourself. And document intelligence, it's in preview, but, you know, it's great. Test it out. And, once I've done that, I've got another source of information now. And what notebook seven does, it combines that documentation with the virtual graph and then looks for additional patterns and additional kind of confirmation if you like. And that is something that could again be very, very useful to, you know, all the information that you could put together in order to do your analysis as an... As is someone looking into fraud analysis, is gonna be helpful to you. And so, again, you can see lots and lots of output here and lots of, data. But I think just towards the end here, we we can see that, purely through this additional information, it's been able to definitely confirm some cases here through the documents. Okay? So in this particular case, three. Okay? That's been able to pick out, marked in red here. The blue here are cleared according to that documentation, so that's, you know, things that we don't need to look at. And then all of these other ones here in orange are things that we we need time to do further analysis of. They haven't yet been, looked at in-depth. So that is something that we need to consider as well. Alright. Let me just try and scroll to the end. I believe somewhere at the bottom here, there is, yeah, there we go. And so, essentially, then, we've got... Virtual graph keeps the transactions where they are. Document intelligence turns the written side of an investigation into a graph. Okay? So that gives you additional evidence if you like or information that you could utilize as part of your fraud investigation that can feed in, and now you can combine both of these technologies together. And then even even further is the ability to use agents. Okay? So here, I've actually created a fraud investigator. There we go. And so I've given this investigator... Let me show you the, the prompt. Okay? So I've created a prompt for it, quite a long one. These are the instructions that I've given it. I said you are a fraud investigator, and here's what you need to do. Okay? Here's what I want you to do in terms of your analysis of the of the bank's transactions and so on and so on and given it a whole set of rules. And and, again, happy to share this with you. Okay? And then once this is created, notice on the right hand side here, we have a box. It's ready to run, so you could start asking it questions. Alright? So I'll try this. I had a sort of network time out a little bit earlier on, but we could say, how many... If I can type fraudulent accounts and you, identify. Let's see if that will work. It's a very broad very broad question. Let's see what it makes of that. Oh, there you go. My role is to help... So it said that... Oh, it says you you asked the wrong question. It says my role is to help identify suspected circular money transfers. Right, and it says based, on transaction patterns, amounts, timing, and account risk scores. So at least it's being honest. Okay? Now it says, would you like me to look for suspected rings in the transaction data? Okay. Yes. Have a look for suspected... Oh, sorry. If I can type... There we go. Have a look for suspected transaction data. Let's see what it makes that. So this is now connected to, virtual graph one, right, without the ground truth. But because, again, we don't want to give the agent any clues as to the things that might be fraudulent. Because in the real world, as I said before, highly unlikely you will be able to utilize something like that. So sometimes, there it... It times out a little bit. There's a network sort of issue, but it has been working just fine a little bit earlier. In fact, I think the elements of the discussion, was here before is... Maybe if I do cancel here... Oh, sorry. So sorry about that. It was halfway through it, and I and I interrupted it. My apologies. There we go. That's what I wanted to show you, but it it obviously insists that that... Okay. So I asked it a question. I said, is this account a CC000821 part of any ring? Alright? So based upon the prompt that I've given it, and it comes back and says, yes. I think this Paul Sanchez guy, and I apologize if there's anyone called Paul Sanchez in the call, risk score point 45 is part of one suspected three hot ring. Alright? So I've given it a problem. It's looked at the data. And, again, remember, it is not running anything locally. This query is going to the virtual graph. Virtual graph is sending that across to Snowflake. All of this is being executed on the Snowflake side. Results are coming back, and then it's giving us this analysis here. It says here are the details of this ring, and it suggests that it's Paul Sanchez, and it goes to Linda White, then goes to Miller Pacific Holdings, which is a company, and then back to Paul Sanchez again. And so it's got some time stamp information here as well. So probably it's picking up that as a clue. The fact that this whole transaction took eleven minutes to complete, again, that's gonna be really fast. Okay? And, so and so on. Okay. Now further down, I've given it, further questions here. There you can see it. I had a slight network error in that one. But there, I've asked it to produce a table of, and order it by risk, and it's done that for me as well as providing further details a little bit below there. Okay. So... Right. Let let me just check where we are. So we are doing well in terms of time. That's great. I'm pleased that we've got this good. So as I said before, all of these notebooks will provide. And so, you know, have a look at the zero zero notebook, which shows you the structure of all of them, provides a brief kind of information on what each one is supposed to do. One, two, and three run-in the Snowflake environment. Actually, one is the important one. I mean, two and three, you can largely ignore if you want, but I would load them up into that environment. And then four, five, six, and seven, give you additional analysis. So four is just running those Cypher statements that are in three but doing so through Jupyter. And, feel free to customize them, test them out, you know, increase the, the range if you want. However you want to do that, it's worth trying out. Number five is the ground truth. Okay? So now this is two virtual graphs. One has the ground truth, one one does not. And there's the detailed analysis comparing the results from the two. And, interestingly, what we find is that even where it doesn't have the ground truth, but it's able to utilize the window in terms of the the lower and upper bounds of the transaction amounts as well as the amount of time that it takes to complete. And, you know, if it's three hop, four hop, five, I think. No. No. Sorry. Three, four. Three and four, I think. Five and six, I think they are... I I haven't tested at that scale simply because I'm a little bit worried. As I said before, it gets a bit complex in terms of SQL. But if you want to push it and test it, have a go at that. That's very useful. And then, of course, you know, can we augment... Will machine learning add anything extra for us? Will it give us any further insights? Well, we found that it it did to a degree. But in actual fact, the results that were returned through using scikit learn in this particular instance didn't really add any... Anything further as far as the results was concerned because it did not improve the best results that we we obtained anyway. So that's kind of useful to know. And then document intelligence, very useful. So I think we are... We do have customers, for example, that are are are utilizing virtual graphs simply because there are constraints upon them as far as where they can keep their data, and in, you know, the, it must not leave the environment. But at the same time, they have external sources of information, documentation that can be fed in through document intelligence, PDF documents that can be read in. And now we can ask questions that combine these two environments. Right? So that is a very useful feature, and I've done that through Jupyter. There is another technology that is in the pipeline. And if I just go back here and show you instances, something that you may have heard about, this thing called composite databases. K. Something that I've been asked to look at. So that could be a very useful thing to think about for the future as well. And that, again, gives us, more confidence in terms of the results because whatever additional source of information that we can use as a fraud investigator, that is helpful for our job. We can utilize it. And then finally, you saw the agent there as well. The agent could be useful. AI makes mistakes, of course. Keep that. That's a caveat. I mean, don't rely upon it a 100%. But in terms of being able to do analysis and be able to mine the the data, you know, at scale, that could be a very useful technique. As long as you've given it this... The instructions that are specific enough, it understands this task. And you saw a little bit early on, when I asked it a very general sort of question, it said, you know, ask me the right question. You're asking me the wrong question. Here's what I can do. Do you want me to do this? And I said, yes. Okay. And then it goes away and thinks about it. I rudely interrupted it, which I didn't mean to do. But the prompt had to, it required several iterations to get it to the point where I was actually getting reasonable answers. So it's again that sort of question of, you know, formulating what you want to ask, go through that iterative process, agent improves each time in terms of the results that it's returning, and then there comes a point in time where, you know, you're not getting any additional sort of, benefit. It's just wasting a lot of time and resources, but it's giving a reasonably confident answer, which if you want to give to, say, someone who may not be familiar with the problem domain, but perhaps they have some expertise in in fraud, they could use that as a tool to help them do their investigation and be able to look at that further. That could be very very useful indeed. Alright. Okay. So, Super. Alexander, We can we you want to, answer a couple are there any burning questions? There were there were some there for a couple of up a couple, of times, take a few questions, specifically, if there's something that reading this one, from Ravi, but I I said this... on what they've seen couple of times. or, if there's nothing, you only showed virtual graph of go, on through and, it only available know, in Aura, or is, there a self hosted ten? minutes will be enough, and then we're happy to take questions use that, the end. additionally to, you know, just in Aura itself? Yep. Yep. Yes. Yes. Yeah. Yeah. Great question. So there is a self hosted version. And self hosted Neo4j virtual graph. There is a document page. Alright. I I can't type very well as you can see. That's that's why I need a bigger screen as well. Alright. There we go. So this is the self managed page. Okay? So this is part of the documentation. Yep. So if we take a look over here and what is currently supported, let's take a look at what it gives us. Let's have a look. Data sources. So this is fine, and let's go down and take a look at, self managed getting started. I think that's probably the best place to start. Virtual graph can be run outside of Aura. When run on self managed instance, Virtual Graph requires additional libraries. Okay? So you need some JDBC drivers, it's saying here, and a bit of configuration information that you need to set up as well. Okay? So, yes, you can do it. And here, you can see that once you've got it set up, it will come up as a self managed instance option. So enabling it, there we go. So there's some... You can see some, parameters and configuration that needs to be set. But, yes, absolutely. This is another alternative way that you could use it instead of running it in Aura. So for those customers that, would like to do, you know, the self hosting approach, perhaps you are already running, your own, you know, your own Neo4j environment, this might be very useful. Now in case of, the the types of JDBC drivers, this is very useful here. because it tells you, well, Google BigQuery, Databricks, Snowflake, no surprises there, but also looked up DB, SQLite, and the generic, for example. And so Ex... Exactly. Yes. that probably covers there was one question fair, that came relatively to the, beginning, but I wanted to to save it for for when we had a little bit of time. will use, particularly the generic one. the difference, between virtual, graphs and something answer the question. AGE, absolutely, yes, you can, Postgres, AGE it self hosted as well. That's, an option that... Worth considering if... Particularly if you're already you know that for, for Neo4j within? your environment anyway. Yep. Okay. Is that the... There is... I heard recently that, you know, there is a SQL standard around, you know, I I graph. I looked it up a little bit, Postgres, and I I think what what Apache AG have that included, is is basically was pulled out at the queries minute or something. Beyond that, Postgres I'm afraid my knowledge is a little bit limited. through through OpenCypher. So if there is another it's it's graph like a query parser. technology it's it's be used in Postgres, to it's going look into. that. In a, similar direction. okay, for my lack of. knowledge there. difference is that you But, yep. the data stays in your repository... In your lakehouse, in your warehouse, data warehouse, and. you just virtually create a graph that Okay. helps you with these things. What you have to do... Yep. If you were to do these Apache AGE things, you will have to migrate whatever data you have into this Postgres AGE. And then from there, you run your queries through OpenCypher. So it Yeah. sounds like a little bit of a data... A cumbersome data moving around. So, Yeah. I mean, when you already move your data. from something into an Postgres to to to access that, you might as well just. migrate directly into Neo4j. Yeah. Oh, okay. So, okay. Understood. Yeah. Yeah. Yes. Why not? Yes. So so the the question is great. I mean, are there other technologies out there that can do something similar? My guess is for for... Certainly, as far as virtual graph is concerned, it... It's not a unique concept. Okay? But I would say it's a very useful concept for a couple of reasons. First, we see enormous interest in graph technology today. Many things like ontologies, for example. Everybody's doing an implementation, and graph technology is a natural fit for that. Secondly, you know, when you think of graph technology, what do you think? What you... What is the one name that you tend to think of? Neo4j. Alright? It is the market leader. It is the largest provider of graph technology, you know, having started off in the NoSQL space. I appreciate that other vendors, some of the larger ones, you know, Microsoft, Google, others have implementations too. But by far and away in terms of popularity, if you go to DB engines and those kind of places, I mean, Neo4j stands out like a sore thumb. Okay? I mean, it is the leading provider of graph technology. I think the ability to utilize some of the capabilities that we saw today in terms of analytics, retaining your data in your warehouse, and no ETL, no data movement, but the the fact that you can query it now in a graph way, get back meaningful results, and then do other things with that data, embellish it, enhance it, investigate, and so on, particularly with the aura environment. So things like adding document diligence, adding, like, agents capability, and there's more stuff to come. You know? These are exciting times. There's lots of interesting things in the pipeline as well. I I think that that bodes well. If you are already a user of Neo4j, I I think this is a great plus for you. I mean, it gives you the opportunity to stay in the platform. If you are a Snowflake user and you're thinking, well, you know, Graph adds some interesting things, I'd like to be able to utilize that, but I have some constraints. My environment must stay within, you know, Snowflake or Databricks or whatever, a Google BigQuery. That's fine too. Okay? So you can utilize this as an add on as something that will give you some insights and, capabilities as we saw today. It's it's a difficult thing, I appreciate. I think partly because technology is just moving so fast. You cannot stand still today. I mean, it's leaps and bounds. It is very, very quickly. I mean, it's the fastest I've ever seen in my IT career. Yep. The the number of technological announcements that I made on such a regular basis, it it is just phenomenal. And it's it's challenging for you as a user and particularly as an enterprise user and challenging for the vendors as well because of the the need to add features and capabilities, you know, to meet the needs of your customers, but also also to stay competitive, to be able to provide new things and new ways and new ways of working, new insights, and so on. So I I think it's it's a difficult question to answer. I I think there are alternative ways. There are other technologies out there. And I guess the choice then is what is the most convenient path for you as a user? Yep. If you are a Postgres user and you have this ability to have, like, an embedded engine or something like that, an add on capability. that gives you some graph good. support and it meets your needs, that's great. On the other hand, you might find there's some limitations there. You know, if you need the graph capability and this virtual graph looks like something that could be really useful to you, then it's worth considering very seriously indeed, I would say. So just my personal thoughts there. Okay? I... Absolutely. Not the views of Neo4j, but based upon Let's... about are a couple other questions, of working save IT for later because you said that need seen couple there in the. real world. That's that's... Pick the best, tool for the job. gonna And what I. would say, if if people are kind of undecided, come to us. You know, talk to us. We'd be happy to work with you. We... We're happy to do a proof of concept. We can, you know, demonstrate the features and capabilities. Hopefully, it meets your needs. You know? So reach out to us and talk to us. Yeah. Yeah. Yeah. Great. Thanks very much. And and thank you very much for the questions. So great questions there. And, so let's just do a little bit more. Okay? So we can we can wrap up fairly soon, and let's just get back into presenter mode. Now why does it do this? Okay. I do not want that window. There we go. That's what I'm looking for. Alright then. So, Cypher in Jupyter then scoring against the second virtual graph. Okay. So we looked at that. We saw that, actually, virtual graph itself does a pretty good job, and we were able to prove that through the use of, you know, some machine learning algorithms as well, which provided no additional benefit. Okay? I mean, that's the key observation there. The alone virtual graph did a good job and that might be enough. So did it find the real rings? The detection graph, virtual graph queried in place on Snowflake, no fraud label is mapped, shows that Neo4j finds from the data alone, which is awesome. Okay? So our ground truth is just a bit of a trick that we're using, okay, just to to to test it, how good are the results, and we've... We see that the results are actually very good. Second virtual graph on the same Snowflake tables, you know, maps is fraud ring as well used only as the answer keyer and then just a way to test the system. And then here's a nice kind of summary. So just using the window, Okay. Sadly, huge number of false alarms. Right? But the secret here is don't rely on one answer. Right? So, unfortunately, precision is not very good. It's only 3%. Recall, a lot better, 86%. But here is the the the key finding from here is that once you start to look at, the window plus the similarity, I mean, you're getting nearly all of the fraud, rings there. Okay? And precision, as you can see, goes up to a 100% and recall is, you know, still at 86%, but these are pretty awesome numbers. And then once you widen that window to accommodate a bigger range in terms of the value of the transactions that are taking place, you get a 100%. You get you get all of the fraud, and you're getting a 100% for precision, a 100% for recall. So, you know, overall, it does a pretty awesome job, and it gets you these results. Now caveat. What... What's the caveat? Right? You know what I'm gonna say. This is synthetic data. Alright? Your mileage may vary. But hopefully, we've given you enough information here, enough sort of, guidance, techniques, examples that you can take this and customize it and utilize it for your own problem domain, and, hopefully, you will get great results too. That's the key thing. I'd love to get my hands on some real, sort of fraud data. Like I said, there's only one dataset that I'm aware of that's pretty good from Kaggle, but, you know, that's like two days worth of transactions, and it's in... I think there's a university in Belgium. But that's kind of old now. Right? But... And a lot of the columns are just hidden. We don't know what they mean. Right? There's a principal component in us. We've got no idea what they are. We know the the the the time. We know the value of the transaction, and and that's pretty much it. So so not much to go in there. Alright. So what's the key difference here then? You know, when would you use virtual graph versus, say, Neo4j proper? And what I mean there is Neo4j Aura. So virtual graph explore and prototype quickly. Data must stay governed in the warehouse. Exactly the situation we saw today that, you know, data cannot leave Snowflake. Many enterprises prohibit that. No ETL allowed. Nothing can leave that environment. It's under control, and, therefore, something like virtual graph is a great fit for that situation. Questions fit... Fixed hot patterns, great for discovering these things. Occasional or batch investigation. Again, remember, once you are starting to scale up, you are putting a greater load upon the back end warehouse. Right? At some point, things are gonna take a lot longer to run simply because as as good as virtual graph is and as as good as it is in creating these optimized queries, ultimately, it's a... It's it's SQL that's running on that environment in the back end on that warehouse. And if that SQL is complex and, requires time and effort to run, I mean, it may be tying up resources for a long time. So think about that carefully. And and that might be a good, opportunity to then think, well, would it be better if we were not to use Aura instead simply because it's gonna be much faster. Hot frequently queried data, deeper parts and time logic. Okay? So as good as virtual graph is, it has some limitations. There's still some things that engineering is working on that you can't quite do. Aura fully supports all of those. And that might be, again, something that, you know, if you're in kind of two minds, this might be one of those things that you decide. And you've got things like graph algorithms and real time response. You need fast responses to make a business decision. It makes sense to consider Neo4j. What does Neo4j add? Variable led paths, time logic, graph algorithms, low latency, real time queries. Just... We've covered that briefly in the last slide. And so here are some examples. So things like this, for example, which are very useful. Okay? So here, we're saying, you know, between three and six hops, for example, which at the moment, and someone from the engineering team will no doubt beat me up, but I think it's not currently supported in virtual graph. So that's why some of those statements you saw were a little bit longer than perhaps might be so if we were using pure Neo4j. So the practical part, you know, starting place, map the warehouse tables, explore with Cypher, no pipeline, try it out. Okay? See how useful it is. Like I said, happy to work with you. We can do POCs with you. We can explore the opportunities where this might be a good fit for your business requirements. In in my case, I wanted to measure how good it it was at identifying these fraud rings, hence the reason I created a second one with the ground truth so I could have something to compare against. And, you know, you can see the results, it just blow you away. I mean, it did really, really well purely on that. And then graduate. So if you've got, like, a hot subset of data, it makes sense then to think about moving that to Neo4j proper, okay, or a... And you gain some, you know, significant commercial and other benefits from that as well. Okay? So, briefly, the GraphRag, that's achievable through the document intelligence. Very simple. The... If I... I think somewhere on here... Let me just see where it is. Oh, here we are. So this is a document intelligence course that should be live on GraphAcademy. Okay? So this is free. So it works through a medical example, and I know because I put this together, so it's it's mine. So in forty five minutes or less, okay, you get to understand how to use this quite well. Again, awesome piece of technology, which, again, is in preview, but, hopefully, will be GA in the very near future as well. And, you know, a great way to augment virtual graph, particularly in this fraud analysis kind of example, where as an investigator, if I can get my hands on additional information that could help me, I can feed it into document intelligence. Now I've got two systems that I can utilize, and I I can, you know, augment that with a third, an agent that I can teach. I can give it enough information that it can make some sound judgments as well. But, you know, again, don't rely a 100% on AI. AI makes mistakes. Human in the loop is still very important, but these tools now make me more productive. It lets me investigate things faster specifically in this problem domain. And, you know, where we have fraud, as you know, the bad guys are always one step ahead. They always got something they can do better. We need to keep up with them, and any tools that we can use to help us in that task has gotta be a good thing. So here, some points there in terms of the fraud investigation agent. So these are the kind of things that I was trying to achieve. Okay? So essentially build an analyst. Ask it about suspicious accounts, which we did. You saw me show you the example. And it can then, you know, write the query, issue the Cypher, send it to Neo4j. Neo4j will then optimize it, you know, convert it to SQL, send it to the warehouse to execute, and you get your results back. Okay? So that could work really well. So key lessons learned then. What what are the things that we've learned? Things that I'd like to draw your attention to. Three ways to map the schema. You can do it manually, automatic from the schema, or AI assisted. In this particular instance, I chose to do it manually because I wanted to see how I could do that mapping a different way, you know, rather than having a a one to one between a table, kind of definition if you like and a node. Would it be possible to represent something as a relationship as the transactions as a relationship? And yes, you can. And that worked very successfully in this particular case. So try the approach. Find the approach that's best and works best for you. K? So manual gives full control over labels, keys, and excluded columns. Transactions are relationships, not nodes. My humble opinion, just for this example. Okay? You may disagree and there may be other situations where this is not the right fit. Understood. Okay. I I appreciate that. So the natural instinct is to model every table as a node. In a graph model, a transaction is the edge connecting to accounts. That's how I feel. Variable length paths are not yet supported. So as I said before, there's a few limitations to virtual graph at the moment. Engineering are working on these, doing an awesome job. Hopefully, many of these, limitations will be addressed in the very near future, but just be aware of these. Okay? So if you're thinking that it's gonna support the full Cypher language at the moment, that's not possible. Okay? But, you know, it's good enough. Hop depth affects performance. Three and four hop queries run fast. Five hop and beyond, I really didn't try simply because I was a little bit concerned that it's gonna tie up resources and compute for some time. And I think particularly for a session like this where we are limited in time and scope, you know, I didn't want to run anything anyway. And then similarly, I didn't wanna impose upon you to try it for yourself. But if you really, really wanna have a go, you know, by all means, just modify the code and test it out, but then think, you know, does it make sense? Would it not be better to use Aura, you know, instead? Is that not a better fit for what you're trying to achieve? So key takeaways. Virtual Graph lets you query warehouse data as a graph without moving your data. Can't emphasize that enough. Okay? Use simple and readable Cypher patterns with your relational warehouse. So Cypher is very, very capable language, very powerful, and, I I think there are instances where it can do better than SQL specifically around the recursive CTE type examples where actually if you want to modify your code for a recursive CTE, it's gonna be more lines of code. Whereas with Cypher, typically, it's like you add one extra line, right, for an extra hop. That's all you need. Governance and security stay intact. The data never leaves the warehouse. Again, I know that for many enterprise organizations, this is super important. It it is, you know, nonnegotiable kind of thing, and therefore, you you you meet that head on and you have no problems with that. Virtual graph does no ETL, does not take anything out of that environment. Fixed top cipher works today. Variable length and full graph algorithms come with native Neo4j. So, ultimately, the full, implementation using Aura gives you a lot more capabilities today. But, you know, as I said before, engineering is awesome. These guys are working on on these challenging problems. So hopefully, many of these limitations will go away soon. And why did I want to show you this example? Because I think this is a useful real world example to demonstrate. It's practical. And even if you're not in this particular domain of looking at financial fraud, I hope that the common... Some of the ideas and the patterns that you've seen will be useful to your problem domain. And again, if you're interested, you know, come and talk to us and we'll be happy to work with you, do a POC, and then take it from there. Okay. So resources to look at. And and by the way, what I'll do is a PDF version of these slides. So so Alexander, I promised him that just after this session completed, I would bundle everything up, put it on a GitHub repo, and, send in the link. So he will send out a mailer to everyone that's attended and presumably everyone that didn't attend as well, where you'll get the links to all of these resources. So there is a very nice blog post that covers the announcement of virtual graph, virtual graph documentation, AuraDB, okay, in terms of its capabilities, and, of course, Graph Academy where I work. Okay? For all the courses are free. And there is a course on document intelligence. There is... There are two courses on virtual graph as well, one for Snowflake, one for Databricks. A little bit of a caveat there. I am working on improving those. Okay? So in the near future, they should be vastly improved, versus where they currently stand. So you might want to just wait a a week or two, and then hopefully, we'll be able to push out the new versions for. that. Thank thank you very much, any. further was? really good. K. People how did. we do for time? lots of. thank yous and great lectures roughly great presentations. from, from chat. So thank, you very much for take any further questions. if you have them, Thank you for for your questions. burning you have any more questions, any sort of particular we have that you've seen that, people are interested minutes or so, or, so we can stick around that was not clear, for that to answer some. than happy to, I see a couple here. So we might just dive into those and then give people some. time to type in any other questions that came up. Thank you. So there is one that's from Regina and they ask, what was the actual Yeah. update or the added value through adding document. intelligence? What what did that bring? And how... Could you maybe show that again or explain it one more time what the what the benefit was. through through document intelligence part? Yes. Yeah. Yeah. Awesome question. Now, can you see my, It's okay. entire screen? Is that still visible? Alright. Let me just shrink that down and just show you the desktop. Okay? So what I fed into document intelligence was this. This is like a financial crime unit, h one twenty twenty six investigations review. I got AI to write this report for me. Okay. I cheated a bit. Alright? So I I I haven't had enough knowledge to to write this, but think of this as a... And this is a fictitious bank called Orchard Bank. Okay? Hopefully, there isn't a real Orchard Bank out there in the real world. If there is, there's no, you know, similarity is purely coincidental. But what I did was... There's an executive summary and then there's scope and method and then the summary of cases in terms of fraud, circular transfer. It's identifying the date of transfers, the... What is the outcome, and so on. So think of this like a sort of half yearly sort of report, based upon some investigation that was done within the bank, for example. And so what I was able to do is I was able to feed this into document intelligence, and this contains possibly some additional information, okay, which I may not be able to find directly through virtual graph, but I can augment what what I can do now. So now I've got an additional source of information that might might confirm a particular account is fraudulent or it might not. Okay? It might clear it. So it's... This is perhaps a detailed investigation that was done for the bank. By feeding this in using document intelligence, I have this information available to me now within that cloud environment that I can use, excuse me, and ask questions that span the two systems. So my virtual graph and my document intelligence. So working together hand in hand with extra information that I might not have available. So as a fraud investigator, it gives me an additional tool that I I can now use. And then similarly. extending that one step further to the agent by giving the agent a very detailed prompt and giving it a set of instructions in terms of what I'm looking for, it can go away. You know? I I automate the task of, it going away and looking at stuff for me, returning an answer, and then me being the expert, I'm not really, okay, but pretend I am, I could then use that information to either, you know, confirm the findings that I may have or, you know, contradict them or whatever. So it helps me in terms of providing additional information. So certainly for this, document intelligence gives me added value. It gives me another source of information that I can use to augment what I already have, and I think that's the real benefit. And I think there will be many situations where this is true. So as I mentioned, the the example that I heard was that we have a customer. Neo4j has a customer that is a user of one of these large data warehouses. I forget which, which vendor, but they've got everything stored within this large data warehouse. It can't leave that environment. Okay? It has to be controlled and monitored and so on and so on. You know? Role based access control and all sorts of restrictions in terms of who can access what data, and that's fine. I mean, that's an enterprise requirement. At the same time, they have a whole set of design documents that they have within a PDF format. This information then can be loaded in using document intelligence, and now they can get greater insights across these two systems, using the document intelligence to analyze the PDF, create the entities, create the graph model, and then be able to ask intelligent questions of this in addition to whatever, you know, virtual graph could bring back from the data warehouse as well. So that's a scenario that could really work well. And so think of this as just something else that could help you in terms of augmenting, what virtual graph already achieves. And there's nothing to say you have to use the two together. So you. may think to yourself, well, I don't... You know, No. I think totally. is great, but today, maybe just to add that, need to use it. But, hey, hang on. don't do analysis intelligent looks awesome. It's something that I could utilize this, or any data really do its a. whole bunch of PDF always like you will have existing analyze, systems, and will wanna, get greater this case, into this, unstructured data, and I want to be able to ask intelligent questions of this. And now, sources can do this tie in. Then four j. this theme of in, a long winded way, I, I hope that answers heard, the question. context engine, which we just talked about this week, is like coming. together. You have your Snowflake adding it through a virtual graph into your... Generating a holistic view, basically, of of all your sources. Yeah. And then the the added value is then to say, okay, here is my my fraud database or my why I found the fraud people. Here's my analysis. Here's my unstructured documents like this report or something else. Bring it all together and then do analysis on top of it. It helps you make the right decisions, make the right calls. It's easy if you look at one system, but it gets. hard if you have 15 different systems where everything is kind of like clustered all over. Yep. Yep. Yeah. Yeah. Yeah. Yeah. Absolutely. And and I think, Alexander was adding that, today, document intelligence, I think it's still marked as preview. Okay? So it's free to use. This is fine. Agents as well, as far as I'm aware, and someone will correct me, but, again, free to use today. VertuGraph is the only one that if you... And since I'm sharing my entire screen... I mean, let me just, exit from here. But let me show you. I'm logged into another, account. So what I was running in terms of or, virtual graph and the Aura console, this was in a... In in an internal Neo4j account. Here is me with my private email address logged into another, Should, we can... in Neo. four j. And then as you can see here, virtual graph is ghosted out. It says add a payment method to use virtual graph. Sorry about that. So, it is marked as brief as you. So like I said at the beginning, if you are working with Neo4j already and this is something that interests you, talk to your account manager. Okay? And then I'm sure some... We could arrange something. something that would be possible to give access to this in terms of evaluation. be, I don't are always looking for great. partners to work with to help evaluate our technology, and that could be a great way to do this. I I... And I apologize. I don't know how much it would cost to actually use it. I suspect not very much, but don't quote me on that. Okay? So I I I I will deny everything. So... But, typically, the cost should be fairly fairly reasonable. You saw that in the virtual graphs. I cannot... when I was, I just the process of creating another it. in the documentation. So so, could, select should be probably, a good point, to take back then the team select at least amount of memory, it. And it was four at least what eight gigabytes. people can expect. And you could see that the cost in terms of, Alright. you know, I think that cents was tiny. gives us maybe, time for one. more question that came in. it's of hinted order, it at this a little apologize. bit already. Off the, top of my. head, You know, don't have the exact really. large, So sorry about that. transactions, large datasets, and real time query timing, then migrating over to Neo4j internal or. native Aura. is a good cause. But Akmal asks, Have you. tried this when your Snowflake dataset maybe consists of millions of transactions instead of a couple of thousand that you showed in this demo? Can you say there's a cutoff point or some limitation. where you think, Okay. What's a reasonable size where it still makes sense to do virtual graphs and where it doesn't anymore? Yep. Yeah. Yeah. Yeah. Yep. Yeah. Yeah. Yeah. Great question. Thank you very much for the question. Again, very challenging to give you a a, you know, a specific answer to say, if you have this much data, you know, you should use virtual graph. If it's more than this, don't use it. You know? I I think part of it depends on the complexity of the data, not just volume, and part of it might be the sorts of queries that you're asking. So remember, I did say that, you know, for small number... For this particular fraud example, the number of, kind of chains that are created, the loops, you know, in terms of accounts, sort of a to b to c to d. If they are fairly small, like three or four, type of hops, it works really well. Once you start to think about larger numbers, you know, five, six, or beyond, and you've got lots of data. So not only is it the the the query itself becomes complex because it it it... Cypher has to be converted into SQL. It's gonna take an effort. But now the volume of data also matters. Therefore, you know, you... You're probably gonna hit a wall at some point. Hard to say where that might lie. I mean, all I would say is, again, if you have something in mind, let's say you have a use case in mind where possibly you're looking at millions. or tens of millions of data points, potentially rows, and you want to bring them into something like virtual graph, talk to us. My colleagues in field engineering who work with customers all the time, they will be able to help you and guide you much more than than I can. But I think, Alexander Erdl, what we can do is that that... That's a question that we can take away and and and pose to them as well to see if we can, obtain an answer for that. And that would be very helpful as well. But I think in all cases, it's very difficult to give a specific answer simply because every customer's needs are different. The kind of problems that they have in mind are different. Their datasets are different. How they wanna query is different. And so it's not just volume, but it's it's also complexity and, you know, how. much of the data they want to query. Yeah. In this particular case, I was... I inserted just enough point three percent of fraudulent transactions, which is sort of fairly typical, and it dealt with that quite well. But if you have access to virtual graph, why don't you test it out? You. know, just see if. you can scale it to half a million, or let's say 5,000,000, you know, and do the number of accounts appropriately. I might give that a go if I have time. Sadly, I think I I... My my poor laptop may may, sort of start complaining in terms of Jupyter. good. Perfect. I don't know how much it's. gonna bring across, but we'll see. Let let, let me think, do... Let me give it a go and see what happens. it today. Okay? Because, ultimately, As we said in the beginning, the the back end, Akmal warehouse is doing all the work. a? repository where all the heavy lifting is done. Notebooks, The the results are, just being rendered links, in terms of the client, okay, for is just the browser. copy and that might be, to try yourself and grace yourself. there. So We will share that in an email as a follow-up email with you probably tomorrow. So you'll see everything there plus the recording of this session as well. So you can watch it again and probably copy what Akmal has done with your own data or if you're at least part of that replicate the session. for your own. And like we said, if you have questions, if you want to try this yourself, if you see or have any other issues, then please reach out and let us know so we can help you with that. And, yeah, with that, thank you everybody for watching today. Thank you for your question. Thank you for sticking with us, and for participating today. Yep. Thank you, Akmal, for the workshop. Great material. Amazing workshop today and very, very interesting content. Like we said, try out virtual graphs, try out document internals, and all the features. Explore and play with them a little bit and see if that works for yourself. I think that's usually the best way of proving to yourself this is work or not. It's easy as ever with all the AI that is making. it easy. And yeah, with that, next week we'll do another workshop, Agents in the Wild, with Alexander. If you're interested in doing more and learning more, join us on next. week, same time, same place. And, yeah, with that, take care, everybody. Have a good rest of the week. See you soon, and bye bye. Oh, yes. Yeah. Thanks, everyone. Bye bye.