IBM / AMLSim

The AMLSim project is intended to provide a multi-agent based simulator that generates synthetic banking transaction data together with a set of known money laundering patterns - mainly for the purpose of testing machine learning models and graph algorithms. We welcome you to enhance this effort since the data set related to money laundering is critical to advance detection capabilities of money laundering activities.
Apache License 2.0
252 stars 81 forks source link

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7 during run_AMLSim.sh conf.json #31

Open florisviss opened 4 years ago

florisviss commented 4 years ago

Thanks for making the changes, the first part of sh scripts/run_AMLSim.sh conf.json works I suppose. However I get another exception error:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7 at amlsim.AMLSim.loadAccountFile(AMLSim.java:214) at amlsim.AMLSim.initSimulation(AMLSim.java:99) at paysim.PaySim.start(PaySim.java:115) at amlsim.AMLSim.executeSimulation(AMLSim.java:403) at amlsim.AMLSim.runSimulation(AMLSim.java:84) at amlsim.AMLSim.main(AMLSim.java:496) The full command prompt is:

Microsoft Windows [Version 10.0.17763.864] (c) 2018 Microsoft Corporation. All rights reserved.

C:\Path\To\AMLSim-master>

C:\Path\To\AMLSim-master> python scripts/transaction_graph_generator.py conf.json Random seed: 0 Simulation name: sample Generated 10000 accounts. Add 99900 base transactions Exported 10000 accounts to tmp\sample\accounts.csv Exported 100632 transactions to tmp\sample\transactions.csv Output alert member list to: tmp\sample\alert_members.csv Exported 792 members for 100 AML typologies to tmp\sample\alert_members.csv

C:\Path\To\AMLSim-master> sh scripts/build_AMLSim.sh

C:\Path\To\AMLSim-master>sh scripts/run_AMLSim.sh conf.json General transaction interval: 7 Base transaction amount: Normal = 100.000000, Suspicious= 1000.000000 Random seed: 0 Simulation name: sample Working directory: tmp\sample\ dec 05, 2019 12:53:12 PM amlsim.AMLSim parseArgs INFO: PaySim Properties File: paramFiles/paysim.properties dec 05, 2019 12:53:12 PM amlsim.AMLSim parseArgs INFO: PaySim Properties File: paramFiles/paysim.properties dec 05, 2019 12:53:12 PM amlsim.AMLSim parseArgs INFO: Simulation Steps: 720 dec 05, 2019 12:53:12 PM amlsim.AMLSim parseArgs INFO: Simulation Steps: 720 Norm: 100 Case: 50 dec 05, 2019 12:53:12 PM amlsim.AMLSim initSimulatorName INFO: Simulator Name: sample dec 05, 2019 12:53:12 PM amlsim.AMLSim initSimulatorName INFO: Simulator Name: sample dec 05, 2019 12:53:12 PM amlsim.AMLSim initSimulatorName WARNING: Output log directory already exists: tmp\sample\ dec 05, 2019 12:53:12 PM amlsim.AMLSim initSimulatorName WARNING: Output log directory already exists: tmp\sample\ dec 05, 2019 12:53:12 PM amlsim.AMLSim executeSimulation INFO: Transaction log file: tmp\sample\tx_log.csv dec 05, 2019 12:53:12 PM amlsim.AMLSim executeSimulation INFO: Transaction log file: tmp\sample\tx_log.csv PAYSIM: Financial Simulator v1.0

dec 05, 2019 12:53:12 PM amlsim.AMLSim loadAccountFile INFO: Account CSV header: ACCOUNT_ID,CUSTOMER_ID,INIT_BALANCE,START_DATE,END_DATE,COUNTRY,ACCOUNT_TYPE,IS_SAR,TX_BEHAVIOR_ID,BANK_ID dec 05, 2019 12:53:12 PM amlsim.AMLSim loadAccountFile INFO: Account CSV header: ACCOUNT_ID,CUSTOMER_ID,INIT_BALANCE,START_DATE,END_DATE,COUNTRY,ACCOUNT_TYPE,IS_SAR,TX_BEHAVIOR_ID,BANK_ID Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7 at amlsim.AMLSim.loadAccountFile(AMLSim.java:214) at amlsim.AMLSim.initSimulation(AMLSim.java:99) at paysim.PaySim.start(PaySim.java:115) at amlsim.AMLSim.executeSimulation(AMLSim.java:403) at amlsim.AMLSim.runSimulation(AMLSim.java:84) at amlsim.AMLSim.main(AMLSim.java:496)

C:\Path\To\AMLSim-master>

hkanezashi commented 4 years ago

Sorry for the late response. Related to issue #30, we re-arranged parameters in the configuration JSON files. It should work with the same commands and parameter files.

FredWrecked commented 2 years ago

I modified the loadAccountsFile method

            private void loadAccountFile(String accountFile) throws IOException{
    BufferedReader reader = new BufferedReader(new FileReader(accountFile));
    String line = reader.readLine();
    logger.info("Account CSV header: " + line);
    Map<String, Integer> columnIndex = getColumnIndices(line);
    while((line = reader.readLine()) != null){

        if(line.equals("")) continue;

        String[] elements = line.split(",");
        String accountID = elements[columnIndex.get("ACCOUNT_ID")];
        boolean isSAR = elements[columnIndex.get("IS_SAR")].toLowerCase().equals("true");
        int modelID = Integer.parseInt(elements[columnIndex.get("TX_BEHAVIOR_ID")]);
        float initBalance = Float.parseFloat(elements[columnIndex.get("INIT_BALANCE")]);
        int start = Integer.parseInt(elements[columnIndex.get("START_DATE")]);
        int end = Integer.parseInt(elements[columnIndex.get("END_DATE")]);
        String bankID = elements[columnIndex.get("BANK_ID")];

        Account account;
        if (isSAR) {
            account = new SARAccount(accountID, modelID, normalTxInterval, initBalance, start, end, bankID,
                    getRandom());
        } else {
            account = new Account(accountID, modelID, normalTxInterval, initBalance, start, end, bankID,
                    getRandom());
        }

        int index = this.getClients().size();
        account.setBranch(this.branches.get(index % this.numBranches));
        this.getClients().add(account);
        this.idMap.put(accountID, index);
        this.schedule.scheduleRepeating(account);
    }
    int numAccounts = idMap.size();
    logger.info("Number of total accounts: " + numAccounts);
    diameter = new Diameter(numAccounts);

    reader.close();
}