評分是對個人或機構(gòu)的相關(guān)信息進行分析之后的一種數(shù)值表達,表示此人或此機構(gòu)由于信用活動的拒付行為所造成損失風(fēng)險的可能性,評分通常用于對個人或機構(gòu)的風(fēng)險管理與評估。
URule Pro中的評分卡就是用來計算評分的,它使用二維表形式展示目標(biāo)對象的各個屬性,針對不同屬性設(shè)置不同區(qū)段的條件,每個區(qū)段條件對應(yīng)不同的分值,運行時引擎會根據(jù)定義的區(qū)段條件自動計算目標(biāo)對象的評分。一個定義好的評分卡效果如下圖所示:
打開URule Pro控制臺,在項目的“評分卡”節(jié)點上右鍵,從彈出菜單中選擇“添加評分卡”項,添加一個新的評分卡文件,如下圖所示:
在評分卡編輯器中,最上部是工具欄,通過這個工具欄導(dǎo)入需要的庫文件,這一點與其它的規(guī)則編輯器基本一致;工具欄下面評分卡屬性部分;接下來是評分卡配置的表格;最后是評分卡的得分計算方式及分值最終賦給哪個對象。
評分卡屬性有三塊,第一塊是配置當(dāng)前評分卡表格是否支持權(quán)重(默認是不支持);第二塊是給當(dāng)前評分卡命名;第三塊是具體屬性項目,與決策樹、決策表一樣,具體屬性項有四個,含義與決策樹、決策表完全相同。
與規(guī)則集、決策表一樣,評分卡定義時同樣需要導(dǎo)入相關(guān)的庫文件,在評分卡配置表格中,屬性列對應(yīng)的目標(biāo)對象就要求我們選擇一個變量對象,然后才可以通過工具欄上通過“添加屬性行”按鈕添加的屬性行定義具體的屬性。為演示這一操作,我們導(dǎo)入之前定義的包含“會員”變量庫文件,導(dǎo)入后就可以為評分卡第一列屬性列選擇目標(biāo)對象了,如下圖所示:
這里我們選擇“會員”,接下來點擊工具欄上“添加屬性行”按鈕添加的屬性行,在屬性行的第一列中,我們可以點擊選擇具體的屬性,可以看到這里的屬性菜單內(nèi)容來自屬性列頭中選擇的目標(biāo)對象,如果我們更改了目標(biāo)對象,那么每個屬性行中屬性菜單內(nèi)容也會做相應(yīng)的變化,如下圖所示:
在每個屬性行中,除了可以選擇目標(biāo)屬性外,還可以在單元格里點擊右鍵,在彈出的菜單里選擇“添加條件行”項,為當(dāng)前屬性拆分出更多的條件行,如下圖所示:
在條件列中,每個單元格都可以在其中點擊右鍵,通過彈出的右鍵菜單配置具體的單元格條件,可以看到其條件配置窗口與決策表中條件配置窗口完全相同,如下圖:
依次配置好各個條件行單元格,效果如下圖:
在URule Pro當(dāng)中,評分卡還允許添加自定義列,通過點擊工具欄上的“添加自定義列”就可以為當(dāng)前評分卡添加一個自定義列,自定義列中每個單元格都可以進行值定義,在運行時,引擎會自動計算這些單元格的值。一般情況下,添加自定義列的作用有兩種:一種是對當(dāng)前行進行備注,起到一個注釋的作用;還有一種就是在“得分計算方式”中選擇“自定義”時,在自定義類中通過代碼可以獲取到每行的自定義列信息,從而做進一步的加工處理。
到這里,一個標(biāo)準(zhǔn)的評分卡表格就配置完了,接下來看看評分卡的得分計算方式,在URule Pro當(dāng)中,對于得分計算方式提供了三種類型,如下圖:
第一種也就是默認的是“求和”,所謂求和就是對在運行時所有滿足條件的條件行對應(yīng)的分值列的值內(nèi)容進行累加求和;第二種類型是“加權(quán)求和”,如果選擇加權(quán)求和,那么需要我們將評分卡表格上部的“權(quán)重”屬性設(shè)置為“支持”,這樣可以看到所有的屬性行中多出一個名為權(quán)重的編輯框,我們在這個編輯框中輸入具體的權(quán)重值,如下圖:
一般情況下,每個屬性單元格是的權(quán)重屬性值是一個小數(shù),所有的權(quán)重值加起應(yīng)該是1。
這樣在將得分計算方式改為“加權(quán)求和”后,引擎將在運行時取到每個滿足條件的條件行的分值,將這個分值與當(dāng)前行對應(yīng)的權(quán)重值做乘法計算,最后將所有乘法計算后的結(jié)果相加作為當(dāng)前評分卡的最終得分。
得分計算的最后一種方式是“自定義”,一旦選擇這種方式,那么我們需要指定自定義計算得分的Bean的ID,如下圖:
這里的Bean要求實現(xiàn)URule Pro中提供的com.bstek.urule.model.scorecard.runtime.ScoringStrategy接口,其源碼如下:
package com.bstek.urule.model.scorecard.runtime;
import com.bstek.urule.runtime.rete.Context;
/**
* @author Jacky.gao
*/
public interface ScoringStrategy {
/**
* 計算得分方法
* @param scorecard 當(dāng)前評分卡對象
* @param context 運行時上下文對象
* @return 返回最終的得分值
*/
Object calculate(Scorecard scorecard,Context context);
}
其中用到的Scorecard源碼如下:
package com.bstek.urule.model.scorecard.runtime;
import java.util.List;
/**
* @author Jacky.gao
*/
public interface Scorecard {
/**
* @return 評分卡名稱
*/
String getName();
/**
* @return 評分卡表格的所有的行信息
*/
List<RowItem> getRowItems();
}
將實現(xiàn)了ScoringStrategy接口的類配置到spring上下文中,使其成為一個標(biāo)準(zhǔn)的spring bean,將bean的ID輸入到上面的自定義Bean的ID的編輯框中即可。下面是一個實現(xiàn)了ScoringStrategy接口的類示例源碼:
package com.bstek.urule;
import java.math.BigDecimal;
import com.bstek.urule.model.scorecard.runtime.CellItem;
import com.bstek.urule.model.scorecard.runtime.RowItem;
import com.bstek.urule.model.scorecard.runtime.Scorecard;
import com.bstek.urule.model.scorecard.runtime.ScoringStrategy;
import com.bstek.urule.runtime.rete.Context;
/**
* @author Jacky.gao
*/
public class TestScoringStrategy implements ScoringStrategy {
@Override
public Object calculate(Scorecard scorecard, Context context) {
BigDecimal result=new BigDecimal(120.12);
System.out.println("評分卡名:"+scorecard.getName());
for(RowItem row:scorecard.getRowItems()){
result=result.multiply(Utils.toBigDecimal(row.getScore()));
for(CellItem cellItem:row.getCellItems()){
System.out.println("自定義列"+cellItem.getColName()+":"+cellItem.getValue());
}
}
return result;
}
}
配置完得分計算方式后,我們還需要配置計算好的得分該賦給誰,這里默認是不賦給任何對象,這樣計算后分值只會存留在引擎中,會在控制臺以一條警告信息的形式打印出來。
一般情況下,計算好的得分, 我們需要將它放到一個變量或參數(shù)當(dāng)中,我們在代碼中就可以得到這個評分值,從而做進一步處理。點擊“不賦值”,在彈出的菜單中選擇要賦值的目標(biāo)對象,如下圖:
可以看到,這里能賦值的對象只有變量和參數(shù),通常情況下,我們會選擇將評分值賦給一個參數(shù),從而在業(yè)務(wù)代碼中從參數(shù)中取到這個分值再做其它處理。當(dāng)然如果選擇變量那么就需要導(dǎo)入相應(yīng)的變量庫文件,選擇參數(shù)就要導(dǎo)入相應(yīng)的參數(shù)庫文件。
到這里,一個簡單的評分卡就定義完成了,有興趣的可以在當(dāng)前項目里創(chuàng)建一個知識包,將這個評分卡放到知識包里,然后對其進行仿真測試,看看在給出一定條件后規(guī)則的評分情況是怎么樣,這里就不再贅述。
這里的介紹的評分卡是URule Pro中提供的一種相對簡單的評分卡,它只能對一個對象的某些屬性進行評估計算,如果我們需要對多個對象的屬性進行條件疊加來計算得分的話,那么這里的評分卡功能就滿足不了了,所以URule Pro還提供了一種復(fù)雜評分卡工具,功能類似于我們的決策表,用于實現(xiàn)多對象多條件累加評分計算,后一章節(jié)中就將對這種復(fù)雜評分卡工具進行介紹。
從2.2.1版本開始,URule Pro中的評分卡支持從Excel中導(dǎo)入,我們只需要按要求在Excel中定義好具體的評分卡內(nèi)容,然后就可以直接將這個Excel導(dǎo)入到一個復(fù)雜評分卡當(dāng)中。下圖是一個定義好的可以導(dǎo)入到復(fù)雜評分卡的Excel截圖, 點擊此處下載該Excel:
可以看到,在這個Excel當(dāng)中,第一行用于定義對象及對象下用于定義條件的屬性,比如上圖中的“客戶”以及其下的“年齡”、“性別”、“婚否”,這個對象及其下屬性要求我們必須預(yù)先在當(dāng)前項目的某一個變量庫文件里定義好, 否則導(dǎo)入該Excel時會產(chǎn)生錯誤;第二列用于定義具體屬性對應(yīng)的條件,其列頭為“條件”是固定不變的,這樣導(dǎo)入引擎就可以將該列作為條件列處理;最后一列的列頭名為“分值”,這里的“分值”也是固定的,不能更改,這樣導(dǎo)入的時候引擎就會認為該列是用于評分的列。
更多建議: