被忽略的技能:無(wú)人談及但不可或缺的數(shù)據(jù)科學(xué)技能
本文轉(zhuǎn)載自公眾號(hào)“讀芯術(shù)”(ID:AI_Discovery)。
用谷歌搜索“數(shù)據(jù)科學(xué)家的基本技能”,搜索結(jié)果的前幾位是一長(zhǎng)串技術(shù)術(shù)語(yǔ),叫做硬技能,包括Python、代數(shù)、統(tǒng)計(jì)和SQL等最普遍的技能。然后是軟技能,包括溝通能力、商業(yè)頭腦、團(tuán)隊(duì)合作能力等。
假設(shè)你是具備以上所有能力的超人,從五歲起就開始寫代碼,是一位Kaggle大師,你的會(huì)議論文必將獲得最佳論文獎(jiǎng)。但你的項(xiàng)目仍然極有可能難以達(dá)到成熟并成為完全合格的商業(yè)產(chǎn)品。
最近的研究估計(jì),超過(guò)85%的數(shù)據(jù)科學(xué)項(xiàng)目無(wú)法投入生產(chǎn)。一些研究提出了許多失敗的原因。筆者甚至從未把所謂的基本技能作為潛在的原因。
是上面的技能不重要嗎?當(dāng)然不是。硬技能和軟技能都至關(guān)重要。關(guān)鍵是它們是必要的,但僅僅掌握這些還不夠。此外,它們很受歡迎,出現(xiàn)在每條谷歌搜索中。因此,你可能已經(jīng)知道自己是否需要提高數(shù)學(xué)水平或團(tuán)隊(duì)合作能力。
筆者想談?wù)剬?duì)現(xiàn)在流行的硬技能和軟技能起補(bǔ)充作用的技能,可稱之為工程技能。在與真正的客戶一起構(gòu)建真正的產(chǎn)品時(shí),它們會(huì)極其有用。遺憾的是,數(shù)據(jù)科學(xué)家們很少學(xué)習(xí)工程技能,這有助于豐富行業(yè)經(jīng)驗(yàn)。但大多數(shù)初級(jí)數(shù)據(jù)科學(xué)家缺少這些技能。
工程技能與數(shù)據(jù)工程領(lǐng)域無(wú)關(guān)。用“工程技能”這個(gè)詞來(lái)將其與純粹的科學(xué)或研究技能進(jìn)行區(qū)分?!秳蛟~典》里對(duì)于engineering(工程)的解釋是“運(yùn)用科學(xué)原理來(lái)設(shè)計(jì)和建造機(jī)器、結(jié)構(gòu)和其他物品。”
本文中,工程是將科學(xué)轉(zhuǎn)化為產(chǎn)品的促成因素。如果沒(méi)有合適的工程技能,模型將繼續(xù)在預(yù)定義的數(shù)據(jù)集上運(yùn)行。但他們永遠(yuǎn)也無(wú)法找到真正的顧客。
重要卻經(jīng)常被忽視的技能包括:
- 簡(jiǎn)單性。確保你的代碼和模型是簡(jiǎn)單的,但不是過(guò)分簡(jiǎn)單化的。
- 魯棒性。你的假設(shè)是錯(cuò)誤的。做個(gè)深呼吸,繼續(xù)編碼。
- 模塊化,分而治之。深入研究最小的問(wèn)題,然后找到一個(gè)開源解決它。
- 采摘果實(shí)。不要只關(guān)注低掛的水果。但要確保你總是有物可挑。
簡(jiǎn)單性
圖源:shutterstock
- “如無(wú)必要,勿增實(shí)體”——奧卡姆的威廉
- “簡(jiǎn)單是終極的復(fù)雜”——達(dá)芬奇
- “一切都應(yīng)該盡可能簡(jiǎn)單,但不要太簡(jiǎn)單”——愛(ài)因斯坦
- “專注和簡(jiǎn)單一直是我的秘訣之一”——史蒂夫·喬布斯
關(guān)于“簡(jiǎn)單”的名人名言多得可以占滿本文篇幅。研究人員、設(shè)計(jì)師、工程師、哲學(xué)家和作者們都贊揚(yáng)這種簡(jiǎn)單性,并表示簡(jiǎn)單性本身具有價(jià)值。他們的理由變了,但是結(jié)論是不變的。達(dá)到完美的程度不是沒(méi)有什么要添加的,而是沒(méi)有什么要?jiǎng)h除的。
軟件工程師絕對(duì)意識(shí)到簡(jiǎn)單性的價(jià)值。有很多書籍和文章是關(guān)于如何簡(jiǎn)化軟件的。筆者記得KISS的原則(讓事情變得簡(jiǎn)單易懂),這甚至在筆者本科的一門課中講授過(guò)。簡(jiǎn)單的軟件維護(hù)成本較低,易于更改,并且不易出現(xiàn)錯(cuò)誤。人們普遍認(rèn)同這一點(diǎn)。
在數(shù)據(jù)科學(xué)中,情況大不相同。有很多文章,例如Kristian Bondo Hansen的《簡(jiǎn)單的優(yōu)點(diǎn):算法交易中的機(jī)器學(xué)習(xí)模型》或Alfredo Gemma的《簡(jiǎn)單性在數(shù)據(jù)科學(xué)革命中的作用》。但它們是例外,而不是規(guī)則。主流的數(shù)據(jù)科學(xué)家們并不在乎最好的時(shí)候,而在最壞的時(shí)候更喜歡復(fù)雜的解決方案。
在討論數(shù)據(jù)科學(xué)家通常不關(guān)心簡(jiǎn)單性原則的原因,為什么他們應(yīng)該關(guān)心,以及如何處理這些問(wèn)題之前,讓我們看看簡(jiǎn)單性意味著什么。劍橋詞典的解釋為,它的本質(zhì)是易于理解或操作,舍棄不必要或多余的東西或修飾。
筆者發(fā)現(xiàn)定義簡(jiǎn)單性的最直觀方法是通過(guò)“否定法”,這與復(fù)雜性相反。劍橋詞典:復(fù)雜性是由許多相互連接的部分或元素組成的;錯(cuò)綜復(fù)雜。雖然我們不能總說(shuō)某事很簡(jiǎn)單,但我們通??梢哉f(shuō)某事很復(fù)雜。我們的目標(biāo)是不要太復(fù)雜,也不要?jiǎng)?chuàng)造復(fù)雜的解決方案。
在數(shù)據(jù)科學(xué)中尋求簡(jiǎn)單性的原因與在所有工程學(xué)科中都一樣。更簡(jiǎn)單的解決方案成本要低得多?,F(xiàn)實(shí)生活中的產(chǎn)品不是Kaggle競(jìng)賽。要求不斷修改。當(dāng)復(fù)雜的解決方案需要適應(yīng)新條件時(shí),很快就會(huì)成為維護(hù)人員噩夢(mèng)。
不難理解,為什么數(shù)據(jù)科學(xué)家,尤其是應(yīng)屆畢業(yè)生,更喜歡復(fù)雜的解決方案。他們剛從學(xué)術(shù)環(huán)境中走出來(lái),完成了畢業(yè)論文,甚至可能發(fā)表了論文。學(xué)術(shù)出版物的評(píng)判標(biāo)準(zhǔn)是準(zhǔn)確性、數(shù)學(xué)巧妙性、新穎性、方法論,但很少以實(shí)用性和簡(jiǎn)單性為標(biāo)準(zhǔn)。
一個(gè)復(fù)雜的想法將準(zhǔn)確度提高了0.5%,這對(duì)于任何一個(gè)學(xué)生來(lái)說(shuō)都是一個(gè)巨大的成功。同樣的想法對(duì)于數(shù)據(jù)科學(xué)家來(lái)說(shuō)卻是失敗的。即使它的理論是正確的,也可能隱藏著將被證明是錯(cuò)誤的潛在假設(shè)。在任何情況下,增量改進(jìn)都不值得付出復(fù)雜性的代價(jià)。
那么,如果你、你的老板、同事或下屬喜歡復(fù)雜而“最佳”的解決方案,該怎么辦?如果是你的老板,你很可能注定失敗,最好開始找一份新工作。
魯棒性
圖源:shutterstock
俄羅斯文化中有一個(gè)“avos”的概念。維基百科將其描述為“盲目相信神的旨意,指望純粹的運(yùn)氣”。“Avos”是卡車司機(jī)決定讓卡車超載的幕后黑手。它隱藏在任何非魯棒解決方案的背后。
什么是魯棒性?或者具體地說(shuō),什么是數(shù)據(jù)科學(xué)中的魯棒性?與我們討論最相關(guān)的定義是Mariano Scain論文中的“算法的魯棒性是假設(shè)模型和現(xiàn)實(shí)之間差異的敏感度”。對(duì)現(xiàn)實(shí)的不正確假設(shè)是數(shù)據(jù)科學(xué)家問(wèn)題的主要來(lái)源。也是上述卡車司機(jī)問(wèn)題的根源。
細(xì)心的讀者可能會(huì)說(shuō),魯棒性也是算法在執(zhí)行過(guò)程中處理錯(cuò)誤的能力。這是對(duì)的。但這與我們的討論不太相關(guān)。這是一個(gè)有明確解決方案的技術(shù)話題。
在前大數(shù)據(jù)時(shí)代和前深度學(xué)習(xí)時(shí)代,建立強(qiáng)大系統(tǒng)的必要性顯而易見(jiàn)。特征和算法設(shè)計(jì)都是手動(dòng)的。測(cè)試人員通常對(duì)成百上千個(gè)例子進(jìn)行操作。即使是最聰明的算法創(chuàng)造者也不敢說(shuō)他們能想到所有可能發(fā)生的情況。
大數(shù)據(jù)時(shí)代是否改變了魯棒性的本質(zhì)?為什么要在意是否可以使用代表所有可想象場(chǎng)景的數(shù)百萬(wàn)數(shù)據(jù)樣本來(lái)設(shè)計(jì)、訓(xùn)練和測(cè)試我們的模型?
結(jié)果表明,魯棒性仍然是一個(gè)重要且尚未解決的問(wèn)題。每年頂級(jí)期刊都會(huì)發(fā)表關(guān)于算法魯棒性的論文來(lái)證明這一點(diǎn),例如,《提高深度神經(jīng)網(wǎng)絡(luò)的魯棒性》和《基于模型的魯棒深度學(xué)習(xí)》。數(shù)據(jù)的數(shù)量還沒(méi)有轉(zhuǎn)化為質(zhì)量。用于訓(xùn)練的信息量之大并不意味著可以涵蓋所有的情況。
如果有人參與進(jìn)來(lái),現(xiàn)實(shí)總會(huì)出乎意料、難以想象。我們大多數(shù)人都很難說(shuō)出午餐吃什么,更別提明天了。數(shù)據(jù)很難幫助預(yù)測(cè)人類的行為。
那么,如何使模型更穩(wěn)固呢?第一種選擇是閱讀合適的論文并執(zhí)行他們的想法。這很好。但這些論文并不總是概括性的。通常,不能把一個(gè)想法從一個(gè)領(lǐng)域復(fù)制到另一個(gè)領(lǐng)域。
筆者想介紹三種常規(guī)做法。遵循這些做法并不能保證創(chuàng)造強(qiáng)大的模型,但它大大降低了出現(xiàn)脆弱解決方案的機(jī)率。
性能安全裕度。安全裕度是任何工程的基礎(chǔ)。為了安全起見(jiàn),通常的做法是增加20-30%的要求。一部能承載1000公斤的電梯很容易就能承載1300公斤。此外,測(cè)試時(shí)它的承載量為1300公斤,而不是1000公斤。工程師為意外情況做好準(zhǔn)備。
在數(shù)據(jù)科學(xué)中,什么才是安全裕度?筆者認(rèn)為是關(guān)鍵績(jī)效指標(biāo)或成功標(biāo)準(zhǔn)。即使發(fā)生意外,仍然會(huì)位于臨界點(diǎn)之上。
這種做法的重要結(jié)果是,你將不再追求漸進(jìn)式的改進(jìn)。如果模型關(guān)鍵績(jī)效指標(biāo)增加了1%,將無(wú)法保持強(qiáng)大。在所有統(tǒng)計(jì)顯著性檢驗(yàn)中,環(huán)境中任何微小的變化都會(huì)扼殺你的努力。
超多測(cè)試。忘記單一測(cè)試/訓(xùn)練/驗(yàn)證部門。你必須在所有可能的組合中交叉驗(yàn)證你的模型。你有不同的用戶嗎?根據(jù)用戶ID進(jìn)行劃分,并進(jìn)行幾十次驗(yàn)證。你的數(shù)據(jù)會(huì)隨著時(shí)間而改變嗎?根據(jù)時(shí)間戳劃分,并確保每天都在驗(yàn)證組中出現(xiàn)一次。在數(shù)據(jù)點(diǎn)之間使用某些特征的隨機(jī)值或交換值“濫用”你的數(shù)據(jù)。然后對(duì)臟數(shù)據(jù)進(jìn)行測(cè)試。
不要在沙灘上建造城堡。減少對(duì)其他未經(jīng)測(cè)試的組件的依賴。永遠(yuǎn)不要在另一個(gè)高風(fēng)險(xiǎn)且未經(jīng)驗(yàn)證的組件上構(gòu)建模型。即使該組件的開發(fā)人員發(fā)誓什么也不會(huì)發(fā)生。
模塊化
圖源:shutterstock
模塊化設(shè)計(jì)是所有現(xiàn)代科學(xué)的基本原則。這是分析方法的直接結(jié)果。分析方法是將大問(wèn)題分解為小問(wèn)題的過(guò)程。分析方法是科學(xué)革命的基石。
問(wèn)題越小越好。這里的“越好”并不是完美,這是必須的。它將節(jié)省大量時(shí)間、精力和金錢。當(dāng)問(wèn)題很小、定義明確且沒(méi)有大量假設(shè)時(shí),解決方案便是準(zhǔn)確且易于測(cè)試的。
大多數(shù)數(shù)據(jù)科學(xué)家都熟悉軟件設(shè)計(jì)中的模塊化。但即使是最好的程序員,他們的python代碼非常清晰,也常常無(wú)法將模塊化應(yīng)用于數(shù)據(jù)科學(xué)本身。
失敗是很容易證明的。模塊化設(shè)計(jì)需要一種將幾個(gè)較小的模型組合成一個(gè)大模型的方法,沒(méi)有這樣的機(jī)器學(xué)習(xí)方法。
但筆者發(fā)現(xiàn)一些實(shí)用的指導(dǎo)原則是有用的:
- 遷移學(xué)習(xí)。遷移學(xué)習(xí)簡(jiǎn)化了現(xiàn)有解決方案的進(jìn)程??梢詫?wèn)題分為兩部分。第一部分創(chuàng)建低維特征表示。第二部分直接優(yōu)化相關(guān)的關(guān)鍵績(jī)效指標(biāo)。
- 開源。盡可能使用現(xiàn)成的開源解決方案。它使代碼按定義模塊化。
- 忘記最佳。真應(yīng)該從頭開始構(gòu)建針對(duì)你的需求優(yōu)化的系統(tǒng),而不是調(diào)整現(xiàn)有的解決方案。只有當(dāng)證明你的系統(tǒng)明顯優(yōu)于現(xiàn)有系統(tǒng)時(shí)才發(fā)現(xiàn)這是值得的。
- 模型集成。不要害怕采取幾種不同的方法,然后將它們放到一起。這是大多數(shù)人在Kaggle競(jìng)賽中獲勝的原因。
- 劃分?jǐn)?shù)據(jù)。不要努力創(chuàng)建“一個(gè)偉大的模型”,雖然理論上,或許是可能的。例如,如果要預(yù)測(cè)顧客行為,不要為一個(gè)新顧客和已使用服務(wù)一年的人建立相同的模型。
采摘果實(shí)
圖源:unsplash
產(chǎn)品經(jīng)理和數(shù)據(jù)科學(xué)家之間始終存在緊張關(guān)系。產(chǎn)品經(jīng)理希望數(shù)據(jù)科學(xué)家專注于低掛的果實(shí)。他們的邏輯很清晰,說(shuō)企業(yè)只在乎果實(shí)的數(shù)量和在哪里生長(zhǎng)。擁有的果實(shí)越多,做的越好。他們拋出各種各樣的流行語(yǔ)——帕累托(Pareto)、最簡(jiǎn)化可實(shí)行產(chǎn)品(MVP)、最好的是好的敵人等等。
另一方面,數(shù)據(jù)科學(xué)家指出,低掛的果實(shí)變質(zhì)快、味道差。換句話說(shuō),解決簡(jiǎn)單的問(wèn)題影響有限,并且治標(biāo)不治本。這通常是學(xué)習(xí)新技術(shù)的借口,但又常常是正確的。
筆者個(gè)人觀點(diǎn)介于這兩者之間。讀完彼得·泰爾(P.Thiel)的《從0到1》后,筆者曾堅(jiān)信那些低掛的果實(shí)是在浪費(fèi)時(shí)間。在初創(chuàng)公司工作了將近7年之后,筆者確信創(chuàng)建一個(gè)低掛的最簡(jiǎn)化可實(shí)行產(chǎn)品是正確的第一步。
最近,筆者開發(fā)了自己的方法,將兩個(gè)極端融合在一起。數(shù)據(jù)科學(xué)家的典型環(huán)境是一個(gè)充滿生機(jī)和怪異的世界,樹木向四面八方生長(zhǎng)。樹木一直在變換方向。它們可以倒立或側(cè)向生長(zhǎng)。
最好的水果確實(shí)是在最頂端的。但是,如果花太長(zhǎng)時(shí)間建造梯子,那棵樹就會(huì)移走。因此,最好的方法是瞄準(zhǔn)最高處,但要不斷監(jiān)測(cè)最高處在哪里。
把隱喻遷移到實(shí)踐中來(lái)看,在漫長(zhǎng)的發(fā)展過(guò)程中事物總有可能會(huì)發(fā)生改變。原來(lái)的問(wèn)題將變得無(wú)關(guān)緊要,新數(shù)據(jù)源將出現(xiàn),原始假設(shè)將被證明是錯(cuò)誤的,關(guān)鍵績(jī)效指標(biāo)將被替換等等。
瞄準(zhǔn)頂端是很棒的,但切記每隔幾個(gè)月推出一款有效產(chǎn)品時(shí)做到這一點(diǎn)。該產(chǎn)品可能不會(huì)帶來(lái)最好的果實(shí),但是你會(huì)更好地了解果實(shí)的生長(zhǎng)方式。
這些技能不被人談及,但卻是有助于你職業(yè)生涯發(fā)展的重中之重,一定要認(rèn)真體會(huì)。