I got a chance to look at a new decision product this week – Incanto from Qualia Systems in the UK. Incanto is a decision modeling tool and the founders of the company describe their objective as providing both a “scribble pad” where you could have a continual development process, moving pieces around until what you have works, that then executed very fast indeed. They wanted to empower analysts to automate decision processes and make it easy to see if you are getting what you think you should be getting.
Incanto as a product is a custom Java IDE that handles a set of models – Decisions (rule networks or decision trees), Judgments (weighting), Derived Dimensions (calculations, data transforms), Actions, Set and Global Dimensions (set handling and global values like highest value or totals book value).
The tool has some nice features for handling data. They call these dimensions and can both map to data that will be passed into the deployed engine and specify derived dimensions. The tool manages derived data elements (like age calculated from date of birth for instance) and the user can then treat them just like any other attribute although they are calculated on the fly.
The core Decision Model looks like a decision tree with branches representing rules although it is actually a network so sub-trees can be reused (avoiding one of the problems with a pure decision tree). The conditions for the tree branches are specified on the links between nodes and can be created and labeled freely with the details of the condition(s) specified in a details field. This allows some of the complexity of specification to be hidden and matches their “scribble pad” mentality. It makes for nice, readable diagrams (which is just as well as their condition syntax is pretty ugly). The tool allows the complexity of the rules to be modeled in the pictures (generally preferred) or stored in derived dimensions (good for handling really geeky things so they don’t confuse the diagrams). Actions can only be taken in the terminal nodes so that data cannot be changed during the decision-making process.
One of the nicest features of the environment is the integration of test data into these diagrams. When a test set is run through the diagram shows volumes of records at each branch and node and allows you to see which records made it to which node. This allows for interactive use of test data as you can select and then follow the route and can inspect data or node, visually debugging in the main development environment. This is particularly helpful when you are defining champion/challenger approaches in the models.
Judgments are an interesting supporting concept that can be used in decision-making. These are built by aggregating data elements or calculations. Each is then applied through a filter that matches the values return to a weighted range using linear scaling. This fuzzy logic-like approach allows a weighted conclusion to be drawn from various input data elements and, of course, Judgments can use other Judgments as input.
The deployed service can be a JAR file or web service and data is passed in using XML or other text files. The engine sits alone and has wrappers to make it look like a web service, POJO etc. Incanto (like some other rule engines) has a purist approach to Decision Services. You pass data in, the engine sees if it can decide using that data and, if it can, returns a result. There is generally no reaching out to gather additional data in the middle of the decision nor is there any way for the Decision Service to make updates during execution.
The product is aimed at technically-minded business analysts rather than programmers but its support of complex derived attributes and judgments allows more technical folks to develop components for analysts to use. Today the product has no versioning or audit trail and users store the XML files underlying the decision definitions the same way they would store program source code.
The team emphasizes the performance of the product and I liked the visual feedback / test data integration during development. The judgment models were also interesting.