返回列表

7th rank solution (Public 5th)

414. INGV - Volcanic Eruption Prediction | predict-volcanic-eruptions-ingv-oe

开始: 2020-10-12 结束: 2021-01-06 地球科学 数据算法赛
第7名方案 (公开榜第5名)

第7名方案 (公开榜第5名)

作者: HarshitMehta (Master), Neo Zhao (Expert)
比赛: Predict Volcanic Eruptions - INGV

首先,感谢 Kaggle 和 INGV(国家地球物理和火山学研究所)组织了这场比赛。

其次,感谢那些发布了优秀 Notebook 的人,这些 Notebook 帮助我和我的队友入门。我相信很多参与者也觉得这些 Notebook 很有用。

最后,感谢我的队友 @laplaceplanet 在本次比赛中付出的宝贵努力。

解决方案:

Solution Diagram

a) 特征工程:

我们主要使用了公开的特征。感谢 @amanooo INGV Volcanic Basic Solution STFT@carpediemamigo INGV CatBoost Baseline TSFRESH(创建了 7730 个特征)。

除了上述 Notebooks 外,我们还使用了 Librosa Librosa 官网 来创建 mfcc(梅尔频率倒谱系数)特征。

最终使用了约 8000 个特征(公开的 7830 个和 200 个不同的特征)。

b) 特征选择:

我们花了很多时间寻找重要的特征,正如我们在过去看到的,较少的特征在类似的比赛中有所帮助。LANL 地震预测比赛 中的一个重要见解是:

我们最好的最终 LGB 模型只使用了四个特征: 去噪信号上支持度至少为 2 的峰值数量, 大小为 50 的滚动窗口标准差的 20% 分位数, 第 4 和 第 18 个梅尔频率倒谱系数的平均值。

我们利用这一见解保留了较少的特征。为了进行特征选择,我们采用了以下几种方法:

  1. 使用 tsfresh tsfresh 特征选择文档 将 7730 个特征减少到 2000 个。
  2. 对 2300 个特征使用置换重要性 Permutation Importance,并选择了前 189 个特征。

c) 模型训练:

1) 训练了神经网络 (NN) 模型(我们发现它比 CatBoost 和 LightGBM 更好)。使用了 5 折交叉验证策略。NN 架构如下:

def get_model():
    tf.keras.backend.clear_session()
    inp = Input(shape=(len(features + added_features)))
    x = BatchNormalization()(inp)
    x = Dropout(0.1)(x)

    for n in [512, 1024, 2048, 3072, 2048, 1024, 512, 256]:
        x = Dense(n)(x)
        x = Activation(tf.keras.activations.swish)(x)
        x = Dropout(rate=0.1)(x)

    out = Dense(1, activation="linear")(x)
    model = Model(inp, out)
    model.compile(loss="mean_absolute_error", optimizer=tf.keras.optimizers.Adam(learning_rate=1e-3))
    model.summary()
    return model

感谢 @laplaceplanet 提供的 NN 架构。Swish 激活函数比其他激活函数提供了更好的结果。

2) 提取 NN

同比赛其他方案