官术网_书友最值得收藏!

1.4 預測分析流程概覽

希望前面幾節的內容已經激發了你對預測分析的興趣,也讓你了解了預測分析與人工智能、機器學習這些流行術語的關系。本節將對預測分析的技術流程及流程中每一步的連接進行一個高層次的概述。之后的章節會根據這個流程,一步步更詳細地展開。

第一步,定義項目問題。之前提到,不同的問題定義會直接導致不同的預測輸出,同時也需要不同的訓練數據。“我們期待算法回答什么樣的問題?”是開始項目前要制訂的關鍵目標。在預測分析中,這個目標的制訂格式往往是我們想要預測下個月某件事情發生的可能性,或是想要預測下一周內某個數值的趨勢。以下是一些反面的問題定義:“如何能解決供應過剩”“如何推送用戶最感興趣的內容”,我們需要把這些過于籠統的問題分解。例如,與其把“如何能解決供應過剩”這個定義模糊的問題丟給計算機,不如先詢問領域專家是什么導致了供應過剩。他們可能會回答,供應量是根據企業預測的需求量增減的,那么問題就出在了企業預測需求量的準確性。我們的問題就變成了“未來一個月內某產品的銷量如何?”這是一個預測分析可以回答的、定義清晰的問題,算法只需根據輸入的數據輸出一個預估值。

想要解決“如何推送用戶最感興趣的內容”這一問題,我們可以改變發問的方式,“從0%~100%,預測某個用戶對某個內容感興趣的程度。”這就變成了一個預測分析可以回答的問題。根據平臺內用戶數據和內容數據的輸入,算法可以輸出一個代表“感興趣可能性”的數值。而后只要對這個數值進行簡單的排行,就可以回答原先定義模糊的“如何推送用戶最感興趣的內容”。

問題定義就像是地基,開始接下來的步驟后,重新定義問題的成本會非常大,因此,我們需要在建筑高層之前打下一個經得起推敲的地基。問題定義的訣竅在于,把定義模糊的概念性問題轉化成可以用數字回答的具體問題。大多數情況下,用“如何”開頭的問題定義都過于模糊。數字是計算機的母語,因此,定義成“下一階段某數值會有什么樣的變化”的問題更容易被計算機解答。預測分析這一學術領域提供給我們大量強大的工具,但就如日常的工具一般,它們只能對特定的問題做工,而我們的工作便是開發創意,把問題定義成可以用到這些強大工具的模樣。

為了讓本章的內容更具像化,筆者會“回收利用”之前方便面銷量的例子。在這個例子中,我們把問題定義成“下一個月方便面的銷量會是多少”,就完美符合了這個模板。大多數問題可以被這個模板或其變化式定義,因此在閱讀下面步驟時,也可以稍做轉變代入其他的例子解讀。

當清晰地定義問題后,第二步就可以開始思考:什么樣的數據可能對想要預測的數值產生影響?同時也要考慮,在這些可能產生影響的數據中,哪些數據是便于獲得的。也許企業本身記錄了大量此類數據,如過往交易記錄;又也許這些數據存在公開數據庫中,例如地區天氣記錄、節日日期等。如果數據本身不存在而且難以獲得,我們就需要衡量這一數據的收益。例如“每一時期方便面購買人群對方便面的滿意程度”。想要獲得這一信息,可能需要定期發送大量調查問卷,這會花費時間和資金。再例如,有些數據只存在于付費數據庫中。對數據成本和收益的衡量也在很大程度上決定了最后輸入模型的數據組合。不同于問題定義,我們可能會反反復復地回到數據收集這一步,因此,沒有必要把大量的資源花在試圖第一次就決定最終的數據組合——花大量資金獲取非現有數據,或花大量時間篩掉認為無價值的數據。把篩選和決定是否需要更多數據的任務留給下面的步驟。第一次經過這一步的重點在于,收集所有預估含金量較高、較易獲得的數據。

擁有初步數據后,第三步需要對收集到的數據進行初步分析。這個階段的分析有兩個目的:第一,清理數據,去除明顯的噪聲;第二,了解數據分布和每類數據與預測目標之間的大致關系。

信息缺失屬于常見的一類噪聲來源。大多數的繼續學習模型無法解讀存在空缺的數據。在實際應用中,由于收集到的數據不一定完整,我們需要填補空缺數據或放棄某類數據。舉個例子,在第二步中,也許我們認為局部溫度對預測目標有所影響,因此從公開數據庫中下載了某地區的局部溫度。我們希望用過去一年的歷史數據作為機器學習的訓練集,但可惜的是,已知的數據庫只能提供過去一個月的溫度記錄。在這種情況下,局部溫度就是一個不完整的信息。由于其空缺量遠遠大于已知量,往往最好的決定是放棄這一數據。還有一種可能,數據庫擁有過去一年的溫度記錄,但是記錄中出現少量空缺。取決于數據保管的方式,這些空缺也許有特殊的含義,也可能完全隨機。我們可以查找數據收集方是否對這些空缺做出公開記錄,或聯系保管方,詢問空缺緣由。如果有可以量化的空缺緣由,我們就可以根據這個緣由填補空缺。例如在存儲數據時,數據收集方決定刪除與前日一樣的溫度記錄,了解到這一細節后,我們可以將空白的數據填補為上一個非空白數值,但如果數據空缺并無可量化緣由,而空缺比例較小,也許收集者每周日休息,因此所有周日的信息都是空缺的,我們可以取每周六的數值填補,或周六與周一的平均值。后面的章節將詳細講解各類噪聲,以及如何處理。

初步清理了明顯的數據噪聲后,下一步就是統計分析。之前提到,為了獲取“起決定性因素”的數據,我們可以與領域專家溝通,借助他們的直覺確定收集的數據內容。在機器學習中,不同類型的數據稱為不同的特征(feature)。單個特征可能與預測對象有直接的函數關聯,也可能需要與其他特征結合才能看出與預測對象之間的關聯。通過與專家的初步溝通,我們可以有根據地猜測出一套有效特征。

盡管人為對數據價值的預估可以幫助我們確定有效方向,但這個預估往往或多或少存在誤差。回到預測下個月方便面銷量的例子,也許人們會認為去年同一時期的銷量會起決定性作用,但數據可能會表示,年與年之間的關聯并沒有我們想象得那么強。在統計分析這一步,預想被完全推翻是一件平常事。人為的直覺推導可能會參考許多領域經驗和社會經驗,但人腦無法直接從大量的數據中提取信息,因此估算的價值產生了這些誤差。換個角度想,如果行業專家可以準確地告訴我們所有有效數據和其應有的權重,那么一定存在一個可以用硬代碼寫出的邏輯,可以不通過任何機器學習或其他模型進行預測,因此我們用統計分析來量化每個特征與預測對象之間的關系,從而證實或推翻最初的猜測。

這一步的目的在于提取最有效益的特征。在商業應用中,計算力和時間都是寶貴的資源,而企業所用到的數據規模往往需要巨大的計算量和存儲。低效益的特征會增加數據緯度、加長計算時間、加大占用存儲,從而增加項目成本。同時,低效益的特征對于機器學習的目標來講相當于噪聲。增加低效益特征大多數時候產生的效果不是增加微量的邊際收益,而是降低整體收益。你可能會覺得奇怪,這難道不可以用1+0.01=1.01,而1.01>1來類比嗎?確實,低效益的定義是正收益低,而不是負收益低。單獨看每個低效益特征與預測對象的關聯,我們的確可以用某種衡量指標把它們的效益量化作0.01,而把高效益特征的效益量化作1。只不過,在機器學習模型結合這兩項信息時,效益之間的運算符并不等價于加法。低效益特征會分散模型的“注意力”,因此降低整體的預測準確度。就像你正在聽一節理論物理課,推導公式的同時,教授饒有興致地講起了這段公式的相關歷史故事。分開來看,公式推導的講解對于精準掌握這個理論起到高效益,歷史故事的講解可以提升你的興趣,從而少量地提高你對這個理論的接受能力,但是人腦學習時同時注入這兩種講解,大概率只會令大腦困惑。當然,一個十分優秀的教授和一個適合這種學習方式的大腦也許可以提取微小的收益,這在機器學習中對應著十分合適的輸入格式和適合這種格式的模型。在商業應用中,為了提取低效益特征中的微小收益而去開發這樣的模型,大多數情況下是不劃算的。

經過初步的統計分析和數據清理后,可以開始基礎建模了。商業應用不同于學術研究,大多數時候會調用現有的模型包。sklearn(全稱scikit-learn)就是一個建立于Python上的豐富的機器學習包,其中包含監督學習(Supervised learning)和無監督學習(Unsupervised learning)中大多可能用到的模型。用戶指南如圖1.4所示。

圖1.4 sklearn用戶指南概覽

圖1.4列舉了sklearn現階段支持的所有與監督學習有關的模塊。大多數情況下,經過適合的調參與特征優化,這些包在商業應用中足夠提供令人滿意的準確率。也可以從左欄方框圈出的部分看到,sklearn不止包含了監督學習,同樣也可以被用來做無監督學習、模型選擇與評估(Model selection and evaluation)、可視化數據(Visualization)等,其中數據轉換(Dataset transformations)模塊可以幫助我們清理數據。

作為一個廣度較大的庫,sklearn對某類模型的優化程度可能不如一些更精專的包。例如XGBoost,就是一個專注優化梯度回升(Gradient boosting)的包。經過初步模型選擇后,如果基于樹的算法在解決問題中表現優異,可以考慮調用XGBoost進行更深一步的定制和調試。同樣,TensorFlow也屬于一種精專于神經網絡模型的包。比起基于樹的算法,神經網絡中有更多的調試空間,因此,在TensorFlow的調用中需要手動搭建的結構更多。

第一次進行基礎建模時,可以選用少量、有代表性的數據輸入模型,加入少量模型調試,然后對幾種預選模型進行評估。模型的預選需要對模型優劣有大致了解,這些將在第4章模型選擇里深入講解。取少量數據是為了提高計算速度,在確定較合適的模型前,應該盡量避免在某個模型上花費過量的時間和計算力。而衡量代表性需要回答以下兩個問題:當提取部分數據后,用部分數據所分割出來的訓練集、評估集和測試集的訓練評估結果,是否能大致映射出全部數據分割后得到的訓練評估結果?部分數據的分布又是否與整體數據分布相似?例如我們知道,神經網絡相比概率模型或基于樹的模型來講,需要更多數據才能發揮它的優勢,因此,如果想要通過部分數據對比神經網絡模型和概率模型,需要保證篩選的數據量與總集的數據量屬于同一個數量級。又或者數據與時間相關,這時可以在總集的所有時間段中各隨機選擇些許,確保篩選數據不過分集中在某個時間段。

基礎建模的目的在于篩選最合適的模型,以低成本廣泛搜尋最值得深入調試的模型。這一步也可以提供初步的結果預期,讓我們大致了解現有數據對于預測對象的決定性。如果每種預選模型的結果都差強人意,則需要深一步探究我們選擇數據的合理性,或問題本身的可預測性。

完成基礎建模后,可以在選擇出來的最優模型上投入更多的時間和計算力,進行優化。優化這一步包括數據優化和模型優化。數據和模型架構相輔相成,因此,模型優化的過程其實是尋找最優的數據格式與模型架構的配合。優化模型架構的核心是超參數調試(Hyperparameter tuning):在同一架構下嘗試不同的模型規格、損失函數等。第5章將詳細講解如何進行模型優化。數據優化包括特征工程、數據規范化、平滑數據等。第6章將詳細講解如何優化數據。

優化的過程中可能會重復之前的步驟,收集新的數據、嘗試不同的數據清理方式、重新選擇模型等,直到獲得滿意的結果。

接下來便可以部署一個完整的流程,把模型應用到企業日常中。這個流程需要考慮誰、什么時候、如何觸發新的預測,流程維護是否可以長期低成本運營,以及預測接受者是否能輕松理解模型預測的結果。自動化越高的流程維護成本越低。許多時候,隨著企業運行,我們需要結合新的數據重新訓練模型。在這種情況下,理想的流程應該能夠自動獲取新數據、重新訓練,而后做出相應預測。

部署和維護是預測分析在企業應用中的最后兩個步驟。這兩步需要結合企業與項目實情操作,其技術點也不在于機器學習,因此將不會在本書中具體講解。雖然如此,但在搭建模型的時候同時建立起一個模擬流程也是有幫助的:一個模擬的流程部署可以讓我們確定項目的可行性,保證每一步所需要的資源都可及時到位。第3章講解數據泄漏時,可以更清楚地體會到這一幫助。

主站蜘蛛池模板: 乳源| 旺苍县| 惠州市| 岢岚县| 顺昌县| 广昌县| 郎溪县| 台安县| 丽水市| 洪雅县| 莱州市| 吉隆县| 扎囊县| 陆丰市| 全椒县| 凌海市| 西充县| 扬中市| 尚志市| 高雄市| 英超| 西和县| 孝昌县| 淮滨县| 林西县| 芒康县| 沙坪坝区| 安徽省| 兰坪| 西平县| 诸城市| 隆安县| 瓦房店市| 和硕县| 尚义县| 正镶白旗| 自治县| 荔波县| 岳普湖县| 通山县| 龙南县|