Suits, money laundering, and linear programming
75 points by apwheele 8 months ago | 30 comments- seanhunter 8 months agoBTW before anyone gets any bright ideas about trying this in real life:
This is called "layering" and is often a criminal offense [1] and banks have effective means to detect it (as they are required to by law). In particular they are highly attuned to flows of money that seem to split up large bunches of cash into smaller amounts that the would-be money launderer thinks will be below some static threshold. The detections which catch this have been in all banks I've ever worked with (since around 2010 when I first touched on doing any anti-moneylaundering work and they were very mature and well-established by then)[2].
You are highly unlikely to get away with it unless you have already been doing it for some time or know someone who has and is willing to share their techniques.
[1] Obviously or not it's only a criminal offense if you doing it to evade detection (eg for tax fraud or to avoid paying say a court settlement or something) or are otherwise laundering the proceeds of crime - that sort of thing. If you're just doing it for your own amusement it will probably get you added to a watchlist of suspicious accounts at your bank that they will monitor extra closely and may get you investigated by various financial crime enforcement organisations. Which even if you haven't done anything wrong I imagine would be stressful and time-consuming.
[2] To give people who are not part of this world the idea, at least in the UK and US all employees of any kind of deposit-taking institution are required by regulators to have an annual anti-moneylaundering training which covers layering and how to detect it. So literally every bank employee should know what this pattern looks like and should be on the look out for it.
- Shatnerz 8 months ago> This is called "layering"
I believe it is actually "structuring".
Layering is a step in money laundering where layers of legitimacy are added as money moves around. Structuring is breaking larger transactions into smaller transactions in order to avoid detection. Smurfing is also similar to structuring and honestly I don't understand the difference well enough to explain, but they are often used interchangeably in my experience.
edit: Here is a short educational video on the topic of money laundering: https://www.youtube.com/watch?v=RhsUHDJ0BFM&t=90s
- seanhunter 8 months agoOoh yes. Thanks for the correction.
- seanhunter 8 months ago
- Shatnerz 8 months ago
- JohnKemeny 8 months agoThis is Subset Sum and is famously NP-complete so, no, an LP doesn't work. However, the problem is only weakly NP-hard and there is a pseudo-polynomial time algorithm running in time O(M • n) where M is the sum and n is the number of accounts.
The problem is, perhaps, most of all, that it takes the same amount of space.
Ps, it's not a permutations problem, but a subsets problem. While permutations is n! subsets are "only" 2^n.
- whatever1 8 months agoThis is a MIP. CBC is an open source solver with a very basic implementation of branch & bound, cuts and search heuristics.
Any modern commercial solver (Gurobi, Xpress, IBM-CPLEX, COPT) can solve problems of this size pretty fast.
- JohnKemeny 8 months agoI agree that you can solve it using MILP, but I would say that commercial solvers will solve many instances of the problem pretty fast. But we know that you need even Ω(n²) time for 3SUM, so given large enough n, some instances will take a long time, regardless of solver.
- whatever1 8 months agoThis is assuming exhaustive search.
This is not what math programming does. Theoretically if you derive tight enough cuts for the problem and the solution lies on a vertex of the relaxed simplex you you can get the optimal solution in polynomial time.
- whatever1 8 months ago
- JohnKemeny 8 months ago
- w1 8 months agoThis is also a problem for accountants, trying to do “account reconciliation” to determine which transactions contribute to a given balance.
I made a simple tool that does this client-side for an accountant friend a while ago: https://reconciliation.spcdx.com/
(Warning: runtimes do quickly scale, due to the time complexity described above)
- TacticalCoder 8 months agoCan't subset sum like in TFA be solved by dynamic programming using a modified 0-1 knapsack? (modified to keep track of selected items)
- JohnKemeny 8 months agoYup, in time (and space) O(M • n), so with M = 1 million and let's say n = 1 million, it takes space 1 trillion. Given a byte per number, it takes a TB of memory, but is otherwise doable.
Ps, you don't want to risk a running time of form O(Mn²).
- JohnKemeny 8 months ago
- JadeNB 8 months ago> weakly NP-hard
What does this mean?
- JohnKemeny 8 months agoWeak NP-completeness is problems that are numeric in nature and that become polynomial time solvable if the encoding of the numbers are given in unary.
- JadeNB 8 months agoAh, thanks. Then, since "NP-hard" and "NP-complete" are different, I would expect "weakly NP-hard" and "weakly NP-complete" to be different; but, at least according to Wikipedia, they are synonymous.
- JadeNB 8 months ago
- JohnKemeny 8 months ago
- whatever1 8 months ago
- taeric 8 months agoI used to walk people through the "2sum" and "3sum" variants of this for an interview question. I was not looking for anything complicated, such that it was easy enough to talk through solutions that we could play with. Had a few people that would take us down some rather complicated approaches. (Even gave offers to some that got through some complicated solutions that wouldn't work.)
I never tried doing an "optimal" solution. Thinking about the problem, I'm curious if a BDD approach wouldn't work? Will try and write one up to see. Fun times.
- morkalork 8 months agoPlease tell me the position entailed more than just CRUD application work
- taeric 8 months agoI said I gave offers even for folks that didn't get it working. :D
I was more using this as a way to discuss code. And "2sum" is a pretty trivial problem to solve linearly. Especially if you allow high level language use.
(To directly answer the question, there was more than CRUD. Probably still more CRUD than folks would expect.)
- taeric 8 months ago
- morkalork 8 months ago
- wakawaka28 8 months agoIn the real world this would be more complicated, because there could be more mixing and withdrawals. Banks also have a lot of visibility into account transactions, at least in the case of accounts which they would know the balances for.
- rustcleaner 8 months agoNo, money needs to be like Monero and the state can f- right off with their panopticon financial surveillance. Sometimes it's better to be armed and tolerate or handle an occasional little bad-guy, than it is to succumb to a supermassive Goku-monster bending you over a barrell and freeing you into life-long [legal] disability with his gargantuan **** of [In]Justice™ for failure to report and pay that last $40 in income tax!
Ben Franklin on security and liberty, or something.
- phinnino1 8 months agoamazing