一、引言

时空预测是指对未知系统状态在时间和空间上的预测,它是地球系统科学、交通运输、智慧城市等领域的重要技术和工具。时空预测的目的是利用历史数据和当前信息,通过建立时空依赖关系,来推断未来的变化趋势和可能的情景。时空预测的应用价值非常巨大,它可以帮助人们提前了解和应对各种自然灾害、社会危机、经济波动等问题,从而提高决策效率和社会福祉。

时空预测面临着许多挑战和问题,主要包括以下几个方面:
一是数据的高度非线性和复杂性。时空数据往往具有多尺度、多源、多变量、多模态等特点,同时受到多种因素的影响,如气候变化、人口迁移、政策干预等,导致数据的分布和结构难以捕捉和建模。

二是预测任务的多样性和难度。时空预测的任务可以涉及不同的时间跨度(如短期、中期、长期)、空间范围(如局部、区域、全局)、预测目标(如单点、多点、区域、全域)、预测形式(如确定性、概率性、演绎性、结论性)等,不同的任务对预测方法的要求和评估标准也不同。

三是时空依赖关系的复杂性和动态性。时空数据之间存在着复杂的依赖关系,如时间上的自相关、空间上的异质性、时空上的交互作用等,这些依赖关系不仅需要考虑数据的拓扑结构,还需要考虑数据的语义含义和物理机制。此外,时空依赖关系也可能随着时间和空间的变化而变化,如季节性、周期性、突发性等,这给预测方法的稳定性和鲁棒性带来了挑。

三是预测结果的不确定性和可解释性。由于数据的噪声、缺失、异常等问题,以及模型的偏差、方差、过拟合等问题,时空预测结果往往具有不确定性,即预测结果可能与真实值存在一定的偏差或误差。

我将介绍一种基于微软fost的时空预测工具,它是一个通用的时空预测开源工具,可以帮助用户在各种业务场景中进行高效的预测。

二、简单工具使用

(一)安装

Win下深度学习环境的安装可以参考安装教程,fost的安装可以参照的安装教程

Tips 1

torch-geometric与pytorch强依赖的,所以建议本机的cuda版本、pytorch、torch-geometric一直,也就是若你本机的安装的是12.1版本的cuda,你安装pytorch时候,也要选择选择cuda12.1,在torch-geometric也要选择cuda12.1。

Tips 2

Fost不支持cpu版本的pytorch,后期若我们需打包fost项目分享出去,可以用pyinstaller打包项目为纯cpu运行的版本,不过要修改配置文件、项目几个文件的代码

Tips 3

pip install openpyxl
安装python excel依赖,方便将结果保存为表格

(二)使用

fost的使用非常简单,只需要2个步骤:

1.准备数据

用户需要将自己的数据整理成fost所需的格式,包括训练数据文件(train.csv)和图结构文件(graph.csv),具体的数据格式可以参考数据格式一节,因为大局域网的原因,下不了官方的数据,在这里
链接:https://pan.baidu.com/s/1RdEceV9tdV2gTcesxb54WA?pwd=7d5e
提取码:7d5e。
可以看到,在官方的案例里面,有效的格式可能如下所示:
在这里插入图片描述

Node:当前数据的节点名称
日期:当前数据的日期或时间戳
TARGET:预测目标

2.运行命令

我们参考官方的“Predict States Energy Data”案例给出一个教程,并给出注释。

#导入fostool.pipeline模块
from fostool.pipeline import Pipeline
#导入数据
train_path = r'FOST_example_data\Energy\train.csv'
graph_path = r'FOST_example_data\Energy\graph.csv'
#预测的步长
lookahead = 5
#Pipeline的建立,可以看做模型建立
fost = Pipeline(lookahead=lookahead, train_path=train_path, graph_path=graph_path)
#训练
fost.fit()
#预测
result = fost.predict()
模型保存
#fost.save_pipeline()
#保存预测结果
result.to_excel("result.xlsx")

到这里,我们就完成了第一个基于图神经网络的时空预测。
若仅仅是简单使用,到这里就可以了,下面是项目的优化使用。

三、项目的一些解读

(一)配置文件解读

配置参数文件是fostool\config文件下的default.yaml,若想根据自己的数据和任务来配置fost的参数,需要在
fost = Pipeline(lookahead=lookahead, train_path=train_path, graph_path=graph_path config_path= r'FOST_example_data\Energy\ default.yaml')
传入config的参数,在这里给出config的解读

# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.

base:
    # 模型保存路径
    dump_path: 'runs'
    # 损失函数
    loss_func: 'mse'
data_handler:
    #细看Tips 4
    lookback: 'auto'
trainer:
    # 最大的训练次数,因为fost项目设置运用了早停策略,所以不一定运行完一次max_epochs
    max_epochs: 100
    # coda or cpu,实际项目上面默认配置下,占1.7显存
    device: 'cuda'
model:
    # KRNN模型
    KRNNModel:
        cnn_dim: 64
        cnn_kernel_size: 3
        rnn_dim: 64
        rnn_dups: 3
    # 刚看到这个项目的时候,以为只纯GNN模型,但是看到这里才发现并不是,SandwichModel是cnn、rnn、gcn三明治混合的模型
    SandwichModel:
        cnn_dim: 64
        cnn_kernel_size: 3
        rnn_dim: 64
        rnn_dups: 3
        gcn_dim: 64
        gcn_type: 'gat'
        gcn_aggr: 'max'
        gcn_norm: 'none'
    # MLP 前馈神经网络
    MLP_Res:
        hid_dim: 64
        nb_layer: 4
fusion:
    # fost支持trunacted、average两种模型融合策略
    method: 'trunacted'

(二)预测结果解读

现在从官方的“Predict States Energy Data”案例,开始解读

1. model KRNNModel_3164_7是什么意思

在这里插入图片描述
我们来看fostool\model文件下的__init__.py
在这里插入图片描述

可以看到,这里给出的模型名字并不是实际的名字,是对模型名字哈希后的,其中model KRNNModel_3164_7中的7,就是我们设置的lookback_list参数带来的,这就带来第一个问题,在配置文件里面,也有个lookback参数,这两有什么区别,看Tips 4。

Tips 4

我们来看fostool文件下的pipeline.py函数
在这里插入图片描述

当模型的预测步长小于7的时候,lookback_list为[7, 14, 24]。实际上,配置文件中lookback是不齐作用的,想修改lookback_list参数,我们需要在Pipeline(lookahead=lookahead, train_path=train_path, graph_path=graph_path, lookback_list=[10, 20, 30])进行导入,不知道是否为微软写下的bug。

2.我们是用哪个模型得出的预测结果

我们来看fostool\ task文件下的fusion.py函数
在这里插入图片描述

Fost支持的模型融合为averagetrunacted两种模型融合策略,其中average将所有模型的结果进行取均值后给出,trunacted比较复杂,不是简单的取最好的模型输出,而是取出那些误差<最小误差的模型+误差的标准差模型,然后将所有模型的结果进行取均值后给出。

3.fost对训练数据的数量要求是多少

我们来看fostool文件下的pipeline.py函数,可以看到模型最低要求的训练数据量为100,若想修改,直接改就行。
在这里插入图片描述

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐