指標模型運算系統的意義與實現

指標模型的概念

  • 關鍵指標分析是一種經常使用的業務分析手段
  • 指標可分爲基礎指標計算指標
  • 基礎指標是指當前業務系統可以直接獲取的指標,好比客戶評級模型中客戶的年齡、學歷、性別、總借款次數等等
  • 計算指標是指經過定義計算公式,從其它指標計算得出的指標,好比:java

    • 性別得分這個指標的公式爲若是 (${性別} == "女") 60分 不然 40分
    • 基本信息彙總得分這個指標的公式爲${性別得分}×20% + ${年齡得分}×20% + ${學歷得分}×60%
    • 客戶評級最終得分這個指標的公式爲${基本信息彙總得分}×30% + ${業務統計信息得分}×40% + ${徵信信息得分}×30%
  • 經過上面列舉的計算公式能夠看出,指標模型的指標之間存在很是複雜的多層依賴關係程序員

    • 性別得分依賴性別
    • 基本信息彙總得分依賴性別得分年齡得分學歷得分
    • 客戶評級最終得分依賴基本信息彙總得分業務統計信息得分、和徵信信息得分
  • 因此,某一業務領域的指標模型包含該業務領域設定的關鍵指標以及它們之間的計算關係。
文章後半段有系統演示,先聊聊概念和意義

創建指標模型的意義

  • 首先固然是知足當前的指標定義、計算、分析、展示需求(雖然普通的報表系統也能實現指標統計,但指標模型的真正價值在於對持續優化過程的支持和促進)
  • 業務人員對指標的多層計算過程有了一個全面的瞭解
  • 指標的計算公式能對應需求的具體細節,業務需求再也不須要文檔來維護,能夠直接配置到系統上(解決需求文檔和代碼脫節的問題)
  • 用領域專用語言(DSL)定義計算公式,普通業務人員也能很好的理解,能夠自行維護
  • 經過以上幾點,業務人員對需求可進行較好的把控,有利於指標模型的逐步優化完善
  • 經過指標模型的不斷演進,模型所對應的業務領域的分析維度逐步清晰,再加上歷史數據的積累,這時再以這些指標爲基礎,去作大數據分析、機器學習就水到渠成了
  • 《三體》的「維度攻擊」是近期很是熱門的一個概念,新維度的發現須要數據的積累和一個不斷試錯的過程,而如何讓業務、技術人員有目標性的去尋找新的維度,創建邏輯清晰、易配置、可擴展的指標模型是很是必要的手段。
一個指標不必定就是一個有重要意義的維度,但不去創建指標模型、不去測試指標數據,那永遠也找不到新的維度。好比假設一批借款數據,其中女性借款人的不良率是0.5%,男性是1.2%,差距很是大;若是沒有創建包含 性別這個指標的指標模型,就不會想到用指標的思惟來分析數據;而更進一步,可能 性別+學歷性別+年齡+學歷組合計算以後,會有一個更加劇要的維度出現,若是不先創建指標模型,這些都難以發現。

缺乏傳統業務分析積累、缺乏業務人員的深度參與、無演進過程的大數據分析系統都將只是花架子。正則表達式

系統功能模塊:指標模型定義

  • 指標模型管理
  • 指標管理(一個模型包括多個指標,指標的依賴限定於同一模型內)
  • 指標計算公式的維護
  • 解析指標計算公式的變量(支持普通、通配符、正則表達式變量),創建指標的依賴關係
  • 指標值、公式的有效性檢查
  • 指標依賴死循環的檢查
  • 報表定義(每張報表包含多個指標,知足多業務場景的分析需求)

系統功能模塊:指標模型運算

  • 運算對象管理(不一樣模型有不一樣類型的運算對象,如客戶評級模型客戶股票分析模型股票軟件代碼質量評價模型就是程序員
  • 運算批次發起(選擇運算對象,發起一次指標運算批次)
  • 基礎指標錄入,錄入方式包括:機器學習

    • 自動導入 - 系統建設完善、基礎指標可從已有業務系統、第三方接口抽取
    • 手工導入 - 無完善信息系統,目前只能經過較人工的方式零散的拿到數據,先手工合併到excel表格,再進行批量導入
    • 直接錄入 - 適合基礎指標較少的模型,在系統界面逐個錄入
  • 基礎指標錄入值完整性、有效性檢查
  • 以上檢查經過後,可發起模型運算
  • 運算完成,獲得全部計算指標結果

系統功能模塊:結果展示

  • 指標關係圖,把單個運算對象的全部指標計算結果和多層依賴關係經過關係圖的方式展現出來,很是直觀的分析了計算過程和結果
  • 模型報表,根據模型定義中設置的報表,集中展現多個運算對象的運算結果,或單個運算對象的屢次運算結果
  • 指標對比雷達圖,用雷達圖同時展現多個運算批次的報表指標值,可針對多對象多批次單對象多批次的對比分析

系統演示:總體功能菜單

AllMenu.png

下有大量圖片,PC端查看效果更佳

系統演示:指標模型定義

指標模型管理

  • 新增 - 增長一個指標模型
  • 克隆 - 複製一個模型及其全部指標,這樣能夠支持模型的多版本管理,平滑升級
  • 修改 - 修改模型名稱和說明
  • 刪除選中 - 刪除所選模型及其全部指標,以及全部運算批次數據

KpiModel.png

指標配置 - 基礎指標

  • 基礎指標是指須要外部導入、錄入的原始業務數據
  • 測試值,是用來檢查指標計算關係配置是否準確用的學習

    例如這兩個指標: 戶籍認證戶籍認證得分(計算公式爲: ${戶籍認證} == '是' ? 100 : 0);若是 戶籍認證的測試值設置的是 ,那麼 戶籍認證得分的測試必須設置爲 0,和計算公式的結果一致
  • 經過配置測試值,能夠檢查整個指標模型的配置是否正確,因此後面會有檢查測試值這個功能
    KpiConfig-01.png

指標配置 - 計算指標

  • 計算公式經過變量來依賴其它指標(變量分爲普通、通配符、正則表達式3種,下圖1爲普通變量圖2爲通配符變量
    KpiConfig-02.png
    KpiConfig-03.png

指標值、公式的有效性檢查

  • 檢查測試值 - 所有經過,全部公式配置無誤,全部測試值都跟計算結果匹配
  • 檢查測試值 - 部份測試值跟計算結果不匹配
  • 檢查測試值 - 認證信息得分公式配置錯誤致使計算出錯,同時致使全部直接、間接依賴它的指標也沒法計算

指標依賴死循環的檢查

  • 正確的依賴關係是這樣的:客戶評級結果依賴審覈信息得分依賴年齡得分年齡得分只依賴年齡這個基礎指標


  • 爲了測試死循環,讓年齡得分依賴客戶評級結果
  • 檢查測試值 - 提示死循環依賴

報表定義

  • 系統支持自定義報表
  • 根據不一樣業務視角,可選取部份指標組合成一個報表,進行更有針對性的分析
  • 一個指標對應一個報表列,並支持排序

系統演示:指標模型運算

運算對象管理、運算批次發起

  1. 先經過右鍵菜單進行「運算對象」的增刪改查操做
  2. 而後選擇要「發起運算」的對象,可多選
  3. 再經過右上角的下拉列表選擇運算模型
  4. 最後點擊「發起運算」按鈕進行發起。(如圖所示,「我的客戶AA、BB、CC」將同時發起「我的客戶評級v1.0」模型運算)
  5. 同一個「運算對象」能夠屢次發起運算,獲得不一樣時間點的運算結果,並能夠對不一樣時間點的運行結果進行比較,更加深刻的分析單個對象的數據變化過程

基礎指標錄入

  • 導入步驟
  • Excel模板演示(每一個模型有對應的模板,而且會根據模型指標配置自動生成,不須要單獨維護模板)
  • 導入完成,全部指標值有效,可提交運算,提交後系統後臺將啓動任務,進行全部計算指標的計算
  • 導入完成,部份指標值無效,需完善後才能提交運算

運算狀態監控

  • 發起,爲初始狀態,導入基礎指標以後可提交模型運算
  • 運算中,系統後臺計算任務正在運行
  • 成功,模型計算完成,能夠查看結果
  • 做廢,取消的運算批次

系統功能模塊:結果展示

指標關係圖

模型報表

  • 業務統計指標報表配置回顧
  • 業務統計指標報表將實時對應報表定義的配置
  • 關鍵指標報表

指標對比雷達圖

多個運算對象的指標數據對比

  • 業務統計指標報表的雷達圖
  • 關鍵指標報表的雷達圖

單個運算對象的屢次運算數據對比

可用於分析同一個 運算對象在不一樣業務範圍的數據,好比可對一個 程序員項目A項目B項目C的代碼質量進行比較分析
  • 報表
  • 雷達圖

附錄

指標計算公式中的變量類型

普通變量

  • 說明:對單個指標的值進行引用
  • 格式:${<指標名>}
  • 樣例: ${下單金額}

通配符變量

  • 說明:經過通配符匹配指標名
  • 格式:${xxx*xxx??xxx},其中*表明任意多個字符,?表明任意單個字符
  • 樣例1:${*得分}表明以得分結尾的全部指標
  • 樣例2:${??金額}表明總共4字,以金額結尾的指標

正則表達式變量

  • 說明:經過正則表達式匹配指標名
  • 格式:#{<表達式>}
  • 樣例:#{0[1-6]月金額}匹配01月金額06月金額六個指標
  • 備註:須要具有正則表達式知識,可由技術人員協助配置。(正則表達式參考

部分DSL方法

如下爲當前實現的部份DSL方法,系統支持DSL方法的擴展,可根據不一樣業務領域的特殊要求進行定製

百分比彙總

  • 功能說明:多個指標根據百分比加權求和
  • 參數:一組包含值(value)和佔比(percentage)的列表
  • 返回:數值
  • 樣例測試

    /**
     * 按百分比彙總
     * <p>例如 指標A = 百分比彙總([[${指標1}, 20], [${指標2}, 80]])
     * <p>表示 指標A由指標1和指標2,其中指標1佔比20%,指標2佔比80%
     * <p>至關於 指標A = 指標1 * 20% + 指標2 * 80%
*
 * @param valueList 參數1,一組包含值(value)和佔比(percentage)的列表
 * @return 彙總後的值
 */
```

條件匹配

  • 功能說明:在匹配項列表找到匹配項,返回對應值
  • 參數:(輸入Map,匹配項列表)
  • 返回:任意值
  • 樣例大數據

    /**
        * 根據輸入項和條件進行匹配,計算結果
        * @param inputMap 輸入項,如:v1:${金額}, v2: ${數量}*
        * @param expList 匹配項列表,如:
        * [['v1 <= 50', 40],
        * ['v1 >  50 && v1 <= 150', 60],
        * ['v1 > 150 && v1 <= 300', 80],
        * ['v1 > 300 && v2 <=100', 90],
        * ['v1 > 300 && v2 > 100', 100]]
*/
```

平均值

  • 功能說明:計算一組數值的平均值
  • 參數:指標列表
  • 返回:數值
  • 樣例:平均值([${*得分}]),表明以「得分」結尾的全部指標的平均值

最小值

  • 功能說明:查找一組數值的最小值
  • 參數:指標列表
  • 返回:數值
  • 樣例:最小值([${*得分}])

最大值

  • 功能說明:查找一組數值的最大值
  • 參數:指標列表
  • 返回:數值
  • 樣例:最大值([${*得分}])

總和

  • 功能說明:計算一組數值的和
  • 參數:指標列表
  • 返回:數值
  • 樣例:總和([${*得分}])

標準差

  • 功能說明:計算一組數值的標準差
  • 參數:指標列表
  • 返回:數值
  • 樣例:標準差([${指標1},${指標2},${下單??}])

匹配左閉區間

  • 功能說明:找到傳入值對應的區間(區間類型爲右開左閉),返回對應值
  • 參數:匹配值,匹配區間列表
  • 返回:任意值
  • 樣例優化

    匹配左閉區間(${年齡},
        [[null, 20, 0],
        [20, 40, 80],
        [40, 60, 100],
        [60, null, 60]])

匹配右閉區間

  • 功能說明:找到傳入值對應的區間(區間類型爲右閉左開),返回對應值
  • 參數:匹配值,匹配區間列表
  • 返回:任意值
  • 樣例:參考匹配左閉區間

匹配閉區間

  • 功能說明:找到傳入值對應的區間(區間類型爲右左都閉),返回對應值
  • 參數:匹配值,匹配區間列表
  • 返回:任意值
  • 樣例:參考匹配左閉區間

匹配開區間

  • 功能說明:找到傳入值對應的區間(區間類型爲右左都開),返回對應值
  • 參數:匹配值,匹配區間列表
  • 返回:任意值
  • 樣例:參考匹配左閉區間
相關文章
相關標籤/搜索