10

I need to create a flexible (and preferably dynamic) scoring engine, much like a credit scoring or premium calculating system. Does anyone with practical experience of creating a scoring engine have any advice, examples or suggested patterns?

I already know about:

Thanks!

Edit: To provide a little more detail.. Ok, so I have had a look around and I think a rules engine is what I am after, it's more flexible and rules can be used to achieve pretty much anything. However, the material I can find on the web is highly abstract - the Rete algorithm, nodes, forward chaining and so on. I really need practical, architectural advice. So for example, how would you tackle these problems:

  • Assume the rules engine itself is generic and agnostic of the context in which it is being used, so it is 'pluggable'. Now, in order to use it you have to feed specific and identifiable data items in and match those items with conditions and rules. So how would you go about solving this conundrum?
  • How would you handle the situation where one rule updates a data item which invalidates other previously assessed rules?
George Stocker
  • 57,289
  • 29
  • 176
  • 237
flesh
  • 23,725
  • 24
  • 80
  • 97
  • Hi flesh. Still no answers after 40 views... it help if you could expand on your question a little... what are you wanting to accomplish with a scoring engine? i.e. There are many scoring engines out there, but which one to use depends entirely on the objectives you have in mind. – Mark Jun 11 '09 at 20:00
  • updated as requested.. thanks mark. oh and i think 40 views and no answers has to do with me typing 'rules engine' into google and bothering to search through the first few relevant results, then listing those results in the question.. because i'd like proper answers ;) – flesh Jun 11 '09 at 22:19

2 Answers2

3

A scoring engine has to actually score something - with your FICO score, it's the risk that you'll default on new credit. Essentially, there are a handful of steps:

  1. Collect mountains of data
  2. Decide what you want to know about the data - what do you want to predict?
  3. Mine the data for a relevant formula that predicts accurately
  4. Implement the formula in code in a flexible way

Assuming you're asking about step 4, and not about an earlier step in the data mining process, here are some ideas:

  • If your formula is simple, you can just code it and allow access to edit the co-efficients (Ax + By + C, as an example, where A, B and C are stored in a database somewhere and are easily updated, and where x and y are some data from your user/customer).
  • If you want something highly dynamic, in that you might dramatically change the formula later, a rules engine is one choice, though I'd still lean towards a custom-coded solution that can be easily switched out. Maybe even a DLL with a single function in it that does your calculation, and can be easily replaced if the formula is changed significantly.

If you add some more details, or if you're not quite at step 4 in your mining process, I can suggest some steps for you to take or some reading that might help.

SqlRyan
  • 33,116
  • 33
  • 114
  • 199
0

Generally speaking, people who go about developing a scoring system have a good idea about how they might do the scoring by hand, and the start of the process is to code up the naive algorithm suggested by their experience. Sometimes, people then get fancy, using concepts such as genetic algorithms. Thinking about things like FICO scoring, another part of the work tends to be the collection of data, both transactional data (purchase patterns, earning patterns) and 'result' data (defaults or other issues with credit). By analyzing patterns and results, the scoring tools develop a score for users, which is then used as a predictor of future behaviour (is this person with a FICO score of x likely to cause me problems if I extend them credit?).

I don't think there is a general solution for these analyses. Someone has to have an insight into how to do the analysis and correlation, and can then use computers to define and refine the insight.

Jonathan Leffler
  • 730,956
  • 141
  • 904
  • 1,278