Forecasting. The forecasting module uses the graph produced by the graph learning module, a Diffusion-Convolutional RNN (DCRNN) [1]}.
A DCRNN essentially updates hidden states collectively for all series via a graph convolution, which replaces the usual multiplication with a weight matrix.
Thus, at each time step, the RNN uses the learnt graph to locally average the hidden representation of timeseries in their graph neighborhood:
\(\mathbf {R}_{t}&=\sigma \left( \textnormal {GNN}_{R}\left( [\mathbf {Z}_{t} || \mathbf {H}_{t-1}]; \mathbf {A} \right) + b_{R} \right)\\\mathbf {C}_{t}&=\mathrm {tanh}\left( \textnormal {GNN}_{C}\left( [\mathbf {Z}_{t} || \mathbf {R}_{t}\odot \mathbf {H}_{t-1}]; \mathbf {A} \right) \textnormal {+} b_{C} \right) \\\mathbf {U}_{t}&=\sigma \left( \textnormal {GNN}_{U}\left( [\mathbf {Z}_{t} || \mathbf {H}_{t-1}]; \mathbf {A} \right) + b_{U} \right) \\\mathbf {H}_{t}&=\mathbf {U}_{t} \odot \mathbf {H}_{t-1} +(1-\mathbf {U}_{t})\odot \mathbf {C}_t\\\textnormal {GNN}(\mathbf {Z}; \mathbf {A})&=\sum _{k=1}^{K}\left(\mathbf {D}_{O}^{-1}\mathbf {A} \right)^k \mathbf {Z} \mathbf {W}_{O}^{(k)} \textnormal {+} \left(\mathbf {D}_{I}^{-1}\mathbf {A} \right)^k \mathbf {Z} \mathbf {W}_{I}^{(k)}\) 
