1. 程式人生 > >數據實踐過程中理論總結

數據實踐過程中理論總結

fan 的人 第三部分 了解 可能 天都 info 存在 我想

寫在前面(常規啰嗦)

  拖拖拉拉新的一年已經過去一個月,今天3月6號。月底離職去平安,想來已經在這家公司呆了整整兩年,對比兩年前的我工程上確實大有長進,理論方面好像並沒有得到很好的拓展,希望下一家能夠得到比較好的歷練。23歲,一個也算是比較尷尬的年紀,青春是很容易混過去的,尤其是工作以後,於是想繼續深造讀書,考了幾次也實在是分數丟人哈哈,或許是不應該執拗在中科院這一個學校,再接再厲,考慮深圳其他學校也未必不是好的解決方案。

  言歸正傳,今天總結的是過去兩年大數據分析中的理論概括,有經常做的滾瓜亂熟的數據清洗,數據分析,一般算法應用,也有正在探索的數據準確性成套解決方案的探索。實際應用中,我們往往關心的是,你算出的數據到底準不準?有多大的可信度?這兩個問題是任何一個負責任的數據工程師都必須做到問心無愧的回答,很難但是又很有必要。

第一部分:數據質量評估

  作為一個數據工程師,拿到第一手原始數據的時候,我們會接觸到數據的基本內容和字段介紹,我們會想到數據文件大小是否合理(數據對比以往是多了還是少了還是正常大小),數據的必要字段和非必要字段的識別及其對應的基本的描述性統計,說道描述性統計,非統計學出身的胖友們可能需要了解一下統計量的定義。

  • 統計量的定義 

技術分享圖片

  舉一個例子,例如深圳通刷卡數據。假設一年的深圳通刷卡數據是一個總體,此時我想要知道深圳通一周維度上的客流量變化,假設不做集群計算,一年幾百G的數據對於短時間使用單機計算確實是夠折騰。這個時候我們選擇抽樣方法,抽取每個月中第一周的數據作為樣本。然後對這些樣本數據取平均值得到深圳通刷卡客流量平均一周的數據變化,這裏的平均值就屬於我們統計學中的統計量。那麽什麽是統計量呢,常用的統計量有哪些呢?

  • 常用的統計量

技術分享圖片

  這裏需要了解的是我們在實際數據分析中用的統計量往往不止於這些,甚至是我們需要用到多個統計量綜合來考量數據的總體性質。比如,對於分布均勻的數據,我們只用平均值確實能夠比較好的反映總體的數據分布情況;但對於兩極分化比較嚴重的數據,平均值很容易受到極值的影響,這個時候就需要結合方差或者標準差來給數據總體情況定性;兩極化分布嚴重的數據中,還有一種情況就是當大多數數據分布在兩極,方差會比標準差更能反映數據的實際波動情況,而眾數作為大多數數據的代表者或許也可以成為參考指標。

  • 統計量在數據質量評估中的作用

技術分享圖片

  上圖是Spark對車輛GPS數據做的一個基本的統計描述截圖,使用的是DataFrame中的describe方法。上如中橫向列表中lon屬於經度,lat屬於緯度,speed屬於行車瞬時速度,angle屬於角度。縱向列表中分別是記錄條數,平均值,標準差,最小值和最大值。可以看出經緯度數據始終是在一個合理範圍內波動,標準差stddev都在1以下,而速度和角度的標準差就差很多,說明速度和角度的數據分布比較分散。這裏,先介紹一般的數據質量評估步驟:

  1. 提取必要字段。以GPS數據為例,時間、經度、緯度、車輛ID為必要字段。
  2. 對必要字段做數據質量評估。數據變量分為離散變量和連續變量。例如車牌號作為離散變量就需要考慮其字符串格式的車牌號的完整性;連續變量中分為不可均值計算的時間字符串這樣的非數值型的變量,做時間差計算的時候需要將數據格式化解析處理,因此也必須保證時間字符串的格式的正確性和有效性;經緯度這樣的數據就可以直接用來做一般的描述性統計分析,保證定位的合理性。

第二部分:數據清洗

  數據清洗實際上是一個承上啟下的步驟。根據前面的數據質量評估結果選擇適當的清洗規則,這一個步驟直接影響了後面數據分析的統計結果,需要謹慎處理異常值,那麽什麽是異常值呢。

  • 異常值定義

  異常值,即數據集中存在的不合理的值,又稱為離群點。從集合角度來看,異常值即離群點,如下圖所示:

技術分享圖片

  而實際情況往往復雜的多,異常點發生的情況往往是復雜的,具體情況具體分析。例如:你需要找出一個班上天賦秉異的學生,你就需要找出這樣一個各方面都變現突出或者行為不符合一般規律的學生,這樣的異常點就是你需要研究的對象;而對於定位數據中,有一段數據都出現在不該出現的地方,是不是考慮該車輛的司機有越界行駛的可能,這對司機和車輛的能起到基本的監督行為;而一般情況,一輛車一段規律的行車軌跡中只有一兩個定位點是偏離原有的軌跡,這樣的數據是不是可以考慮直接刪除?而同樣,如何去檢測這些離群點,也是我們研究的主要內容。

  • 異常值檢驗與常用的處理方法

  異常檢驗:

  1. 簡單統計分析:對屬性做基本範圍約束,並對數據做描述性統計分析,檢測區間外的值。
  2. 3segma原則:當數據服從正態分布,距離平均值3segma(segma是正態分布函數標準差)之外的概率不大於0.003,這樣的事件我們成為極小概率事件。因此,樣本距離平均值大於3segma,則認定該樣本為異常值。
  3. 箱線圖分析:箱線圖提供了一個識別異常值的標準,即大於或小於箱線圖設定的上下值的數據記為異常值。計算上下四分位數,中位數以及均值。設上四分位數為U,下四分位數為L,IQR=U-R,上界為U+1.5IQR,下界為L-1.5IQR。

  異常處理:

  1. 刪除含有異常值的記錄(該方法過於簡單粗暴,僅適合明顯無效的記錄);
  2. 將異常值視為缺失值,按缺失值處理(如取平均值替代,時間序列模型中常用);
  3. 不處理(具體業務再處理或者直接將大規模異常數據上報,起監督的作用)。

第三部分:指標校驗方法

  數據清洗後,需要做大量的報表統計,計算出的一些指標,如何去保證其計算結果的準確性,這裏介紹四種常規數據指標的校驗方法。

  1. 與歷史數據對比。最經典的方法就是針對同樣的指標的計算結果與之前的計算結果對比,最常用到的是同比和環比;
  2. 交叉校驗。交叉校驗分為兩種:一種是同一個數據源的不同指標之間的交叉驗證,舉例子可以想象某個站點的客流量必定是不小於該站點的進站量或者出站量。另外一種是不同數據源的相關指標驗證,這裏的相關指標指的是指標之間具有比較強的相關性,無論是正相關還是負相關都具有一定的參考意義,例如一個人的教育程度和其薪水是呈現正相關。
  3. 統計分布。一般的數據會符合正態分布或者伽馬分布這樣的規律(不僅限於這兩種分布,例如早晚高峰,周末與工作日都會產生具有一定時序性的數據)。

第四部分:算法校驗

  大部分時候,腦子裏描述的算法,就算在工程上實現了落地,沒有在現實場景下產生實際效益,或者說要想檢驗在實際應用中產生的效果,還需要過實際應用的檢驗,畢竟實踐是檢驗一切真理的唯一標準。這裏我們需要涉及到抽樣設計以及探討一般的抽樣步驟,僅僅是總結,具體實施方案因場景不同而靈活運用。

  • 抽樣類型
  1. 簡單隨機抽樣。對於一個總體,如果通過逐個抽取的方法抽取樣本,且每次抽取時,每個個體被抽到的概率相等,這樣的抽樣方法記為簡單隨機抽樣。舉個例子:暗箱裏有10個球,每個球被摸到概率相同,逐個抽3個球。這裏涉及到有放回隨機抽樣和無放回。其依據是是否在每次抽樣之後將原來的球放回到暗箱裏(當然,這裏涉及到的總體都比較簡單且少量單一的情況)。
  2. 系統抽樣。當涉及到的總體比較多的時候,首先考慮把總體分成均衡的幾個部分,然後按照預定的規則,從每一個部分中抽取一些個體,得到需要的樣本,這樣的方法為系統抽樣。比如:班級上有40個學生,按照從1到39編號,首先隨機抽取一個編號加入是3,然後設定一個抽樣距離為10,那麽下一個編號就是13,以此類推再下一個編號就是23,隨後一個編號是33。這樣抽取4個人,比直接從40個學生中抽4個人要省力一點,因為系統抽樣只需要抽取第一批,後面一批按照預先預定好的規則(比如固定抽樣距離)抽取樣本即刻,因此也會才被稱為等距抽樣。
  3. 分層抽樣。取樣時,將總體分為互不交叉的層,然後按照一定的比例,從各層中獨立抽取一定數量的個體,這種得到樣本的方法為分層抽樣。(適用於總體由差異明顯的幾部分組成)。舉個例子:想要調查某個站點一天的客流數據變化,我們知道地鐵站點這樣的公共交通尤其是在一線城市是很能反映通勤行為的,因此客流具有明確的早晚高平峰的波動現象。我們不想一天都守在站點附近,可以抽取早上7點到9點(早高峰),12點到13點(平峰),6點到8點(晚高峰)這五個小時調查客流數據。
  4. 多段抽樣。多段隨機抽樣,就是把從調查總體中抽取樣本的過程分為多個階段進行的抽樣方法。例如我們想要了解深圳市不同行政區裏街道的人口變化情況。我們可以分別從深圳十個行政區中隨機抽取一個街道,然後調查街道裏的人口變化,這種抽樣方法適應於數據分布廣泛且總體數量很大的情況。
  5. 偶遇抽樣。指研究者根據實際情況,以自己方便的形式抽取偶然遇到的人或根據自己最方便的形式查找調查對象的方法。最經常遇到的是我們經常需要校驗深圳通OD數據計算結果,直接拿公司10個關系好的員工的深圳通卡數據與計算結果對比,這樣好處是方便,壞處是這些員工都是通勤用戶,可能不具有代表性。
  • 抽樣步驟

  假如我們需要了解我們的車輛實時到站算法(電子站牌)的準確性。涉及到哪些步驟去檢驗呢?

  1. 界定總體。首先,我們需要對總體範圍做一個明確的界定,假如我們需要了解深圳市公交的電子站牌的準確性,我們需要知道我們的總體是深圳市公交到站數據。
  2. 制定抽樣框。其次,收集總體中全部抽樣單位的名單,並通過名單建立起供抽樣的抽樣框,落在實際問題上就是我們需要一份所有深圳市公交線路與車牌號的名單,以及對應的線路站點信息。
  3. 決定抽樣方案。根據我們的場景,我們可以分別在10個行政區中分別隨機抽取3個公交站,選擇某個時間段跟蹤這30個站點的車輛到站時間,並記錄車輛的車牌號和線路號。
  4. 實際抽取樣本。根據抽樣方案嚴格執行。保證數據的準確性與真實性。
  5. 評估樣本質量。我們需要知道我們抽取的樣本是否具有一般性,普遍性。

  這些東西暫時寫到這裏,後面可能有更高階的統計知識介紹,也算是把三年前的專業知識撿起來,如有不妥歡迎指正。

數據實踐過程中理論總結