最近在準備數據分析師的面試,藉著這個機會整理回答商業分析問題的流程,除了加深自己的記憶以外,也希望可以分享給對於數據分析師有興趣的讀者。
常見的商業分析問題像是:「上個月的營收下降 15%,請協助找出原因並且提供建議」,面對這類型的商業分析問題,我的主要處理流程會是:
- 確認問題是否值得回答
- 訂定假說
- 驗證假說
- 重複訂定假說與驗證的步驟

商業分析流程
確認問題是否值得回答
在開始分析之前,第一步要先確認:「這個問題是否值得回答?」這個步驟經常被忽略,但它對於數據分析的影響至關重要。
「確認問題是否值得回答」這件事之所以很重要,可以回扣到我在《數據分析師 Data Analyst 需要的四種能力》裡面提到的「用 inspiration-per-minute 衡量 DA 的表現」,對於 DA 來說,要能夠提升自己的價值,就必須要讓我們的時間都花在影響力(impact)高的分析專案上,也因此需要在進行分析之前,先評估做這個分析的價值。
而就我過去經驗,主要可以透過以下幾個問題去確認是否是值得回答的問題
- 問題是否真的存在?
- 發現問題以後我們可以做什麼?
- 回答問題能帶來的影響力是否夠大?
1. 問題是否真的存在?
收到問題後,我習慣第一步先確認「問題是否真的存在」,避免花時間分析一個根本不存在的問題。
案例:UberEats 訂單下降
假設營運團隊觀察到某區域的 UberEats 訂單量下降,並要求數據分析團隊調查是否需要促銷以挽救下滑的營收。在實際去分析之前,我們必須先確認「訂單量下降」是否為真。
可能的誤判來源:
- 定義不一樣:訂單量下降,可能是因為我們的計算方式與營運團隊不同。例如,他們關注的是每天的訂單數,發現某幾天的訂單下降,便認定業績下滑。然而,數據分析團隊從「每週平均訂單量」角度下去看,發現下降只是短期波動,整體趨勢仍然穩定。
- 看到的問題其實是正常現象:如果訂單下降的區域是學校附近,而現在正值寒暑假,這種下降可能是正常的季節性變化,而非異常狀況。
在確認問題真的存在後,才有繼續往下分析的必要。
2. 發現問題後我們可以做什麼?
即使問題確實存在,下一個關鍵點是:「我們有哪些可行的解決方案?」隨著我們有的可行方案不同,後續做的分析拆解方向也會有所不同。
有些時候甚至會發現,無論分析結果是什麼,可行方案都是同一種,如果遇到這種情況,我就不會往下去分析,而是回頭跟需求方確認他期望從分析中獲得什麼。
案例一:提高 UberEats 高價值客群的訂單量
假設數據顯示「過去三個月,訂單金額較高的用戶(如企業用戶)下單頻率下降」,我們想知道如何提升這類客群的訂單量。
但如果 UberEats 目前沒有專門針對企業用戶的行銷預算,也無法提供專屬折扣,那麼這個問題即使值得關注,也沒有可行的解決方案,分析的價值就會降低。
案例二:提升 UberEats 用戶活躍度
假設 UberEats 目前與用戶的唯一溝通管道是電子報,且電子報的成本極低(無論是金錢成本還是取消訂閱的風險),在這個情況下,如果我們的商業目標是提升用戶活躍度,最直接的方法就是向所有用戶發送電子報。
在發送電子報的成本極低的情況下,花時間去分析「應該發給哪些用戶,才能達到最佳效果」可能沒有太大價值。因為無論分析結果如何,最終我們都會選擇發送電子報給所有人。這樣的分析雖然能夠提供更精細的資訊,但實際應用上的影響力有限,因此這類問題在一開始就應該審慎評估,避免浪費時間在沒有明顯收益的分析上。
3. 回答問題能帶來的影響力是否夠大?
最後,即使問題存在且有解法,還需要進一步確認「回答問題能帶來的影響力是否夠大?」
案例:UberEats 小眾品類營收下滑
假設 UberEats 的數據顯示某個極為小眾的餐點品類(例如某種特定的健康飲品)在過去一個月營收大幅下滑,營運團隊希望分析原因。
但如果該品類的營收僅佔整體平台的 1%,即使營收下降 50%,對整個平台的總收入影響也不到 0.5%。
在這種情況下,花費大量時間分析此問題,可能無法帶來足夠的商業價值。
相較之下,若是 UberEats 主要品類(如快餐或咖啡類別)的營收出現異常下降,即便下滑幅度不大,但對整體營收的影響更大,這類型的題目可能更值得深入研究。
訂定假說
在確認問題存在後,下一步是訂定假說。這個流程很像顧問業的假說思考,先訂定可能的假設,再透過數據去驗證。
訂定假說的方式可以參考顧問業常提的 MECE 方式(Mutually Exclusive, Collectively Exhaustive),透過 MECE 去拆解問題並發想可能的假說。
例如 UberEats 想分析某城市的訂單量下降原因,我們可以把訂單量下降這件事根據商業角色拆解成「需求、供給、平台」,在這層拆解之後,就可以根據不同情境發想出造成訂單量下降的可能原因,進而提出解決方案
- 需求端問題:用戶是不是不再點外送了?
- 可能因為競爭對手提供更優惠的促銷
- 供給端問題:商家端是否有異常?
- 是否有大量熱門商家下架或營業時間減少?
- 平台端問題:UberEats 本身是否有變動?
- 是否近期有調整運費機制,導致部分用戶不願意下單?
不過在拆解問題時,有些時候會遇到無法直接用 MECE 拆解的情況。例如「UberEats 是否應該增加某城市的外送員數量?」這類問題並不像「營收下降」這種數值型問題能夠直接拆解。
這時候,我們需要先「將商業問題轉換成數學問題」,才能做進一步的分析。
以「UberEats 是否應該增加某城市的外送員數量?」這個問題為例,真正影響決策的關鍵應該是「新增外送員後,收益是否能大於成本?」,當做了這層轉換以後,就可以再往下根據收益端以及成本端去進行拆解與訂定假說。
驗證假說
訂定假說後,接下來就是用數據驗證假說是否成立。
這個步驟邏輯很簡單,就是把假說相關的數據給算出來,以確認假說是否成立。
唯一需要注意的地方在於,驗證假說時需要盡可能把 SQL 寫的彈性好調整。
高彈性的 Query 範例(把篩選邏輯放在同一個 CTE 中)
WITH filtered_orders AS (
SELECT
user_id,
order_id,
order_value
FROM orders
WHERE order_date BETWEEN '2024-01-01' AND '2024-03-31'
AND order_status = 'completed'
AND city IN ('New York', 'Los Angeles')
)
SELECT
filtered_orders.user_id,
CASE
WHEN users.vip_status = 'Y' THEN 'VIP'
ELSE 'Regular'
END AS user_type,
COUNT(filtered_orders.order_id) AS total_order_count,
SUM(filtered_orders.order_value) AS total_spent
FROM filtered_orders
JOIN users ON filtered_orders.user_id = users.user_id
GROUP BY filtered_orders.user_id, users.vip_status;
低彈性的 Query 範例(篩選邏輯四散)
SELECT user_id, 'VIP' AS user_type, COUNT(order_id) AS order_count, SUM(order_value) AS total_spent
FROM orders
WHERE order_date BETWEEN '2024-01-01' AND '2024-03-31'
AND order_status = 'completed'
AND city IN ('New York', 'Los Angeles')
AND user_id IN (SELECT user_id FROM users WHERE vip_status = 'Y')
GROUP BY user_id
UNION ALL
SELECT user_id, 'Regular' AS user_type, COUNT(order_id) AS order_count, SUM(order_value) AS total_spent
FROM orders
WHERE order_date BETWEEN '2024-01-01' AND '2024-03-31'
AND order_status = 'completed'
AND city IN ('New York', 'Los Angeles')
AND user_id IN (SELECT user_id FROM users WHERE vip_status = 'N')
GROUP BY user_id;
如果使用的是低彈性的版本,遇到想調整資料計算區間、order 類型或是城市時,都會需要在多個地方調整,會很容易有所遺漏。
在寫 SQL 時,如果可以一開始就把 SQL 寫成上述高彈性的版本,這樣在調整資料篩選條件或是切分不同分群時都會容易許多。
希望這篇文對你有幫助!如果有任何想法或建議,都很歡迎在留言區提出分享!
如果對這類型的問題有興趣,可以參考我其他寫過的職場心得。
最後也歡迎加我的 Linkedin 與我交流 🙌