河北省第三届研究生数学建模B题(二等)交通检测器数据质量控制及预测
https://github.com/QInzhengk/Math-Model-and-Machine-Learning
交通檢測器數(shù)據(jù)質(zhì)量控制及預(yù)測
- 題目及摘要
- 一、任務(wù)重述 1
- 二、任務(wù)的分析 2
- 三、模型假設(shè) 3
- 四、符號說明 3
- 五、模型的建立與求解 3
- 5.1 任務(wù)一:數(shù)據(jù)清洗與缺失值填補(bǔ) 3
- 5.1.1求解思路 3
- 5.1.2數(shù)據(jù)清洗 4
- 5.1.3缺失值的線性插值模型的建立與求解 8
- 5.2任務(wù)二:交通參數(shù)-時間線性擬合模型和交通參數(shù)多元回歸模型 9
- 5.2.1求解思路 9
- 5.2.2數(shù)據(jù)清洗模型的建立與求解 9
- 5.2.3交通參數(shù)-時間線性最小二乘擬合模型的建立與求解 10
- 5.2.4多元回歸分析模型的建立與求解 16
- 5.2.5數(shù)據(jù)填補(bǔ) 21
- 5.3 任務(wù)三:非平穩(wěn)時間序列預(yù)測模型 22
- 5.3.1求解思路 22
- 5.3.2 ARIMA模型的建立與求解 22
- 六、模型評價(jià)與改進(jìn) 26
- 七、參考文獻(xiàn) 27
- 八、附錄 28
- 未完待續(xù)(更新時間:2022/4/13)
題目及摘要
關(guān)鍵詞:數(shù)據(jù)清洗 線性插值 線性最小二乘擬合 多元回歸分析 時間序列預(yù)測
一、任務(wù)重述 1
微信公眾號:數(shù)學(xué)建模與人工智能
二、任務(wù)的分析 2
任務(wù)一的分析:任務(wù)一是一個關(guān)于數(shù)據(jù)處理的問題,要求我們對于給定原始數(shù)據(jù),識別異常、冗余或丟失等問題數(shù)據(jù),并完成對問題數(shù)據(jù)的修正及缺失數(shù)據(jù)的填補(bǔ)。對此,首先觀察所給出的原始數(shù)據(jù),發(fā)現(xiàn)在時間存在大量的缺失值。其次,還可能存在著冗余、異?;騺G失數(shù)據(jù)。通過對原始數(shù)據(jù)的特征分析,清洗數(shù)據(jù),對冗余值進(jìn)行處理,利用標(biāo)準(zhǔn)差法和箱線圖法對異常數(shù)據(jù)進(jìn)行修正,接著,利用線性插值對缺失值進(jìn)行填補(bǔ)。
任務(wù)二的分析:任務(wù)二可以分解成兩部分,第一部分是求解兩個變量間的關(guān)系,第二部分是求解多變量之間的關(guān)系,并對data 2中的缺失值進(jìn)行填補(bǔ)。第一部分的自變量為時間,因變量為流量、速度和時間占有率三個參數(shù)。對于大樣本的數(shù)據(jù),通常采用線性擬合的辦法,獲得一個最佳擬合函數(shù),表達(dá)出因變量隨自變量的變化規(guī)律。第二部分的因變量可以為時間占有率,那么自變量即是流量和速度。探索三個變量之間的關(guān)系可以使用多元回歸分析,得到三個變量的回歸系數(shù),進(jìn)一步得到三個變量間的數(shù)學(xué)模型。最后,利用得到的數(shù)學(xué)模型對給定數(shù)據(jù)樣本中的缺失值進(jìn)行填補(bǔ)。
任務(wù)三的分析:任務(wù)三要求我們根據(jù)交通系統(tǒng)的特點(diǎn)建立適用、合理的預(yù)測模型,并將data 3中缺失的速度、流量和時間占有率的數(shù)據(jù)進(jìn)行補(bǔ)充。首先,對于基于時間按照先后順序排列的某大樣本的某種統(tǒng)計(jì)指標(biāo)的預(yù)測問題,常用的方法有神經(jīng)網(wǎng)絡(luò)預(yù)測方法和時間序列預(yù)測等方法。其中,時間序列預(yù)測模型包括平穩(wěn)時間序列模型和非平穩(wěn)時間序列模型。在任務(wù)二中,探討了交通系統(tǒng)在時間維度上具有較強(qiáng)的依賴性和周期性,因此,可以合理的假設(shè),交通系統(tǒng)在更短的時間內(nèi)也可能具備一定的周期性。因此,針對于本題,考慮使用非平穩(wěn)時間序列預(yù)測。
三、模型假設(shè) 3
(1)數(shù)據(jù)樣本中不存在不精確數(shù)據(jù);
(2)該路段可能有交通事故,或車輛超速行駛等情況的發(fā)生;
(3)該地區(qū),公路的最高車速限制為60 km?h^-1;
(4)該地區(qū)城市道路和公路的設(shè)計(jì)通行能力為1000-4000 veh?h-^1;
四、符號說明 3
| vbef | 代表原始數(shù)據(jù)中的速度 |
| qbef | 代表原始數(shù)據(jù)中的流量 |
| v | 代表速度 |
| q | 代表流量 |
| O | 代表占用率 |
| outlier | 回歸系數(shù) |
| R | 復(fù)相關(guān)系數(shù) |
| d | 差分次數(shù) |
| p | 代自由回歸項(xiàng)數(shù) |
| q | 滑動平均項(xiàng)數(shù) |
五、模型的建立與求解 3
5.1 任務(wù)一:數(shù)據(jù)清洗與缺失值填補(bǔ) 3
5.1.1求解思路 3
任務(wù)一要求將一個給定的交通數(shù)據(jù)樣本中存在的問題數(shù)據(jù)進(jìn)行修正,并對缺失值進(jìn)行填補(bǔ)。問題數(shù)據(jù)樣本一般主要包含三種“臟數(shù)據(jù)”,分別是丟失數(shù)據(jù)、冗余數(shù)據(jù)和異常數(shù)據(jù)。首先,在統(tǒng)一時間步長的基礎(chǔ)上,要建立問題數(shù)據(jù)的判別規(guī)則,分別篩選出樣本中的丟失數(shù)據(jù),冗余數(shù)據(jù)和異常數(shù)據(jù),并相應(yīng)地對其進(jìn)行補(bǔ)齊、約簡和替換,保留正確數(shù)據(jù)。接著,利用缺失值填補(bǔ)模型,將清洗后的數(shù)據(jù)進(jìn)行缺失值填補(bǔ)。最終,得到具有完整數(shù)據(jù)的數(shù)據(jù)樣本。解題思路示意圖如下圖1.1所示。
圖1.1 數(shù)據(jù)預(yù)處理流程圖
5.1.2數(shù)據(jù)清洗 4
5.1.2.1冗余數(shù)據(jù)與丟失數(shù)據(jù)清洗模型的建立與求解
數(shù)據(jù)幾乎沒有完美的,大多數(shù)數(shù)據(jù)都存在著質(zhì)量問題,因此,數(shù)據(jù)質(zhì)量分析是數(shù)據(jù)分析中的至關(guān)重要的一步,是之后進(jìn)行一切探索的基礎(chǔ)。[1]對于實(shí)際生活中交通監(jiān)測,在ITS數(shù)據(jù)收集過程中,由于信號不穩(wěn)定及路面狀況復(fù)雜等原因,得到的數(shù)據(jù)經(jīng)常出現(xiàn)異常、丟失、冗余等問題。比如,在較少車流量的情況下,占用率卻偏高,這種不符合實(shí)際情況以及不復(fù)合期望范圍內(nèi)的現(xiàn)象,便是數(shù)據(jù)異常;其次,它也違反了交通流理論。而當(dāng)車輛密度過大,或者交通檢測器掃描不穩(wěn)定,信號傳輸、存儲設(shè)備出現(xiàn)故障等情況發(fā)生時,則經(jīng)常導(dǎo)致數(shù)據(jù)的丟失。數(shù)據(jù)冗余是指,當(dāng)某段監(jiān)測路段或交叉路口布置的交通檢測器密度過高,導(dǎo)致對同一單位的重復(fù)監(jiān)測,從而引起的某時間點(diǎn)集合中的數(shù)據(jù)具有高相似性的現(xiàn)象。當(dāng)這些“臟數(shù)據(jù)”包含在提供到交通調(diào)控應(yīng)用的數(shù)據(jù)時,必定會引起巨大的安全隱患。因此,在利用原始數(shù)據(jù)進(jìn)行分析處理時,必須要先清洗數(shù)據(jù),即,補(bǔ)齊丟失數(shù)據(jù),修正異?;蛉哂嗟臄?shù)據(jù)。[2]
首先,觀察原始數(shù)據(jù),根據(jù)每5 min取值,取時時長從1月1日00:00到1月31日00:00,共30天,因此,理論上應(yīng)共有302460/5=8640組數(shù)據(jù),而監(jiān)測到僅有8636組數(shù)據(jù),由此可見,樣本丟失了4組數(shù)據(jù)。將一段時間內(nèi)收集得到數(shù)據(jù)劃分為一個時間段,例如,將08:00:00到08:05:00中得到數(shù)據(jù)都定義為08:00這一時段的數(shù)據(jù),利用python對給定數(shù)據(jù)中所有時間段進(jìn)行掃描,檢索是否有數(shù)據(jù)丟失,如有丟失,則進(jìn)行均值填補(bǔ)。掃描結(jié)果得出,data 1中存在4組丟失數(shù)據(jù),分別為:1月9日0:10,1月13日10:40,1月26日13:40和1月26日13:45。
接著,對原始數(shù)據(jù)進(jìn)行值分析,這有利于在總體上展示數(shù)據(jù)的自然分布情況,例如,數(shù)據(jù)的唯一值、變量中的空值等。此模型中,具體統(tǒng)計(jì)信息如表1.1所示。
表格 1.1 數(shù)據(jù)統(tǒng)計(jì)描述
| 總記錄數(shù) | 8640 | 8640 | 8640 |
| 非空值數(shù) | 5981 | 6045 | 6045 |
| 空值占比 | 30.77% | 30.03% | 30.03% |
| 平均值 | 65.89 | 63.68 | 10.32 |
| 標(biāo)準(zhǔn)差 | 29.96 | 39.03 | 10.00 |
| 最小值 | 3.55 | 0 | 0 |
| 下四分位數(shù) | 52.70 | 30.00 | 3.50 |
| 中值 | 57.61 | 64.00 | 8.24 |
| 上四分位數(shù) | 60.74 | 91.00 | 12.60 |
| 最大值 | 142.74 | 182.15 | 107.65 |
由上表可以發(fā)現(xiàn),三個參數(shù)的空值占比均為30%左右,處于5%~85%范圍內(nèi),說明缺失值占據(jù)了總記錄數(shù)的較大比例,如果使用刪除法會導(dǎo)致樣本量減少,削弱統(tǒng)計(jì)功效。因此,應(yīng)當(dāng)選擇替換法對缺失值進(jìn)行填補(bǔ)。此外,原始數(shù)據(jù)中可能存在著冗余數(shù)據(jù),冗余數(shù)據(jù)的存在會影響數(shù)據(jù)分析和挖掘結(jié)果的準(zhǔn)確性。因此,接下來對數(shù)據(jù)進(jìn)行重復(fù)觀測處理,在Pandas中使用duplicated方法,返回?cái)?shù)據(jù)行每一行的檢驗(yàn)結(jié)果,即每一行返回一個bool值,使用drop. Duplicates方法移除重復(fù)值。結(jié)果顯示,給定的原始數(shù)據(jù)中不存在冗余數(shù)據(jù)。因此,接下來對原始數(shù)據(jù)進(jìn)行清洗。
5.1.2.2異常數(shù)據(jù)清洗模型的建立與求解
1. 箱線圖法
關(guān)于異常值的檢測與處理,箱線圖是一種很常用的方法。箱線圖是指主要利用一組數(shù)據(jù)的上、下邊緣,中位數(shù)和上、下四分位數(shù)來展示一組數(shù)據(jù)的離群信息以及數(shù)據(jù)是否對稱等信息的一種統(tǒng)計(jì)方法。應(yīng)當(dāng)注意,離群數(shù)據(jù)不一定都是異常數(shù)據(jù)。這里,箱線圖法的判別公式以及判別過程如圖1.2所示,其中,Q1為下四分?jǐn)?shù)(25%),Q3為上四分?jǐn)?shù)(75%),IQR為上四分位數(shù)與下四分位數(shù)的差。
圖1.2 箱線圖判別流程圖
由上箱線圖法,結(jié)合python,對給定的原始數(shù)據(jù)進(jìn)行掃描,得到結(jié)果發(fā)現(xiàn)速度、流量和占用率的給定原始數(shù)據(jù)都存在異常值。速度、流量和占用率的直方圖和核密度圖如圖1.3所示,圖中的直方圖和核密度曲線顯示,數(shù)據(jù)分布形狀是有偏的。
圖1.3 直方圖和核密度曲線
最后,給出異常值處理前后的統(tǒng)計(jì)描述對比,如表1.2所示。根據(jù)箱線圖法得到速度、容量和占用率的上限臨界值分別為72.80,182.5和26.25,說明此模型對異常數(shù)據(jù)的修正標(biāo)定了一個合理的上限。此外,可以發(fā)現(xiàn)異常值的替換,不僅改變了給定的原始數(shù)據(jù)的均值,標(biāo)準(zhǔn)差和最大值,并且這些值改變后都降低了,說明此箱線圖法對異常值的修正具有效果的良好。例如,給定原始數(shù)據(jù)中的最大占用率為107.65%,這明顯不符合實(shí)際情況,屬于異常數(shù)據(jù)。經(jīng)替換后,現(xiàn)占用率為26.17%,符合客觀事實(shí)。
表1.2 異常值處理前后的統(tǒng)計(jì)描述對比
count mean std min 25% 50% 75% max 上限臨界
speed 替換前 5981 65.89 29.96 3.55 52.70 57.61 60.74 142.74 72.80
替換后 5981 55.10 11.57 3.55 52.70 57.61 60.74 67.4
volume 替換前 6045 63.68 39.03 0 30.00 64.00 91.00 182.15 182.5
替換后 6045 63.68 39.03 0 30.00 64.00 91.00 182.15
occupancy 替換前 6045 10.21 10.00 0 3.50 8.24 12.60 107.65 26.25
替換后 6045 9.45 7.28 0 3.50 8.24 12.60 26.17
2.閾值理論法
此外,根據(jù)交通流理論,地點(diǎn)平均速度v為0,流量q不為0;流量q為0,但占用率O和地點(diǎn)平均速度v同時不為0;占用率為0,流量大于設(shè)定值。[3]對于交通流模型,在閾值理論中,平均速度v的取值范圍為0 ≤ v ≤ fv?v1,其中,v1為道路的限制速度,單位為km?h^-1,fv為修正系數(shù),一般取1.25~1.5;流量q的取值范圍為0 ≤ q≤ fc?C?T/60,其中,C為道路通行能力,單位為veh?h-1; T為數(shù)據(jù)采集的時間間隔,單位為min;fc為修正系數(shù),一般取1.25~1.5;占用率O的取值范圍為0≤ O ≤100%。[4]這里,根據(jù)城市道路一般限速為60 km?h^-1,取修正系數(shù)fv=1.25,可得速度閾值為75 km?h^-1;道路通行能力取1520 veh?h^-1,fc取1.5,T為5 min,可得q的閾值為190 veh;根據(jù)實(shí)際情況推理,若路面保持暢通,則占用率O應(yīng)處于一個合理范圍,此處,將O閾值取為90%。根據(jù)以上得到的速度、容量和占用率閾值,設(shè)定異常值清洗規(guī)則,得到結(jié)果如圖1.4和表1.3所示。由圖1.4可以發(fā)現(xiàn),由實(shí)際情況通過計(jì)算出發(fā)得到的直方圖和核密度曲線與由箱線圖法得到的結(jié)果基本相似,這說明兩種方法得到的結(jié)果相似度高,模型具有較高的準(zhǔn)確性。
圖1.4 直方圖和核密度曲線
表1.3 異常值處理前后的統(tǒng)計(jì)描述對比
count mean std min 25% 50% 75% max
speed 替換前 5981 65.88 29.96 3.55 52.70 57.61 60.74 142.74
替換后 5981 56.43 13.17 3.55 52.70 57.61 60.74 74.06
volume 替換前 6045 63.68 39.03 0 30.00 64.00 91.00 182.15
替換后 6045 63.68 39.03 0 30.00 64.00 91.00 182.15
occupancy 替換前 6045 10.21 10.00 0 3.50 8.24 12.60 107.65
替換后 6045 10.30 9.85 0 3.50 8.24 12.60 86.93
5.1.3缺失值的線性插值模型的建立與求解 8
經(jīng)過對原始數(shù)據(jù)的清洗,數(shù)據(jù)的準(zhǔn)確性得到了很大的提高,在此基礎(chǔ)上,現(xiàn)將對缺失數(shù)據(jù)進(jìn)行填補(bǔ)。對于缺失數(shù)據(jù)的填補(bǔ),常用的方法為插值法,包括分段線性插值和分段二次插值等方法。
5.2任務(wù)二:交通參數(shù)-時間線性擬合模型和交通參數(shù)多元回歸模型 9
5.2.1求解思路 9
5.2.2數(shù)據(jù)清洗模型的建立與求解 9
5.2.3交通參數(shù)-時間線性最小二乘擬合模型的建立與求解 10
5.2.4多元回歸分析模型的建立與求解 16
5.2.5數(shù)據(jù)填補(bǔ) 21
5.3 任務(wù)三:非平穩(wěn)時間序列預(yù)測模型 22
5.3.1求解思路 22
5.3.2 ARIMA模型的建立與求解 22
六、模型評價(jià)與改進(jìn) 26
七、參考文獻(xiàn) 27
八、附錄 28
import pandas as pd a=pd.read_excel("end12.xlsx",usecols=range(1,4)) #提取第2列到第4列的數(shù)據(jù) b=a.values #提取其中的數(shù)據(jù) c=a.describe() #對數(shù)據(jù)進(jìn)行統(tǒng)計(jì)描述 print(c)import pandas as pd a=pd.read_excel("data 1.xlsx") print("是否存在重復(fù)觀測:",any(a.duplicated())) #輸出:True a.drop_duplicates(inplace=True) #inplace=True時,直接刪除a中的重復(fù)數(shù)據(jù) f=pd.ExcelWriter('data_1.xlsx') #創(chuàng)建文件對象 a.to_excel(f) #把a(bǔ)寫入新Excel文件中 f.save() #保存文件,數(shù)據(jù)才真正寫入Excel文件from pandas import read_excel import pandas as pd a=read_excel("data 2.xlsx") b=a.fillna(value={'speed':a.speed.interpolate(),'volume':a.volume.interpolate(),'occupancy':a.occupancy.interpolate()}) #使用線性插值替換 f=pd.ExcelWriter('data22.xlsx') #創(chuàng)建文件對象 b.to_excel(f) #把a(bǔ)寫入新Excel文件中 f.save() #保存文件,數(shù)據(jù)才真正寫入Excel文件from pandas import read_csv import numpy as np import pandas as pd import matplotlib.pyplot as plt a=read_csv("data 1.csv") mu=a.occupancy.mean() s=a.occupancy.std() print("標(biāo)準(zhǔn)差法異常值上限檢測:",any(a.occupancy>mu+2*s)) #輸出:True print("標(biāo)準(zhǔn)差法異常值下限檢測:",any(a.occupancy<mu-2*s)) #輸出:False Q1=a.occupancy.quantile(0.25) #計(jì)算下四分位數(shù) Q3=a.occupancy.quantile(0.75) #計(jì)算上四分位數(shù) IQR=Q3-Q1 print("箱線圖法異常值上限檢測:",any(a.occupancy>Q3+1.5*IQR)) #輸出:True print("箱線圖法異常值下限檢測:",any(a.occupancy<Q1-1.5*IQR)) #輸出:False plt.style.use('ggplot') #設(shè)置繪圖風(fēng)格 a.occupancy.plot(kind='hist',bins=30,density=True) #繪制直方圖 a.occupancy.plot(kind='kde') #繪制核密度曲線 plt.show() print("異常值替換前的數(shù)據(jù)統(tǒng)計(jì)特征",a.occupancy.describe()) UB=Q3+1.5*IQR; st=a.occupancy[a.occupancy<UB].max() #找出低于判別上限的最大值 print("判別異常值的上限臨界值為:",UB) print("用以替換異常值的數(shù)據(jù)為:",st) a.loc[a.occupancy>UB, 'occupancy']=st #替換超過判別上限異常值 print("異常值替換后的數(shù)據(jù)統(tǒng)計(jì)特征",a.occupancy.describe()) f=pd.ExcelWriter('data_11.xlsx') #創(chuàng)建文件對象 a.to_excel(f) #把a(bǔ)寫入新Excel文件中 f.save() #保存文件,數(shù)據(jù)才真正寫入Excel文件%%時間轉(zhuǎn)換成自變量 clc clear close all %%時間間隔轉(zhuǎn)換 % DAY=xlsread('data 3.csv','data 3','I1:I8588'); % HOUR=xlsread('data 3.csv','data 3','J1:J8588'); % MINTURE=xlsread('data 3.csv','data 3','K1:K8588'); % k=1; % for i=2:1:8588 % D=DAY(i,1);D_1=DAY(i-1,1); % H=HOUR(i,1); % M=MINTURE(i,1); % if D~=D_1 % k=k+1; % end % X(1,1)=MINTURE(1,1); X(1,2)=1; % X(i,2)=k; % X(i,1)=60*H+M; % end % for i=1:1:8588 % X(i,1)=X(i,1)/5; % end % %曲線擬合 % 讀取數(shù)據(jù) time=xlsread('time1.xlsx','time1','A2:A5188'); speed=xlsread('time1.xlsx','time1','B2:B5188'); volume=xlsread('time1.xlsx','time1','C2:C5188'); occupancy=xlsread('time1.xlsx','time1','D2:D5188'); p=xlsread('time1.xlsx','time1','E2:E5188'); scatter3(volume,speed,occupancy,'r.'); title('流量速度占有率散點(diǎn)圖') xlabel('volume'); ylabel('speed'); zlabel('occupancy'); hold on % scatter(time,volume,'r.'); % hold on % scatter(time,occupancy,'g.'); % hold on Cftool未完待續(xù)(更新時間:2022/4/13)
資源:河北省研究生數(shù)學(xué)建模競賽試題(第二、三、四、五屆)
總結(jié)
以上是生活随笔為你收集整理的河北省第三届研究生数学建模B题(二等)交通检测器数据质量控制及预测的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于MATLAB的turbo码代码,一种
- 下一篇: JQ调用后台方法