學(xué)建模常用模型實(shí)戰(zhàn)指南:從優(yōu)化到預(yù)測(cè)的四大工具箱)
1. 從“套公式”到“建模型”數(shù)學(xué)建模的思維躍遷很多人一聽到“數(shù)學(xué)建?!蹦X子里蹦出來的第一個(gè)念頭就是“套公式”。我剛開始接觸這個(gè)領(lǐng)域時(shí)也是這么想的總覺得手頭攢夠幾個(gè)“常用模型”遇到問題往里一套答案就出來了。后來在實(shí)戰(zhàn)中尤其是參加了幾次高強(qiáng)度的競賽被現(xiàn)實(shí)反復(fù)“教育”之后我才徹底明白這種想法錯(cuò)得有多離譜。數(shù)學(xué)建模的核心從來不是“模型”本身而是“建模”這個(gè)動(dòng)態(tài)的、創(chuàng)造性的過程。它更像是一個(gè)翻譯家把現(xiàn)實(shí)世界中一個(gè)模糊、復(fù)雜的問題翻譯成數(shù)學(xué)語言構(gòu)建出一個(gè)可以分析、可以計(jì)算的“簡化版世界”。這個(gè)“簡化版世界”就是模型而“常用模型”只是前人總結(jié)出來的一些經(jīng)典“翻譯范式”或“語法結(jié)構(gòu)”。所以今天我想聊的“數(shù)學(xué)建模常用模型”絕不是給你一本可以照抄的“公式大全”。我更愿意把它看作是一套“工具箱”里面放著扳手、螺絲刀、錘子等各種工具。一個(gè)優(yōu)秀的建模者首先要理解每個(gè)工具模型的設(shè)計(jì)原理、適用場景和力量邊界然后根據(jù)你手頭要修理的“物件”實(shí)際問題判斷該用哪個(gè)怎么組合甚至如何在現(xiàn)有工具基礎(chǔ)上進(jìn)行改造。這篇文章我就結(jié)合自己這些年踩過的坑和積累的經(jīng)驗(yàn)為你系統(tǒng)地梳理一下這些“工具箱”里的核心成員并重點(diǎn)分享如何根據(jù)問題特征去“選工具”、“用工具”以及那些模型手冊(cè)里不會(huì)告訴你的“實(shí)戰(zhàn)心得”。2. 模型工具箱總覽四大類別的定位與心智模型面對(duì)一個(gè)具體問題時(shí)如何快速定位到可能的模型類別我的經(jīng)驗(yàn)是先問自己幾個(gè)關(guān)于問題本質(zhì)的問題這比盲目翻模型列表有效得多?;趩栴}的特征我們可以把常用模型大致歸為四類每一類都對(duì)應(yīng)著一種獨(dú)特的分析視角和數(shù)學(xué)“世界觀”。2.1 優(yōu)化類模型在約束中尋找“最優(yōu)解”這是應(yīng)用最廣泛的一類模型。其核心心智模型是在給定的限制條件約束下找到一個(gè)方案使得某個(gè)或多個(gè)我們關(guān)心的目標(biāo)達(dá)到最好最大或最小。核心問題特征當(dāng)你面對(duì)的問題中有明顯的“希望達(dá)到...”、“成本最低”、“效率最高”、“利潤最大”、“距離最短”等表述并且同時(shí)存在“資源有限”、“時(shí)間不夠”、“必須滿足...要求”等限制時(shí)優(yōu)化模型就是你首先要考慮的。經(jīng)典代表線性規(guī)劃 (LP)目標(biāo)函數(shù)和約束條件均為決策變量的線性表達(dá)式。這是優(yōu)化世界的基石單純形法是其高效的求解引擎。它的強(qiáng)大之處在于很多非線性問題通過巧妙的轉(zhuǎn)化比如分段線性化也能用線性規(guī)劃逼近。整數(shù)規(guī)劃/0-1規(guī)劃 (IP)決策變量部分或全部要求取整數(shù)值如人數(shù)、設(shè)備臺(tái)數(shù)或0-1值是否選擇。這帶來了組合爆炸的復(fù)雜性但能精確描述“是或否”、“有或無”的邏輯關(guān)系。非線性規(guī)劃 (NLP)目標(biāo)函數(shù)或約束中至少有一個(gè)是非線性的?,F(xiàn)實(shí)世界本質(zhì)上是非線性的所以這類模型更貼近實(shí)際但求解難度也急劇上升常常依賴梯度下降、內(nèi)點(diǎn)法等迭代算法尋找局部最優(yōu)。動(dòng)態(tài)規(guī)劃 (DP)用于解決具有“多階段決策”和“最優(yōu)子結(jié)構(gòu)”特征的問題。它的核心思想是“記住過去”避免重復(fù)計(jì)算。比如最短路徑問題、資源分配問題。選型實(shí)戰(zhàn)心得先線性后非線性永遠(yuǎn)優(yōu)先嘗試用線性關(guān)系去描述你的問題。線性規(guī)劃求解快、結(jié)果穩(wěn)定、有成熟的商業(yè)和開源求解器如Gurobi, CPLEX, OR-Tools。只有當(dāng)線性假設(shè)嚴(yán)重偏離事實(shí)時(shí)才考慮非線性模型。警惕整數(shù)變量一個(gè)模型里一旦引入整數(shù)變量求解時(shí)間可能從秒級(jí)躍升到小時(shí)級(jí)甚至無解。要問自己這個(gè)變量真的必須取整嗎四舍五入的誤差是否可以接受有時(shí)可以先求解線性松弛去掉整數(shù)限制再對(duì)結(jié)果進(jìn)行整數(shù)化處理和分析。動(dòng)態(tài)規(guī)劃的“狀態(tài)”設(shè)計(jì)是關(guān)鍵“狀態(tài)”要能完整描述當(dāng)前決策面臨的情況且狀態(tài)空間不能太大否則會(huì)陷入“維數(shù)災(zāi)難”。這是動(dòng)態(tài)規(guī)劃建模中最考驗(yàn)功力的地方。2.2 預(yù)測(cè)與分類類模型從歷史數(shù)據(jù)中看見未來這類模型的核心心智模型是基于已知的、已發(fā)生的數(shù)據(jù)歷史發(fā)現(xiàn)其中隱藏的規(guī)律或模式并用這個(gè)規(guī)律去推斷未知的、未來的情況。核心問題特征問題圍繞著“估計(jì)”、“預(yù)測(cè)”、“判斷屬于哪一類”展開。你擁有大量的歷史觀測(cè)數(shù)據(jù)輸入和對(duì)應(yīng)的輸出需要建立一個(gè)從輸入到輸出的映射關(guān)系。經(jīng)典代表回歸分析包括線性回歸、多項(xiàng)式回歸、邏輯回歸等。用于建立連續(xù)型輸出變量與輸入變量之間的關(guān)系。邏輯回歸雖然名字叫“回歸”但本質(zhì)是解決二分類問題的線性模型。時(shí)間序列分析專門處理按時(shí)間順序排列的數(shù)據(jù)如ARIMA模型、指數(shù)平滑法。核心是挖掘數(shù)據(jù)中的趨勢(shì)、季節(jié)性和周期性成分。機(jī)器學(xué)習(xí)模型如決策樹、隨機(jī)森林、支持向量機(jī)(SVM)、神經(jīng)網(wǎng)絡(luò)。這些模型能自動(dòng)捕獲數(shù)據(jù)中復(fù)雜的非線性關(guān)系尤其適用于特征多、關(guān)系隱晦的場景。選型實(shí)戰(zhàn)心得數(shù)據(jù)質(zhì)量決定天花板“垃圾進(jìn)垃圾出”在預(yù)測(cè)模型中體現(xiàn)得淋漓盡致。在糾結(jié)選哪個(gè)高級(jí)模型之前請(qǐng)把80%的精力花在數(shù)據(jù)清洗、特征工程和探索性數(shù)據(jù)分析上。一個(gè)清晰的趨勢(shì)圖或相關(guān)性矩陣有時(shí)比復(fù)雜的模型更有說服力。從簡單模型開始不要一上來就祭出深度神經(jīng)網(wǎng)絡(luò)。先用線性回歸或決策樹這樣的簡單模型建立基線。簡單模型不僅訓(xùn)練快、可解釋性強(qiáng)而且其表現(xiàn)不佳的地方恰恰能提示你數(shù)據(jù)或特征存在的問題。嚴(yán)防過擬合這是新手最容易掉進(jìn)去的坑。模型在訓(xùn)練集上表現(xiàn)完美在測(cè)試集或新數(shù)據(jù)上一塌糊涂。務(wù)必使用交叉驗(yàn)證來評(píng)估模型泛化能力并通過正則化、剪枝、Dropout等技術(shù)來抑制過擬合。2.3 評(píng)價(jià)與決策類模型在多維標(biāo)準(zhǔn)下做出選擇當(dāng)問題沒有唯一的最優(yōu)解而是需要在多個(gè)常常相互沖突的準(zhǔn)則經(jīng)濟(jì)、環(huán)境、社會(huì)效益等之間進(jìn)行權(quán)衡和綜合判斷時(shí)這類模型就派上用場了。其核心心智模型是將定性判斷定量化將主觀偏好結(jié)構(gòu)化從而在復(fù)雜選項(xiàng)中提供一個(gè)相對(duì)客觀、透明的比較框架。核心問題特征問題涉及對(duì)多個(gè)方案、對(duì)象或政策進(jìn)行“排序”、“評(píng)分”、“優(yōu)選”評(píng)價(jià)標(biāo)準(zhǔn)是多方面的、且重要性可能不同。經(jīng)典代表層次分析法 (AHP)通過構(gòu)建層次結(jié)構(gòu)目標(biāo)、準(zhǔn)則、方案進(jìn)行兩兩比較利用矩陣特征向量來確定各層元素的權(quán)重最終合成得到總排序。它的優(yōu)勢(shì)在于能將決策者的主觀判斷進(jìn)行量化。模糊綜合評(píng)價(jià)當(dāng)評(píng)價(jià)標(biāo)準(zhǔn)本身具有“模糊性”例如“環(huán)境很好”、“成本較高”時(shí)利用模糊數(shù)學(xué)的隸屬度函數(shù)來處理特別適合處理定性指標(biāo)多的評(píng)價(jià)問題。數(shù)據(jù)包絡(luò)分析 (DEA)用于評(píng)價(jià)具有多輸入、多輸出的同類部門決策單元的相對(duì)有效性。它不需要預(yù)先設(shè)定權(quán)重而是通過線性規(guī)劃來為每個(gè)被評(píng)價(jià)單元尋找最有利的權(quán)重從而計(jì)算其相對(duì)效率。選型實(shí)戰(zhàn)心得AHP的成敗在于判斷矩陣構(gòu)造判斷矩陣時(shí)一定要確保決策者或你的理解是一致的。經(jīng)常檢查判斷矩陣的一致性比率(CR)如果CR0.1說明判斷存在邏輯矛盾需要調(diào)整。一個(gè)小技巧是不要一次性比較所有因素可以分組、分階段進(jìn)行。權(quán)重的敏感性分析必不可少評(píng)價(jià)結(jié)果嚴(yán)重依賴于各準(zhǔn)則的權(quán)重。因此完成評(píng)價(jià)后必須進(jìn)行敏感性分析微調(diào)權(quán)重觀察排名是否會(huì)發(fā)生逆轉(zhuǎn)。這能告訴你這個(gè)決策的“穩(wěn)健性”如何哪些準(zhǔn)則是關(guān)鍵影響因子。DEA的結(jié)果是“相對(duì)”的DEA得出的有效單元效率值為1只是相對(duì)于參與評(píng)價(jià)的這個(gè)樣本集合而言的。增加或減少一個(gè)決策單元結(jié)果可能會(huì)變化。所以樣本的選擇要具有代表性。2.4 關(guān)聯(lián)與網(wǎng)絡(luò)分析類模型洞察復(fù)雜系統(tǒng)的結(jié)構(gòu)與關(guān)系當(dāng)你的研究對(duì)象內(nèi)部存在復(fù)雜的連接、交互、影響關(guān)系時(shí)你需要這類模型來揭示其網(wǎng)絡(luò)結(jié)構(gòu)和動(dòng)力學(xué)特性。其核心心智模型是將系統(tǒng)抽象為“點(diǎn)”和“邊”構(gòu)成的圖通過分析圖的拓?fù)湫再|(zhì)來理解系統(tǒng)的功能、脆弱性和演化規(guī)律。核心問題特征問題中實(shí)體如人、城市、物種、論文之間的“關(guān)系”如合作、交通、捕食、引用是分析的重點(diǎn)。經(jīng)典代表圖論模型提供了一系列度量指標(biāo)如度中心性連接數(shù)、介數(shù)中心性橋梁作用、接近中心性信息傳遞效率等來識(shí)別網(wǎng)絡(luò)中的關(guān)鍵節(jié)點(diǎn)。聚類分析如K-means層次聚類。用于根據(jù)樣本間的相似度將樣本自動(dòng)分組發(fā)現(xiàn)數(shù)據(jù)內(nèi)在的類別結(jié)構(gòu)。在網(wǎng)絡(luò)中可以用于發(fā)現(xiàn)“社區(qū)”內(nèi)部連接緊密、外部連接稀疏的節(jié)點(diǎn)群。PageRank算法不僅是谷歌的基石也是一種通用的網(wǎng)絡(luò)節(jié)點(diǎn)重要性排序算法。其思想是一個(gè)節(jié)點(diǎn)的重要性取決于指向它的其他節(jié)點(diǎn)的重要性。選型實(shí)戰(zhàn)心得網(wǎng)絡(luò)構(gòu)建是第一步也是藝術(shù)如何定義“邊”是基于合作次數(shù)、流量大小還是共現(xiàn)關(guān)系邊的權(quán)重如何設(shè)定閾值如何選擇不同的構(gòu)建方式會(huì)得到截然不同的網(wǎng)絡(luò)從而影響后續(xù)所有分析結(jié)論。這部分需要緊密結(jié)合實(shí)際問題背景來反復(fù)斟酌??梢暬菑?qiáng)大的分析工具不要只盯著指標(biāo)數(shù)字。將網(wǎng)絡(luò)可視化出來往往能直觀地發(fā)現(xiàn)一些意想不到的結(jié)構(gòu)特征比如核心-邊緣結(jié)構(gòu)、長鏈結(jié)構(gòu)等。Gephi、Cytoscape等工具在這方面非常有用。警惕“相關(guān)不等于因果”無論是關(guān)聯(lián)規(guī)則挖掘還是網(wǎng)絡(luò)相關(guān)性分析發(fā)現(xiàn)的都只是統(tǒng)計(jì)上的關(guān)聯(lián)。要推斷因果關(guān)系需要更嚴(yán)謹(jǐn)?shù)膶?shí)驗(yàn)設(shè)計(jì)或因果推斷模型如格蘭杰因果檢驗(yàn)、結(jié)構(gòu)方程模型不能輕下結(jié)論。3. 從問題到模型一個(gè)完整的實(shí)戰(zhàn)推演流程了解了工具箱里有什么接下來最關(guān)鍵的一步就是如何針對(duì)一個(gè)具體問題選對(duì)并用好工具。我總結(jié)了一個(gè)四步推演流程它幫助我在多次建模中理清了思路。3.1 第一步問題剖析與目標(biāo)量化拿到問題不要急著想模型。先像偵探一樣剖析問題。剝離場景抓住本質(zhì)忽略問題中具體的行業(yè)背景交通、物流、金融用最抽象的數(shù)學(xué)語言重新描述它。例如“不同倉庫向不同門店配送貨物如何安排運(yùn)輸計(jì)劃使總成本最低” 抽象后就是“在供應(yīng)量、需求量和運(yùn)輸成本已知的矩陣下求一個(gè)運(yùn)輸量矩陣使得總成本最小?!?這立刻指向了“運(yùn)輸問題”是線性規(guī)劃的一個(gè)特例。明確決策變量你要決定的是什么是路徑的選擇0-1變量是資源的分配量連續(xù)變量還是模型的參數(shù)用數(shù)學(xué)符號(hào)如x, y, z清晰地定義它們。量化目標(biāo)函數(shù)那個(gè)“最好”到底是什么是單一目標(biāo)還是多個(gè)目標(biāo)用包含決策變量的數(shù)學(xué)表達(dá)式寫出來。如果是多目標(biāo)要思考是將其轉(zhuǎn)化為單目標(biāo)如加權(quán)求和還是采用帕累托最優(yōu)的思路。厘清約束條件把所有“必須滿足”的條件列出來。資源上限、需求下限、邏輯關(guān)系如果A則B、物理定律等。這是模型符合現(xiàn)實(shí)的關(guān)鍵。注意這個(gè)階段一定要和問題提出方反復(fù)溝通確認(rèn)。很多時(shí)候他們對(duì)目標(biāo)的描述是模糊的“既要快又要省”對(duì)約束的認(rèn)知是不全的。你的首要任務(wù)就是通過提問幫助他們把這些模糊的想法變得清晰、可量化。3.2 第二步模型初選與可行性評(píng)估根據(jù)第一步的抽象結(jié)果對(duì)照第二節(jié)的四大類別進(jìn)行初步匹配。匹配特征如果你的抽象結(jié)果里有明確的最大/最小化目標(biāo)和一系列等式/不等式優(yōu)先考慮優(yōu)化模型。如果你有大量輸入-輸出數(shù)據(jù)對(duì)目標(biāo)是找到一個(gè)映射函數(shù)那就是預(yù)測(cè)/分類模型。如果你需要綜合多個(gè)指標(biāo)對(duì)方案排序考慮評(píng)價(jià)模型。如果你的數(shù)據(jù)點(diǎn)之間存在豐富的相互關(guān)系則看向網(wǎng)絡(luò)/關(guān)聯(lián)模型。評(píng)估數(shù)據(jù)可得性這是模型能否落地的現(xiàn)實(shí)瓶頸。優(yōu)化模型需要目標(biāo)函數(shù)和約束中的系數(shù)成本、資源量等預(yù)測(cè)模型需要大量高質(zhì)量的歷史數(shù)據(jù)評(píng)價(jià)模型需要準(zhǔn)則權(quán)重和方案得分?jǐn)?shù)據(jù)。如果關(guān)鍵數(shù)據(jù)缺失要么退回第一步重新協(xié)商問題范圍要么考慮采用假設(shè)數(shù)據(jù)敏感性分析的方式但必須在報(bào)告中明確說明。評(píng)估計(jì)算可行性對(duì)于大規(guī)模整數(shù)規(guī)劃、復(fù)雜的非線性規(guī)劃或深度神經(jīng)網(wǎng)絡(luò)你需要評(píng)估手頭的計(jì)算資源個(gè)人電腦、服務(wù)器和時(shí)限能否承受。有時(shí)一個(gè)能得到80分答案的簡單模型遠(yuǎn)比一個(gè)理論上完美但算不出來的復(fù)雜模型更有價(jià)值。3.3 第三步模型建立、求解與檢驗(yàn)選定方向后進(jìn)入正式建模。建立數(shù)學(xué)模型使用規(guī)范的數(shù)學(xué)語言將目標(biāo)函數(shù)和約束條件完整、準(zhǔn)確地書寫出來。這一步要特別注意單位的統(tǒng)一和量綱的一致性。轉(zhuǎn)化為可求解形式將數(shù)學(xué)模型“翻譯”成求解器或算法能理解的形式。比如將模型輸入到Lingo、MATLAB的優(yōu)化工具箱或使用Python的Scikit-learn庫、Pyomo建模框架。這里涉及到具體的編程實(shí)現(xiàn)。求解與結(jié)果提取運(yùn)行求解器獲取結(jié)果。不僅要關(guān)注最優(yōu)值更要仔細(xì)解讀決策變量的取值——它才是具體的行動(dòng)方案。模型檢驗(yàn)與調(diào)試合理性檢驗(yàn)得到的結(jié)果是否符合常識(shí)運(yùn)輸量是否為負(fù)分配比例加起來超過100%了嗎一個(gè)違反基本常識(shí)的結(jié)果通常意味著模型假設(shè)或數(shù)據(jù)輸入有誤。極端情況測(cè)試將某些參數(shù)推到極端如資源無限大、需求為0看模型結(jié)果是否如預(yù)期般變化。敏感性分析這是體現(xiàn)建模者專業(yè)性的關(guān)鍵一步。分析當(dāng)關(guān)鍵參數(shù)成本、資源量、權(quán)重在小范圍內(nèi)波動(dòng)時(shí)最優(yōu)解和最優(yōu)值的變化是否劇烈。如果最優(yōu)方案對(duì)某個(gè)參數(shù)極其敏感那么在實(shí)際應(yīng)用中就需要對(duì)該參數(shù)的準(zhǔn)確性給予最高關(guān)注。3.4 第四步結(jié)果解釋與模型反饋模型不是游戲的終點(diǎn)而是輔助決策的起點(diǎn)。用業(yè)務(wù)語言解釋數(shù)學(xué)結(jié)果你不能只給決策者看一堆數(shù)字和圖表。你需要將“x1150.3”解釋為“建議從A倉庫向甲門店配送150件貨物”并說明為什么這樣安排是好的。匯報(bào)核心結(jié)論與洞見除了最優(yōu)方案更重要的是通過建模過程發(fā)現(xiàn)了什么規(guī)律哪個(gè)約束是瓶頸哪個(gè)成本項(xiàng)對(duì)總成本影響最大這些洞見往往比方案本身更有價(jià)值。提出穩(wěn)健性建議與風(fēng)險(xiǎn)提示基于敏感性分析指出當(dāng)前方案在何種情況下依然有效在何種情況下可能需要調(diào)整。明確模型的局限性基于了哪些假設(shè)忽略了哪些因素這是對(duì)決策者負(fù)責(zé)的表現(xiàn)。模型迭代根據(jù)決策者的反饋和新的認(rèn)識(shí)你可能需要回到第一步或第二步調(diào)整目標(biāo)、增加約束、細(xì)化模型開始新一輪的建模循環(huán)。建模是一個(gè)螺旋式上升的過程。4. 跨越理論與實(shí)踐的鴻溝那些模型手冊(cè)里不會(huì)寫的坑書本上的模型干凈漂亮但現(xiàn)實(shí)應(yīng)用卻滿是荊棘。下面分享幾個(gè)我印象深刻的“踩坑”經(jīng)歷和由此得來的經(jīng)驗(yàn)。4.1 坑一對(duì)“最優(yōu)解”的盲目崇拜與應(yīng)對(duì)在一次生產(chǎn)排程項(xiàng)目中我們費(fèi)盡周折終于用混合整數(shù)規(guī)劃求出了一個(gè)理論上總成本最低的排產(chǎn)計(jì)劃。當(dāng)我們興高采烈地將計(jì)劃交給車間主任時(shí)他看了一眼就皺起了眉頭“這個(gè)計(jì)劃不行它讓3號(hào)機(jī)臺(tái)連續(xù)工作18個(gè)小時(shí)中間只換了產(chǎn)品沒停機(jī)實(shí)際上去年這臺(tái)機(jī)子就因?yàn)轭愃瓢才懦鲞^故障修了三天?!苯逃?xùn)數(shù)學(xué)上的“最優(yōu)解”可能在實(shí)際中并不可行因?yàn)樗鼰o法編碼所有現(xiàn)實(shí)的、隱性的約束如設(shè)備隱性故障史、工人操作習(xí)慣、非正式的物料交接規(guī)則。應(yīng)對(duì)策略將“最優(yōu)”視為“基準(zhǔn)”不要把它當(dāng)作必須執(zhí)行的圣旨而是作為一個(gè)衡量其他方案的基準(zhǔn)線。它的價(jià)值在于告訴你在理想的數(shù)學(xué)世界里成本可以降到多低。引入“軟約束”和懲罰項(xiàng)對(duì)于無法嚴(yán)格量化但很重要的因素如設(shè)備負(fù)荷均衡可以將其作為目標(biāo)的一部分而不是硬約束。例如在原目標(biāo)函數(shù)中加入“各機(jī)臺(tái)負(fù)載方差”的懲罰項(xiàng)在成本和均衡性之間尋求妥協(xié)。設(shè)計(jì)“鄰域搜索”或“多方案推薦”在求得最優(yōu)解后可以主動(dòng)搜索其附近目標(biāo)值稍差一點(diǎn)的其他可行解提供給決策者多個(gè)選擇。有時(shí)候一個(gè)成本高2%但操作上更順暢、風(fēng)險(xiǎn)更低的方案才是真正的“好”方案。4.2 坑二數(shù)據(jù)預(yù)處理中的“幽靈”與“魔術(shù)”在做一個(gè)銷量預(yù)測(cè)項(xiàng)目時(shí)我們收集了過去五年的每日銷量數(shù)據(jù)直接扔進(jìn)LSTM神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練。模型在訓(xùn)練集上表現(xiàn)堪稱完美R2達(dá)到0.99我們一度以為發(fā)現(xiàn)了“預(yù)測(cè)神器”。然而在預(yù)測(cè)未來一個(gè)月銷量時(shí)結(jié)果卻完全失真波動(dòng)巨大。教訓(xùn)我們忽略了數(shù)據(jù)中兩個(gè)致命問題第一數(shù)據(jù)包含多個(gè)“幽靈”異常值如某天系統(tǒng)故障記錄為0某天促銷記錄為峰值第二我們無意中犯了“數(shù)據(jù)泄露”的錯(cuò)誤——在做歸一化處理時(shí)使用了包含未來數(shù)據(jù)在內(nèi)的全局最大值和最小值這相當(dāng)于讓模型在訓(xùn)練時(shí)“偷看”了答案。應(yīng)對(duì)策略異常值處理不是簡單的刪除對(duì)于異常值首先要區(qū)分它是“錯(cuò)誤數(shù)據(jù)”還是“罕見但真實(shí)的事件”。對(duì)于錯(cuò)誤數(shù)據(jù)可以修正或刪除對(duì)于真實(shí)事件如促銷、斷貨更好的方法是為其引入一個(gè)指示變量啞變量告訴模型“這一天是特殊的”而不是粗暴地抹平它。嚴(yán)格遵守時(shí)序數(shù)據(jù)預(yù)處理流程對(duì)于時(shí)間序列數(shù)據(jù)任何預(yù)處理如歸一化、差分都必須在每個(gè)訓(xùn)練樣本內(nèi)部獨(dú)立進(jìn)行或者使用滾動(dòng)窗口的方式確保處理時(shí)只用到了歷史信息。一個(gè)安全的做法是先按時(shí)間劃分訓(xùn)練集和測(cè)試集然后只基于訓(xùn)練集計(jì)算歸一化參數(shù)再用這些參數(shù)去轉(zhuǎn)換訓(xùn)練集和測(cè)試集??梢暬梢暬梢暬诮G盎〞r(shí)間繪制數(shù)據(jù)的時(shí)間序列圖、分布直方圖、箱線圖。很多數(shù)據(jù)問題眼睛一看就能發(fā)現(xiàn)比任何算法都管用。4.3 坑三復(fù)雜模型的“黑箱”困境與可解釋性博弈我們?cè)眉蓪W(xué)習(xí)模型如隨機(jī)森林、XGBoost來預(yù)測(cè)客戶流失模型精度很高。但當(dāng)業(yè)務(wù)部門問“為什么預(yù)測(cè)這個(gè)客戶會(huì)流失我們?cè)撛趺赐炝簟睍r(shí)我們卻很難給出清晰、 actionable可行動(dòng)的解釋。只能說“根據(jù)模型這個(gè)客戶的特征組合導(dǎo)致流失概率高”這等于沒說。教訓(xùn)在很多商業(yè)決策場景中模型的“可解釋性”和“預(yù)測(cè)精度”同樣重要甚至更重要。人們需要理解模型做判斷的邏輯才能產(chǎn)生信任并據(jù)此采取行動(dòng)。應(yīng)對(duì)策略建立模型選擇的“精度-可解釋性”天平在項(xiàng)目開始前就要和業(yè)務(wù)方明確對(duì)可解釋性的要求有多高。如果要求高可能就需要犧牲一點(diǎn)精度優(yōu)先選擇邏輯回歸、決策樹深度不宜過深等天生可解釋的模型。善用事后解釋工具對(duì)于無法避免的復(fù)雜模型可以使用LIME、SHAP等模型解釋工具。它們能針對(duì)單個(gè)預(yù)測(cè)樣本給出每個(gè)特征對(duì)該次預(yù)測(cè)結(jié)果的貢獻(xiàn)度。例如SHAP值可以告訴你“對(duì)于客戶A他最近一次消費(fèi)間隔時(shí)間過長”這一特征使其流失概率提升了30個(gè)百分點(diǎn)。這樣的解釋就非常有價(jià)值。采用“白盒黑盒”混合策略先用可解釋的模型如線性模型抓住主要、穩(wěn)定的規(guī)律再用復(fù)雜模型作為補(bǔ)充去捕捉剩余的、非線性的復(fù)雜模式。在匯報(bào)時(shí)可以重點(diǎn)解釋白盒模型發(fā)現(xiàn)的核心驅(qū)動(dòng)因素。5. 工具鏈與資源讓你的建模效率飛起來工欲善其事必先利其器。選擇合適的軟件工具和學(xué)習(xí)資源能極大提升建模效率和成功率。5.1 軟件工具選型因地制宜各取所長沒有最好的工具只有最適合當(dāng)前場景的工具。下面是一個(gè)簡單的選型參考任務(wù)類型推薦工具優(yōu)勢(shì)適用場景/階段快速原型與教學(xué)MATLAB工具箱豐富語法貼近數(shù)學(xué)表達(dá)可視化強(qiáng)大。算法驗(yàn)證、課程學(xué)習(xí)、中小規(guī)模優(yōu)化和仿真。商業(yè)軟件成本較高。通用建模與數(shù)據(jù)分析Python (生態(tài))開源免費(fèi)庫極其豐富NumPy, Pandas, Scikit-learn, Pyomo, CVXPY等社區(qū)活躍從數(shù)據(jù)清洗到復(fù)雜機(jī)器學(xué)習(xí)一站式解決。當(dāng)前絕大多數(shù)數(shù)學(xué)建模競賽和工業(yè)界應(yīng)用的首選。需要一定的編程基礎(chǔ)。專業(yè)運(yùn)籌優(yōu)化專用求解器/語言求解效率極高對(duì)大規(guī)模復(fù)雜優(yōu)化問題支持好。工業(yè)級(jí)的大規(guī)模規(guī)劃問題。如Gurobi, CPLEX求解器AMPL, GAMS建模語言。通常需要商業(yè)許可。統(tǒng)計(jì)分析R語言統(tǒng)計(jì)建模功能全面且嚴(yán)謹(jǐn)繪圖系統(tǒng)ggplot2精美在學(xué)術(shù)界廣泛使用。側(cè)重于統(tǒng)計(jì)檢驗(yàn)、回歸分析、時(shí)間序列等傳統(tǒng)統(tǒng)計(jì)領(lǐng)域。交互式探索與報(bào)告Jupyter Notebook / R Markdown將代碼、結(jié)果、圖文說明融合在一個(gè)文檔中非常適合探索性分析和生成可復(fù)現(xiàn)的報(bào)告。數(shù)據(jù)分析的全過程特別是需要向他人展示分析邏輯和結(jié)果時(shí)。個(gè)人建議對(duì)于初學(xué)者和絕大多數(shù)應(yīng)用場景Python是當(dāng)前最均衡、最強(qiáng)大的選擇。它的學(xué)習(xí)曲線相對(duì)平緩而一旦掌握幾乎可以應(yīng)對(duì)建模中遇到的所有挑戰(zhàn)。從數(shù)據(jù)爬取、清洗、分析到建立優(yōu)化、預(yù)測(cè)、評(píng)價(jià)模型再到最終的可視化和報(bào)告生成Python都有成熟的庫支持。5.2 學(xué)習(xí)路徑與資源推薦數(shù)學(xué)建模是典型的交叉學(xué)科能力需要數(shù)學(xué)知識(shí)、編程技能和領(lǐng)域常識(shí)的三結(jié)合。夯實(shí)數(shù)理基礎(chǔ)重點(diǎn)復(fù)習(xí)線性代數(shù)矩陣運(yùn)算、特征值、概率統(tǒng)計(jì)分布、檢驗(yàn)、回歸、最優(yōu)化理論凸優(yōu)化基礎(chǔ)和微分方程。不需要深究所有數(shù)學(xué)證明但要理解核心概念和直觀意義。掌握一門核心編程語言如前所述強(qiáng)烈推薦Python。學(xué)習(xí)路徑可以是Python基礎(chǔ)語法 → NumPy/Pandas (數(shù)據(jù)處理) → Matplotlib/Seaborn (可視化) → Scikit-learn (機(jī)器學(xué)習(xí)) → 根據(jù)方向選學(xué)Pyomo/Statsmodels等庫。在實(shí)戰(zhàn)中學(xué)習(xí)經(jīng)典教材《數(shù)學(xué)建模》姜啟源等著是很好的入門框架書。競賽真題全國大學(xué)生數(shù)學(xué)建模競賽CUMCM、美國大學(xué)生數(shù)學(xué)建模競賽MCM/ICM的歷年賽題和優(yōu)秀論文是絕佳的學(xué)習(xí)材料。重點(diǎn)看別人是如何分析問題、簡化假設(shè)、建立模型、解釋結(jié)果的。開源項(xiàng)目與社區(qū)GitHub上有大量完整的建模項(xiàng)目代碼。在Kaggle、天池等數(shù)據(jù)科學(xué)平臺(tái)上參加比賽是錘煉實(shí)戰(zhàn)能力的最高效方式。培養(yǎng)“建模思維”多觀察生活中的現(xiàn)象嘗試用數(shù)學(xué)語言去描述它。比如食堂排隊(duì)問題可以建模為排隊(duì)論選擇出行路線可以建模為最短路徑問題。這種日常的思維訓(xùn)練至關(guān)重要。最后我想說數(shù)學(xué)建模的魅力恰恰在于它沒有“標(biāo)準(zhǔn)答案”和“萬能模型”。它是一場與真實(shí)世界復(fù)雜性持續(xù)對(duì)話的旅程。你所擁有的“常用模型”工具箱是你啟程的裝備。而真正決定你能走多遠(yuǎn)的是你定義問題的洞察力、簡化現(xiàn)實(shí)的抽象力、以及讓模型服務(wù)于決策的溝通力。每一次建模都是一次獨(dú)特的創(chuàng)造。希望這篇文章梳理的工具箱和避坑指南能讓你在接下來的創(chuàng)造之旅中多一份從容少一點(diǎn)迷茫。