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