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