數據分析:複雜業務場景下,量化評估流程

本文源碼:GitHub·點這裏 || GitEE·點這裏java

1、量化思惟

在編程體系中有不少複雜的業務是很難理解的,可是又須要作一個量化分析,給業務人員或者運營,或者用戶一個參考標準,例如常見指數,芝麻分數,店鋪等級,這類業務評定標準很是複雜,由於影響結果的因素不少。git

在多個維度的業務考量模型中,有一個核心概念叫作權重,指某一因素或指標相對於某一事物的重要程度,其不一樣於通常的比重,體現的不只僅是某一因素或指標所佔的百分比,強調的是因素或指標的相對重要程度,傾向於貢獻度或重要性。一般狀況下每一個維度的權重在0-1之間,全部維度的權重之和爲1。github

image

能夠從一個實際案例來分析權重的概念,好比判斷一個客戶是不是重點運營的對象,一般會從每週登陸次數,在線時長,交易量等維度考慮,若是客戶A常常登陸,可是沒有核心業務交易,客戶B不多登陸,可是業務交易高,因此這裏登陸次數的權重就應該低於交易量這個維度。算法

如何肯定權重佔比,一般有兩個思路,一借鑑專業業務人員的提供的經驗,放到業務中不斷嘗試調優;二根據產品的分析數據,計算各個維度權重,也是須要在業務中不斷嘗試優化。spring

實際上覆雜業務場景的量化過程是複雜且漫長的,須要對多個維度的數據作收集,有時候不但須要作週期性量化,例如幾家大廠的信用分,也可能存在實時分析的場景,金融業務中的欺詐風控等,也有兩種場景綜合的實時推薦體系,都會用到量化流程。編程

2、場景案例

image

一、綜合評估

對用戶、店鋪、產品等多種場景作綜合評估,把一個複雜的事物經過多個維度抽象分析,生成簡單容易理解的評估結果,例如店鋪等級、產品評分、用戶綜合指數等,進而對各個使用場景產生參考的依據。從結果來看多是很容易理解,可是獲取結果的分析過程是相對複雜的,有的場景可能須要週期性執行評估模型,有的場景可能須要實時計算,還有多是兩種狀況結合即依賴週期評估,也須要參考實時計算。設計模式

二、場景推薦

這個場景相對複雜度較高,例如用戶進行搜索,可是又勾選一系列排除或者必要條件,這在搜索類的功能中很常見,在處理時不但要對用戶的搜索條件作最高的匹配度分析,還要基於搜索結果作最優排序,這種就存在兩個階段評估,第一個階段匹配最優搜索條件,第二階段對匹配結果作最優選排序,最大可能的給出用戶想要的搜索結果。數據結構

三、風控評分

在金融領域內,這是很常見的一種風控模型,即對用戶多個維度統計,作維度評分而後累加到一塊兒,風控分越高,說明該用戶風險越大,進而阻止高風險交易。架構

四、理財指數

這個場景很常見,在金融理財類的APP中,使用以前必須通過一個測評體系,來判斷用戶的風險承受能力:例如保守型、積極型等,當用戶購買的產品屬於高風險時,會提示和用戶的風險承受能力不匹配,提示用戶從新測評。併發

3、實現思路

一、維度規則表

維護一份維度的評估規則表,classify_sign理解爲同一業務場景下的劃分標識,weight則標識該維度在評估中的比重。

CREATE TABLE `evaluate_rule` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵ID',
  `classify_sign` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '歸類標識',
  `rule_value` varchar(300) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '規則描述',
  `rule_type` int(1) DEFAULT NULL COMMENT '規則類型:1精準匹配,2範圍,3模糊',
  `weight` decimal(10,2) DEFAULT '0.00' COMMENT '權重分佈',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='評估項規則';

二、描述規則

對於規則的具體描述,核心就是兩個字段,規則值以及匹配到該規則獲取的結果。

public class RuleValue {
    /**
     * 規則值描述
     */
    private Object ruleValue ;
    /**
     * 規則匹配結果
     */
    private Object ruleResult ;
    // 基礎構造
    public RuleValue(Object ruleValue, Object ruleResult) {
        this.ruleValue = ruleValue;
        this.ruleResult = ruleResult;
    }
    // 省略 Get 和 Set
}

三、封裝匹配值

爲了簡化參數在模型中傳遞的複雜度,統一封裝匹配因素的數據在一個數據模型中,這裏以城市和標籤兩個因素作流程測試。

public class MatchItem {
    // 城市
    private String city ;
    // 標籤
    private String tag ;
    // 基礎構造
    public MatchItem(String city, String tag) {
        this.city = city;
        this.tag = tag;
    }
    // 省略 Get 和 Set
}

四、評估邏輯實現

這裏只是對兩種狀況作簡單的實現描述,在實際的開發場景中,數據和匹配規格都是十分複雜的,在整個評估模型實現流程須要不斷優化。

@Service
public class AssessBizService {

    private static Logger LOG = LoggerFactory.getLogger(AssessBizService.class);

    @Resource
    private EvaluateRuleDao evaluateRuleDao ;

    /**
     * 業務評估流程
     */
    public void assessBiz (MatchItem matchItem){
        // 精準匹配城市
        EvaluateRuleEntity evaluateRule01 = evaluateRuleDao.getBySign("assess-biz",1);
        List<RuleValue> cityRuleList = JSONArray.parseArray(evaluateRule01.getRuleValue(), RuleValue.class);
        for (RuleValue cityRule:cityRuleList){
            if (cityRule.getRuleValue().equals(matchItem.getCity())){
                int result = Integer.parseInt(String.valueOf(cityRule.getRuleResult()));
                LOG.info("匹配項:{},匹配結果:{}",matchItem.getCity(),result*evaluateRule01.getWeight());
                break ;
            }
        }
        // 模糊匹配標籤
        EvaluateRuleEntity evaluateRule02 = evaluateRuleDao.getBySign("assess-biz",3);
        List<RuleValue> tagRuleList = JSONArray.parseArray(evaluateRule02.getRuleValue(), RuleValue.class);
        for (RuleValue tagRule:tagRuleList){
            if (String.valueOf(tagRule.getRuleValue()).contains(matchItem.getTag())){
                int result = Integer.parseInt(String.valueOf(tagRule.getRuleResult()));
                LOG.info("匹配項:{},匹配結果:{}",matchItem.getTag(),result*evaluateRule02.getWeight());
                break ;
            }
        }
    }

}

4、源代碼地址

GitHub·地址
https://github.com/cicadasmile/data-manage-parent
GitEE·地址
https://gitee.com/cicadasmile/data-manage-parent

推薦閱讀:編程體系整理

序號 項目名稱 GitHub地址 GitEE地址 推薦指數
01 Java描述設計模式,算法,數據結構 GitHub·點這裏 GitEE·點這裏 ☆☆☆☆☆
02 Java基礎、併發、面向對象、Web開發 GitHub·點這裏 GitEE·點這裏 ☆☆☆☆
03 SpringCloud微服務基礎組件案例詳解 GitHub·點這裏 GitEE·點這裏 ☆☆☆
04 SpringCloud微服務架構實戰綜合案例 GitHub·點這裏 GitEE·點這裏 ☆☆☆☆☆
05 SpringBoot框架基礎應用入門到進階 GitHub·點這裏 GitEE·點這裏 ☆☆☆☆
06 SpringBoot框架整合開發經常使用中間件 GitHub·點這裏 GitEE·點這裏 ☆☆☆☆☆
07 數據管理、分佈式、架構設計基礎案例 GitHub·點這裏 GitEE·點這裏 ☆☆☆☆☆
08 大數據系列、存儲、組件、計算等框架 GitHub·點這裏 GitEE·點這裏 ☆☆☆☆☆
相關文章
相關標籤/搜索