數據挖掘分析相關面試題(親身經歷),持續更新中(最新一次爲20200413)

以下大多數都是博主或者博主同事經歷過的面試題喲~關於工作內容的就不寫啦,一些基礎面試題跟大家分享下

多看看面試題也能夠讓你快速瞭解自己的能力和短缺的地方哦~

本篇博客會持續更新,也希望大家多多提供一些面試題哦~

1、基礎面試

(1) 自我介紹:emmm這個就不多講啦,把大概背景講清楚就可以

(2)自己做過的項目介紹:大家可以選擇最能夠體現自己能力的項目。可以從以下幾個方面來講:

a、簡單介紹下項目

b、自己在項目中的職責及出色業績(貢獻)

c、遇到了哪些問題,如何解決的(如果問題還沒解決,就還是不要說啦哈哈)

d、在這個項目中學到了什麼,比如業務與分析相結合、編程能力、團隊合作能力等

(3)解決問題最重要的能力是哪些?

(4)我在項目中總結了哪些技能點?

(5)你在數據挖掘中的優勢?

(6)你理解什麼是數據挖掘?

2、數據分析與挖掘相關問題(括號內表示被問到的次數哦,有些會提供參考答案,但還是希望大家自己多多研究喔)

以下序號是根據更新狀態來的,所以每個板塊的序號不對應

一、數據分析與挖掘方面:

(1)爲什麼會產生過擬合,有哪些方法可以預防或克服過擬合?(5次)

所謂過擬合(Overfit),是這樣一種現象:一個假設在訓練數據上能夠獲得比其他假設更好的擬合,但是在訓練數據外的數據集上卻不能很好的擬合數據。此時我們就叫這個假設出現了overfit的現象。
過擬合產生的原因:出現這種現象的主要原因是訓練數據中存在噪音或者訓練數據太少。
解決方法:
1、 增大數據量
2、 減少feature個數(人工定義留多少個feature或者算法選取這些feature)
3、 正則化(留下所有的feature,但對於部分feature定義其parameter非常小)
4、 交叉驗證,重採樣評價模型效能,K折交叉驗證
5、保留一個驗證數據集檢驗

注意:幾乎所有的集成模型都是爲了防止過擬合的,他們的思想都可以拿來說

(2)無監督和有監督算法的區別?

監督學習(supervised learning):通過已有的訓練樣本(即已知數據以及其對應的輸出)來訓練,從而得到一個最優模型,再利用這個模型將所有新的數據樣本映射爲相應的輸出結果,對輸出結果進行簡單的判斷從而實現分類的目的,那麼這個最優模型也就具有了對未知數據進行分類的能力。包括所有的迴歸算法分類算法,比如線性迴歸、決策樹、KNN、SVM等
無監督學習(unsupervised learning):我們事先沒有任何訓練數據樣本,需要直接對數據進行建模。包括所有的聚類算法,比如k-means 、PCA、 GMM等

(3)tree-base模型是否瞭解,決策樹和隨機森林區別是什麼,樹節點的分裂都有哪些策略(即節點的選擇)

直接說隨機森林是很多棵決策樹組成的,一定程度上能避免過擬合問題。
樹節點分裂:ID3 : 以信息增益大小來建立。 
- C4.5 : 以信息增益率大小來建立。 
- CART : 以基尼係數大小來建立。
決策樹的數據最好是離散型的吧?
ID3,只處理離散型的,C4.5可以直接處理連續值和離散值,CART是分類迴歸都可以做的決策樹,支持所有類型

(4)tf-idf的公式

TFIDF實際上是:TF * IDF
詞頻(term frequency,TF)指的是某一個給定的詞語在該文件中出現的頻率。
逆向文件頻率(inverse document frequency,IDF)是一個詞語普遍重要性的度量。某一特定詞語的IDF,可以由總文件數目除以包含該詞語之文件的數目。
這邊的例子以上述的數學公式來計算。詞頻 (TF) 是一詞語出現的次數除以該文件的總詞語數。假如一篇文件的總詞語數是100個,而詞語“母牛”出現了3次,那麼“母牛”一詞在該文件中的詞頻就是3/100=0.03。一個計算文件頻率 (IDF) 的方法是文件集裏包含的文件總數除以測定有多少份文件出現過“母牛”一詞。所以,如果“母牛”一詞在1,000份文件出現過,而文件總數是10,000,000份的話,其逆向文件頻率就是 lg10,000,000 / 1,000)=4。最後的TF-IDF的分數爲0.03 * 4=0.12。

(5)維度怎麼擴展?

比如時間,那我可能取分段區間。可能單取年份,可能取距離當今多久

(6)特徵怎麼選擇?

確定方差最大化,或者通過分類,尋找特徵差異最大化。其他就是有具體看業務,要跟業務相結合,有統計性的(比如用tfidf轉換行爲軌跡),有直接性的(教育、性別等)

(7)隨機森林裏面用的哪種決策樹?

參數可選gini或者entropy,不用c4.5,因爲會剪枝,隨機森林不需要剪枝
https://blog.csdn.net/zhixiongzhao/article/details/72487284

(8)對數據分析中關鍵指標的定義?

我回答:可解釋的指標都是可以的。比如:用戶網站點擊率,可以定義爲單天的點擊次數,也可以定義爲一個月的平均點擊次數,關鍵看可解釋業務性

(9)邏輯迴歸與線性迴歸的區別?

邏輯迴歸:迭代求解

線性迴歸:直接求解

(10)機器學習是方法,數據挖掘是應用

(11)最大似然估計和最小二乘法的區別

http://blog.csdn.net/lu597203933/article/details/45032607

(12)假設一個房間有5個嬰兒,性別2男3女,現在加入一個性別未知的嬰兒。此時從這6個嬰兒中,隨機抽取一個,發現是男孩子。問後來加入嬰兒性別是男孩子的概率多大?0.6

(把題目換成,很容易想到貝葉斯--

     假設一個房間有5個嬰兒,性別2男3女,現在加入一個性別未知的嬰兒(性別分佈爲男p女1-p)。此時從這6個嬰兒中,隨機抽取一個,發現是男孩子。問後來加入嬰兒性別是男孩子的概率多大?(用p表示)))

具體解題步驟:參考鏈接https://zhidao.baidu.com/question/264525694500522765.html

(13)例如:一座別墅在過去的 20 年裏一共發生過 2 次被盜,別墅的主人有一條狗,狗平均每週晚上叫 3 次,在盜賊入侵時狗叫的概率被估計爲 0.9,問題是:在狗叫的時候發生入侵的概率是多少?貝葉斯公式P(A∩B) = P(A)*P(B|A)=P(B)*P(A|B)。如上公式也可變形爲:P(B|A) = P(A|B)*P(B) / P(A)。

我們假設 A 事件爲狗在晚上叫,B 爲盜賊入侵,則以天爲單位統計,P(A) = 3/7,P(B) = 2/(20*365) = 2/7300,P(A|B) = 0.9,按照公式很容易得出結果:P(B|A) = 0.9*(2/7300) / (3/7) = 0.00058

(14)採用EM算法求解的模型有哪些?爲什麼不用牛頓法或者梯度下降法?

一般有混合高斯、協同過濾、k-means。算法一定會收斂,但是可能會收斂到局部最優。求和的項數會隨着隱變量的數目指數上升,會給梯度計算帶來麻煩。EM算法是一種非梯度優化算法。

(15)用EM算法推導解釋K-means

k-means算法是高斯混合聚類在混合成分方差相等,且每個樣本僅指派一個混合成分時候的特例。k-means算法與EM算法的關係是這樣的:
· k-means是兩個步驟交替進行:確定中心點,對每個樣本選擇最近中心點--> E步和M步。
· E步中將每個點選擇最近的類優化目標函數,分給中心距它最近的類(硬分配),可以看成是EM算法中E步(軟分配)的近似。
· M步中更新每個類的中心點,可以認爲是在「各類分佈均爲單位方差的高斯分佈」的假設下,最大化似然值; 

(16)如何進行特徵選擇?

https://www.zhihu.com/question/28641663/answer/41653367

(17)SVM和LR的區別

http://blog.csdn.net/yan456jie/article/details/52524942

(18)邏輯迴歸爲什麼用sigmod,不用其他函數?

答:1、sigmod 本身的性質:

a輸出範圍有限,數據在傳遞的過程中不容易發散。
b、輸出範圍爲(0,1),所以可以用作輸出層,輸出表示概率。
c、抑制兩頭,對中間細微變化敏感,對分類有利

2、之所以LR 用sigmod,不是因爲LR 選擇了 sigmod ,而是用 指數簇分佈和 最大熵原理 推導出來的形式,就是這個樣子,後來起名叫sigmod

(19):邏輯迴歸的係數想要都是正數,應該怎能做?

答:比如你訓練好的模型是y = x1 - x2,這時候x2的係數是負數,然後你只要把樣本x2這個維度的數字全取-j就好了,重新再次訓練就全是正數了(大牛說這是一個sb操作)

(20):樣本不平衡處理方法?(好多次)

答:

a負樣本少,就複製到一定比例

b、或者把正樣本刪除一部分

c、分段逐一訓練(舉例:正樣本10000,負樣本1000,將正樣本隨機分成10份,每份1000,然後拿着負樣本的1000與正樣本的每一份進行訓練,最後進行融合選擇)

d、模型參數調權重(模型裏面有個參數可以調整樣本權重)

e、交叉驗證

f、根據樣本隨機構造新的樣本

(21)連續值轉換爲離散值,有什麼辦法,比如年齡?(好多次)

答:

  1. 根據業務知識區分
  2. 根據pandas下面qcutcut方法進行等頻或等寬處理
  3. 風控中 可以根據woeiv 或者卡方檢驗
  4. 用聚類來做最優化尺度(沒試過)

(22)現金貸團伙作案,你有什麼算法或方法去識別

答:從規則角度上講:可以從ip,通訊錄共同聯繫人,設備指紋等信息上分析

從模型角度講:根據上面的特徵,可以通過聚類來分羣

(23)關於風控的指標?woe和iv公式,評分卡原理

(24)假如現在有一個數據分析需求,你會怎麼做?先跟需求方確認需求(需要達成一致),然後確定元數據缺失情況,確定缺失原因和補救方法,然後進行數據提取,分析,分析過程中可跟需求方保持溝通,然後分析完後將結果呈現給需求方,再次與需求方溝通,增刪改查。

(25)假如現在有一個項目需要你建模,你會怎麼做?回答建模過程即可

(26)邏輯迴歸的結果 0.8表示什麼?這個面試官是個傻逼嗎,直接這麼問,先問清楚是幾分類,然後問這個0.8是在哪個index上的。

(27)你在建模過程中遇到過什麼困難?(很多次)樣本不平衡問題(然後回答解決辦法),樣本過擬合問題(然後回答解決辦法),準確率不高(結合更換特徵,模型調參,換模型等思路回答)

(28)Bagging和Boosting的區別:

參考鏈接:https://blog.csdn.net/shaiguchun9503/article/details/82700036

(29)某人對一目標進行射擊,每次命中率都是0.25,若使至少命中1次的概率不小於0.75,至少應射擊幾次?

解:設應該射擊n次,則在這n次射擊中,命中的次數用X表示,則
X服從B(n,0.25)的二項分佈,則至少一次命中的概率
P=1-都不中的概率=1-0.75^n
解1-0.75^n>=0.75 得n>=5.所以應該射擊5次

(30)KS指標、混淆矩陣、roc曲線、AUC的定義。

參考鏈接:https://blog.csdn.net/sinat_30316741/article/details/105491746

(31)申請評分卡原理和開發,包括計算公式等。

見 自己整理好的評分卡相關文檔

二、數據分析方面:

(1)分析原因,某產品6月份的平均日活率比7月多很多,請問你會從哪幾方面分析?

回答 思路+方法(以某個信用app爲例)

答:1、活動原因

(1)分析參與活動的用戶的後續行爲

(2)分析未參與活動的用戶的同一時間的行爲

(3)對比以上兩數據趨勢,如果發現(1)和(2)有明顯不同的趨勢(如1驟降),那可能是活動的原因

2、功能改版

(1)與往期用量對比

3、當期貸款需求變化(不好定,需要專業分析)

4、歷史同期趨勢對比(多個因素組合,可能說服力不強,但是大致可以看下趨勢)

(2)流失用戶怎麼定義的?如何用數據做正確定義?

答:第一種方法:拐點理論:根據用戶留存判斷,即到多少天之後,留存用戶比例開始穩定,則這一段時間就是 流失用戶週期。用戶回訪率拐點(用戶回訪率 = 回訪用戶數 ÷ 流失用戶數 × 100%)

其他:

a、https://www.zhihu.com/question/68029067 此種方法可用於預測 一個用戶是否即將成爲流失用戶

(3)用戶生命週期怎麼定義?

答:參考鏈接:https://blog.csdn.net/k7Jz78GeJJ/article/details/79434904

(4)資源位推薦,假如一個app首頁,有一個九宮格,你知道每個九宮格的點擊率,付費用戶數,付費金額等相關指標,你會怎麼做推薦?

答:首先需要關注評價指標,其次如果某一個九宮格的付費轉化率顯著高於其他的格子,則將用戶往這個格子推。其他情況另議。(沒有準確答案)

(5) 以淘寶爲例,怎麼分析一個店鋪運營了2-3年,仍然沒有很多流量(瀏覽量,成交量等指標都不高),前提是你可以拿到淘寶的所有數據?

答:1. 是否用了淘寶的運營手段(買流量、參與淘寶活動)

2. 當前店鋪的曝光量是多少,處於淘寶整個板塊的哪一列

3. 同類型店鋪比較分析,包括款式,質量,店鋪評價,好評率,價格,上新頻率,客服響應速度等等

……

主要可以嘗試控制變量,應該先羅列出全部的主要影響因素,控制住其他變量差不多的情況下,比入看看相似店鋪的流量是否受價格影響比較大。

接下去延伸一下新的問題,剛剛提到了控制變量,假變量是  流量分發、價格、店鋪外觀、店鋪年齡、好評率、店鋪產品豐富程度 等。

在實際問題中控制變量會碰到以下問題——

1. 外觀、產品豐富程度 等主觀因素如何量化評價;

2. 這麼多因素,一旦控制變量進行篩選,很可能與你店鋪相似的一個也沒有或者只有少量幾個。這時候統計分析價值不大。

引申:

如何判斷是不是價格問題導致別人不買你的商品?

答:控制變量:在保持同樣品牌競爭力、功能、人工交流的情況下,觀察顧客買什麼。

面試官給的回答:同一個產品,如果一個用戶在高價鏈接的頁面看了又看,看了很久,結果去價格低的那個鏈接買了,基本說明是價格問題。

(6)數據組給定一批用戶供運營做活動,結果是 這批用戶的充值金額提升10%,請問如何判斷是運營的功勞還是數據分析的功勞,怎麼處理其他非特定用戶(是不是 其他非特定用戶 做相應活動,也能起到一定效果呢?是否需要一起做活動),(即在問需要控制哪些因素)

可以通過做A/Btest來判斷,一組是運營根據經驗獲取的名單,一組是根據模型跑出來的名單,然後分別做相同的營銷活動,分析活動結果。

(7)如何做A/Btest,需要注意哪些東西?

(8)增長黑客模型(AARRR)、AIPLA模型、RFM模型

(9)如果老闆需要你針對現在平臺(高鐵app)的數據區分 不同層級的用戶,做不同的營銷,你會怎麼做(其實可以轉換爲用戶畫像)?

第一種方法:結合RFM模型(最近一次購買的時間、購買頻率、金額)和聚類計算得出不同族羣的用戶特徵,然後根據不同客戶羣體做不同的營銷。

參考鏈接:https://blog.csdn.net/wanglingli95/article/details/79444432

第二種:根據用戶基礎信息、購票記錄、金額、頻次以及其他版塊的交易情況特徵製作用戶畫像

三、數據庫方面:

(1)有什麼sql調優的手段,瞭解多少

索引、條件先後等等,具體可自行百度sql調優方法

(2)sql,多個班級,取不同班級的每個班級的前3名(3次)

sql是rownumber:

select * from

(select row_number() over (partition by class order by score desc) 排名,* from sc) t

where 排名<=3 order by class asc,score desc

mysql用定義變量的方式:

SELECT * from (

SELECT @x:=if(b.cla=@y,@x+1,1) rn,@y:= b.cla , b.* from 
(SELECT @x:=0,@y:='' )a
JOIN
(SELECT * from class order by cla,grade desc )b ) d where d.rn<4

(3)數據庫時間轉換函數

dataformat是時間轉字符串   unix_timestamp字符串時間轉時間戳  str_to_date字符串轉時間   

(4)當出現數據重複時,用最簡單的方法查詢出哪些數據重複

數據量小時,group by count(1)大於1的
數據量大時,用rownumber(針對sql)

(5)什麼情況下索引會失效,假設字段A加了索引?或者 瞭解mysql的索引嗎?(2次)

只要索引的字段A不是  A >,<,=之類的,都會失效。比如兩個字段 A 和 B,A上有索引,查詢條件如果是 where A = < > XXX就不會失效,即失效的意思是不用索引,不是異常等問題。當然,還有別的,,,比如索引不能這麼寫  where B = xxx and A = 0,因爲索引字段要優先被查找。(只有  [><]?= 這種模式)
而且>和<也只能在樹索引等有序索引上起作用,如果索引是hash索引,就只能用=

參考鏈接:https://www.cnblogs.com/shynshyn/p/7887742.html

(6)三張表,查詢部門薪水最高的?

 #方法一
SELECT dname,sum(salary) s from (
SELECT a.*,b.salary from (
SELECT n.id,n.name,d.dname from ntable n ,dtable d where n.dpid = d.did  )a,stable b where a.id = b.id)c GROUP BY dname ORDER BY s desc
#方法二 left join 
SELECT dname,sum(salary) s from (
SELECT n.id,n.name,d.dname,s.salary from ntable n LEFT JOIN dtable d on n.dpid = d.did LEFT JOIN stable s on n.id = s.id) 
a GROUP BY dname ORDER BY s desc
或者
SELECT d.dname,sum(s.salary)s from ntable n LEFT JOIN dtable d on n.dpid = d.did LEFT JOIN stable s on n.id = s.id 
GROUP BY d.dname ORDER BY s desc
#方法三  inner join
SELECT d.dname,sum(s.salary) s FROM (ntable n INNER JOIN dtable d ON n.dpid =d.did) INNER JOIN stable s ON n.id=s.id GROUP BY d.dname ORDER BY s desc
#方法四 join
SELECT d.dname,sum(s.salary) s FROM (ntable n  JOIN dtable d ON n.dpid =d.did)  JOIN stable s ON n.id=s.id GROUP BY d.dname ORDER BY s desc

(7)mysql 關於join的用法與區別(left join right join 等)

舉個例子說明區別就可以

(8)主鍵重複插入更新

replace into 或者on duplicate key update

https://www.cnblogs.com/chenmh/p/5392540.html

(9)數據庫的外建的作用是什麼?

聯表查詢

(10)什麼是左連接,右連接?

Left join  right join,具體可自行百度

(11)hive數據傾斜有哪幾種原因造成,解決方法是什麼?

參考鏈接:https://blog.csdn.net/qq_36330643/article/details/82320194

數倉方面:

(11)數倉的過程,瞭解數倉嗎?數倉用什麼搭建的?(2次)

關於數倉的問題,之後還會有個專題詳解哦

(12)Etl的緩慢數據維

http://blog.csdn.net/ye1142262478/article/details/58589078

四、數據開發方面:

(1)有序數組查找用什麼方法?

二分查找,時間複雜度log2n,(是以2爲底,n的對數)

(2)list和tuple的區別

List是可變對象,tuple是不可變,tuple的性能好,效率高

(3)爲什麼要使用裝飾器

http://python.jobbole.com/85393/

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章