8.評(píng)分卡

2019-10-21 13:42 更新

8.評(píng)分卡

簡(jiǎn)介

評(píng)分是對(duì)個(gè)人或機(jī)構(gòu)的相關(guān)信息進(jìn)行分析之后的一種數(shù)值表達(dá),表示此人或此機(jī)構(gòu)由于信用活動(dòng)的拒付行為所造成損失風(fēng)險(xiǎn)的可能性,評(píng)分通常用于對(duì)個(gè)人或機(jī)構(gòu)的風(fēng)險(xiǎn)管理與評(píng)估。

URule Pro中的評(píng)分卡就是用來(lái)計(jì)算評(píng)分的,它使用二維表形式展示目標(biāo)對(duì)象的各個(gè)屬性,針對(duì)不同屬性設(shè)置不同區(qū)段的條件,每個(gè)區(qū)段條件對(duì)應(yīng)不同的分值,運(yùn)行時(shí)引擎會(huì)根據(jù)定義的區(qū)段條件自動(dòng)計(jì)算目標(biāo)對(duì)象的評(píng)分。一個(gè)定義好的評(píng)分卡效果如下圖所示:

創(chuàng)建評(píng)分卡

打開(kāi)URule Pro控制臺(tái),在項(xiàng)目的“評(píng)分卡”節(jié)點(diǎn)上右鍵,從彈出菜單中選擇“添加評(píng)分卡”項(xiàng),添加一個(gè)新的評(píng)分卡文件,如下圖所示:

在評(píng)分卡編輯器中,最上部是工具欄,通過(guò)這個(gè)工具欄導(dǎo)入需要的庫(kù)文件,這一點(diǎn)與其它的規(guī)則編輯器基本一致;工具欄下面評(píng)分卡屬性部分;接下來(lái)是評(píng)分卡配置的表格;最后是評(píng)分卡的得分計(jì)算方式及分值最終賦給哪個(gè)對(duì)象。

評(píng)分卡屬性有三塊,第一塊是配置當(dāng)前評(píng)分卡表格是否支持權(quán)重(默認(rèn)是不支持);第二塊是給當(dāng)前評(píng)分卡命名;第三塊是具體屬性項(xiàng)目,與決策樹(shù)、決策表一樣,具體屬性項(xiàng)有四個(gè),含義與決策樹(shù)、決策表完全相同。

與規(guī)則集、決策表一樣,評(píng)分卡定義時(shí)同樣需要導(dǎo)入相關(guān)的庫(kù)文件,在評(píng)分卡配置表格中,屬性列對(duì)應(yīng)的目標(biāo)對(duì)象就要求我們選擇一個(gè)變量對(duì)象,然后才可以通過(guò)工具欄上通過(guò)“添加屬性行”按鈕添加的屬性行定義具體的屬性。為演示這一操作,我們導(dǎo)入之前定義的包含“會(huì)員”變量庫(kù)文件,導(dǎo)入后就可以為評(píng)分卡第一列屬性列選擇目標(biāo)對(duì)象了,如下圖所示:

這里我們選擇“會(huì)員”,接下來(lái)點(diǎn)擊工具欄上“添加屬性行”按鈕添加的屬性行,在屬性行的第一列中,我們可以點(diǎn)擊選擇具體的屬性,可以看到這里的屬性菜單內(nèi)容來(lái)自屬性列頭中選擇的目標(biāo)對(duì)象,如果我們更改了目標(biāo)對(duì)象,那么每個(gè)屬性行中屬性菜單內(nèi)容也會(huì)做相應(yīng)的變化,如下圖所示:

在每個(gè)屬性行中,除了可以選擇目標(biāo)屬性外,還可以在單元格里點(diǎn)擊右鍵,在彈出的菜單里選擇“添加條件行”項(xiàng),為當(dāng)前屬性拆分出更多的條件行,如下圖所示:

在條件列中,每個(gè)單元格都可以在其中點(diǎn)擊右鍵,通過(guò)彈出的右鍵菜單配置具體的單元格條件,可以看到其條件配置窗口與決策表中條件配置窗口完全相同,如下圖:

依次配置好各個(gè)條件行單元格,效果如下圖:

在URule Pro當(dāng)中,評(píng)分卡還允許添加自定義列,通過(guò)點(diǎn)擊工具欄上的“添加自定義列”就可以為當(dāng)前評(píng)分卡添加一個(gè)自定義列,自定義列中每個(gè)單元格都可以進(jìn)行值定義,在運(yùn)行時(shí),引擎會(huì)自動(dòng)計(jì)算這些單元格的值。一般情況下,添加自定義列的作用有兩種:一種是對(duì)當(dāng)前行進(jìn)行備注,起到一個(gè)注釋的作用;還有一種就是在“得分計(jì)算方式”中選擇“自定義”時(shí),在自定義類(lèi)中通過(guò)代碼可以獲取到每行的自定義列信息,從而做進(jìn)一步的加工處理。

到這里,一個(gè)標(biāo)準(zhǔn)的評(píng)分卡表格就配置完了,接下來(lái)看看評(píng)分卡的得分計(jì)算方式,在URule Pro當(dāng)中,對(duì)于得分計(jì)算方式提供了三種類(lèi)型,如下圖:

第一種也就是默認(rèn)的是“求和”,所謂求和就是對(duì)在運(yùn)行時(shí)所有滿(mǎn)足條件的條件行對(duì)應(yīng)的分值列的值內(nèi)容進(jìn)行累加求和;第二種類(lèi)型是“加權(quán)求和”,如果選擇加權(quán)求和,那么需要我們將評(píng)分卡表格上部的“權(quán)重”屬性設(shè)置為“支持”,這樣可以看到所有的屬性行中多出一個(gè)名為權(quán)重的編輯框,我們?cè)谶@個(gè)編輯框中輸入具體的權(quán)重值,如下圖:

一般情況下,每個(gè)屬性單元格是的權(quán)重屬性值是一個(gè)小數(shù),所有的權(quán)重值加起應(yīng)該是1。

這樣在將得分計(jì)算方式改為“加權(quán)求和”后,引擎將在運(yùn)行時(shí)取到每個(gè)滿(mǎn)足條件的條件行的分值,將這個(gè)分值與當(dāng)前行對(duì)應(yīng)的權(quán)重值做乘法計(jì)算,最后將所有乘法計(jì)算后的結(jié)果相加作為當(dāng)前評(píng)分卡的最終得分。

得分計(jì)算的最后一種方式是“自定義”,一旦選擇這種方式,那么我們需要指定自定義計(jì)算得分的Bean的ID,如下圖:

這里的Bean要求實(shí)現(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 {
    /**
     * 計(jì)算得分方法
     * @param scorecard 當(dāng)前評(píng)分卡對(duì)象
     * @param context 運(yùn)行時(shí)上下文對(duì)象
     * @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 評(píng)分卡名稱(chēng)
     */
    String getName();
    /**
     * @return 評(píng)分卡表格的所有的行信息
     */
    List<RowItem> getRowItems();
}

將實(shí)現(xiàn)了ScoringStrategy接口的類(lèi)配置到spring上下文中,使其成為一個(gè)標(biāo)準(zhǔn)的spring bean,將bean的ID輸入到上面的自定義Bean的ID的編輯框中即可。下面是一個(gè)實(shí)現(xiàn)了ScoringStrategy接口的類(lèi)示例源碼:

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("評(píng)分卡名:"+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;
    }
}

配置完得分計(jì)算方式后,我們還需要配置計(jì)算好的得分該賦給誰(shuí),這里默認(rèn)是不賦給任何對(duì)象,這樣計(jì)算后分值只會(huì)存留在引擎中,會(huì)在控制臺(tái)以一條警告信息的形式打印出來(lái)。

一般情況下,計(jì)算好的得分, 我們需要將它放到一個(gè)變量或參數(shù)當(dāng)中,我們?cè)诖a中就可以得到這個(gè)評(píng)分值,從而做進(jìn)一步處理。點(diǎn)擊“不賦值”,在彈出的菜單中選擇要賦值的目標(biāo)對(duì)象,如下圖:

可以看到,這里能賦值的對(duì)象只有變量和參數(shù),通常情況下,我們會(huì)選擇將評(píng)分值賦給一個(gè)參數(shù),從而在業(yè)務(wù)代碼中從參數(shù)中取到這個(gè)分值再做其它處理。當(dāng)然如果選擇變量那么就需要導(dǎo)入相應(yīng)的變量庫(kù)文件,選擇參數(shù)就要導(dǎo)入相應(yīng)的參數(shù)庫(kù)文件。

到這里,一個(gè)簡(jiǎn)單的評(píng)分卡就定義完成了,有興趣的可以在當(dāng)前項(xiàng)目里創(chuàng)建一個(gè)知識(shí)包,將這個(gè)評(píng)分卡放到知識(shí)包里,然后對(duì)其進(jìn)行仿真測(cè)試,看看在給出一定條件后規(guī)則的評(píng)分情況是怎么樣,這里就不再贅述。

這里的介紹的評(píng)分卡是URule Pro中提供的一種相對(duì)簡(jiǎn)單的評(píng)分卡,它只能對(duì)一個(gè)對(duì)象的某些屬性進(jìn)行評(píng)估計(jì)算,如果我們需要對(duì)多個(gè)對(duì)象的屬性進(jìn)行條件疊加來(lái)計(jì)算得分的話,那么這里的評(píng)分卡功能就滿(mǎn)足不了了,所以URule Pro還提供了一種復(fù)雜評(píng)分卡工具,功能類(lèi)似于我們的決策表,用于實(shí)現(xiàn)多對(duì)象多條件累加評(píng)分計(jì)算,后一章節(jié)中就將對(duì)這種復(fù)雜評(píng)分卡工具進(jìn)行介紹。

從Excel中導(dǎo)入

從2.2.1版本開(kāi)始,URule Pro中的評(píng)分卡支持從Excel中導(dǎo)入,我們只需要按要求在Excel中定義好具體的評(píng)分卡內(nèi)容,然后就可以直接將這個(gè)Excel導(dǎo)入到一個(gè)復(fù)雜評(píng)分卡當(dāng)中。下圖是一個(gè)定義好的可以導(dǎo)入到復(fù)雜評(píng)分卡的Excel截圖, 點(diǎn)擊此處下載該Excel:

可以看到,在這個(gè)Excel當(dāng)中,第一行用于定義對(duì)象及對(duì)象下用于定義條件的屬性,比如上圖中的“客戶(hù)”以及其下的“年齡”、“性別”、“婚否”,這個(gè)對(duì)象及其下屬性要求我們必須預(yù)先在當(dāng)前項(xiàng)目的某一個(gè)變量庫(kù)文件里定義好, 否則導(dǎo)入該Excel時(shí)會(huì)產(chǎn)生錯(cuò)誤;第二列用于定義具體屬性對(duì)應(yīng)的條件,其列頭為“條件”是固定不變的,這樣導(dǎo)入引擎就可以將該列作為條件列處理;最后一列的列頭名為“分值”,這里的“分值”也是固定的,不能更改,這樣導(dǎo)入的時(shí)候引擎就會(huì)認(rèn)為該列是用于評(píng)分的列。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)