文章目录
Baseline模型
-
MergeData 模块
- 台站相关信息字段(StationInfo.csv):
Title StationID Longitude Latitude MagnData MagnUpdate SoundData SoundUpdate 名字 站台ID 经度 维度 电磁数据有无 电磁数据有无更新 地声数据有无 地声数据有无更新 - 筛选可用台站:选取同时有地声、电磁数据且在eqlst.csv内标记为未来可用的台站
- 将地声数据和电磁数据同时更新的StationID构建成一个列表,并转换为集合
- 将所有的地声数据与电磁数据的csv文件的对应的StationID分别放入到_set_magn、_set_sound集合中
- 取3个集合中StationID的交集,即为同时有地声、电磁数据可用的StationID的集合usable_stations
- 将usable_stations存储为UsableStation.bin,为可用站台集
- 数据合并
选取可用站台的站点ID,时间戳和电磁、地声的绝对值均值特征,将所有的csv文件建立成两个包含所有数据的pkl文件:magn_data.pkl 和 sound_data.pkl
- 台站相关信息字段(StationInfo.csv):
-
readData 模块
- cacu_features
生成训练数据。对给定区域,以window(单位:天)为窗口长生成特征
处理的数据为上一想的绝对值的平均值,@abs_mean- 处理数据
- 列名:average
求出这一列的平均值,然后将这一列的值都减去平均值 - 列名:diff_1
按站台分组,滑动窗口然后做差值。最终表示的是这一个小时相对前一个小时数值的变化
- 列名:average
- 最终结果数据格式(以区域为计算,包含多个站台)
- Day:每周的最后一天:7、14…
- magn(电磁)、sound(地声)
- average、diff_1(每小时变化值)
- average_day_max_mean_magn:电磁average数据的每周每天最大值的周平均值
- average_day_min_mean_magn:电磁average数据的每周每天最小值的周平均值
- average_day_mean_max_magn:电磁average数据的每周每天平均值的周最大值
- average_day_mean_min_magn:电磁average数据的每周每天平均值的周最小值
- average_mean_magn:电磁average数据的一周的平均值
- average_max_magn:电磁average数据的一周的最大值
- average_min_magn:电磁average数据的一周的最小值
- average_max_min_magn:电磁average数据的一周的最大值和最小值的差值
- average_lastday_mean_magn:电磁average数据的周天的平均值
- average_lastday_max_magn:电磁average数据的周天的最大值
- average_lastday_min_magn:电磁average数据的周天的最小值
- average_lastday_max_min_magn:电磁average数据的周天的最大值与最小值的差值
- average、diff_1(每小时变化值)
- label_M 训练数据后一周的有无地震,有则填震级,无则填0
- label_long训练数据后一周的有无地震,有则填地震经度,无则填-1
- label_lati训练数据后一周的有无地震,有则填地震纬度,无则填-1
- 处理数据
- 构建数据
- area_groups
将所有的区域划分为9部分,保留每块区域的经度和维度的范围,以及在这块区域的检测站台的StationID - 根据时间划分训练集和验证集train 和 valid
- 根据各区域,找出各区域的相应站台的数据构成local_magn_data和local_sound_data,该区域的地震eqData_area
- 最后构建各区域的训练集和测试集,数据形式为第一部分的数据形式
- area_groups
- cacu_features
-
lgb 模块
- get_area_data
- 读取指定区域的训练集或测试集数据文件
- 训练模型
- 根据不同区域,作为数据集来训练模型
- 数据平衡,对发生地震和没有发生地震的数据中较少的数据进行升采样,使数据平衡
- 去除无关训练数据列,如:Day、label_M等,只保留训练的数据列 ,形成train_feature
- 震级类别化 根据地震的震级划分地震的等级: 0 : < 3.5 || 1 : <4 || 2 : <4.5||3 : <5 || 4 : >5
生成验证预测的结果的序列:target_M - 为每一种情况的地震选择赋予的权重
- 使用lightgbm训练模型,并保存模型
- get_area_data
-
pred 模块
- download_aeta_data_to_file
从AETA网站上下载指定范围的数据,并将数据保存到相应的文件夹中。此模块主要用于实时的更新最新发布的数据,从而根据这些最新的数据进行实时的模型预测。 - 预测模块
取出最后一周的数据,使用的cacu_features及相关数据处理整理成训练的数据形式,使用最终一周的数据来用训练好的lgb模型来进行预测,预测的结果不是具体的震级,而是地震的等级:0-4,从所有的区域中选择地震等级最大的作为最终预测的地震的等级,地震等级与震级的字典 {0:0, 1:3.7, 2:4.2, 3:4.7, 4:5}得到预测的震级,该区域的中心经纬度作为预测的经纬度。
- download_aeta_data_to_file
数据可视化分析
- 监控站点分布可视化
AETA 文献阅读
获奖作品分析
1. AETA 作品1(4freedom)(0)
- 任务分析
利用过去n天的电磁、地声数据,预测未来一周、每天川滇地区发生的地震情况,然后对比一周的预测结果,判断最大级地震是否≥3.5,若是则给出对应的经纬度。
将任务分为对震级的预测和震中的预测两个任务 - 数据预处理
- 模型预测
- 模型参考
《Time-series Extreme Event Forecasting with Neural Networks at Uber》中提出的算法 - 手动提取特征
- 自动提取特征
使用LSTM自编码器( LSTM Autoencoder )自动创建新特征 - 震级预测
手动方式提取的特征与自动方式提取的特征连接,然后使用LSTM的神经网络进行地震震级预测 - 震中预测
类比微软2014年在SIGKDD会议上发表的论文《Correlating Events with Time Series for Incident Diagnosis》 中提出的报警关联分析方法。通过告警关联分析得到哪些站点的数据与地震事件最相关,取最相关的几个站点经纬度平均值作为震中。
- 模型参考
2. CIDP-506(1)
- 标签样本
- 选取2000年到2018年内,规定区域内的所有地震目录
- 通过K-means++的聚类算法将所有的地震划分为9个区域
- 将题目给定的所有地震目录分属到这9个区域内,将每个区域内地震大于3.5级的地震按0.5级为间隔再分类为9个间隔,无地震或震级小于3.5的标为0。因此可以将地震目录分为82类
- 每个样本标签都选取7天内最大震级的标签作为最终样本标签。
- 数据样本
- 以10分钟为间隔进行均值降采样(观察数据发现现在官方给出的数据的时间间隔为10分钟,可行需考虑),对降采样之后的数据有缺失值的进行线性插值数据补全
- 将所有站台的Magn数据,追加到同一个csv文件内,以天为单位进行划分,共划分为910个块。sound数据做相同的处理
- 以天为单位,采用官方提取特征的方式(即上面baseline模型的特征)从两个csv文件中提取每天的特征数据,选取其中的47个特征作为单天的特征数据。(有无将stationID进行合并处理?即不保留stationID)
- 输出一个二维数组大小为910*47
- 最终数据样本
由于比赛为以周为单位进行预测,将上面的数据的样本的以周为单位进行划分,总共130个样本(130周),每个样本的格式747。即1307*47 - 模型选择
作者对比了CNN、MALSTM-FCN、LSTM-FCN等模型,最终选择Nested-LSTM模型
Nested-LSTM模型对传统的LSTM模型的改进,相比传统的堆栈LSTM,Nested-LSTM可以选择性地的访问内部记忆,使得能在更长的时间规模上进行操作。 - 模型训练
为了比赛预测的要求,将每一个标签样本后移一位,即每周的数据样本对应下一周的标签样本。防止模型的预测的不确定性,采用投票法产生最终的结果。(可否使用多个时间维度的样本,训练多个模型,采用投票法产生最终的结果?)
- 投票法
训练了500个model,每一个model为一组,总共5组,500个model进行投票,通过最终投票结果的反馈来决定哪个label的地震最有可能发生。
3. HelloWorld队(1)
- 赛题分析
- 数据特征的构建
原数据是典型的时序数据,其大量的信心隐藏在它的结构中,不仅仅体现在其数值上。构建新特征,寻找其中的强特征是比赛的难点。 - 地震机制的复杂性
地震发生前,当地的电磁和地声会出现某些现象,但是不同的地区不同的地震前出翔的特征没有明确的相通性,如何细分这些现象,并建立这些现象与地震的关联关系是比赛的难点。
- 数据特征的构建
- 预测流程
- 数据打标签
- 按照地区划分
鲜水河地震带、安宁河-则木河地震带、金沙江地震带、松潘-校场地震带、龙门山地震带、理塘地震带、木里-盐源地震区、名山-马边-昭通地震带、小江地震带、中甸-南涧地震带、大关-马边地震带、沧澜-耿马地震带、泸水-腾冲地震带、普洱-宁洱地震带、通海-石屏地震带
(这些区域是如何划分的,结合地形还是单纯的经纬度,有无考虑监测站的分布?) - 按时间划分
地震发生前一周 - 按震级划分
经统计以上区域的三年内历史地震多发生在3-6之间,所以按照震级影响范围和频次划分为四挡。
- 按照地区划分
- 数据补全
以一天数据的10%作为阈值,如果连续缺少10%以内的数据,将采用线性插值法对缺失的数据进行补全,如果连续缺少10%以上的数据,插值补全会产生加大的误差,则删除当天的数据。 - 特征提取
- 衍生特征
计算电磁和地声数据的临近插值、每天SRSS波存在与否、每天SRSS波幅值 - 统计特征
统计电磁和地声数据的衍生特征(即由已给出的特征计算推出的新特征)及基础特征的最大值、最小值、均值、方差、偏度、峰度、均方根、波形因子、峰值因子、脉冲因子、裕度因子、最大值与最小值的差、滑动四分位数、以及变异系数 - 额外衍生特征
通过随机森立的特征重要性筛选方法选出特征重要性排前50的特征,两两交叉相乘得出新特征 - SRSS波
- SRSS波形与地震有一定的相关性,SRSS波及其变异是重要的临震信号
- 定义
每日数据按照小时统计其最大值,若前一个小时的最大值(VH)明显高于后一个小时的最大值(VL)2倍或以上,则认为当天存在SRSS波 - SRSS波的特征提取
- 以天为滑窗的范围,数据标准化。
加窗Max-Min标准化:已天为窗口单位,利用每天数据中的极大值和极小值对该窗口范围内的序列进行标准化处理。(所有数据除以(极大-极小)) - 筛选符合SRSS波特点的数据,定义为SRSS波’模板’(?)
分析台站数据 -> 分析区域内数据 -> 定义SRSS模板 - 检测SRSS波
互相关测度:按天为单位,计算每一个序列与SRSS波模板之间的滑动內积,以其最大內积为两条序列的相关性度量
- 以天为滑窗的范围,数据标准化。
- 衍生特征
- 模型预测
使用Stacking方法进行建模,第一层基模型为lightgbm、随机森林和catboost,第二层使用逻辑回归。
- 总结
- 基于时序特点和统计方法,构建新特征,精细描述数据
- 充分补全缺失数据
- 使用集成学习构建预测模型
- 基于时序数据的特点,采用信号处理方式和时间序列分割方法
- 信号处理方法:希尔伯特变换、小波变换等方式处理时序数据,获取时序数据在频域的特点
- 采用时序序列分割的方式,将数据分段,精细刻画数据,使数据成为更易操作的向量,从而挖掘其中的波形分布的规律。
- 针对不同的数据缺失情况,采用不同的数据补全方式
临近值填充、回归法、拉格朗日插值法、分段插值法、样条插值法
4. szpianpian团队(0)
- 处理方法
- 由于数据是精确到分钟的检测值,数据量庞大,因为自然环境、人为因素等作用导致监测结果中存在少量缺失值。
- 删除数据缺失严重的部分station数据(如station48等)用经纬度临近station数据代替
- 特征
本文提出了震深这个影响因素,认为震级与震深的p值先关,后续在比赛预测时是否加入震深这个因素?(加入震深的可以划分为更多的标签) - 样本数据
降噪,(侧重夜间数据,夜间数据的噪音比较少,但这样啃可能会造成数据的缺少) - 震中分布
本文也可视化了历史地震的震中在预测区域的分布,后续对地震预测中,震中的分布也是一个重要的点 - 模型预测
混合模型:回归模型, 长短记忆神经网络(LSTM),决策树- LSTM是一种循环神经网络, 具有极强的非线性拟合能力 ,在训练间缓解反向传播过程中
的梯度消减。 - 回归和决策树模型有很好的解释性
- LSTM是一种循环神经网络, 具有极强的非线性拟合能力 ,在训练间缓解反向传播过程中
5. 多输入输出的神经网络方案(0)
- 数据特性
- 数据缺失严重,完整性不足
- 大面积缺失
- 解决:同一时间点均值补全
- 无地震样本会干扰预测性能
- 回归模型难建立
- 解决:用未来一次地震的信息进行补全
对于下一周无地震的样本,我们使用未来最先发生地震进行填充。这一处理方式解决大量样本因为无地震,故而无经纬度和震级的尴尬处境,
- 数据情况复杂
-
采样率不一致
解决:统一采样率(10min) -
样本数少
解决:对震级分组编码 (从3.5开始,每0.3为一组,其中6.3-6.5,6.3-6.8范围内的地震少) -
两种输入:电磁波和地声数据不易同时处理
解决:对经纬坐标分组编码 K-means划分了20个区域 -
四种输出:地震有无,震级,经度,纬度
解决: 双输入三输出的神经网络
-
- 数据缺失严重,完整性不足
- 模型搭建
- 模型总结
6. 预测模型6 (0)
- 算法和模型
- Light GBM
预测是否有地震,以及地震震级的大小范围; - Random forest
预测震级的大小,地震的位置; - Random forest
判断是否为大震或者无震;
- Light GBM
- 流程
- 特征提取
- 模型参数
利用lgb进行震级预测,用随机森林的方法来实现对地震位置和震级的预测。 - 结果分析
- 如果预测的震级小于3.0,则判断无地震;
- 如果LGB预测的标签为0,则判断无地震;
- 位置加权分析,在原来预测位置的基础上,加上地震多发区位置的权重;
- 震级加权分析, LGB预测对应的震级与RF预测的震级进行平均;
- 对于大震利用RF进行判定,标签为大震和无震;
7. 基于时空图卷积网络的地震预测(1)
- 整体框架
- 数据处理
- 数据处理
电磁数据 、地声数据- 若有缺失,则缺失处数据补为0;
- 若有在操作修改表中有被修改记录,则修改处数据置0。
- 特征构建
168个地震监测站点的7天(168小时)的6个地声电磁特征作为预测模型的输入,构成168 × 168 × 6的特征矩阵,用以预测未来一周是否会发生地震。
- 数据处理
- 样本构建
- 样本标签生成
筛选目标区内发生的3.5级以上地震
归一化:将地震要素规范到0-1之间
l o n ′ = ( l o n − 98 ) / ( 107 − 98 ) lon' = (lon− 98)/(107 − 98) lon′=(lon−98)/(107−98)
l a t ′ = ( l a t ′ − 22 ) / ( 34 − 22 ) lat' = (lat' − 22)/(34 − 22) lat′=(lat′−22)/(34−22)
m a g ′ = ( m a g − 0 ) / ( 7 − 0 ) mag' = (mag − 0)/(7 − 0) mag′=(mag−0)/(7−0)
- 样本集处理
考虑到样本不平衡问题,生成样本集时,根据样本标签,分别取等量正负样本构成数据集。
训练集与验证集中正负样本比例为 1: 1。
训练集与验证集样本总数比例为 9: 1。
- 样本标签生成
- 模型预测
- 参考文献
Yu, B., Yin, H., and Zhu, Z. 2018. Spatio-temporal graph convolutional neural network: a deep learning framework for traffic forecasting.Proceedings of the Twenty-Seventh International Joint Conference on Artificial Intelligence (IJCAI-18), July 13-19 2018, Stockholm, Sweden. - 基本概念
- 基本概念介绍
- 时空图卷积网络(Spatio-temporal graph convolutional neural network , STGCN)
- 参考文献
- 模型训练和检验
- 损失函数
M S E L o s s = 1 m ∑ i = 1 m ( y i − y ^ i ) 2 MSELoss = \frac{1}{m}\sum_{i=1}^{m}(y_i-\hat{y}_i)^2 MSELoss=m1∑i=1m(yi−y^i)2, y i , y ^ i y_i,\hat{y}_i yi,y^i分别是模型预测值,真实值, 𝑚𝑚为参与训练的样本量。
通过梯度下降法最小化MSELoss实现模型训练 - 模型评价指标
- M S E L o s s = 1 m ∑ i = 1 m ( y i − y ^ i ) 2 MSELoss = \frac{1}{m}\sum_{i=1}^{m}(y_i-\hat{y}_i)^2 MSELoss=m1∑i=1m(yi−y^i)2, y i , y ^ i y_i,\hat{y}_i yi,y^i分别是模型预测值,真实值, 𝑚𝑚为参与训练的样本量。
-
C
S
I
=
T
P
T
P
+
F
P
+
F
N
CSI = \frac{TP}{TP+FP+FN}
CSI=TP+FP+FNTP
TP正确预测的地震数目, FP误报为地震的无地震数目, FN预测到的地震事件数目。通过两个指标选取表现良好的模型作为预测模型。
- 损失函数
思考问题
- 在预测地震的过程,不同区域内的站点的数据因为地形区域的缘故可能会有差异,是否需要按地形的分开考虑?
- 地震的预测是按区域的分别训练模型预测还是将所有数据整合到一起,构建一个统一的模型进行预测?
- 数据是时间延续的,特征的提取是以小时、天、周作为时间单位来进行预测?
- 可否使用多个时间维度的样本,训练多个模型,采用投票法产生最终的结果?
- 目前区域的划分有根据经纬度单纯的划分,根据历史地震聚类的结果划分、根据地形划分?哪种区域划分的结果更好?
- 训练多种模型,进行集成学习?
- 时序数据的波形规律如何使用?
- 在比赛预测时是否加入震深这个因素?(加入震深的可以划分为更多的标签)
- 后续对地震预测中,历史地震震中的分布也是一个重要的点?