商業智能(BI)作為高價值服務, 自20世紀60年代電腦出現時就已經存在, 當時主要的用戶是大型企業和政府部門, 經過半個世紀的發展, 商業智能已經成為中小企業的必備技能. 使用BI, 企業可以從實際數據中提取關鍵事實, 將其轉化為決策的依據. 是否高效地使用商業智能和分析, 是現代環境中成功的關... ...
-- 人會說謊, 但是數據不會
聲明
個人原創, 轉載需註明來源 https://www.cnblogs.com/milton/p/16296974.html
數據和決策
商業智能(Business Intelligence)是一個總稱: 包括數據的定義, 生成, 收集, 存儲和分析, 以及最後的一環 -- 決策.
數據化是對信息進行收集, 量化和存儲. 這個趨勢將一切活動數字化
- 可以電子化的活動: 媒體, 通信, 交易, 票據, 音樂, 娛樂等, 信息化的變革直接取代了過去傳統的工作方式
- 無法電子化的活動: 建築, 製造, 運輸, 食品, 醫護, 商超等, 因為必須以物理形態交付, 這些活動無法數字化, 但是可以通過IOT將過程數字化, 這方面現在有個流行名詞叫數字孿生
由於科技的發展, 存儲與傳輸的成本越來越低, 信息的產生速度與日俱增, 作為企業如何利用數據價值變得前所未有的重要.
數據對於決策的重要性 -- 傳說羅斯柴爾德家族通過信鴿, 在滑鐵盧戰役還沒有結束時就提前知道結果, 從而大量買入英國國債, 雖然未必是其成功的關鍵因素, 但是可以看出信息如何關鍵.
商業智能作為高價值服務, 自20世紀60年代電腦出現時就已經存在, 當時主要的用戶是大型企業和政府部門, 經過半個世紀的發展, 商業智能已經成為中小企業的必備技能.
數據驅動決策
如果一個人把決策建立在主觀認知而不是事實基礎上, 就容易產生錯誤的決策. 企業也是如此.
使用BI, 企業可以從實際數據中提取關鍵事實, 將其轉化為決策的依據. 是否高效地使用商業智能和分析, 是現代環境中成功的關鍵.
商業決策根據頻率和影響, 通常分為三類: 運營, 管理和戰略.
運營決策
運營決策通常頻繁發生, 每小時每分鐘, 與企業的業務相關. 運營決策影響企業的日常經營情況以及盈利能力. 對於生產經營中存在的具體問題, 通過BI系統進行自動決策或輔助決策, 可以提升工作效率, 減小風險, 例如
- 媒體通過分析用戶的閱讀歷史, 向用戶推薦喜歡的內容, 提升用戶粘度.
- 產線通過收集當前的庫存, 產量, 成品率, 未來的訂單, 向採購部門提示可能出現短缺風險
- 風控根據用戶的信貸歷史, 行業, 收入, 住址, 電話, 人際關係, 判斷用戶的風險等級, 決定信貸額度
- 高頻交易系統. 這算是BI系統的一個極端例子.
管理決策
管理決策的頻率不會很頻繁, 例如每周或每月, 屬於企業中的中層管理決策, 通常這些決策與戰略決策的息息相關. 例子包括產品價格調整, 營銷策略, 優惠政策等:
- 廣告投放中, 根據各通道同類業務的歷史performance, 確定在各通道的投放比例和投放策略
- 根據生產原料, 期貨市場的市場供給情況預估成本, 確定未來一個季度的產品價格空間
- 根據營銷目標, 流量通道的變化, 流量成本和轉換成本, 調整營銷策略.
戰略決策
戰略決策通常由一個組織的最高管理層制定, 將對組織未來長時間的活動造成重大影響. 需要對多種方案進行仔細分析和評估後確定, 這種決策通常是不可重覆的. 通過BI可以分析巨集觀環境, 通過市場趨勢, 貨幣周期, 政策風向, 市場監管, 領導人偏好等重要信息, 結合內生數據對各種方案進行量化, 為最終的戰略決策提供依據.
戰略決策的例子包括
- 資產的兼併收購和出售
- 事業部整合, 組織架構調整
- 預算和目標調整, 對新市場的投資
- 產線的擴張, 連鎖店面的擴張, 新城市的佈局
決策的一致性
決策中, 每一個層級都為實現上一層的決策服務, 一個大的決策會隨著時間不斷分解為更小的決策, 直至目標達成, 或目標無法達成不得不更換上層決策.
以俄政府決定武裝進攻烏克蘭為例
- 戰略決策: 制定發動戰爭的目的, 確定要武裝進攻, 確定進攻目標, 對各種情況的推演(需要多少物資和人力, 什麼時間開打, 如何應對戰爭帶來的內外風險和Plan B)
- 管理決策: 具體到某一階段的進攻, 階段目標, 預估對方規模, 投入的資源, 如何協調各職能, 前線和後勤, 對可能存在風險的預估
- 運營決策: 具體到一個具體的進攻, 對方有哪些工事和火力點, 己方有哪些武器設備, 進攻的選項和判斷, 以及戰鬥過程中出現各種情況的應對.
隨著每一個局部戰鬥(運營決策)的執行, 結果與預期的差距, 導致上層決策(戰略決策)不斷調整, 從最初的空降基輔, 到五月初的戰線收縮轉為集中兵力從東部推進. 可以看出在開戰之初, 俄政府的數據和決策是有問題的, 基於錯誤的數據和判斷, 做出了開戰和冒進的決策.
用於決策的數據
從整體看, 這些數據分為
公共數據
公共數據指的是能從公開的渠道獲取的數據, 例如貨幣匯率, 證券資產的價格; 某一地的人口, 氣溫, 降水量和濕度, 手機號歸屬地, IP歸屬地, 身份證歸屬地, 企業所處行業的原材料和商品價格行情, 等等.
不同的業務對公共數據有不同的需求, 體現在精度(準確性), 實時性, 回溯性等方面. 例如交易數據, 可以分為不同的時間間隔, 五秒, 五分鐘, 日, 周.
要求不高的數據, 可以從公開渠道下載或自行採集, 但是對精度和實時性要求高的數據, 需要從非公共渠道購買.
非公共數據
這部分數據指非公開渠道的數據, 或者需要付費的商業數據. 例如上面提到的高頻交易數據, 有專人維護的地理信息和交通信息, 一些行研收集的行業數據, 還有監管機構從被監管機構提取的運營數據等.
內生數據
企業運營中產生的數據: 財務數據, 業務數據, 大部分BI系統, 處理的是這部分內容, 配合公共和非公共數據, 產生報表或做出決策.
數據的類型
數據的類型, 從不同的角度有不同的分類:
- 定性和定量
- 離散和連續
- 單維和多維 (例如地理坐標)
對於定性數據, 必須將定性數據轉化為定量數據, 才能進行正確的分析.
BI系統對數據的分類
BI系統對數據的分類有三層, 分別是 Raw(原始數據), Meta(元), Model(模型), 每一層都是對前一層數據的細分.
Raw 原始數據
原始數據泛指各種未經校驗的, 未處理的, 未結構化的, 無直接的自然含義的數據. 這一階段的數據是粗糙的, 可能存在噪音, 可能存在不匹配的格式, 需要處理後才能被軟體使用.
原始數據的例子
- 從感測器採集的每秒的角度讀數
根據ADC的採樣頻率和精度, 感測器讀數會是一個固定時間間隔的數字, 這個數字有可能是一個區間的整數值, 例如對於10bit精度的ADC, 採樣值範圍為[0, 1024], 邊界和中點未校準, 例如搖桿角度範圍為120度, 讀數中點(60度)在 508 而不是 511, 邊界是[5, 1021], 而且讀數的變化在各個角度是不均勻的, 中間解析度大, 兩邊解析度小. 對於這種數據, 要經過校準, 去噪, 轉換等方式, 將讀數轉變為對下一個階段有意義的數據. - 媒體的網頁數據
從爬蟲的角度, 如果是一個HTML結構的頁面, 數據是一個很大的字元串, 當中包含了各種HTML標簽, 廣告和固定的界面元素, 如果需要的是其中的新聞內容, 則需要對數據進行HTML解析, 根據路徑提取某一個id或class中的內容. 內容中如果存在一些特殊字元, 例如內嵌了廣告, 或者站內的鏈接, 還需要進一步過濾 - 通話錄音
通話錄音是一個二進位文件, 根據數據處理的需要, 例如希望做文本分析和關鍵詞提取, 則首先需要根據錄音的編碼格式, G.726, 還是AC3, MP3, 還原迴音頻, 使用ASR工具提取文本
原始數據的類型
基礎類型
從BI軟體的角度, 原始數據有以下基礎類型
- 字元串
- 數值
- 時間
- 二進位(*)
實際上通用的類型只有三種: 字元串, 數值, 時間. 二進位是一種特殊的類型, 用於處理其它的例外情況, 例如無法識別的數據. 對於二進位數據, 通常需要轉換為以上的三種通用類型才能被BI軟體處理.
基於以上的基礎類型, 進行排列組合可以得到派生類型, 例如
- 多維數據(例如X-Y-Z軸坐標值)
- 數組
高級類型
對於數值類型和時間類型, 可以進一步衍生出高級類型
- 數值
- 整數
- 小整數(絕對值不超過255的整數)
- 長整數
- 浮點數
- 百分比(取值在0 - 1區間的值)
- 小數位數固定的浮點數
- 整數
- 時間
- 日期(不包含時間部分)
- 時間(不包含日期部分)
- 完整時間(包含年月日時分秒)
Meta 元數據
元數據是經過加工清洗後, 具有自然含義的數據. 這一階段的數據是可以被BI軟體直觀理解的, 與現實世界相關的數據.
元數據的例子
- 校準後的角度讀數
經過校準和轉換, 在規定的誤差範圍內反映機械搖桿的角度 - 攝氏度氣溫值
在規定的誤差範圍內以攝氏度反映溫度值 - 中國身份證號
- IPv4地址
元數據的類型
不同的基礎類型, 可以派生出的元數據類型有
- 字元串
- 身份證號
- 手機號
- 銀行卡號
- IP地址
- 郵政編碼
- 姓名
- ...
- 數值
- 金額
- 氣溫
- 海拔高度
- 兩地距離
- 速度
- 加速度
- 時間長度
- ...
同樣地元數據也可以通過排列組合產生派生類型, 例如
- 一個經度和一個緯度組合產生的地理坐標點
- 兩個經緯度組合產生的一條地理連線, 或者一個地理矩形區域
Model 模型數據
模型數據是映射到模型中具體欄位的元數據. 這一階段的數據, 在模型中是確定的欄位(或者說特征量). 將用於模型訓練和計算, 影響最終的決策.
模型數據的例子
- 財務模型中某個子公司月營收金額
- 交易模型中某個證券資產每天的收盤價格
- 快遞物流模型中的發件人手機號
- 快遞物流模型中的收件人手機號
模型數據的類型
因為從元數據可以派生出無窮盡的模型數據, 這部分就無法列舉了.
以手機號這個元數據類型舉一個簡單的例子, 根據不同的模型結構, 手機號可以體現為各種具體的欄位
- 銀行卡預留手機號
- 交易方手機號
- 交易對手方手機號
- 發件人手機號
- 收件人手機號
- 簡訊接收方手機號
模型數據的屬性
模型數據根據模型要求, 對數據有額外的屬性要求
- 是否允許空值 NULL, 如果不允許空, 則在轉換階段要對空值進行過濾或替換處理
- 是否有限, 例如各種枚舉值, 性別, 年齡, 郵政編碼, 都屬於有限數據
- 是否連續, 例如金額, 速度, 經緯度, 這些屬於連續值, 對於連續值欄位不能作聚合處理
- 是否無符號, 例如時間長度, 尺寸長度, 這些使用負值沒有意義
BI系統對數據的處理
BI系統對數據的處理, 可以用ETL的過程進行理解. 借用 Power BI 的數據導入和類型作為示例
抽取 Extract
抽取可以通俗的理解為數據導入. BI系統的第一件事就是將數據導入. 不管主動還是被動, 通過文件或者介面. 在這個過程中需要適配各種數據源的容量, 頻次和格式, 作為BI系統, 這部分也許並不能體現高科技, 但是需要實實在在地投入成本, 控制好質量.
數據的質量, 導入的效率, 異常的處理, 決定了BI系統performance的上限.
技術處理
這裡不討論方式和介面適配, 只對入庫進行說明.
在抽取階段, 每個維度/欄位/特征的數據格式必須為可用的格式: 字元串, 數值或時間. 如果連字元串都無法存儲, 例如二進位數據, 必須通過專用的抽取方法或工具轉換為可用的格式.
在實際應用中, 有兩種形態: 桌面應用 和 伺服器應用
桌面應用
如果BI軟體直接運行在使用者的個人電腦上, 例如 Power BI, 這種情況下, 系統的資源是有限的, 通常只有4G - 8G的記憶體, 以及幾十GB的存儲, 但是BI軟體可以直接訪問文件(例如Excel和CSV數據源).
在桌面應用中, 導入可以簡化為連接數據源, 將數據源作為轉換和載入的基礎.
伺服器應用
如果BI軟體運行在伺服器上, 使用者通過客戶端或瀏覽器使用BI軟體提供的服務, 這種情況下, 系統的資源會充裕得多, 例如32G或更多的記憶體, 數個TB的存儲, 但是BI軟體面對的數據都在遠程, 例如使用者個人電腦上存儲的Excel, 公司財務系統上存儲的報表.
在伺服器應用中, 通常需要將數據緩存至服務端, 再進行後續的清洗和轉換. 對於通用的場景, 可以將原始數據都存儲為字元串, 對於存在二進位數據的場景可以考慮局部使用二進位欄位.
轉換 Transform
轉換中, 需要完成的工作包括數據識別, 數據清洗, 格式轉換和屬性擴充. 目標是要轉換為結構化的元數據.
數據識別
對每個維度/欄位/特征, 根據數據的形態, 依次判斷
- 數據的基礎類型(字元串, 數值, 時間)
- 高級類型(細化數值和時間類型)
- 元類型, 進一步跟進數據的格式和特征進行判斷, 例如一組字元串, 是否為身份證號? 是否為手機號? 是否為IP地址?
並非所有的數據都完成上面三步的判斷.
- 第一步是一定要完成的, 無論如何, 數據可以作為字元串處理.
- 有些數據, 可能是多個數據的組合, 或者一個數據的局部, 需要通過格式轉換階段處理, 這一步可以先識別為字元串或某種數值類型.
- 對於欄位混雜, 或者未對齊的數據, 一個維度可能存在多種類型, 對類型的判斷可用
- 僅通過前100條(或者其它數量)
- 根據各種類型的比例, 選擇比例大的
- 判斷數據源無效, 提示錯誤
數據清洗
根據第一步得到的元類型, 如果無法判斷的, 需要人手工指定元類型
- 對欄位中的所有數值進行判斷, 是否滿足
- 根據預先制定的規則, 或者人手工下達的指令, 對不滿足的數據進行濾除, 替換或修改
這一步結束後, 欄位的數值應當符合元數據類型的要求
格式轉換和屬性擴充
轉換和擴充, 指的是數據在清洗之後, 在載入模型之前的所有數據編輯操作. 這些操作豐富多樣, 大體有以下類型
- 特殊格式處理
- 例如前面提到的多數據欄位, 需要將數據從一個欄位中提出, 填充到多個欄位
- 而數據局部, 則需要將多個欄位提出, 合併填充為一個欄位
- 半格式化數據, 例如JSON字元串, 根據解析出的內容, 提取並填充到多個欄位
- 擴充屬性, 例如從手機號數據, 擴充出手機號歸屬地信息, 填入省, 市, 區欄位
- 多值歸一, 例如將各種交易描述: "收款", "入賬", "借入", 統一轉換為"IN".
- 濾除數據, 例如從簡訊記錄中刪除所有發送手機號以10開頭的營銷廣告數據
- 數據替換, 例如為匹配模型數據中的省市名稱, 將"烏市"替換為"烏魯木齊市"
因為這一步之後不再處理清洗, 所以這一步的操作, 其結果都要滿足當前欄位的元數據類型對數據格式的要求
轉換規則
對於動態產生的數據, 需要保存各欄位的元類型, 需要保存上面得到的轉換規則, 以便新數據產生時自動轉換為目標數據
載入 Load
載入是基於數據模型的, 將對應元類型的數據, 映射到數據模型的某個特征並載入.
在開發上, 涉及到兩部分工作
模型識別
通過抽取和轉換之後的數據集, 是一個欄位/維度/特征的集合, 根據這個集合中的元數據類型, 與系統中存在的數據模型進行匹配, 判斷與各個模型的相似程度, 並確定或推薦最合適的數據模型.
- 元數據類型判斷. 根據數據模型中各個特征的元數據類型, 與數據集中的元數據類型進行對比
- 欄位名/表頭判斷. 如果原始數據帶表頭, 能提供更有效的匹配依據
- 建立數據集與數據模型之間的欄位映射關係
模型匹配和識別通常是一次性的, 甚至在有些場合完全需要通過手工. 這部分是錦上添花的功能, 可以提升用戶體驗, 但是不會對BI的performance造成實質影響.
數據載入
數據載入就是將建立映射關係的數據載入到模型中. 根據BI的處理機制, 通常分為動態和靜態兩種
靜態載入
數據導入後, 不會經常更新, 常用於歷史數據分析, 以及一些長效的決策. 這種載入對系統的要求不高, 按元數據格式入庫即可.
動態載入
動態載入用於處理頻繁更新, 或需要實時決策的場景, 根據來源數據的情況, 動態載入對系統的要求可能會很高
- 數據的頻率, 總量和視窗
處理五秒鐘交易數據還是日交易數據, 處理一支股票還是所有上交所股票, 回溯一個季度的數據還是回溯五年數據 - 數據處理的實時性
做高頻交易, 還是做行研分析 - 數據可靠性的標準
是否允許中間有丟失的數據, 是否允許局部的時間不一致
不同的場景, 對系統的設計思路是不一樣的, 需要具體問題具體分析
總結
以上說明瞭BI系統中決策的類型, 數據對決策的重要性, 數據的類型, 以及最重要的 -- 在BI系統中如何進行數據處理.
參考
- Business intelligence https://en.wikipedia.org/wiki/Business_intelligence
- An in-depth guide to data preparation https://www.techtarget.com/searchbusinessanalytics/definition/data-preparation
- Data Types in Business Intelligence https://buh-lah-kay.medium.com/data-basics-of-business-intelligence-f31ca2fbdcd0
- Data Types Supported by Oracle BI Enterprise Edition https://docs.oracle.com/cd/E28280_01/bi.1111/e10540/data_types.htm
- Enduring lessons from the legend of Rothschild’s carrier pigeon https://www.ft.com/content/255b75e0-c77d-11e2-be27-00144feab7de
- Quantitative Data: Definition, Types, Analysis and Examples https://www.questionpro.com/blog/quantitative-data/