數倉開發需要了解的 BI 數據分析方法
數倉開發經常需要與數據表打交道,那麼數倉表開發完成之後就萬事大吉了嗎?顯然不是,還需要思考一下如何分析數據以及如何呈現數據,因爲這是發揮數據價值很重要的一個方面。通過數據的分析與可視化呈現可以更加直觀的提供數據背後的祕密,從而輔助業務決策,實現真正的數據賦能業務。通過本文你可以瞭解到:
-
帕累託分析方法與數據可視化
-
RFM 分析與數據可視化
-
波士頓矩陣與數據可視化
帕累託分析與數據可視化
基本概念
帕累託 (Pareto) 分析法,又稱 ABC 分析法,即我們平時所提到的 80/20 法則。關於帕累託 (Pareto) 分析法,在不同的行業都有不同的應用。
- 舉個栗子
在企業的庫存管理中,可以發現少數品種在總需用量 (或是總供給額、庫存總量、儲備金總額) 中,佔了很大的比重,但在相應的量值中所佔的比重很少。因此可以運用帕累託分析法,將企業所需的各種物品,按其需用量的大小、物品的重要程度、資源短缺和採購的難易程度、單價的高低、佔用儲備資金的多少等因素分爲若干類,實施分類管理。
商品銷售額分析中,某些商品的銷售額佔了總銷售額的很大部分,某些商品的銷售額僅佔很小的比例,這樣就可以將其分爲 A、B、C 幾大類,對銷售額佔比較多的分類進行投入,以獲得更多的銷售額。
在質量分析中,對某種原因導致產品質量不合格的產品數量進行分析,使用帕累託 (Pareto) 分析法,可以很直觀的看出哪些原因造成了產品質量不合格以及哪些原因比較嚴重。這樣就可以着重解決重要的問題,明確目標,更易於操作。
- 另一種表述方式
根據事物在技術或經濟方面的主要特徵,進行分類,分清重點與非重點。對每一種分類進行區別對待管理,把被分析的對象分成 A、B、C 三類,三類物品沒有明確的劃分數值界限。
分類的核心思想:少數貢獻了大部分價值。以商品品類和銷售額爲例:A 品類數量佔總體 10% ,卻貢獻了 80% 的銷售額。
數據分析案例
- 效果圖
- 實現步驟
假設有如下數據集格式:
需要將數據加工成下面的格式:
具體的 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 模式中,包括三個關鍵的因素,分別爲:
-
R(Recency):表示客戶最近一次購買的時間有多遠,即最近的一次消費,消費時間越近的客戶價值越大
-
F(Frequency):表示客戶在最近一段時間內購買的次數,即消費頻率,經常購買的用戶也就是熟客,價值肯定比偶爾來一次的客戶價值大
-
M (Monetary):表示客戶在最近一段時間內購買的金額,即客戶的消費能力,通常以客戶單次的平均消費金額作爲衡量指標,消費越多的用戶價值越大。
最近一次消費、消費頻率、消費金額是測算消費者價值最重要也是最容易的方法,這充分的表現了這三個指標對營銷活動的指導意義。而其中,最近一次消費是最有力的預測指標。
通過上面分析可以對客戶羣體進行分類:
數據分析案例
- 效果圖
- 實現步驟
假設有如下的樣例數據:
需要將數據集加工成如下格式:
具體 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 種業務組合:
-
- 明星型業務(Stars,指高增長、高市場份額)
-
- 問題型業務(Question Marks,指高增長、低市場份額)
-
- 現金牛業務(Cash cows,指低增長、高市場份額)
-
- 瘦狗型業務(Dogs,指低增長、低市場份額)
波士頓矩陣通過銷售增長率(反映市場引力的指標)和市場佔有率(反映企業實力的指標)來分析決定企業的產品結構。
案例
- 效果圖
- 實現步驟
本案例以分析客戶爲背景,將客戶分類,找到明星客戶、現金牛客戶、問題客戶以及瘦狗客戶。
假設數據集的樣式如下:
-
首先需要計算客單價:每個客戶的平均消費金額,即客單價 = 某客戶總消費金額)/ 某客戶消費次數
-
其次需要計算記錄數:每個客戶的消費次數,即某個客戶總共消費的次數
-
接着需要計算平均消費金額:所有客戶的平均消費金額,即所有客戶的總消費金額 / 所有客戶消費次數
-
最後計算平均消費次數:所有客戶的平均消費次數,即所有客戶的總消費次數 / 總客戶數
具體 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