我們公司經營了一個類似 LinkedIn 的求職平台,主要的商業模式是幫助企業找到適合的人才,媒合成功後,我們會根據錄取人才的薪資比例收取服務費(類似獵頭模式)。因為我們的商業模式依賴業務人員與客戶的互動,而業務人員的時間有限,因此,能否在早期辨識出哪個客戶具有更高的合作潛力,對資源的分配至關重要。
為了解決問題,我的分析目標是:如何在客戶進行 onboarding 流程時,辨識出其潛在價值,並進行客戶分群。這樣我們可以更有效地將資源集中在更有可能成功合作的客戶身上。
而我當時進行分析的步驟是:
1. 定義「好客戶」
我們使用歷史數據,並定義那些被業務標示為「值得合作」的客戶為「好客戶」。
2. 發想有用的特徵(Feature Engineering 特徵工程)
我發想了一些可能有助於區分「好客戶」與「其他客戶」的特徵,例如客戶的地區、預算範圍、以及希望招募的職位類型等。
3. 查看 Feature 與目標的相關性
接下來,我逐一檢視每個特徵與「好客戶」的相關性,通過製作圖表來視覺化這些關係。
然而,這個過程比較耗時,因為每一個 feature 需要單獨做一個圖表。當時我分析了 10 個特徵,結果製作了 10 張圖表,效率不高
根據 3. 得到的相關性結果,告知 PM 讓他們知道如何在 onboarding 過程做適當的分群
在我學習更多 Machine Learning 知識後,我意識到「3. 查看 Feature 與目標的相關性」這個步驟,其實可以使用機器學習模型來自動化,不但可以節省時間,還有機會找出更複雜的邏輯
然而,建立預測模型通常需要寫程式(例如使用 Python),而對於不熟悉 Python 的 Data Analyst 來說,這是一個障礙。為了解決這個問題,我開始尋找能夠不用寫程式就能達成的解決方案,最後我發現了 BigQuery ML(BQ ML)
BQ ML 可以通過簡單的 SQL 指令來構建機器學習模型。這意味著即使不會 Python 的分析師,也可以通過 SQL 來訓練模型、查看特徵重要性、進行預測等
詳細做法可參考這篇文章,我這裡主要列出我認為重要的三個指令:
CREATE OR REPLACE MODEL
`richard.lr_model`
OPTIONS
( model_type='LOGISTIC_REG',
input_label_cols=['is_hired'],
ENABLE_GLOBAL_EXPLAIN=TRUE
) AS
SELECT
request_rate, --feature
event_order, --feature
tech_stack_match_count, --feature
is_hired --label
FROM `richard.demo_table`
ORDER BY event_created_at DESC LIMIT 10000 OFFSET 1000
SELECT
*
FROM
ML.GLOBAL_EXPLAIN(MODEL `richard.lr_model`)
SELECT
*
FROM
ML.PREDICT (MODEL `richard.lr_model`,
(
SELECT
request_rate,
event_order,
tech_stack_match_count,
is_hired
FROM `richard.demo_table`
ORDER BY event_created_at DESC LIMIT 1000
)
)
這些 SQL 指令大大簡化了過去繁瑣的步驟,讓我能夠快速分析多個特徵,提升找到 insights 的效率(回扣到 數據分析師 Data Analyst 需要的四種能力 裡提到的 inspiration-per-minute)
利用 BQ ML,我能夠更快速地進行以下三個步驟:
儘管 BQ ML 很強大,但目前還有一些小問題,例如:
謝謝你看到這邊,如果你看完文章後有任何想法或建議,都很歡迎在留言區提出分享!或是歡迎加我的 Linkedin 與我交流