數倉開發需要了解的 BI 數據分析方法

數倉開發經常需要與數據表打交道,那麼數倉表開發完成之後就萬事大吉了嗎?顯然不是,還需要思考一下如何分析數據以及如何呈現數據,因爲這是發揮數據價值很重要的一個方面。通過數據的分析與可視化呈現可以更加直觀的提供數據背後的祕密,從而輔助業務決策,實現真正的數據賦能業務。通過本文你可以瞭解到:

帕累託分析與數據可視化

基本概念

帕累託 (Pareto) 分析法,又稱 ABC 分析法,即我們平時所提到的 80/20 法則。關於帕累託 (Pareto) 分析法,在不同的行業都有不同的應用。

在企業的庫存管理中,可以發現少數品種在總需用量 (或是總供給額、庫存總量、儲備金總額) 中,佔了很大的比重,但在相應的量值中所佔的比重很少。因此可以運用帕累託分析法,將企業所需的各種物品,按其需用量的大小、物品的重要程度、資源短缺和採購的難易程度、單價的高低、佔用儲備資金的多少等因素分爲若干類,實施分類管理。

商品銷售額分析中,某些商品的銷售額佔了總銷售額的很大部分,某些商品的銷售額僅佔很小的比例,這樣就可以將其分爲 A、B、C 幾大類,對銷售額佔比較多的分類進行投入,以獲得更多的銷售額。

在質量分析中,對某種原因導致產品質量不合格的產品數量進行分析,使用帕累託 (Pareto) 分析法,可以很直觀的看出哪些原因造成了產品質量不合格以及哪些原因比較嚴重。這樣就可以着重解決重要的問題,明確目標,更易於操作。

根據事物在技術或經濟方面的主要特徵,進行分類,分清重點與非重點。對每一種分類進行區別對待管理,把被分析的對象分成 A、B、C 三類,三類物品沒有明確的劃分數值界限。

DXhEw7

分類的核心思想:少數貢獻了大部分價值。以商品品類和銷售額爲例:A 品類數量佔總體 10% ,卻貢獻了 80% 的銷售額。

數據分析案例

假設有如下數據集格式: IKqUnG

需要將數據加工成下面的格式: ysTrey

具體的 SQL 實現如下:

SELECT 
     brand, -- 品牌
     total_money, -- 銷售額
     sum(total_money) over() AS sum_total_money,-- 銷售總額
     sum(total_money) over(ORDER BY total_money DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS acc_sum_total_money -- 累計銷售額
FROM sales_money

上面給出了具體的 SQL 實現,其實 BI 工具已經內置了許多的處理函數和拖拽式的數據處理,不需要寫 SQL 也可以將一份明細數據加工成上面的形式。

從上面的帕累託圖中可以看出:A 類的 (綠色部分) 佔了總銷售額的 80% 左右,B 類 (黃色部分) 佔總銷售額的 10%,C 類 (紅色部分) 佔總銷售額的 10%。接下來可以進行長尾分析,制定營銷策略等等。

RFM 分析與數據可視化

基本概念

RFM 模型是在客戶關係管理 (CRM) 中常用到的一個模型, RFM 模型是衡量客戶價值和客戶創利能力的重要工具和手段。該模型通過一個客戶的近期購買行爲、購買的總體頻率以及花了多少錢三項指標來描述該客戶的價值狀況。

RFM 模型較爲動態地層示了一個客戶的全部輪廓,這對個性化的溝通和服務提供了依據,同時,如果與該客戶打交道的時間足夠長,也能夠較爲精確地判斷該客戶的長期價值 (甚至是終身價值),通過改善三項指標的狀況,從而爲更多的營銷決策提供支持。

在 RFM 模式中,包括三個關鍵的因素,分別爲:

最近一次消費、消費頻率、消費金額是測算消費者價值最重要也是最容易的方法,這充分的表現了這三個指標對營銷活動的指導意義。而其中,最近一次消費是最有力的預測指標。

通過上面分析可以對客戶羣體進行分類:

yU7c9M

數據分析案例

假設有如下的樣例數據: NuWEkQ

需要將數據集加工成如下格式:

具體 SQL 實現

SELECT 
     customer_name,-- 客戶名稱
     customer_avg_money,-- 當前客戶的平均消費金額
     customer_frequency, -- 當前客戶的消費頻次
     total_frequency,-- 所有客戶的總消費頻次
     total_avg_frequency, -- 所有客戶平均消費頻次
     customer_recency_diff, -- 當前客戶最近一次消費日期與當前日期差值
     total_recency, -- 所有客戶最近一次消費日期與當前日期差值的平均值
     monetary,-- 消費金額向量化
     frequency, -- 消費頻次向量化
     recency, -- 最近消費向量化
     rfm, -- rfm
     CASE
        WHEN rfm = "111" THEN "重要價值客戶"
        WHEN rfm = "101" THEN "重要發展客戶"
        WHEN rfm = "011" THEN "重要保持客戶"
        WHEN rfm = "001" THEN "重要挽留客戶"
        WHEN rfm = "110" THEN "一般價值客戶"
        WHEN rfm = "100" THEN "一般發展客戶"
        WHEN rfm = "010" THEN "一般保持客戶"
        WHEN rfm = "000" THEN "一般挽留客戶"
    END AS rfm_text
FROM
  (SELECT 
       customer_name,-- 客戶名稱
       customer_avg_money,-- 當前客戶的平均消費金額
       customer_frequency, -- 當前客戶的消費頻次
       total_avg_money ,-- 所有客戶的平均消費總額
       total_frequency,-- 所有客戶的總消費頻次
       total_frequency / count(*) over() AS total_avg_frequency, -- 所有客戶平均消費頻次
       customer_recency_diff, -- 當前客戶最近一次消費日期與當前日期差值
       avg(customer_recency_diff) over() AS total_recency, -- 所有客戶最近一次消費日期與當前日期差值的平均值
       if(customer_avg_money > total_avg_money,1,0) AS monetary, -- 消費金額向量化
       if(customer_frequency > total_frequency / count(*) over(),1,0) AS frequency, -- 消費頻次向量化
       if(customer_recency_diff > avg(customer_recency_diff) over(),0,1) AS recency, -- 最近消費向量化
       concat(if(customer_recency_diff > avg(customer_recency_diff) over(),0,1),if(customer_frequency > total_frequency / count(*) over(),1,0),if(customer_avg_money > total_avg_money,1,0)) AS rfm
   FROM
     (SELECT 
           customer_name, -- 客戶名稱
           max(customer_avg_money) AS customer_avg_money , -- 當前客戶的平均消費金額
           max(customer_frequency) AS customer_frequency, -- 當前客戶的消費頻次
           max(total_avg_money) AS total_avg_money ,-- 所有客戶的平均消費總額
           max(total_frequency) AS total_frequency,-- 所有客戶的總消費頻次
           datediff(CURRENT_DATE,max(customer_recency)) AS customer_recency_diff -- 當前客戶最近一次消費日期與當前日期差值
      FROM
        (SELECT 
               customer_name, -- 客戶名稱
               avg(money) over(partition BY customer_name) AS                customer_avg_money, -- 當前客戶的平均消費金額
               count(amount) over(partition BY customer_name) AS customer_frequency, -- 當前客戶的消費頻次
               avg(money) over() AS total_avg_money,-- 所有客戶的平均消費總額
               count(amount) over() AS total_frequency, --所有客戶的總消費頻次
               max(sale_date) over(partition BY customer_name) AS customer_recency -- 當前客戶最近一次消費日期

       FROM customer_sales) t1
       GROUP BY customer_name)t2) t3

通過上面的分析,可以爲相對應的客戶打上客戶特徵標籤,這樣就可以針對某類客戶指定不同的營銷策略。

波士頓矩陣與數據可視化

基本概念

波士頓矩陣 BCG Matrix 又稱市場增長率 - 相對市場份額矩陣、波士頓諮詢集團法、四象限分析法、產品系列結構管理法等。

BCG 矩陣區分出 4 種業務組合:

波士頓矩陣通過銷售增長率(反映市場引力的指標)和市場佔有率(反映企業實力的指標)來分析決定企業的產品結構。

案例

本案例以分析客戶爲背景,將客戶分類,找到明星客戶、現金牛客戶、問題客戶以及瘦狗客戶。

假設數據集的樣式如下: LnaGBw

具體 SQL 實現:

SELECT 
    customer_name, -- 客戶名稱
    customer_avg_money, -- 客單價
    customer_frequency , -- 當前客戶的消費次數
    total_avg_money,-- 所有客戶的平均消費金額
    total_frequency / count(*) over() AS total_avg_frequency -- 平均消費次數

FROM
  (SELECT 
        customer_name, -- 客戶名稱
        max(customer_avg_money) AS customer_avg_money, -- 客單價
        max(customer_frequency) AS customer_frequency , -- 當前客戶的消費次數
        max(total_avg_money) AS total_avg_money,-- 所有客戶的平均消費金額
        max(total_frequency) AS total_frequency --所有客戶的總消費頻次

   FROM
     (
        SELECT
             customer_name, -- 客戶名稱
             avg(money) over(partition BY customer_name) AS customer_avg_money, -- 客單價
             count(*) over(partition BY customer_name) AS customer_frequency, -- 當前客戶的消費次數
             avg(money) over() AS total_avg_money,-- 所有客戶的平均消費金額
             count(*) over() AS total_frequency --所有客戶的總消費頻次

        FROM customer_sales ) t1
    GROUP BY customer_name) t2

經過上面的分析,大致可以看出客戶畫像:

總結

本文主要介紹了數倉開發應該要了解的常見的數據分析方法,主要有三種:帕累託分析、RFM 分析以及波士頓矩陣分析。本文分別介紹了三種分析方法的基本概念、操作步驟以及 SQL 實現,並給出了相應的可視化分析圖表,每個案例都是企業的真實應用場景。希望給數倉開發的同學提供一些觀察數據的分析角度,從而在實際的開發過程中能夠多思考一下數據的應用價值以及數據如何賦能業務,進一步提升自己的綜合能力。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/ERhlIhPuRll3jAYE3We4Sw