想從事數據科學,編碼技能夠格了嗎?
先來看看這樣一個故事:
“那是周五的晚上。我記得非常清楚,要去跟父母一同度假。那是他們是第一次去班加羅爾,我都計劃好了帶他們逛逛。工作已經完成,且一般周五晚都不會太忙。可就在下班時,對方突然發郵件問我要很早以前的報告,這份報告一年前就不再遞交了。
雖然不高興,不過運行標準的代碼倒也不太費事。媽呀!我錯了,耗了一晚上才整理完……”
這與我們的話題有什么關系?機智的你應該猜到了吧~
當今各個企業都將數據科學作為決策循環每個階段的關鍵操縱桿,促成重要的商業戰略。可是數據科學難在哪?數據分析師、商業分析師或數據科學家又是如何工作的呢?
所有數據科學的問題都可一分為二,一套“活動”和幾步“絕佳操作過程”。
“活動”包括數據收集、數據清理、數據整理、假設驗證、模型開發、驗證等。如果你常與分析行業打交道,那對這些術語一定不陌生。
但“絕佳操作過程”卻鮮有人知,實踐的也不多。事實上,它強調最多的是項目管理、建立庫、文件管理、溝通和代碼維護。作為數據科學家,必須保證堅持“3個C”:
- consistency(一致)
- ommunication(溝通)
- consumption(消費)
工作要始終如一,與利益相關方溝通商業細節,最重要的是你在被消費。
“如今的企業都在找尋能夠創造適用多個團隊的方案的數據科學家。就好比一個產品,人人都用得心應手的那個。如此不但可以節省資金,不再浪費錢解決不同商業活動中相似的問題,還能節約時間和精力。”
數據科學中的編碼與軟件開發截然不同。不僅要知道怎么做,還得懂相當多的數據和商業內容。
今天筆者打算談談“一致”,以及如何在編碼中做到這一點。在Mu Sigma商業方案工作的三年,以及至今遇到的所有挑戰,讓我總結出了許多絕佳經驗。
下面這五點會簡單講解什么是“數學+商業+數據+科技=數據科學”,助你功力大增!
1. 代碼可讀性是否高
格式化良好且眾人點評過的代碼是天堂。它有助于輕松修補漏洞,確保順利完成質量檢查。每一個數據科學團隊都追隨“Peer Quality Checks(QC,同行質量檢查)”的理念,以求數據能準確輸出。在將最終結果遞交之前先讓同行過目,這是一種絕佳實踐。可讀代碼包含:
- 項目名、代碼目的、版本、作者名、創建日期、完善日期、最近一次修改、從哪些改變開始
- 在執行運算之前,每個代碼片段都要有一行描述(通過這些代碼準確獲取商業規則信息或者使用的過濾系統)
- 每兩個代碼片段之間有適當的空格,留有足夠距離
- 合理使用慣例命名表格。不要起“創建表格”的名字,可以換成“創建表格客戶-頁數-概述”。這樣會讓表格更直觀,無需瀏覽余下的所有代碼片段。
2. 代碼是否具備可重復使用的模塊
多數時候,我們都是根據當下的商業問題,運用相似模式不同過濾器處理數據集,或者用同一表格簡要描述商業問題中的各種情況。
舉個例子,現在你手中有一個客戶數據集,信息包含客戶ID、交易ID、交付日期、產品類型和銷售數據。你被告知要找出給每個產品貢獻80%銷售額的頂級客戶。
通常會創建一組專門的代碼,復制粘貼后再利用另一個過濾器。而優秀的編碼人員會站在用戶角度創建模塊,將產品類型和銷售價格區域輸入進去,得出理想的結果。
可重復使用的模塊在所有平臺都可創建,避免冗余的代碼行,輕松實現質量控制。
3. 輸入的代碼是否可恢復
任何輸入都可恢復就意味著不管輸入什么類型,都可輸出結果。代碼實踐中最棘手的問題就是讓輸入復原,實現代碼的重復利用。
分析師可能會收到來自各個利益相關方的數據請求,理想的情況就是編寫迎合各種商業請求的代碼。
例如,電子設備和化妝品公司的銷售主管想要了解各自客戶信息對應的產品消費記錄。分析師之前都是在筆記本或平板上操作的,知道所有電子產品名都是小寫的。
但要核實化妝品信息,可能就要先過濾一遍所有的產品,然后看客戶數據中與化妝品有關的交易如何。
但實際上,在產品列中用UPPER()就可避免不必要的檢查。在現實世界中,很難做到每個輸入的代碼都可恢復,要考慮所有可控的例外情況。
4. 輸出結果是否經得起數據和商業的常規檢查
傳輸精準數據是項目制勝的關鍵。很多商業決策都基于報告的數據,一點點的差錯都會造成巨大影響。
假如你被告知要根據客戶交易額找到前百名忠實客戶,企業會根據你推薦的結果給這些人提供30%的優惠。
理念就是找出鐵桿顧客,引導其購買更多的產品。通過降低價格帶來更高的交易額。然而很多人并沒有意識到多數公司利用的數據集并不是絕對真實的,在用之前需要進行處理。
比如某客戶付款時可能沒有操作成功,但系統也記錄下來了。最后在計算交易額時這種錯誤信息理應去除,否則得出的每位客戶的交易額預算不會準確。難就難在識別異常信息。
以下是編碼過程中必做的檢查:
- 掌握指向業績的關鍵風向標,有助于實現每一步的數據匯總。上述例子中,所有客戶交易都是這個風向標。根據企業的年度報告,會發現近有12,000位客戶在網站上購買產品。但是在查詢數據時,只有8000名消費者的信息。數據準確嗎?再次檢查代碼或跟利益相關方一同解決數據問題。
- 在進行任何操作之前必須檢查數據集的級別。根據是否為單一數列還是組合數列對其進行劃分,這些數列可以識別數據庫或表格中的異常信息。幫助識別重復錄入的部分,防止重復計算。
- 不管是加入一個或幾個表格,都要確保在同一級別。一定要在所有加入信息顯示前后追蹤記錄的數量。這將有助于識別多項數據圖或重復計算的信息。
- 快速地給數據集做一個描述性統計。這將有助于找出數據分布和所有可能遺漏的值。
5. 引導處理例外情況
例外情況的處理,似乎和輸入代碼可恢復聽起來有些相似,但操作完全不同。
問大家幾個問題:你覺得一家企業的客戶數據中包含多少條記錄?是上面展示的20,252條嗎?別開玩笑了!所有客戶數據中各個產品的交易記錄能達幾百萬條。在SQR、R、Python或Alteryx中查詢都要花上幾個小時。
試想一下,如果你需要查詢不同產品的表格,如何處理意外情況呢?
- 保證檢查查詢時間。通常查詢大型數據集所耗費的時間都超出預計,這是因為存在同時使用的情況,即多個用戶會同時查詢同一數據集。要保證代碼運行超過一定程度時能夠自動停止執行。
- 所有編程語言都允許設置執行例外處理,查詢失敗接下來的代碼片段也會停止執行。這樣,在出狀況或有錯誤時就可立即采取必要的糾正措施,而不是等著整個代碼執行完畢。
圖源:unsplash
“我的手機突然震動了,一晃到已上午八點。過去的五個小時我都在找錯誤匹配的數字。雖然一年前就干這個,但我幾乎記不起來任何使用過的商業規則。每一步的處理流程都不完善,質量控制數據不夠,這讓尋找問題變得更棘手。現在我可算認識到良好編碼實踐的重要性了。”
這個“痛心疾首”的故事,足以引起你對良好編碼實踐的重視了嘛~