1、银行优质客户判定专家系统,银行优质客户判定专家系统,一、规则预处理 二、推理机的构建,1.1 规则列举,1、收入高、无信用卡违约、无购房记录,则优质贷款2、工作稳定、刚性需求,则优质贷款3、升值空间大,优质贷款4、教师职业,工作稳定5、公务员职业,工作稳定6、医生职业,工作稳定7、去除其他支出后,可支配收入为月供的两倍以上,收入高8、购买用于小孩子上学,刚性需求9、购房结婚,刚性需求10、价格相对较低、升值空间大11、学区房,升值空间大,1.2 规则分析,对规则进行分析后可构建出相应的树。树根只可能为最终结论。而树叶只可能为外界收集到的事实。 事实需要由外界收集。,二、推理机的构建,构建一个类
2、ReasonMachine并提供成员:,/事实库,用于存放界面上收集到的事实 private List facts = new List();/原始的规则,如规则举例中”教师职业,工作稳定”这一类型的字符串,”,”后的最后一个元素为结论 private List OriginalRules = new List();,/处理后的规则,每条规则对应一个数组,数组的最后一个元素为结论 private List rules = new List();,/单词表,用于存放规则中出现过的所有前提与结论.单词表将用于验证输入事实的合法性. private List dictionary = new Lis
3、t();,相关方法:,/初始化原始规则库,此外直接把规则写在代码中,现实中应该从数据库或文件上读取规则 private void InitOriginalRules() OriginalRules.Add(“收入高,无信用卡违约,无购房记录,优质贷款“);OriginalRules.Add(“工作稳定,刚性需求,优质贷款“);OriginalRules.Add(“升值空间大,优质贷款“);OriginalRules.Add(“教师,工作稳定“);OriginalRules.Add(“公务员,工作稳定“);OriginalRules.Add(“医生,工作稳定“);OriginalRules.Ad
4、d(“购房用于小孩子上学,刚性需求“);OriginalRules.Add(“购房结婚,刚性需求“);OriginalRules.Add(“价格相对较低,升值空间大“);OriginalRules.Add(“学区房,升值空间大“);,/ / 根据原始规则初始化规则库 / private void InitRules() foreach (string temp in OriginalRules)string str = temp.Split(,);rules.Add(str); ,/ / 初始化单词表(字典),该字典记录所有规则的前提与结论,并去除重复值 / 字典用于检查外界输入的事实是否合法
5、。比如职业一档如果输入了“职员” / 而职员并没在任何一条规则中出现,则该职业不能用于推理,不合法 / 若出现上述情况,则需要增加规则或去除该事实 / private void InitDictionary() foreach (string str in rules)foreach (string s in str)if (!dictionary.Contains(s)dictionary.Add(s);,/当单词表初始化完后就可以从界面上获取事实,事实输入时需要验证是否合法 /以下是验证事实的合法性 private bool CheckFact(string fact)if (dictio
6、nary.Contains(fact)return true;elsereturn false;,/以下用于向事实库增加事实 public void AddFact(string fact) /如果事实合法bool b = CheckFact(fact);if (b = true)/则写入facts.Add(fact);elsereturn;,/下面的函数用于找到所有结论为conclusion的规则 /该函数为推理提供支持. private List GetAllFitRules(string conclusion) List list = new List();foreach (string
7、 str in rules)if (strstr.Length - 1 = conclusion)list.Add(str);return list; ,推理机的构建,在本例中,推理的目的很明确,就是判断某个贷款是否是优质贷款.因此采用逆向推理的方式,逆向推理过程如下: 1、输入结论X 2、查找事实库,是否已经有事实X,如果有,结束推理并给出结果 3、如果事实库中没有找相关事实,则找到所有结论为X的规则list 4、如果可用规则的数量为0,则没找到可用规则,结束推理。 5、如果有找到一定数量的规则,对于每一条规则r,判断其每个前提是否成立。如果成立,则结束推理并给出结论。 6、如果不成立,则查
8、找下一条规则。直到所有规则判断完。 7、如果list中的所有规则都判断完还没得出结论,则说明无法推理得到优质贷款。,关键细节,某个规则的前提也可以看成是另一规则的结论,例如,工作稳定、刚性需求,则优质贷款 教师职业,工作稳定,设推理方法为 bool CallMachine(string conclusion),则可以用递归方式构建推理机,public bool CallMachine(string conclusion) /1 首先从事实库中找是否有该事实/1.1 验证conclusion是否合地if (CheckFact(conclusion) = false) return false;/
9、1.2 查找事实库if (facts.Contains(conclusion) return true;/2 推理/2.1 先到结论为conclusion的所有规则List list = GetAllFitRules(conclusion);if (list.Count = 0) return false;/2.2 判断每个规则的前提是否满足,如果满足,则得到结论,否则再判断下一条规则foreach (string temp in list)bool b = true; for (int i = 0; i = temp.Length - 2; i+) /注意,此处不判断最后一个,因为最后一个为结论b = CallMachine(tempi);if (b = false) break;if (b = true)/得到结论,要写入事实库AddFact(conclusion);return true;return false; ,其他内容,规则库中有以下规则:去除其他支出后可支配收入为月供的两倍以上,收入高。然而该规则的前提不易于输入,在处理中可以不对该规则的前提进行处理,直接从事实获取机构得到收入高的结论,以免增加初学者推理的难度。,缺点:,不支持不精确推理 没有对规则进行提炼,