答對這些面試題,心儀的數據科學offer來敲門 (中)
數據科學面試中must know考題第二期來了!除了對概念的理解以外,本期題目中著重了數據分析時理論和框架應用的技巧。
Q1:「長(long)」(「高tall」)格式和「寬(wide)」格式數據之間的區別是什麼?
在大多數數據挖掘/數據科學應用中,有更多的記錄(行)而不是特徵features(列)——這些數據有時被稱為「高」(或「長」)數據。
在某些應用中,如基因組學或生物信息學,你可能只有少量的記錄(病人),例如100,但可能有2萬對每個病人的觀察。為「高」數據工作的標準方法將導致對數據的過度擬合,因此需要特殊的方法。
Q2: 集成學習(ensemble learning)背後的理念是什麼?
「在統計和機器學習中,集成方法(ensemble methods)使用多種學習演算法來獲得更好的預測值,而不是僅從一個成分學習演算法中獲得。」 ——Wikipedia
假設你正在玩「誰想成為百萬富翁?」的遊戲,最後一個問題獎金達到100萬美元。你對這個問題毫無頭緒,不過你有「觀眾投票」和「給朋友打電話」的機會。你不想冒任何風險,你會做什麼來得到正確的答案,成為百萬富翁?
兩種機會都用,對吧?
假設有70%的觀眾說正確答案是D,你的朋友也說有90%的幾率答案是D,因為他是問題領域的專家。這樣,你就有平均80%的自信D是正確的。你離百萬富翁更近了。
這就是集成學習的方法。
著名的Netflix獎項競賽在達成10%優化的目標前花了近3年時間。勝出者就使用梯度提升決策樹(gradient boosted decision trees)來組合超過500個模型。在集成方法中,使用的模型越多樣化,最終的結果就越穩健(robust)。
整體上使用的不同模型提高了總體方差,假設(hypothesis)生成的差異,使用演算法的差異和參數化(parametrization)的差異。一般有三種常用技巧:
1. Bagging
2. Boosting
3. Stacking
因此,如果為相同的數據和相同的因變數構建不同的模型,你可以使用上面的方法之一來構建集成模型。由於在集成中使用的每個模型都有自己的性能度量(performance measures),一些模型可能比最終集成模型的性能更好,有些則差得多。但總體而言,集成方法將提高模型的整體準確性和穩定性,儘管代價是模型的可理解性(understandability)。
Q3:什麼是bias和variance,它們和數據建模之間的關係是什麼?
Bias是模型的預測偏離正確的程度,Bias 偏高表示預測函數與真實結果差異很大。而Variance是模型迭代之間的預測變化的程度,Variance 偏高表示模型很不穩定。
以一個簡單的有缺陷的總統選舉調查為例,調查中的誤差有兩種解釋:Bias的來源於通過電話簿選擇調查參與者;Variance則來源於樣本太小。
理想情況下,模型是一組無Bias的低Variance數據的結果。然而,一個模型越複雜,它的Bias就越小,而Variance越大;因此,一個最優模型需要考慮這兩個屬性之間的平衡。
交叉驗證(cross-validation)的統計評估方法既可以證明這種平衡的重要性,也可以進行實際參數的搜索。數據的fold數量——k在k-fold交叉驗證中的值——是一個重要的參數;值越低,誤差估計的Bias越大,Variance越小。
當k等於實例數時,誤差估計是很低的,但有可能存在高方差。
最重要的結論是,在構建模型時,Bias和Variance的權衡是非常重要的,即使是最常規的統計評估方法也直接依賴於這樣的權衡。
Q4:你會用什麼誤差度量(error metric)來評估二元分類器(binary classifier)?如果類別(class)之間是不平衡的呢?如果有兩個以上的組(group)呢?
二元分類(Binary classification)包括將數據分為兩組,例如,客戶是否購買某一特定產品(是/否),基於性別、年齡、居住地等獨立變數。
由於目標變數不是連續的,二元分類模型預測目標變數為是/N否的概率。我們使用混淆矩陣(confusion matrix)來評估模型,也叫做分類或共關聯矩陣(co-incidence matrix)。由此,我們可以計算出一下重要指標:
- 真陽性率(TPR)或命中率(Hit Rate)或Recall或Sensitivity = TP / (TP + FN)
- 假陽性率(FPR)或誤報率(False Alarm Rate)= 1 - Specificity = 1 - (TN / (TN + FP))
- 準確率(Accuracy)= (TP + TN) / (TP + TN + FP + FN)
- 出錯率(Error Rate)= 1 -準確率或(FP + FN) / (TP + TN + FP + FN)
- Precision = TP / (TP + FP)
- F-measure:2 /(1 / Precision)+(1 / Recall)
- ROC圖 (Receiver Operating Characteristics)= FPR vs TPR的圖。
- AUC(曲線下的面積)
- Kappa統計
然而,所有這些衡量值都應該基於你的專業背景知識。例如,如果你在預測癌症時只關注獲得更高的TPR,那麼它對診斷癌症毫無幫助。
Q5:當二元分類器的類別(class)之間是不平衡該如何處理?如果有兩個以上的組(group)呢?
在癌症診斷數據時,假設只有2%或更少的患者有癌症,那這就是一個類別不平衡的例子,因為癌症患者的百分比與其他人群相比非常小。有兩種方法來處理這個問題:
1、使用代價函數( cost function):在這種方法中,使用代價矩陣(類似於混淆矩陣,但更關注假陽性和假陰性)來評估與錯誤分類數據相關的代價。其主要目的是降低誤分類的代價。假陰性的代價總是大於假陽性的代價。錯誤地判定一個癌症患者沒有患病比錯誤地預測健康人患癌症更危險。
總成本(Total Cost)= FN的代價 *FN的數量 + FP的代價 *FP的數量。
2、使用不同的抽樣方法:在這種方法中,你可以使用過採樣(over-sampling) ,欠採樣(under-sampling) 或混合採樣 (hybrid sampling) 。在過採樣中,可以複製少數群體的觀察數據來平衡數據。觀察結果的複製導致過度擬合(overfitting) ,因為在訓練(training)數據集中造成良好的準確性,但在新的未知數據(unseen data)中精確度不高。在欠採樣(under-sampling)的情況下,刪除一些佔比例大的主類別樣本(majority class),從而導致信息的丟失。它有助於節省處理時間和存儲,但只有在擁有大量數據集時才有用。
如果目標變數中有多個類別,那麼就會形成一個大小等於類數的混淆矩陣,並且可以為每個類別計算相應的表現度量(performance measures)。這是多元混淆矩陣(multiclass confusion matrix)。
假設在因變數中有3個類別X,Y,Z,因此每個類的Recall計算如下:
Recall_X = TP(真陽性)_X/(TP_X+FN(真銀性)_X)
Recall_Y = TP_Y/(TP_Y+FN_Y)
Recall_Z = TP_Z/(TP_Z+FN_Z)
Q6:如何確定哪個特徵值是你模型中最重要的?
在應用性機器學習中,成功很大程度上依賴於數據展示信息的質量(也就是特徵features)。高度相關的特徵可以使分類模塊中的學習/排序步驟變得容易。相反,如果標籤類別(label classes)使特徵複雜程度很高,那麼就不太可能構建一個好的模型 [Dom 2012]。因此,我們需要特徵工程(feature engineering),即把數據轉換成與問題最相關特徵的過程。
特徵選擇(feature selection)方案通常涉及到從大型的探索性(exploratory)特徵池中自動選擇顯著特徵的技術。因為冗餘和不相關的特性會導致準確性降低,因此刪除這些特徵第一步。然後通過相互信息計算得出相關性。此外,特徵應該供類別間的高度區分(類間距離或方差比來衡量)。最近的研究[Pham 2016]提出了一種基於系統投票(voting)的特徵選擇方法。它包含上述標準,並且是數據驅動,可以作為通用框架。
另一種方法是在使用諸如Lasso或Ridge這樣的正則化方法時,對不太重要的特徵(例如,導致誤差升高)進行懲罰。
Q7:如何驗證(validate)你創建的多重回歸預測模型(multiple regression)有效?
模型驗證的方法:
? 如果模型所預測的值遠遠超出了因變數範圍(the response variable range),這將立即表示預測值或模型不準確。
? 如果價值觀似乎是合理的,那就檢查一下參數(parameters);以下任何一項都顯示了預測失敗或多重共線性(multi-collinearity):與期望相反的跡象,異常大的或小的值,或者當輸入新數據時模型出現明顯的不一致。
? 利用模型進行預測,為其提供新數據,並將確定係數(R平方值R squared)作為模型有效性度量。
? 分割數據形成一個單獨的數據集,一個用於估算模型參數(parameters),另一個用於驗證預測(validating)。
? 如果數據樣本實例較少,使用jackknife重採樣,並使用R平方和均方誤差(MSE)度量有效性。
Q8:在無監督學習(unsupervised learning)中,如果一個關於數據集的參考標準(ground truth)是未知的,我們如何確定集群(cluster)的最佳數量呢?
在監督學習(supervised learning)的情況下,特定數據集合中的類別數量是完全已知的,因為每個數據有標記(label)為特定的已知類別。就算是最壞的情況下,我們也可以掃描類別屬性並計算存在條目的數量。
但在無監督學習的情況下,不存在類別屬性和相關數據;事實上,無監督學習的主要形式之一——數據聚類(data clustering)——就是旨在通過消除類別間的相似性和最大化類別內的相似性來近似出類別內的成員。
集群的一個主要缺點是,需要提供類別數量。幸運的話,我們可以事先知道數據的參考數量ground truth(實際的類別數)。然而,現實中並非總是如此。其中一個原因是,實際上可能沒有明確的類別 (集群)數量,無監督學習任務的目的就是調查數據,並嘗試在最優集群環境下(數量和類別)找出一些有意義的數據結構。
如果不了解數據集的參考標準(ground truth),如何確定集群的最佳數量呢?有很多方法,以下列出了兩個主流方法:肘形法和輪廓法。
肘形法
肘形法通常最好得到結果,並且由於其易於解釋和易於可視化驗證而特別有用。肘形法將方差解釋為聚類數的函數(k-均值的k)。通過繪製與k對應的方差百分比,第一個集群應包含解釋方差的重要信息;然而,k的不當選值將導致解釋信息的顯著減少,而在這一點上,圖形會顯示出一個明顯的角度(angle)。從肘形法的角度來看,這個角度所在的值就是最優的k值,
為了繪製這種差異,必須測試不同的集群數量。在進行連續的聚類方法的完整迭代之後,才能繪製和比較結果。
輪廓法
輪廓法測量一個對象與它自己集群的相似度(稱為cohesion),當與其他集群相比,稱為separation。輪廓值是這個比較的均值(means),它的範圍從[-1,1];接近1的值表示在其與自身所在集群中的數據有密切關係,而值接近-1則表示相反。一個生成高輪廓值的模型非常可能是優秀的模型。
Q9:有什麼方法可以讓我的模型更穩健(robust)?
從不同的角度,比如,數據準備或模型構建,有幾種方法可以使模型更加穩健。
首先,排除離群值。它指的是不需要的,不符合期望的,或者到目前為止不同於人類認知的一個必錯值(must-be-wrong),例如,沒有人是200歲。它不同於小概率事件(罕見但有可能發生的)。
離群值通常與分布有關。因此,可以在預處理步驟刪除異常值,使用標準偏差(正常情況下)或四分位距範圍作為閾值級別。
此外,如果數據有明顯的尾巴(tail),數據轉換(data transformation),例如log轉換,可能會有所幫助。當離群值的產生與與收集儀器的靈敏度有關時,如不精確記錄,Winsorization可能是有用的。這種類型的轉換(以Charles P. Winsor(1895-1951)命名)具有與剪切信號(clipping signals)相同的效果(即用不太極端的值替換極端數據值)。另一個減少離群值影響的選項是使用平均絕對差值(mean absolute difference)代替平方誤差(MSE)。
對於模型構建,有些模型可以抵禦離群值的影響(例如基於樹的方法)或非參數測試(non-parametric tests)。類似於中值效應(median effect),樹模型將每個節點劃分為兩個節點。因此,在每個分離過程中,一個分類(bucket)中的所有數據點都可以得到同樣的處理,而不考慮它們可能具有的極端值。這項研究[Pham 2016]提出了一種檢測模型,該模型整合了數據的四分位信息來預測數據的異常值。
Q10:如果你發現了離群值(outliers),你將如何篩選?
篩選異常值的方法有z分數(z-scores)、修改的z分數(modified z-score)、箱圖(box plots)、Grubb的測試、Tietjen-Moore來測試指數平滑、指數分布的Kimber測試和移動窗口(moving window)來過濾(filter)演算法。比較可靠的兩種方法是:
四分位距範圍(Inter Quartile Range ):
在給定的數據集中,一個離群值是小於第一個四分位數(Q1)或超過第三個四分位數(Q3)的1.5倍以上的數據點。
?高= (Q3) + 1.5 IQR。
?低= (Q1) - 1.5 IQR。
Tukey法
它使用四分位範圍來過濾非常大或非常小的數字。它實際上和上面的方法一樣,只是使用了「柵欄(fences)」的概念。柵欄的兩個值是:
?低離群(Low outliers)= Q1 - 1.5(Q3 - Q1) = Q1 - 1.5(IQR)
?高離群(High outliers)= Q3 + 1.5(Q3 - Q1) = Q3 + 1.5(IQR)
柵欄外的任何值都是離群值。
在沒有定性評估的情況下,任何離群值不應刪除。因為你正在改變數據,並使它不再純粹。重要的是要理解分析的背景,比如「為什麼一個離群值與其他數據點不同?」
這是至關重要的。如果離群值是錯誤的,你可以把它刪掉,但是如果它們代表了一個新的趨勢,模式或者揭示了有價值的見解,你應該保留數據。
Q11:你熟悉價格優化(price optimization)、價格彈性(price elasticity)、庫存管理(inventory management)、競爭情報(competitive intelligence)嗎?試著舉個例子。
這些都是經濟學術語,數據科學家並不是經常被問到的,但它們是很有用。
價格優化是利用數學工具來判定當客戶通過不同渠道得知產品的不同價格會有怎麼樣的反應。
價格彈性通常是指需求價格彈性(Price elasticity of demand),衡量價格敏感性(price sensitivity)。它的公式:
需求價格彈性=需求量變化% / 價格變化%。
Price Elasticity of Demand = % Change in Quantity Demanded / % Change in Price
同樣,供給價格彈性(Price elasticity of supply)是一種經濟度量,它顯示了商品數量如何響應價格的變化。
庫存管理是指公司在產品生產過程中訂購、儲存和使用部件的監督和控制,以及對可銷售成品的監督和控制。
Wikipedia定義競爭情報:定義、收集、分析和分發關於產品、客戶、競爭對手以及環境的任何方面的信息,以支持企業高管和管理者為組織做出戰略決策。
像Google Trends、Alexa、Compete等工具可以用來確定總體趨勢,並在互聯網上分析你的競爭對手。
最後一部分面試題將在下周繼續公布。
*面試答案整理自數據科學家Gregory Piatetsky等人在Kdnuggets上的發布的回答。
DataGirls每月在北京舉辦線下的Tableau周末集訓營,為對數據可視化感興趣的零基礎人群提供紮實、快速而系統的學習機會,欲了解更多集訓營情況,可跳轉至:【DataGirls-Tableau專場03期】用Tableau成就你的商業數據分析師之路
(PS:Tableau是目前商業數據分析領域中最流行的可視化工具。它是一款幫助公司及其管理者更好地理解數據信息的商業智能軟體。)
如果想了解更多數據分析和數據可視化的相關信息,可以關注微信公眾號:DataGirls
如果大家有關於更多相關問題,可以邀請DataGirls回答~
推薦閱讀:
※競聘提問問題及答案
※中國移動計算機類筆試題和面試題答案及考察內容25套
※奇葩而有效的反向面試——王猛見桓溫
※當面試官問你為什麼離職,這樣回答最完美!
※還在等待其他offer?如何為已有offer爭取更多考慮時間?