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