时序数据的数据预处理

  1. 云栖社区>
  2. 博客>
  3. 正文

时序数据的数据预处理

azuredream 2020-01-18 22:47:19 浏览775

最近在读《数据挖掘》,其中关于数据预览和预处理(preprocessing)的内容没有介绍时序数据的处理,但这恰是很重要的应用场景。
例如这道捕鱼题https://tianchi.aliyun.com/competition/entrance/231768/information
我将根据书中和网络上找到的资料,尝试去清理其中的数据,并将思路记录下来,以备后查。

题目说明
*初赛
初赛提供11000条渔船北斗数据,数据包含脱敏后的渔船ID、经纬度坐标、上报时间、速度、航向信息,由于真实场景下海上环境复杂,经常出现信号丢失,设备故障等原因导致的上报坐标错误、上报数据丢失、甚至有些设备疯狂上报等。

数据示例:

渔船ID x y 速度 方向 time type
1102 6283649.656204367 5284013.963699763 3 12.1 0921 09:00 围网
渔船ID:渔船的唯一识别,结果文件以此ID为标示
x: 渔船在平面坐标系的x轴坐标
y: 渔船在平面坐标系的y轴坐标
速度:渔船当前时刻航速,单位节
方向:渔船当前时刻航首向,单位度
time:数据上报时刻,单位月日 时:分
type:渔船label,作业类型

原始数据经过脱敏处理,渔船信息被隐去,坐标等信息精度和位置被转换偏移。
选手可通过学习围网、刺网、拖网等专业知识辅助大赛数据处理。*

一,属性类型
属性(attribute)分为四种,二值属性(binary),标称属性(nominal),数值属性(numeric),序数属性(ordinal)。四种属性都可以使用数字,其中序数属性有先后,但没有大小之分;标称属性没有先后也没有大小含义;数值属性则具有先后和大小的含义。

机器学习方法中还会使用连续(continuous)和离散(discrete)来分类属性。

渔船ID(ordinal) x(numeric) y 速度(numeric) 方向(numeric) time(time) type(nominal)

因为原文中没有讨论时间,所以我将时间单独列为一类,它也确实不符合其他几种属性的含义。

数据描述(statistical description)
在数据预处理之前,先进行数据预览(overall picture of your data),可以对数据有个大体的了解。对非时序数据,主要观察数据的中心性质(central tendency)和分散性质(dispersion)。

中心性质包括平均数(mean),中位数(median),众数(mode)。标准对称数据(symmetric data)即为3M为同一值的分布(distribution),如正态分布。Positively skewed和Negatively skewed分别指Mean>Mode和Meanimage

分散性质包括四分位数(quartiles),百分位数(percentiles),方差(variance),标准差(standard deviation)等,描述数据的分散情况。还有五数(five-summary number)和箱图(boxplot)可以直观的看到数据分布。

常用图示包括四分位图(quantile plot)(1 attri),四分位四分位图(q-q plot)(1 attri in 2 branchs),直方图(histograms)(1 attri),散点图(scatter plots)(2 attri)等。他们各有各的作用和优势,就不在这里赘述了。

数据相似性(similarity)和不相似性(dissimilarity)暂时跳过,在时序数据上似乎也没有意义。

遗憾的是我发现时序数据没法适用上面的知识。对一条船一天内的行进坐标或速度求平均值没什么直观的意义,求方差也就更没有意义了。

在processing章节中我找到了一些相关的思路。

预处理(preprocess)
预处理的目的是检查数据的准确性(accuracy),完整性(completion)和一致性(consistency)。及时性(timeliness)和可解释性(interpretability)也会影响数据的质量。

针对这几个性质,我可以试着提出几个方法,衡量这批时序数据质量。
0.准确性:元数据检测
元数据(metadata)指的是对于该列数据我们已有的知识,例如日期的取值范围。(Use any knowledge you may already have regarding properties of the data, such knowledge or "data about data " is referred to as metadata)。渔船常规速度,方向取值,时间取值,类型取值等错误都是可以首先进行检测和转换(transformation)的。

1.准确性:坐标错误
根据r1和上一条记录(record)r0的时间间隔,速度和方向,检测当前坐标正确性。设置偏差阈值,如果偏差超过阈值,则标记并跳过此数据,从下一条数据重新检查。这里也可能是时间/速度等字段错误,看情况修正。

2.准确性:时间序列
考虑到是时间序列数据,数据顺序应该准确按照时间先后排列。如果顺序错误,应该根据时间调整排序。

3.完整性:数据重复
将数据按照时间长度分桶,特定桶内保留一定条数的数据,其他数据删除。或者,如果当前记录与前一条记录时间间隔小于1分钟,则删除该数据。

4.完整性:数据丢失
一段时间内没有记录。书中提出了6种填补缺失值的方法。忽略(ignore the tuple),手动填充(fill in the missing value manually),用特定值填充(global constant),根据中心趋势填充(central tendency),用均值填充(mean,median,mode),用最可能的值填充(most probable value)(regression,decision tree,Bayesian formalism)。
我把部分训练数据画出路线观察,缺失数据往往画出简单的几何图形,不同的label对应的几何图形常常相同,所以首先严重缺失的数据可以直接删除,例如低于10条的行船记录,或者间隔时间大于5小时的记录。对于其它确实的记录,可以用线性插值的方法,根据前后两条记录的坐标补全。因为这是行船路线,所以复杂的拟合似乎也没有必要。

5.综合:置信度
除了明显错误的数据外,每条数据的可信度也可以有所区分。例如间隔时间较长,移动速度过快的记录(record),包含有效记录条数少的行船日志,都应该有较低的置信度。在使用数据时,低置信度的数据对模型产生的影响应该更小。

清理(cleaning)过程
0.元数据检测
经过了解,渔船速度一般在20以下。数据中有一批30以上,甚至100的。我将20以上的速度用上下两条数据的平均速度替换掉。
方向没有[0,360]范围外的数据。
时间有相距较长的,都是跨天的数据,没有很大的问题。

1.准确性:坐标错误
根据(r0.position-r1.porsition)/(r0.time-r1.time)计算出移动速度(这里的两点距离使用曼哈顿距离,为了减少计算量和防止溢出)。发现有数条明显坐标偏移的数据,与前后记录的坐标的相距甚远。计划用前后记录生成合理值代替之。

2.准确性:时间序列
记录顺序没有问题。

3.完整性:数据重复
确实存在“疯狂上报坐标”的情况,例如持续几分钟内每秒都上报一条记录。大部分记录间隔为600,以此为标准,间隔100以下的记录可以进行合并。是否恢复这项转换将视测试结果而定。

4.完整性:数据丢失
如上所述,存在部分记录间隔时间远大于600s。在260万条记录之中,有60条记录间隔超过10小时,5条超过20小时,可以以手工的方式决定如何处理这些数据。对于间隔过大的数据可以以600s为标准生成补间值。

数据转换(transformation)
在错误数据清理完成后,还需要对数据进行加工,使他们更易于挖掘。书中提出了平滑(smoothing),属性构建(attribute construction),聚合(aggregation),正则化(normalization),离散化(discretization),标称概念构建(concept hierarchy generation for nominal)(例如身高180·200cm 替换为“高”)
根据本题数据和题意,我准备进行数据平滑和正则化两个加工。
1.平滑
平滑操作的对象是离群点,在本题中是坐标和速度数据的离群点,那些明显不正确的数据点可以用前后记录生成合理数值进行替换。

  1. 标准化(standardize/normalize)
    标准化的目的是缩小数据的范围(range)。目前坐标数据范围宽度是300W左右。使用的度量单位可能会影响数据分析。例如,将测量单位的高度从米更改为英寸,或者将重量的单位从千克更改为磅,可能会导致非常不同的结果。通常,以较小的单位表示属性会导致该属性的范围更大,因此倾向于赋予此类属性更大的效果或“权重”。为避免依赖于度量单位的选择,应将数据标准化或标准化。这涉及将数据转换为落入较小或常见的范围内,例如[-1,1]或[0.0,1.0]。在设计神经网络的挖掘方法中,标准化的数据有助于加快学习速度。

书中介绍了三种正则化方法
2.1 根据最大,最小值标准化Min-max normalization
2.2 根据均值,方差标准化 z-Score normalization(在最值是离群点的数据中非常有用)
2.3 根据最值绝对值,移动小数点 decimal normalization(例如最值是985,则所有数据除1000)
对于方法2和3需要保存所使用的参数,以便对后续数据统一标准化

3.时间标准化
根据和起始时间之间的秒数,将时间标准化到[0,1]的范围内,使用2.1方法。因为在不同渔船的记录序列之间,绝对时间没有意义。

4.时间对齐
不同船只上报数据的时间间隔不同,整理为RNN的训练数据输入时,

5.数据扩展(scaling)
在书中没有提到这步。因为原数据比较少,三个类别的序列数大概是(1500,4000,1500)。一方面不同类型之间数据不平衡,另一方面数据总量也比较少。因为应用场景是海上,不受到道路限制,所以我想到对坐标进行中心旋转,比如每0.1度生成一套新数据,看看训练效果如何。

使用RNN进行训练和测试