數據挖掘:聊聊那些年你我踩過的「坑」

2021-02-23 KPMG大數據挖掘

題記

半畝方塘一鑑開,天光雲影共徘徊。 問渠哪得清如許,唯有源頭活水來。 

                                                                                                ——朱熹

Intro

礦工一枚,有太多的故事(眼淚)想要與大家分享。今天就來談一談數據挖掘中常常被我們忽略的小問題(踩過的坑)。

讓我們從下面這張圖開始吧! 

圖一 從現實世界到模型世界(圖片來自網絡) 

咳咳注意,本篇不是八卦文,在這裡我們要正經地討論一些小case。如圖所示,我們以左圖代表現實世界,右圖代表模型世界——對,數據挖掘的世界。從左至右的轉換雖合情合理(技術上能夠實現),又有微妙的不同——是不是更美啦?合情合理是說我們的空間映射不能脫離實際,美顏也要在一定的框架之下,要有技術能夠實現。微妙的不同在於,我們常常習慣於這樣的美,習慣於用這種方式來解決現實世界的問題(如果生活在唐代,我們可能有不同的解決問題的方法,哈哈)。可能有同學要問,幹嘛大費周章,直接在現實世界解決問題不就OK了嗎? 然而現實情況是,大部分情況下這樣並不能解決問題,甚至很多時候,我們不能得到如左圖那樣完整的數據。由於這個原因,我們的模型世界異彩紛呈。這個問題太大,之後再講吧。本著主旨,我們來看看怎麼對現實世界進行分析挖掘。

數據挖掘流程概覽

首先,數據挖掘遵循著一整套標準開發流程,其中應用較廣的是跨行業的CRISP-DM (Cross Industry Standard Process for Data Mining) 標準,以及SAS的SEMMA (Sample,Explore,Modify,Model,Assess) 流程標準。相對來說CRISP-DM應用範圍更廣一些,如下為CRISP-DM流程圖:

圖二 CRISP-DM流程圖

CRISP-DM的成功之處在於它是面向數據挖掘項目開發的,並且與行業、背景、數據挖掘工具無關。它可以將整個數據挖掘過程同標準的業務過程相結合,把具體的業務目標映射為數據挖掘目標,從而保障數據挖掘的結果能更好地指導業務決策。

接下來,我們會順著CRISP-DM流程來挖一挖有哪些坑是我們會不小心掉進去的。

數據挖掘小坑集錦流程之業務理解

在業務理解階段,我們實現了或者說需要實現現實世界到模型世界的變遷。我想美,這是我的目的。但是注意——坑來了。

在實際情況中,我們常常遇到的坑是"我想美",即只有一個宏大的願望,卻沒能從現實世界中提煉出真正能夠落地的地方。比如說,我想要"臉"變得好看些,那麼,現實中你需要有"臉"才行啊。這一部分往往不被重視,我是有"臉"的人啊,變美就成。

坑一:業務目標不明晰

美有多種,一定要足夠具體,明確客戶真正想要達到什麼目標。如果是多個目標,且存在互斥關係,如何進行排序取捨? 按照什麼標準來執行? 只能美"臉"麼? "頭髮" 能不能做一下呢? 這一坑,有時好過,有時真不好過,認真對待總是對的。

坑二:環境評析不深入

環境評析,是對業務目標的執行與展開。美「臉"可以,有工具麼? "臉" 能夠給提取出來吧? 是否需要美容專家來指導指導? 這個坑,其實並不大,因為在現階段大部分情況是"腦袋決定屁股"的嘛。往往是人員、數據、工具等齊全了,領導們覺得是不是得做點什麼東西出來了呢? 可能這一點表述的不夠嚴謹,歡迎拍磚。這一坑,要求人員能夠勝任評析的工作,能夠看出臉的哪部分是哪部分; 要求"臉"足夠豐富,能夠支撐得起後續的整容計劃; 要求工具得當,使得順手。總體來說,此坑必填才能順利地將項目進行下去。

坑三:實施計劃跟不上變化

基於對環境的評估,以及對業務目標的理解,我們終於能夠明確一個還算靠譜的挖掘目標——把臉優化為瓜子臉。於是,我們制定了詳細的實施計劃,準備大幹一場。這一坑,現階段是開挖了,也填不上,需要在以後階段逐步cover

流程之數據理解

基於業務理解,在數據理解階段,以初步數據收集開始,檢查數據的可訪問性和解決具體的業務問題的充分性,接下來進行一些活動,目的是熟悉數據,識別數據質量的問題,從而獲得關於數據的第一手信息,發現有趣的子集,形成對隱含的信息的假設。如圖一左圖所示,是真正開始進行臉的"抽取"了,為了實現目標,需要結合專家人員的知識,抽取相應的組織數據,如臉部分的明細數據,臉表皮層數據,臉真皮層數據,臉皮下層數據等等,甚至為了整體上的協調,會抽取整體輪廓數據等。這一過程,是業務理解中環境評析的深入與綜合。

坑一:原始數據收集困難

為了實現美顏的目的,需要非常多的數據支撐。現實中,可能由於種種原因,有一些關鍵數據不能夠收集。這一坑,有著十分現實的硬約束,比如你就是不能收集客戶的隱私信息或者不能得到各國CDS證券的歷史交易信息等。這一硬約束,除非通過其它變通的方式來解決,要不就是無解的。

坑二:原始數據重疊

與坑一相反,這個坑恰恰是我有更多的原始數據,但是,數據口徑並不統一,如何整合它們將是一個新的難題。如果專家人員能更多地參與和梳理,此坑往往是能夠解決的,但也是一個需要耗費相當多人力物力的過程。日前,《銀行業金融機構數據治理指引》則明確地表明數據是需要精心「呵護」的。

坑三:以抽樣代總體

大數據需要抽樣麼?有人會想,我們國家也就14億人臉,全量拿來就好了嘛——有時候,還真難以實現。一方面,現實當中存在取數的困難性,存在計算的困難性;另一方面,抽樣與總體總是相對的,明確研究的總體很重要,總體確定了,再考慮抽樣的問題。這個坑其實不太明顯,但往往決定模型的成敗。如果我們樣本把鼻子高且顏值低的人過多地加入我們樣本,則會發現鼻子越高觀賞度越低,從而帶來抽樣偏見,無法對總體做出準確描述。

流程之數據準備

基於對數據的理解與洞察,我們開始了原始數據構造最終數據集(將要輸入建模工具的數據)的活動。抽取相應的組織數據,並不能夠直接地堆砌,直接堆砌還是現實世界,要達到模型世界,還需要較多步驟的轉換才成。看坑。

坑一:重抽樣的問題

在風險欺詐領域,壞樣本總是非常稀少,為了對壞樣本有一個較好的擬合,往往會人為增大壞樣本的比重。但是調整完樣本之後,能夠直接應用麼? 這個坑,也不太明顯。通常情況下,在關注排名的領域是可以的,而在關注實際發生率,如診斷醫學、保險學領域則容易犯錯。請看下圖。在增加調整項和不增加調整項情況下,模型擬合的結果與實際結果有比較大的差別。具體實例請參考SAS官方連結http://support.sas.com/kb/22/601.html。

坑二:變量編碼的問題

在進行空間映射時,免不了進行各種變換,其中比較常用的是啞變量轉換——dummy coding。而有些軟體如SAS會支持進行另一種轉換----effect coding。兩種轉換方式對結果的正確性是沒有影響的,但有時候進行數據驗證,比方看OR值,使用係數來進行驗證,會發現對不上號。這個坑還是比較隱含的,但也需要有清晰的思考。

示例: 原始數據

示例:基於數據的dummy coding

如上為對4組水平進行的觀測結果,進行啞變量編碼如下:

回歸結果:  F(3, 12) = 76.00 P = 0.0000 R-squared = 0.95

示例:基於數據的effect coding 

回歸結果: F(3, 12) = 76.00 P = 0.0000 R-squared = 0.95

嗯,聰明的小明已經發現了端倪,你看到了什麼呢?

坑三:目標變量問題

在進行監督型模型訓練時,目標變量的確定,直接關係到最終模型的效果。這裡也有一些小坑——目標變量能否反映問題的實質? 數據準備過程中,是否加入了噪音? 在模型影響因素的選擇中,是不是有一些特徵是根據目標變量衍生出來的(即以目標預測目標)?此坑雖小,往往在模型開發大半才會發現,不得不引起重視。

流程之建模

相較來說,建模階段是最複雜的,但坑其實沒有那麼大,有以下需要關注的地方。

坑一:建模的技術選擇

經過以上淬鍊,我們終於打造了圖一右側完美的臉龐,現在是時候回歸到左側了。R U Kidding Me? 並沒有。模型世界或模型空間,只是我們解決問題的手段而已,現實世界才是我們最終的關注點。完美的臉龐(模型)有助於我們進行對問題的求解。現實生活中,很難判斷一個人違約率有多高,但是,在模型世界,我總能夠給出一個相應的評分來估計出這個人的違約概率。那麼坑在哪裡呢?(張望臉)

有坑的地方在於技術選擇時需要考慮模型的假設條件,只有相匹配的假設,模型才能發揮出最大作用,也才能對現實進行更深入的刻畫。這個坑,通過對技術的深度掌握和多多實踐即可解決,不再贅述。

流程之模型評估

在這個項目階段,你已經構建了一個(或多個)從數據分析的角度來說看上去質量較高的模型。在進行模型的最終部署之前,一定要確定它正確地反映了業務目標。關鍵的目標是否有一些重要的業務問題沒有充分考慮到,讓你必須返回到業務理解階段呢?這個階段的最後,還應該確定使用數據挖掘結果得到的決策是什麼。這一階段有非常多的評估指標可供選擇,可以進行多模型的比較,通常來講,也沒有太多坑。如果有,就是選擇指標進行評估時,是否合理,有沒有考慮到稀疏數據的問題。

流程之模型部署

在創建模型過程中獲得的知識可以被組織起來並以用戶能夠使用的方式將其呈現。數據挖掘解決方案必須像簡單的靜態報表一樣部署給決策者,或直接寫入現有的資料庫(資料庫評分)。模型的建立通常並不意味著項目的結束。儘管模型的目的是為了提升數據的知識力,但獲得的知識需要被組織和表示成用戶可用的形式。這常常與包含能支持公司決策的「現場」模型(「live」 models)的使用有關,例如,Web 頁面的即時個性化服務或者銷售資料庫的重複積分等。然而,與具體需求有關,部署階段可認為是與生成一份報告一樣簡單,或者認為是與實施一個覆蓋整個企業可重複的數據挖掘過程一樣複雜。

坑一:部署環境問題

這是一個比較常見的問題。在我們辛苦開發後,模型能夠較高地反映現實世界了,正準備高高興興地大規模應用,卻發現開發模型的環境與線上部署的環境不同。這個坑沒有行之有效的方法,需要按照線上環境再次進行模型訓練。有效規避的方法是提前交流線上的部署環境和應用問題。

坑二:指標穩定性問題

指標穩定是模型能夠正確預測的關鍵,進行穩定性的監控是很有必要的,能夠提前發現哪些因素發生了變化,變化的趨勢是什麼,通常我們使用PSI來進行指標穩定性監控。提示這個坑,是要大家關注模型的後續運行,這一點經常會被忽視。

坑三:預測區分度問題

同樣,指標穩定並不表明模型依然有效,關注預測的區分度也是十分必要的。如果指標穩定,但是預測的能力有比較大的折扣,則需要關注是不是業務發生了新的變化,這一變化是否是長期的。提示這個坑,是要大家關注模型的後續運行,這一點也經常會被忽視。

數據挖掘填坑指南

以上基於CRISP-DM通用數據挖掘流程簡單總結了一些挖掘過程中會被忽略的問題,並給出了填坑指引。限於篇幅與筆者能力所限,肯定不夠全面,望大家指正。

END

相關焦點

  • Prometheus使用總結:我踩過的那些坑
    我在工作中也比較深入地使用過 Prometheus,最大的感受就是它非常容易維護,突出一個簡單省心成本低。當然,這當中也免不了踩過一些坑,下面就總結一下。假如你沒有用過 Prometheus,建議先看一遍官方文檔:https://prometheus.io/docs/introduction/overview/。
  • 踩坑日誌 | kingfisher 公共測序數據 SRA/Fastq 下載神器!
    我非常感興趣,但也確實沒時間折騰,於是繼續丟給師弟去看看(事實上,他肯定也有類似需求....)。結果如下,感覺不錯。幫大夥踩坑測試,與大夥分享。- CJ - 陳程傑寫在前面    一般在進行公共測序數據挖掘的時候,需要從公共資料庫中(SRA、ENA、DDBJ等)下載自己所需的測序數據。
  • 那些用pytorch踩過的坑
    pytorch的交叉熵nn.CrossEntropyLoss在訓練階段,裡面是內置了softmax操作的,因此只需要餵入原始的數據結果即可,不需要在之前再添加softmax層。這個和tensorflow的tf.softmax_cross_entropy_with_logits如出一轍.[1][2]pytorch的交叉熵nn.CrossEntropyLoss在訓練階段,裡面是內置了softmax操作的,因此只需要餵入原始的數據結果即可,不需要在之前再添加softmax層。
  • 別傻了,聊聊我被線下面授項目收割的兩次經歷以及經驗.
    這個時候就想著線下項目肯定可以親眼觀摩數據,只要我親眼看到後臺數據,這個項目就一定靠譜。沒錯,所有的項目最大的套路就是在數據上作假,這一點線上線下其實是一致的,但是我今天要告訴你的是,你所看到那些數據,線下一樣可以作假,這一點請看我下文的解析。
  • 踩坑|NVIDIA驅動安裝
    我也不知道伺服器具體有哪些毛病,不如先跑一個複雜點的代碼踩踩坑,比如我這個是pytorch下,利用多個GPU並行的圖形識別訓練程序。基本上通過跑這個程序,可以排查出伺服器的大部分問題。cuda和cudnn的安裝也是個麻煩事,這裡就先不寫了,放到明天吧。本文主要寫重新安裝NVIDIA驅動。
  • 模型部署翻車記:PyTorch轉onnx踩坑實錄
    在深度學習模型部署時,從pytorch轉換onnx的過程中,踩了一些坑。本文總結了這些踩坑記錄,希望可以幫助其他人。首先,簡單說明一下pytorch轉onnx的意義。接下來通過幾個實例程序,介紹pytorch轉換onnx的過程中遇到的坑。1.  opencv裡的深度學習模塊不支持3維池化層起初,我在微信公眾號裡看到一篇文章《使用Python和YOLO檢測車牌》。
  • 講述|踩到地雷,你經歷過嗎?
    「我可能踩到地雷了!」許思典一字一頓地說出這話。「思典,千萬別動,別動!」在附近指揮的快反排長劉曉輝趕緊喊到,「別過來,都別過來,有地雷!」他迅速擺手,讓其他官兵也趕緊後退。空氣仿佛凝固了,時間仿佛靜止了,許思典一動不動。炎熱的天氣下,他似乎流出了冷汗。
  • 小編遊話說:聊聊你從遊戲裡get到的那些「硬知識」吧
    我大學時的同班友人就一度因為《Baldr Sky》系列續作沒有漢化補丁而毅然抱起了五十音表和基礎日語教材,最終自學拿到N3證書,可見GHS確實是第一生產力。今天我們能很快玩到相關遊戲的漢化版本,也是多虧了這些舉起火把投入漢化的老哥。從遊戲裡學知識,或者因為遊戲而對某個領域開始感興趣並投入鑽研,應該是我們每個人都有過的經歷。
  • 機器學習我淌過的那些坑之DCGAN
    按照README做就好,很順,下載了人臉和臥室的模型玩兒了一下,然後就訓練我自己的數據。我用的數據集是我們做《數據追問-全國美展油畫作品視覺化解讀》時候的數據,第6-12屆全國美展油畫獲獎作品,共2276張。訓練後,在自己的模型上生成了一些有趣的結果。
  • 電腦風扇的誤區,這些坑你都踩過嗎?
    很多小夥伴在裝機的時候都盯著CPU、顯卡、內存等與「性能」直接相關的硬體,卻很容易忽略了電腦主機是一個系統工程這個事實,其實裝一個沒有短板的「水桶機」,性能是一方面,能否讓主機發揮全部或者大部分性能的周邊配置是另一方面,比方說機箱的散熱風扇吧,這個常被玩家忽略的硬體其實「坑」
  • virtualbox centos7 nat+host-only方式聯網踩坑總結
    因此為了實現我的目標需求,採用了 nat+host-only方式對虛擬機進行設置。在設置的過程中花了一些時間,為了總結經驗就有了該文章。2、虛擬機網卡有哪些連接方式?:Guest訪問網絡的所有數據都是由主機提供的,Guest並不真實存在於網絡中,主機與網絡中的任何機器都不能查看和訪問到Guest的存在。
  • 經驗 | 在C++平臺上部署PyTorch模型流程+踩坑實錄
    不支持的操作TorchScript支持的操作是python的子集,大部分torch中用到的操作都可以找到對應實現,但也存在一些尷尬的不支持操作,詳細列表可見https://pytorch.org/docs/master/jit_unsupported.html#jit-unsupported,下面列一些我自己遇到的操作:1)參數/返回值不支持可變個數,例如
  • 用pytorch踩過的坑
    作者:知乎號—土豆地址:https://www.zhihu.com/people/FesianXupytorch的交叉熵nn.CrossEntropyLoss在訓練階段,裡面是內置了softmax操作的,因此只需要餵入原始的數據結果即可
  • 時間轉換竟多出1年!Java開發中的20個坑你遇到過幾個?
    月31號,就轉了一下格式,就變成了2020年12月31號了?因為YYYY是基於周來計算年的,它指向當天所在周屬於的年份,一周從周日開始算起,周六結束,只要本周跨年,那麼這一周就算下一年的了。正確姿勢是使用yyyy格式。
  • 【零基礎入門數據挖掘】-模型融合
    Datawhale 作者:田楊軍 ,Datawhale優秀學習者摘要:對於數據挖掘項目
  • 那些年,我們一起玩過的RC
    今天跟各位分享下關於RC (遙控)模型中我所知道的遙控器,不能說是指導各位準備跳坑或者已經跳坑的同好
  • Android高斯模糊你所不知道的坑
    如果你想了解如何封裝一個高斯模糊,可以參考之前的文章:如何封裝個好用的高斯模糊組件本文作者給大家分享了一個自己在製作高斯模糊效果時,遇到的問題以及分析的思路。高斯模糊的UI效果相信大家多多少少都有接觸過,只是可能並沒有真正在實際項目中去使用過,這次產品需求中正好涉及到了高斯模糊的展示效果,隨便去研究了下這塊東西,先上一個最終的效果圖。
  • 我又踩坑了!如何為 HttpClient 請求設置 Content-Type 標頭?
    入坑下面是構造 HttpClientEncoding.UTF8) );平臺日誌顯示,收到的請求 payload:{\"token\":\"AA2917B0-C23D-40AB-A43A-4C4B61CC7C74\"}額,平臺收到的 JSON 數據被轉碼了
  • 90%的人都被這樣「坑」過?淘寶京東的雙十一價是真的嗎?
    圖源:北京消協 | 被調查者經歷過的大數據「殺熟」類型以為只有在線旅遊類APP是大數據「殺熟」的重災區嗎?Too Naive,電商平臺照樣「殺」你沒商量。網友西瓜在淘寶買顯卡時,發現同一款RX590的價格,自己手機上看到的要比周圍四五個朋友看到的都貴50元。店家表示不清楚,默默搖頭甩鍋,而淘寶官方的回覆是由於設置了地區定向價格,所以同一時間內購買同一件商品的價格不一致。
  • 敏捷組織的「入坑」與「填坑」
    外部的變化也是我們通常所講的VUCA的環境,這個我不用多講了,2020年的全球COVID-19已經把我們所有人都推向了不得不快速應對的環境,這裡當然也包括外部監管環境的改變、技術的進步、客戶需求的變化和競爭對手的顛覆等等。而現在看來,傳統的大型金字塔式的官僚組織日漸機械僵化,在適應外部變化方面表現漸漸失靈失效,它們必須要提高自身的敏捷性。