一名數據科學家的日常
4 人贊了文章
前言
作為一名數據科學家,我時常被問到「你的工作究竟是做什麼的?」。
這是因為數據科學家有的時候會被人們誤解為手裡拿著水晶球(其實是MacBook Pro),嘴裡嚷嚷著令人難以理解的晦澀辭彙(機器學習,隨機森林,深度神經網路,貝葉斯後驗等),並對未來做出精準的預測的那麼一群巫師。雖然我也希望自己真的擁有未卜先知的超能力,但真實的情況是,數據科學並不是魔法。數據科學的威力來自於數據科學家對統計和演算法的深入理解,對編程技能的熟練掌握,以及優秀的溝通和業務認知能力。更重要的是,數據科學其實是一門如何把上述三方面的技能有條不紊地應用於業務中並解決實際問題的學問。
數據科學的基本流程
讓我們以一個具體的場景來解釋數據科學的基本流程:假設你剛被一家創業公司聘請為數據科學家。經過十年寒窗苦讀,你早就想要一展身手,攻克複雜的數據問題,讓新公司的同事對你刮目相看。但問題是,你該從何開始呢?
巧合的是,在公司吃午餐的間隙,你碰到了銷售部門的總監,你向總監熱情地介紹了自己並向她提問:「有什麼數據方面的難題我可以幫助你們解決嗎?」
總監想了想,答道:」你能幫我們優化我們的銷售漏斗並且提高轉化率嗎?「
你聽了之後第一反應:什麼?這是一個數據問題嗎?我壓根都沒有聽到「數據」這個詞。我應該具體去分析什麼呢?她的問題到底是什麼意思?
你在學校的導師早就警告過你:客戶對想要解決的數據問題缺乏清晰的定義是數據科學家經常會遇到的狀況。解決這個問題的辦法就是運用數據科學的基本流程。
數據科學的基本流程:概要
當一個非技術背景出身的領導要求你解決一個數據問題時,他/她對數據問題的描述通常是非常模糊的。這時候就需要發揮你作為數據科學家的作用,把一個模糊的問題描述轉化成一個具體的數據問題,並且運用數據科學的方法去解決問題,最後把結論呈現給你的上級領導。
我們通常把這整個流程稱為「數據科學流程」。具體來說,包括這樣幾個重要的步驟:
- 問題定義:誰是你的客戶?你的客戶到底想要你解決什麼問題?你應該如何把一個模糊的需求轉化為一個具體的,界定清晰的數據問題?
- 數據收集:是否有現成的數據?如果是的話,哪一部分的數據對解決問題有幫助?如果不是的話,需要哪些額外的數據?收集這些額外的數據需要動用哪些資源(時間,金錢,技術)?
- 數據處理:在現實場景中的原始數據一般很少能夠被直接使用,數據科學家在面對原始數據時通常要面臨數據錯誤,數據損壞,數據丟失等一系列問題。數據科學家首先要做的便是將原始數據進行清洗,並將其轉化成適合進一步分析的數據格式。
- 數據挖掘:一旦完成了數據清洗,下一步需要做的就是數據挖掘。數據挖掘指的是對數據內部隱含的規律,模式以及相關性進行探索,從中提取有價值的信息。
- 數據建模:數據建模通常是整個數據科學流程中最引人矚目的一個環節,在這個步驟里,數據科學家會根據要解決的問題和現有的數據選擇適用的機器學習,深度學習或是統計的相關模型,然後從模型輸出的結果里提煉出能夠為決策服務的內容。
- 成果溝通:這是最後一個也是最重要的環節,所有你之前完成的分析和建模工作將會變得一文不值,如果你不能夠把你的成果有效地與你的領導進行溝通。這個環節通常是最容易被數據科學家忽略或輕視的,但事實上,溝通能力以及如何讓非技術背景的受眾能夠非常直白地理解一個技術話題是至關重要的。
那麼回到我們之前的例子,現在你要如何著手開始幫助你們公司銷售部門的總監呢?在接下來幾個章節,我們會依次深入講解每一個數據科學的環節在現實中是如何運作的!
數據科學的基本流程之一:問題定義
你所在的創業公司銷售部門的總監希望你能幫助她優化銷售漏斗並提高轉化率,那麼作為一名數據科學家,你應該從何開始呢?
你應該從提出正確的問題開始:
- 誰是這家創業公司的目標客戶群?你應該如何甄別潛在的客戶?
- 目前這家創業公司的銷售流程是怎麼樣的?
- 這家創業公司已經收集了有關目標客戶群的什麼樣的信息?
- 針對目標客戶的細分類別,這家創業公司是否有不同等級的配套服務?
你的首要目標是從你的客戶(在這個例子里指的是銷售部門總監)的角度去理解她為什麼提出這個問題,和業務有什麼聯繫,以及她在這個問題中最關心的是哪個部分。正確理解客戶的動機對於數據科學家後續開展分析和建模的工作具有非常大的幫助。
一旦你對於數據問題所從屬的業務領域有了初步的了解,你應該向你的客戶提出更有針對性的問題來明確具體需求。在銷售總監的這個例子中,你可以向她提問:「那麼您理想中優化後的銷售漏斗是什麼樣子的?當前銷售漏斗的哪個部分您認為還有提升空間?」
銷售總監回答道:「我認為我們的銷售團隊花了太多時間在嘗試說服那些不打算購買我們產品的潛在客戶,我更願意把這些時間投入在那些具有更高意願購買我們產品的客戶身上。我同時希望了解哪些細分的客戶群體具有比較低的轉化率與造成低轉化率的原因。」
通過與銷售總監的進一步溝通,你終於了解到你需要解決的是個什麼樣的數據問題。你可以進一步把你的思路寫成幾個跟進的問題:
- 現在對公司來說最重要的細分客戶群體是哪些?
- 這些細分客戶群體之間的轉化率有什麼區別?某些細分客戶群體是否存在顯著的高或低轉化率?
- 我們應該如何預測一名潛在客戶是否有可能下單購買我們的產品?
- 我們是否有辦法甄別那些舉棋不定的潛在客戶?
- 不同細分客戶群體的投資回報率(ROI)是怎麼樣的?
有了這些問題,你可以與銷售總監再進行一次需求的確認。在這個例子里,銷售總監對於你準備的具體問題感到很滿意,並補充道:「我對於每個潛在客戶具有多大的可能轉化為購買我們產品的客戶特別感興趣,其他的問題也非常重要!」 在聽了銷售總監的意見後,你在心裡把第3個和第4個問題打了著重標記。
下面,我們來談談你如何利用現有的數據來解決問題。
數據科學的基本流程之二:數據收集
在這個步驟,你已經明確了你的第一個數據科學項目要解決的主要問題:預測每個潛在客戶將會購買公司產品的概率。
清楚了要解決的問題之後,接下來你應該考慮用什麼數據來解決這個問題,以及哪些數據是現成的?
你了解到這家創業公司大多數的客戶數據存儲在公司銷售部門的CRM系統里,由銷售運營團隊管理。CRM系統的後端是一個SQL資料庫,該資料庫支持API形式的訪問,並且能夠把數據以JSON格式的形式返回。
你面臨的問題有:CRM資料庫里哪些是你需要的數據?你應該如何提取數據?你應該用什麼格式來存儲數據以便進行深入的分析?
你開始捲起袖子探索SQL資料庫,發現裡面不僅存儲了客戶在銷售流程中的相關數據,而且包括了客戶的身份信息,聯繫方式和家庭信息等。同時,由於數據量不是很大,你決定使用CSV的格式來存儲提取的原始數據。
作為一名具有道德感的數據科學家,你應該考慮到數據的安全性和隱私性,在你提取數據的過程中,應該剔除一切個人可識別信息。所有最終在CSV文件中保存的原始數據必須是匿名的,並且無法追溯到任何一個具體客戶。
在大多數情況下,你會使用公司現成的數據。但有的時候,你也需要主導並參與數據收集的工作,那會涉及到更多軟體工程方面的知識,通常整個項目的周期會更長。
現在你已經有了解決問題所需要的相關數據,你準備開始對數據進行一番挖掘來找出有價值的信息。但是且慢,你手頭的數據仍然是「原始數據」,有很大的可能存在數據丟失,損壞,錯誤等問題。在你從數據中找出規律之前,你必須得對數據進行處理。
數據科學的基本流程之三:數據處理
作為公司的數據科學家,你正在埋頭幫助公司銷售部門總監預測哪些潛在客戶更有可能購買公司的產品。並且你已經從CRM資料庫收集了原始數據存儲在CSV文件里。
但是,在完成了這些前期工作之後,你還不能夠直接使用這些數據開展分析工作。因為,你要確保你的數據是「乾淨」的!數據清洗與整理通常是數據科學家在日常工作中花費最多時間的一個環節,這也是一個需要耐心和專註度的步驟。
首先,你必須檢視你提取的數據,並且確保你理解每個數據列的含義。舉個例子,如果有個數據列叫「FIRST_CONTACT_TS」,代表的是用戶第一次被公司聯繫的日期與時間。你應該自然地聯想到以下幾個問題:
- 是否存在丟失的數據?比如有些客戶沒有第一次被公司聯繫的日期時間信息?如果數據都齊全的話,是好現象還是壞現象?
- 這些日期時間數據代表的時區是什麼?所有的記錄都是同一時區的嗎?
- 這些日期時間數據的區間是什麼?區間是合理的嗎?如果這家創業公司是2011年成立的,那麼是否有2011年之前的記錄?那些記錄是單純的錯誤還是有其他特殊的含義?這些問題需要數據科學家與銷售部門負責業務的同事進行溝通確認。
一旦你發現了原始數據中存在的問題,你應該怎麼做呢?你可以選擇把那些含有丟失或者損壞數據的記錄完全捨棄,你也可以選擇用一些合理的默認值來代替(默認值通常要基於負責業務同事的意見)。一般而言,在數據處理過程中,你有很多選擇,作為數據科學家,你的工作是要決定哪個選擇對於解決當前的具體問題更有幫助。
接下來你必須要對CSV文件里的每一個數據列都重複同樣的處理步驟:在這個過程中你將會理解為什麼數據處理會花費那麼多時間。這是數據科學項目中不可或缺的時間投入,你的最終目的是儘可能地確保經過處理後你的數據是「乾淨」的。
同時你也需要確保數據中包含了你需要的所有關鍵信息。對於預測一個潛在客戶未來的購買行為而言,你需要知道的是哪些潛在客戶在過去已經成功轉化為購買產品的客戶。巧合的是,你找到了一列叫做「CONVERTED」的數據,裡面包含了「YES/NO」的值。
最後,在一系列的數據清洗與整理之後,你終於擁有一份「乾淨」的數據。你已經做好準備從數據中挖掘更多信息了!
數據科學的基本流程之四:數據挖掘
你已經收集了原始數據並花了很多時間清洗數據。
現在你終於要開始分析數據了!你迫不及待地想要了解數據里總共包含了哪些信息,其中哪幾塊數據能為你解決問題提供幫助。這個步驟通常被稱為「探索性數據分析」。
首先你要明確你想探索的是哪些方面的數據?你可以花上幾天甚至幾個禮拜的時間漫無目的地把各個方面的數據做成可視化圖表。但現實的問題是,你沒有那麼多時間,你的客戶——銷售部門的總監,希望在下周的董事會會議上彙報你的成果。
你回到一開始的問題定義:預測哪些潛在客戶有可能轉化為購買產品的客戶。你想到你可以把所有客戶數據按照購買與否分成兩個類別,然後觀察兩個子類別之間的差異。
很快你就注意到了一些有趣的現象。當你嘗試繪製兩個子類別的直方圖時,你發現很多年紀在30歲出頭的客戶更願意去購買公司的產品,而20多歲的客戶則並沒有很強的購買意願。這個發現讓你感到驚訝,因為公司的產品定位是面向20多歲的目標客戶群的。
在另外一方面,你發現很多成功購買產品的客戶更多是被公司的郵件營銷活動所針對而不是社交媒體營銷活動。社交媒體營銷活動總體上對於客戶的購買行為並沒有很大的影響。而20多歲年齡段的客戶則大多是被社交媒營銷活動針對。
你通過繪製直方圖直觀上確認了這些結論,並運用了你的推論統計知識進一步驗證。
第二天,你來到銷售總監的辦公桌前,和她分享了你的初步分析結果。她認為這些發現很有價值,並希望儘快看到你的完整成果!
數據科學的基本流程之五:數據建模
在之前的數據挖掘步驟中,我們已經從數據里發現了一些與客戶購買行為相關的特徵,這些特徵能夠幫助我們解決預測客戶購買行為的問題。在這一環節里,我們將來介紹如何用這些數據來構建一個數據模型並生成預測。
在分類預測問題上效果比較好的通常是機器學習模型。一個機器學習模型需要大量的數據來訓練,這些數據被稱為「特徵向量」。
那麼我們應該如何創建這些「特徵向量」呢?在我們的數據挖掘環節,我們已經發現了一些對於預測客戶購買行為具有幫助的特徵,尤其是客戶年齡與營銷渠道(郵件營銷 vs. 社交媒體營銷)。這裡我們需要注意這兩個特徵的區別:客戶年齡是一個數值而營銷渠道是一個數值型變數,而營銷渠道是一個分類型變數。作為一個稱職的數據科學家,你必須懂得如何區別對待這些變數並且正確地把這些變數轉化為特徵。
除了這些特徵以外,你還需要標籤。標籤會告訴機器學習模型哪些數據對應的是哪些類別。在這個例子中,我們可以用「CONVERTED」這個數據列作為布爾值標籤(購買 vs. 沒有購買)。1表示的是潛在客戶購買了產品,0表示的是潛在客戶沒有購買產品。
現在有了特徵和標籤數據,你決定用一種基本的被稱為邏輯回歸的機器學習分類器模型來訓練並生成預測結果。分類器模型是屬於機器學習中「監督學習」類別下的一種演算法,這種演算法構建的模型能從特徵和標籤數據中學習對應的映射關係。與「監督學習」相反的是,「非監督學習」可以直接從特徵數據里學習,而不需要與之對應的標籤數據。
你選擇邏輯回歸演算法的原因是這是一種相對簡單的模型,所需訓練時間也比較短,模型不但能夠生成預測的結果而且會輸出每個潛在客戶轉化的概率。你應用了這個模型,並調整了模型的參數,經過幾次迭代,你最終得到了令人滿意的預測結果。
銷售部門總監正好經過,看到你興奮的神情,問:「有什麼進展嗎?」你激動地回應:「我剛剛訓練完成的邏輯回歸模型實現了95%的真陽性率和0.5%的偽陽性率!」
銷售總監看著你說著這些好像看著一個外星人一般。
你這才意識到你還沒有完成你的工作。你需要完成最後一個重要的溝通步驟,也就是把你的成果通過一種清晰有效的方式傳達給你的客戶。
數據科學的基本流程之六:成果溝通
你現在訓練完成了一個能夠準確預測潛在客戶購買行為的機器學習模型。但是你應該如何把這個成果以銷售總監能夠理解的方式告知她呢?
溝通能力是數據學家所有需要的技能中最被低估的一項。當你的某些同事(比如從事軟體開發的同事)能夠盡量避免溝通而專心開發程序,數據科學家卻必須要具備能夠把自己的成果用其他部門同事同時能夠理解的語言解釋清楚的能力,並且一定要讓受眾真正理解一個數據科學項目產生的巨大影響。這些溝通技能通常被稱作「數據演講」的能力。
那麼在這個例子中, 你應該怎麼樣去用數據去講一個故事呢?你的故事應該包括你從數據挖掘和數據建模過程中得到的重要結論。最重要的一點是,你應該在你的演講中回答那些你的客戶最關心的問題!
首先你應該做的是從公司的CRM資料庫里提取現有潛在客戶的特徵數據,然後用你的模型對這些客戶的購買概率進行預測,把你的預測結果按照概率從高到低排序並保存在一張工作表裡,最後把存有結果的工作表分享給公司的銷售總監。
接下來,你應該強調從數據挖掘過程中得出的幾個重要的結論:
- 客戶年齡:從數據的角度來看,我們公司的產品更多地是賣給了在30歲出頭這個年紀的客戶群體,而不是20多歲的客戶群體。這與我們的銷售策略不符,因為我們產品的定位實際上是面向20多歲的客戶群的。
- 營銷方式:我們使用社交媒體營銷來針對20多歲的客戶,用郵件營銷來針對30歲出頭的客戶。這一營銷方式的差異造成了兩個細分客戶群體的購買轉換率的顯著差異。
在之後的一周,你和銷售總監又進行了一次會議,幫助她理解你得出的重要結論。她聽了後,問道:「現在從數據中我們知道了這些,那麼銷售部門應該如何採取行動呢?」
作為一名數據科學家,你的主要工作職責是分析數據。但由於你職責的一部分是解讀你所分析的數據,你會經常被其他同事要求對如何利用數據提出有效的建議。
你沉思片刻,回答道:「首先,我會建議用包含有模型預測結果的工作表來為銷售部門接下來一到兩周銷售工作的導向,指引銷售人員把更多精力花在具有高概率會購買我們產品的潛在客戶身上,並衡量這一策略的業績表現。這會讓你的銷售團隊變得更有效率,並且你們在執行新的銷售策略後也可以從業務的角度對我的模型進行反饋。」
「其次,我建議我們應該重新審視一下我們的營銷策略,並決定是否用郵件營銷活動來針對20多歲的客戶群體,或是提高我們社交媒體營銷活動的效率。」
銷售部門的總監非常認可你的建議,她馬上幫你安排了與營銷部門總監的會議讓你能夠在他面前提出你的建議。同時,她也要求你準備一份關於數據挖掘和數據建模的演示文稿,讓她可以在董事會會議上對銷售漏斗優化的問題與提高轉化率的問題進行彙報。
尾聲
你終於順利完成了你在公司的第一個數據科學項目並且通過實踐經驗理解了你在學校的導師所說的:數據科學的關鍵並不在於統計,數學或是演算法,也不在於編程和實施,數據科學的關鍵在於這是一個交叉學科,需要從業者具備跨越技術和業務兩個領域的能力。這也是為什麼數據科學這份職業是如此有挑戰性,如此有價值。
參考文獻:
- https://www.springboard.com/blog/data-science-process/
推薦閱讀:
※知乎Live(18.03.22): 如何零基礎迎接人工智慧轉型
※使用RODBC遇到的一些坑QAQ
※信用評分卡建模分析-R語言
※python入門第二課——基本語法
※Pandas基礎命令速查清單