Skip to content

Severe Overshooting in KED Rainfall Fusion, Fused Values Much Higher Than Inputs #306

@wuesh

Description

@wuesh

Hi everyone,

I've encountered a tricky issue while using Kriging with External Drift (KED) to fuse satellite and rain gauge data, and I was hoping to get some advice.

The Setup:

Data Sources: 1. Satellite rainfall data (as the external drift); 2. Rain gauge measurements from ground stations.
Fusion Method: KED (Kriging with External Drift).
The Core Problem: In most cases, the fusion results look reasonable. However, at certain times—especially when a station observes localized, heavy rainfall, creating a large discrepancy with the satellite data—the KED result exhibits severe "overshooting".
Specifically, the peak value in the fused rainfall field becomes anomalously high, far exceeding the maximum value from either of the original input sources. I've attached a typical image illustrating the problem, where:

Max Satellite Rainfall: 7.8
Max Station Rainfall (from IDW interpolation for comparison): 16.4
But the KED Fused Result Peak reaches 44.9

Image

Image

Image

My Questions:

Is this "overshooting" an inherent flaw of the KED algorithm, especially when dealing with large local gradients between the primary variable (stations) and the external drift (satellite)?
Or, is it more likely an issue with my parameter settings (e.g., variogram model selection, nugget effect) or my code implementation?
Are there any recommended methods to suppress or avoid this numerical amplification effect during the fusion process?
This issue only occurs intermittently, but it significantly impacts the reliability of the results. I would be very grateful to hear any analysis or advice from those with experience in this area.
Thank you very much!
The parameter Settings are as follows:
custom_params = {"sill": 0.1 , "range": 0.55, "nugget": 0.001}
Below is the used code :
uk = UniversalKriging(
x=gauge_points[:, 0],#The longitude of each station
y=gauge_points[:, 1],#The latitude of each station
z=gauge_values, #Observe the rainfall at each station
variogram_model=variogram_model,
variogram_parameters=variogram_parameters,
drift_terms=["external_Z"],
external_drift=sat_data, # Satellite data, two-dimensional grid
external_drift_x=sat_lon[0, :], #Satellite grid longitude
external_drift_y=sat_lat[:, 0], #Satellite grid latitude
pseudo_inv=True, #
exact_values=False #
)
z, _ = uk.execute("grid", sat_lon[0, :], sat_lat[:, 0])
z = np.where(z < 0, 0, z)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions