作為數(shù)據(jù)科學(xué)家,你會怎樣應(yīng)對這五大挑戰(zhàn)?
本文轉(zhuǎn)載自公眾號“讀芯術(shù)”(ID:AI_Discovery)
作為數(shù)據(jù)科學(xué)家,我在很多公司工作過,也遇到了很多問題和挑戰(zhàn)。事實(shí)上,很多人都會經(jīng)歷這些挑戰(zhàn),就不同情況而言,也會有多種可行的解決方案。我將談?wù)勎以媾R的一些最常見或最困難的挑戰(zhàn)。
業(yè)務(wù)問題描述不當(dāng)
只要有一個工作人員出錯,你就會面臨這個挑戰(zhàn)。數(shù)據(jù)科學(xué)專家的主要工作之一就是做業(yè)務(wù)問題描述——這也就是起初使用數(shù)據(jù)科學(xué)的原因。
實(shí)際上,多數(shù)情況下描述不是某個數(shù)據(jù)科學(xué)專家自己,而是整個團(tuán)隊(duì)。團(tuán)隊(duì)里通常包括利益相關(guān)者,比如產(chǎn)品經(jīng)理。但是,團(tuán)隊(duì)內(nèi)可能出現(xiàn)技術(shù)脫節(jié),任一方都可能對業(yè)務(wù)問題描述不當(dāng)。
產(chǎn)品經(jīng)理可能會說:“我們要提更多建議,大家才能買的更多”,而數(shù)據(jù)科學(xué)專家可能會說:“向大家推薦產(chǎn)品的時候,超過80%的情況下我們要有95%的把握。”
這兩種問題描述總體來講都很好,但都不夠細(xì)化,或者只是勾勒出了問題的輪廓。問題描述是要從中找出解決方案,但是本身并不是解決方案。
以下是一個更好的業(yè)務(wù)問題描述問題的例子:“顧客平均每個訂單只買一件東西”。
就是這么簡單。一開始雙方都想方設(shè)法將描述復(fù)雜化,但現(xiàn)在這樣更高效。雖然沒有解決方案,但人人都能看懂這種直接、通俗易懂的描述。
示例描述說明一件東西不夠,那么解決方案可能就是如何讓顧客更可能買一件以上的東西。一種數(shù)據(jù)科學(xué)解決方案就是使用機(jī)器學(xué)習(xí)推薦系統(tǒng)。在工作中不要好高騖遠(yuǎn),而要專注于眼下的實(shí)際問題,這很重要。
數(shù)據(jù)失衡
任何真正與數(shù)據(jù)打交道的人大多都會遇到數(shù)據(jù)失衡的問題。比如,遇到分類問題時使用邏輯回歸給新數(shù)據(jù)賦值0或1。目標(biāo)變量預(yù)計(jì)0和1各占50%的可能。然而,結(jié)果完全出乎預(yù)料。
如果試著將一種新動物歸類為狗或者貓,就需要貓狗各1000列的訓(xùn)練數(shù)據(jù)。這樣,模型才足夠辨別二者的不同之處。如果訓(xùn)練數(shù)據(jù)中貓有1900只,狗只有100只,那么就可能產(chǎn)生誤解,認(rèn)為多數(shù)新動物都是貓,這是個很常見的問題。
可能的解決方案是使用其他補(bǔ)強(qiáng)少數(shù)部分的機(jī)器學(xué)習(xí)算法,或者創(chuàng)建新的綜合數(shù)據(jù)。有一種技術(shù)叫不均衡學(xué)習(xí)(imbalanced-learn),可以采用下列具體方法進(jìn)行過采樣:
- ADASYN算法(Adaptive Synthetic,自適應(yīng)綜合過采樣)
- BorderlineSMOTE算法
- KMeansSMOTE算法
- RandomOverSampler算法
- SMOTNC算法
- SVMSMOTE算法(Nominal andContinuous)
這些過采樣方法都非常有效,而且能解決數(shù)據(jù)不均衡問題。還有很多方法,比如欠采樣、二者相結(jié)合、組合法、Keras和TensorFlow的批量生成器。下面是過采樣操作的示例:
- 畫一幅二維視圖
- 繪制已知數(shù)據(jù)點(diǎn)
- 選擇一個已知點(diǎn)
- 找出最鄰近點(diǎn)
- 在鄰近點(diǎn)與原始數(shù)據(jù)點(diǎn)之間畫一條線
- 然后隨機(jī)將大頭針丟在這些線上
- 這就是新合成的過采樣數(shù)據(jù)
像RandomForest之類的一些機(jī)器算法函數(shù)庫的參數(shù)要指定均衡數(shù)據(jù)也很簡單。
過擬合
構(gòu)建的數(shù)據(jù)科學(xué)模型將訓(xùn)練數(shù)據(jù)解析的太透徹就會出現(xiàn)過擬合問題。模型接收了訓(xùn)練數(shù)據(jù)中的詳細(xì)信息,也包括數(shù)據(jù)中的噪音,所以過于具體,而這在預(yù)測新的真實(shí)數(shù)據(jù)時是無用的,結(jié)果模型就無法做出正確推斷和歸納。模型的目的是處理好未見過的數(shù)據(jù),所以要想辦法找到能處理好新數(shù)據(jù)的解決辦法并付諸使用。
- 交叉驗(yàn)證
- 移除重復(fù)或相似特點(diǎn)
- 及早停止
- 正則化
- 集成法
- 非參數(shù)機(jī)器學(xué)習(xí)算法
- 使用更多數(shù)據(jù)訓(xùn)練
特征不足
制定業(yè)務(wù)問題描述之后,通常還需要開始尋找數(shù)據(jù),然后形成自己的特點(diǎn),輸入到數(shù)據(jù)科學(xué)模型中作為訓(xùn)練數(shù)據(jù)。對公司數(shù)據(jù)表了解的越多,就會發(fā)現(xiàn)還可以以其它縱列為新特征。不過,一開始特征有限的問題還有另一種解決辦法。
構(gòu)建當(dāng)前度量的統(tǒng)計(jì)數(shù)據(jù)。例如,一般具有“每位用戶點(diǎn)擊量”特征,就會停止。但也可以從如下某一縱列中創(chuàng)建新的度量:
- 每位用戶的平均點(diǎn)擊量
- 每位用戶的眾數(shù)點(diǎn)擊量
- 每位用戶75%百分位數(shù)點(diǎn)擊量
還有很多不同方式來描述該特征的范圍。
版本控制
數(shù)據(jù)科學(xué)家非常習(xí)慣獨(dú)自工作,喜歡對同一個重點(diǎn)項(xiàng)目創(chuàng)建20個不同版本的Jupyter Notebook。我們約定好了命名,但第二天就忘記了。然后,一切變得一團(tuán)糟。但其實(shí)還有更好的方式——那就是Git和GitHub。
- Git
- GitHub
- 如果數(shù)量較少的話,還有其它自制辦法,比如用特殊數(shù)字方法(例:Notebook1,Notebook2)創(chuàng)建新版本。
這些工具可以通過創(chuàng)建區(qū)別于主干/代碼庫的獨(dú)立分支,幫你形成自己的代碼變化。然后就可以創(chuàng)建一個拉取請求來比較代碼變化,在獲得他人認(rèn)可后并入原件。如此一來,你就不僅是在創(chuàng)建代碼評審,而且還允許大家注意到并更加了解你的特定代碼。
如你所見,數(shù)據(jù)科學(xué)家會面臨很多挑戰(zhàn),我所談到的只是冰山一角。但這些問題是我經(jīng)歷最多的,我認(rèn)為應(yīng)該重點(diǎn)討論的。希望我的方法能幫你順利解決這些問題。