Existing DL models are reloaded silently without prompting. Periods that fail are skipped with a warning so the batch can continue.
"""
Batch run - full LSEQMDL pipeline for all 36 month×dekad periods.
Requires: imerg_ds, cpc_ds_aligned, cpc_ds_native (from Steps 3 + 5).
"""
from src.bias_correction import run_correction_pipeline
n_done = 0
n_skip = 0
for _m in range (1 , 13 ):
for _d in [1 , 2 , 3 ]:
tag = f"month { _m:02d} dekad { _d} "
print (f" \n { '=' * 60 } " )
print (f"▸ { tag} " )
print (f" { '=' * 60 } " )
try :
out_path = run_correction_pipeline(
imerg_ds, cpc_ds_aligned, _m, _d,
cpc_native_ds= cpc_ds_native
)
n_done += 1
print (f"✓ { tag} — saved: { out_path} " )
except Exception as e:
n_skip += 1
print (f"✗ { tag} — FAILED: { e} " )
print (f" \n { '=' * 60 } " )
print (f"Batch complete: { n_done} periods done, { n_skip} skipped." )
print (f" { '=' * 60 } " )
============================================================
▸ month 01 dekad 1
============================================================
2026-05-20 06:43:09,754 - INFO - Pipeline [01 d1]: Running LSEQM...
2026-05-20 06:43:09,762 - INFO - Aligning IMERG and CPC datasets...
2026-05-20 06:43:09,793 - INFO - After alignment: IMERG has 9131 time steps, CPC has 9131 time steps
2026-05-20 06:43:09,793 - INFO - Creating time-based masks...
2026-05-20 06:43:09,804 - INFO - Applying time masks...
2026-05-20 06:43:09,828 - INFO - IMERG dekad data shape: (250, 9, 14)
2026-05-20 06:43:09,829 - INFO - CPC dekad data shape: (250, 9, 14)
2026-05-20 06:43:09,832 - INFO - Using native-resolution CPC parameter fitting (BCSD principle)...
2026-05-20 06:43:09,866 - INFO - CPC native dekad data: (250, 4, 6) (lat -9.25–-7.75, lon 113.75–116.25)
2026-05-20 06:43:13,338 - INFO - Native CPC fitting: row 4/4 (100%) | 24 fitted, 0 skipped | elapsed 3s, ETA 0s
2026-05-20 06:43:13,339 - INFO - Fitted CPC params on native grid: 24/24 cells
2026-05-20 06:43:13,382 - INFO - Interpolated CPC params to IMERG grid: 126/126 valid pixels
2026-05-20 06:43:13,383 - INFO - Performing Linear Scaling (LS)...
2026-05-20 06:43:13,392 - INFO - LS using bilinearly interpolated CPC mean (smooth).
2026-05-20 06:43:13,394 - INFO - Saving LS corrected precipitation...
2026-05-20 06:43:13,396 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:43:13,450 - INFO - Saved Linear Scaling corrected precipitation for month 01, dekad 01 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_ls/bali_cli_ls_corrected_imergl_month01_dekad01.nc4
2026-05-20 06:43:13,452 - INFO - Applying Empirical Quantile Mapping (EQM) on 9x14 grid...
2026-05-20 06:43:13,533 - INFO - EQM progress: row 9/9 (100%) | 80 land pixels done | elapsed 0s, ETA 0s
2026-05-20 06:43:13,537 - INFO - EQM complete: 80/126 grid points corrected (46 masked/ocean pixels skipped)
2026-05-20 06:43:13,539 - INFO - Saving LSEQM corrected precipitation...
2026-05-20 06:43:13,541 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:43:13,591 - INFO - Saved Linear Scaling and Empirical Quantile Mapping corrected precipitation for month 01, dekad 01 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqm/bali_cli_lseqm_corrected_imergl_month01_dekad01.nc4
2026-05-20 06:43:13,593 - INFO - Pipeline [01 d1]: Training / loading DL model...
2026-05-20 06:43:13,595 - INFO - Checking if the model file exists at: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month01_dekad01.keras
2026-05-20 06:43:13,733 - INFO - Model: "sequential"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ conv2d (Conv2D) │ (None, 9, 14, 32) │ 320 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d (MaxPooling2D) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout (Dropout) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_1 (Conv2D) │ (None, 4, 7, 64) │ 18,496 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_1 (MaxPooling2D) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_1 (Dropout) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ flatten (Flatten) │ (None, 384) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense (Dense) │ (None, 128) │ 49,280 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_2 (Dropout) │ (None, 128) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_1 (Dense) │ (None, 126) │ 16,254 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ reshape (Reshape) │ (None, 9, 14) │ 0 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 84,350 (329.49 KB)
Trainable params: 84,350 (329.49 KB)
Non-trainable params: 0 (0.00 B)
Epoch 1/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 2s 109ms/step - loss: 0.2054 - mae: 0.3252 - val_loss: 0.1896 - val_mae: 0.3069
Epoch 2/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 41ms/step - loss: 0.1754 - mae: 0.2988 - val_loss: 0.1508 - val_mae: 0.2748
Epoch 3/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 54ms/step - loss: 0.1420 - mae: 0.2765 - val_loss: 0.0972 - val_mae: 0.2211
Epoch 4/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.1192 - mae: 0.2599 - val_loss: 0.0766 - val_mae: 0.1920
Epoch 5/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0992 - mae: 0.2366 - val_loss: 0.0801 - val_mae: 0.1948
Epoch 6/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0904 - mae: 0.2240 - val_loss: 0.0747 - val_mae: 0.1895
Epoch 7/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0812 - mae: 0.2144 - val_loss: 0.0575 - val_mae: 0.1678
Epoch 8/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 46ms/step - loss: 0.0761 - mae: 0.2119 - val_loss: 0.0551 - val_mae: 0.1632
Epoch 9/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0700 - mae: 0.2025 - val_loss: 0.0645 - val_mae: 0.1750
Epoch 10/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 25ms/step - loss: 0.0703 - mae: 0.1984 - val_loss: 0.0651 - val_mae: 0.1755
Epoch 11/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 40ms/step - loss: 0.0664 - mae: 0.1942 - val_loss: 0.0496 - val_mae: 0.1549
Epoch 12/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0661 - mae: 0.1968 - val_loss: 0.0473 - val_mae: 0.1509
Epoch 13/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0637 - mae: 0.1916 - val_loss: 0.0594 - val_mae: 0.1669
Epoch 14/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0660 - mae: 0.1906 - val_loss: 0.0679 - val_mae: 0.1775
Epoch 15/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 25ms/step - loss: 0.0640 - mae: 0.1868 - val_loss: 0.0502 - val_mae: 0.1548
Epoch 16/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 40ms/step - loss: 0.0611 - mae: 0.1869 - val_loss: 0.0458 - val_mae: 0.1481
Epoch 17/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0588 - mae: 0.1834 - val_loss: 0.0522 - val_mae: 0.1570
Epoch 18/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 25ms/step - loss: 0.0583 - mae: 0.1804 - val_loss: 0.0551 - val_mae: 0.1612
Epoch 19/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 25ms/step - loss: 0.0567 - mae: 0.1777 - val_loss: 0.0488 - val_mae: 0.1530
Epoch 20/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 25ms/step - loss: 0.0565 - mae: 0.1780 - val_loss: 0.0473 - val_mae: 0.1507
Epoch 21/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 37ms/step - loss: 0.0577 - mae: 0.1802 - val_loss: 0.0456 - val_mae: 0.1479
Epoch 22/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 39ms/step - loss: 0.0561 - mae: 0.1773 - val_loss: 0.0454 - val_mae: 0.1477
Epoch 23/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 31ms/step - loss: 0.0558 - mae: 0.1766 - val_loss: 0.0496 - val_mae: 0.1535
Epoch 24/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0556 - mae: 0.1753 - val_loss: 0.0540 - val_mae: 0.1589
Epoch 25/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0557 - mae: 0.1738 - val_loss: 0.0505 - val_mae: 0.1542
Epoch 26/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step - loss: 0.0533 - mae: 0.1705 - val_loss: 0.0456 - val_mae: 0.1475
Epoch 27/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 41ms/step - loss: 0.0536 - mae: 0.1727 - val_loss: 0.0446 - val_mae: 0.1458
Epoch 28/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0530 - mae: 0.1712 - val_loss: 0.0493 - val_mae: 0.1522
Epoch 29/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0527 - mae: 0.1687 - val_loss: 0.0491 - val_mae: 0.1517
Epoch 30/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 46ms/step - loss: 0.0522 - mae: 0.1688 - val_loss: 0.0439 - val_mae: 0.1439
Epoch 31/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0521 - mae: 0.1683 - val_loss: 0.0442 - val_mae: 0.1441
Epoch 32/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 25ms/step - loss: 0.0504 - mae: 0.1654 - val_loss: 0.0462 - val_mae: 0.1470
Epoch 33/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0515 - mae: 0.1672 - val_loss: 0.0447 - val_mae: 0.1452
Epoch 34/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0507 - mae: 0.1657 - val_loss: 0.0458 - val_mae: 0.1467
Epoch 35/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 25ms/step - loss: 0.0516 - mae: 0.1668 - val_loss: 0.0466 - val_mae: 0.1475
2026-05-20 06:43:20,550 - INFO - Final training history: {'loss': [0.20541471242904663, 0.1754322499036789, 0.1420200765132904, 0.11921518296003342, 0.09922513365745544, 0.0904005616903305, 0.08117583394050598, 0.07611152529716492, 0.06997907906770706, 0.07031281292438507, 0.06642446666955948, 0.06614454090595245, 0.06374429911375046, 0.06600525975227356, 0.06397747248411179, 0.06109028309583664, 0.05879795178771019, 0.05828377231955528, 0.05672439560294151, 0.056547120213508606, 0.057724133133888245, 0.056123003363609314, 0.05576472356915474, 0.05561840906739235, 0.055662449449300766, 0.05327320471405983, 0.05358465015888214, 0.052980922162532806, 0.05269564315676689, 0.052210643887519836, 0.05214922875165939, 0.050396326929330826, 0.0515163317322731, 0.05071359500288963, 0.05156546086072922], 'mae': [0.3252464532852173, 0.29877620935440063, 0.2765044867992401, 0.25992292165756226, 0.23657551407814026, 0.22396504878997803, 0.2143888622522354, 0.21186405420303345, 0.20247916877269745, 0.1984061598777771, 0.19416025280952454, 0.19682671129703522, 0.19155220687389374, 0.19056211411952972, 0.1868010014295578, 0.1869390457868576, 0.183397576212883, 0.18043601512908936, 0.17772668600082397, 0.17797434329986572, 0.18021774291992188, 0.1772594004869461, 0.17658396065235138, 0.1753319352865219, 0.17381495237350464, 0.17052185535430908, 0.17268098890781403, 0.17117196321487427, 0.16874665021896362, 0.16883201897144318, 0.16834045946598053, 0.16538892686367035, 0.16716548800468445, 0.165736123919487, 0.16681377589702606], 'val_loss': [0.18963250517845154, 0.1507822871208191, 0.09722372889518738, 0.07656259089708328, 0.08006451278924942, 0.07469813525676727, 0.05746929720044136, 0.0550961047410965, 0.06450812518596649, 0.06512390822172165, 0.049567241221666336, 0.04725818336009979, 0.0594380646944046, 0.06794053316116333, 0.05021851509809494, 0.04577766731381416, 0.05224074795842171, 0.05510983616113663, 0.048827387392520905, 0.047293439507484436, 0.0456155389547348, 0.045421380549669266, 0.049565982073545456, 0.053956061601638794, 0.050482045859098434, 0.045590583235025406, 0.0445837639272213, 0.049309711903333664, 0.04909268394112587, 0.043905388563871384, 0.04415978491306305, 0.04615490138530731, 0.044696107506752014, 0.045755695551633835, 0.04662426933646202], 'val_mae': [0.30691856145858765, 0.2747943103313446, 0.22107963263988495, 0.19202955067157745, 0.19477578997612, 0.18953385949134827, 0.16784782707691193, 0.16321533918380737, 0.17499805986881256, 0.17550130188465118, 0.15487879514694214, 0.1508832722902298, 0.16688407957553864, 0.1774904876947403, 0.15484797954559326, 0.1481449455022812, 0.15695154666900635, 0.16123582422733307, 0.15304194390773773, 0.15066052973270416, 0.14789794385433197, 0.14771689474582672, 0.15347667038440704, 0.15892885625362396, 0.1541765183210373, 0.14749406278133392, 0.14580382406711578, 0.15218815207481384, 0.1516532301902771, 0.1439480036497116, 0.14410603046417236, 0.14697393774986267, 0.14521515369415283, 0.14674320816993713, 0.1474968045949936]}
2026-05-20 06:43:20,688 - INFO - Model training complete. Best model saved as /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month01_dekad01.keras
2026-05-20 06:43:20,689 - INFO - Pipeline [01 d1]: Loading confidence mask...
2026-05-20 06:43:20,691 - INFO - Confidence mask not found, building from station data...
2026-05-20 06:43:20,691 - INFO - Building station density confidence mask...
2026-05-20 06:43:20,703 - INFO - Loaded 4 station locations from /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/bali_stations_location.csv
2026-05-20 06:43:20,704 - INFO - Station density: 4 stations in 3/6 cells (CPC 0.5° grid, max 2 stations/cell)
2026-05-20 06:43:20,706 - INFO - Confidence map: min=0.239, max=0.411, mean=0.333 (sigma=1.0, saturation=2)
2026-05-20 06:43:20,714 - INFO - Upscaled confidence mask: (2, 3) -> (9, 14)
2026-05-20 06:43:20,715 - INFO - Station density confidence mask built successfully.
2026-05-20 06:43:20,776 - INFO - Confidence mask saved to /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/station_density/confidence_mask_station_density.nc4
2026-05-20 06:43:20,778 - INFO - Pipeline [01 d1]: Applying DL refinement...
2026-05-20 06:43:20,794 - INFO - Pixel-wise threshold map computed at 80th percentile. threshold_2d shape: (9, 14)
2026-05-20 06:43:20,796 - INFO - DL blending: base alpha=0.70 (LSEQM weight), 1-alpha=0.30 (DL weight)
2026-05-20 06:43:20,798 - INFO - Confidence mask active: spatial alpha modulation enabled. Confidence range: [0.000, 0.411]
2026-05-20 06:43:37,287 - INFO - DL blending complete: 250 daily slices processed, 3,999 extreme pixels blended (alpha=0.70)
2026-05-20 06:43:37,405 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:43:37,451 - INFO - Saved Hybrid Deep Learning-Physical (Linear Scaling and Empirical Quantile Mapping) Approach corrected precipitation for month 01, dekad 01 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_lseqmdl_corrected_imergl_month01_dekad01.nc4
2026-05-20 06:43:37,452 - INFO - Pipeline [01 d1]: Complete.
✓ month 01 dekad 1 — saved: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_imergl_lseqmdl_corrected_precip_month01_dekad01.nc4
============================================================
▸ month 01 dekad 2
============================================================
2026-05-20 06:43:37,453 - INFO - Pipeline [01 d2]: Running LSEQM...
2026-05-20 06:43:37,458 - INFO - Aligning IMERG and CPC datasets...
2026-05-20 06:43:37,466 - INFO - After alignment: IMERG has 9131 time steps, CPC has 9131 time steps
2026-05-20 06:43:37,469 - INFO - Creating time-based masks...
2026-05-20 06:43:37,488 - INFO - Applying time masks...
2026-05-20 06:43:37,506 - INFO - IMERG dekad data shape: (250, 9, 14)
2026-05-20 06:43:37,508 - INFO - CPC dekad data shape: (250, 9, 14)
2026-05-20 06:43:37,511 - INFO - Using native-resolution CPC parameter fitting (BCSD principle)...
2026-05-20 06:43:37,541 - INFO - CPC native dekad data: (250, 4, 6) (lat -9.25–-7.75, lon 113.75–116.25)
2026-05-20 06:43:39,995 - INFO - Native CPC fitting: row 4/4 (100%) | 24 fitted, 0 skipped | elapsed 2s, ETA 0s
2026-05-20 06:43:39,996 - INFO - Fitted CPC params on native grid: 24/24 cells
2026-05-20 06:43:40,035 - INFO - Interpolated CPC params to IMERG grid: 126/126 valid pixels
2026-05-20 06:43:40,036 - INFO - Performing Linear Scaling (LS)...
2026-05-20 06:43:40,044 - INFO - LS using bilinearly interpolated CPC mean (smooth).
2026-05-20 06:43:40,048 - INFO - Saving LS corrected precipitation...
2026-05-20 06:43:40,050 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:43:40,094 - INFO - Saved Linear Scaling corrected precipitation for month 01, dekad 11 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_ls/bali_cli_ls_corrected_imergl_month01_dekad11.nc4
2026-05-20 06:43:40,096 - INFO - Applying Empirical Quantile Mapping (EQM) on 9x14 grid...
2026-05-20 06:43:40,175 - INFO - EQM progress: row 9/9 (100%) | 80 land pixels done | elapsed 0s, ETA 0s
2026-05-20 06:43:40,178 - INFO - EQM complete: 80/126 grid points corrected (46 masked/ocean pixels skipped)
2026-05-20 06:43:40,179 - INFO - Saving LSEQM corrected precipitation...
2026-05-20 06:43:40,183 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:43:40,232 - INFO - Saved Linear Scaling and Empirical Quantile Mapping corrected precipitation for month 01, dekad 11 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqm/bali_cli_lseqm_corrected_imergl_month01_dekad11.nc4
2026-05-20 06:43:40,233 - INFO - Pipeline [01 d2]: Training / loading DL model...
2026-05-20 06:43:40,234 - INFO - Checking if the model file exists at: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month01_dekad11.keras
2026-05-20 06:43:40,299 - INFO - Model: "sequential_1"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ conv2d_2 (Conv2D) │ (None, 9, 14, 32) │ 320 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_2 (MaxPooling2D) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_3 (Dropout) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_3 (Conv2D) │ (None, 4, 7, 64) │ 18,496 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_3 (MaxPooling2D) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_4 (Dropout) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ flatten_1 (Flatten) │ (None, 384) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_2 (Dense) │ (None, 128) │ 49,280 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_5 (Dropout) │ (None, 128) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_3 (Dense) │ (None, 126) │ 16,254 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ reshape_1 (Reshape) │ (None, 9, 14) │ 0 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 84,350 (329.49 KB)
Trainable params: 84,350 (329.49 KB)
Non-trainable params: 0 (0.00 B)
Epoch 1/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 2s 96ms/step - loss: 0.2077 - mae: 0.3243 - val_loss: 0.2216 - val_mae: 0.3343
Epoch 2/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 39ms/step - loss: 0.1805 - mae: 0.3012 - val_loss: 0.1822 - val_mae: 0.3037
Epoch 3/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 39ms/step - loss: 0.1451 - mae: 0.2760 - val_loss: 0.1167 - val_mae: 0.2416
Epoch 4/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 41ms/step - loss: 0.1158 - mae: 0.2557 - val_loss: 0.0855 - val_mae: 0.2048
Epoch 5/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 25ms/step - loss: 0.0970 - mae: 0.2367 - val_loss: 0.0870 - val_mae: 0.2038
Epoch 6/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 45ms/step - loss: 0.0887 - mae: 0.2226 - val_loss: 0.0846 - val_mae: 0.2014
Epoch 7/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 39ms/step - loss: 0.0783 - mae: 0.2102 - val_loss: 0.0638 - val_mae: 0.1744
Epoch 8/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0752 - mae: 0.2104 - val_loss: 0.0586 - val_mae: 0.1665
Epoch 9/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0683 - mae: 0.1999 - val_loss: 0.0684 - val_mae: 0.1797
Epoch 10/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 25ms/step - loss: 0.0696 - mae: 0.1983 - val_loss: 0.0691 - val_mae: 0.1809
Epoch 11/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 39ms/step - loss: 0.0645 - mae: 0.1911 - val_loss: 0.0576 - val_mae: 0.1652
Epoch 12/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 39ms/step - loss: 0.0651 - mae: 0.1936 - val_loss: 0.0541 - val_mae: 0.1593
Epoch 13/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 30ms/step - loss: 0.0606 - mae: 0.1860 - val_loss: 0.0631 - val_mae: 0.1704
Epoch 14/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 25ms/step - loss: 0.0609 - mae: 0.1835 - val_loss: 0.0625 - val_mae: 0.1693
Epoch 15/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 40ms/step - loss: 0.0578 - mae: 0.1796 - val_loss: 0.0527 - val_mae: 0.1564
Epoch 16/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0596 - mae: 0.1837 - val_loss: 0.0548 - val_mae: 0.1587
Epoch 17/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 34ms/step - loss: 0.0573 - mae: 0.1784 - val_loss: 0.0654 - val_mae: 0.1732
Epoch 18/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0588 - mae: 0.1786 - val_loss: 0.0633 - val_mae: 0.1707
Epoch 19/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0546 - mae: 0.1732 - val_loss: 0.0504 - val_mae: 0.1530
Epoch 20/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0559 - mae: 0.1765 - val_loss: 0.0510 - val_mae: 0.1536
Epoch 21/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0533 - mae: 0.1725 - val_loss: 0.0548 - val_mae: 0.1586
Epoch 22/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0519 - mae: 0.1688 - val_loss: 0.0530 - val_mae: 0.1560
Epoch 23/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 25ms/step - loss: 0.0534 - mae: 0.1718 - val_loss: 0.0520 - val_mae: 0.1549
Epoch 24/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 24ms/step - loss: 0.0531 - mae: 0.1703 - val_loss: 0.0550 - val_mae: 0.1589
2026-05-20 06:43:45,045 - INFO - Final training history: {'loss': [0.20767086744308472, 0.18045872449874878, 0.1450509876012802, 0.11577501893043518, 0.09696760028600693, 0.08874978125095367, 0.07830332219600677, 0.0752486065030098, 0.06829970329999924, 0.06964866816997528, 0.06447114795446396, 0.0650608167052269, 0.06059270352125168, 0.060907721519470215, 0.05777352675795555, 0.05956503003835678, 0.05725450441241264, 0.05882851034402847, 0.05462026968598366, 0.05585967376828194, 0.05332161486148834, 0.05190259590744972, 0.05344659462571144, 0.053073544055223465], 'mae': [0.3243464529514313, 0.3011680543422699, 0.2759525775909424, 0.2557245194911957, 0.23674197494983673, 0.22260595858097076, 0.21023383736610413, 0.21039415895938873, 0.19994689524173737, 0.19833238422870636, 0.1911163479089737, 0.1935872882604599, 0.18604308366775513, 0.1834629476070404, 0.17960390448570251, 0.18369513750076294, 0.17840875685214996, 0.17855098843574524, 0.1731850802898407, 0.17654985189437866, 0.17252914607524872, 0.1687634438276291, 0.17175941169261932, 0.17030872404575348], 'val_loss': [0.2216373234987259, 0.1821543574333191, 0.1167132556438446, 0.08547603338956833, 0.086954265832901, 0.08458301424980164, 0.06375929713249207, 0.05855024978518486, 0.06840195506811142, 0.06906881183385849, 0.05755932629108429, 0.05414682254195213, 0.06309406459331512, 0.06247938796877861, 0.052663568407297134, 0.054751135408878326, 0.06539894640445709, 0.06327580660581589, 0.0504007562994957, 0.051033906638622284, 0.05484559386968613, 0.05296917259693146, 0.052003584802150726, 0.054950326681137085], 'val_mae': [0.33429571986198425, 0.3036576509475708, 0.24158203601837158, 0.20476679503917694, 0.20380695164203644, 0.20139655470848083, 0.17436014115810394, 0.16650846600532532, 0.17966078221797943, 0.18091319501399994, 0.16518442332744598, 0.15934224426746368, 0.17041106522083282, 0.16930840909481049, 0.15639349818229675, 0.1587497740983963, 0.173166885972023, 0.17072153091430664, 0.15300416946411133, 0.15356697142124176, 0.15859322249889374, 0.15603524446487427, 0.15491357445716858, 0.158869206905365]}
2026-05-20 06:43:45,204 - INFO - Model training complete. Best model saved as /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month01_dekad11.keras
2026-05-20 06:43:45,206 - INFO - Pipeline [01 d2]: Loading confidence mask...
2026-05-20 06:43:45,207 - INFO - Loading existing confidence mask: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/station_density/confidence_mask_station_density.nc4
2026-05-20 06:43:45,746 - INFO - Loaded confidence mask from /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/station_density/confidence_mask_station_density.nc4 (shape: (9, 14), range: [0.000, 0.411])
2026-05-20 06:43:45,748 - INFO - Pipeline [01 d2]: Applying DL refinement...
2026-05-20 06:43:45,765 - INFO - Pixel-wise threshold map computed at 80th percentile. threshold_2d shape: (9, 14)
2026-05-20 06:43:45,766 - INFO - DL blending: base alpha=0.70 (LSEQM weight), 1-alpha=0.30 (DL weight)
2026-05-20 06:43:45,768 - INFO - Confidence mask active: spatial alpha modulation enabled. Confidence range: [0.000, 0.411]
2026-05-20 06:44:02,228 - INFO - DL blending complete: 250 daily slices processed, 3,999 extreme pixels blended (alpha=0.70)
2026-05-20 06:44:02,370 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:44:02,411 - INFO - Saved Hybrid Deep Learning-Physical (Linear Scaling and Empirical Quantile Mapping) Approach corrected precipitation for month 01, dekad 11 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_lseqmdl_corrected_imergl_month01_dekad11.nc4
2026-05-20 06:44:02,413 - INFO - Pipeline [01 d2]: Complete.
✓ month 01 dekad 2 — saved: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_imergl_lseqmdl_corrected_precip_month01_dekad11.nc4
============================================================
▸ month 01 dekad 3
============================================================
2026-05-20 06:44:02,417 - INFO - Pipeline [01 d3]: Running LSEQM...
2026-05-20 06:44:02,422 - INFO - Aligning IMERG and CPC datasets...
2026-05-20 06:44:02,438 - INFO - After alignment: IMERG has 9131 time steps, CPC has 9131 time steps
2026-05-20 06:44:02,441 - INFO - Creating time-based masks...
2026-05-20 06:44:02,457 - INFO - Applying time masks...
2026-05-20 06:44:02,476 - INFO - IMERG dekad data shape: (275, 9, 14)
2026-05-20 06:44:02,477 - INFO - CPC dekad data shape: (275, 9, 14)
2026-05-20 06:44:02,482 - INFO - Using native-resolution CPC parameter fitting (BCSD principle)...
2026-05-20 06:44:02,515 - INFO - CPC native dekad data: (275, 4, 6) (lat -9.25–-7.75, lon 113.75–116.25)
2026-05-20 06:44:05,015 - INFO - Native CPC fitting: row 4/4 (100%) | 24 fitted, 0 skipped | elapsed 2s, ETA 0s
2026-05-20 06:44:05,016 - INFO - Fitted CPC params on native grid: 24/24 cells
2026-05-20 06:44:05,055 - INFO - Interpolated CPC params to IMERG grid: 126/126 valid pixels
2026-05-20 06:44:05,056 - INFO - Performing Linear Scaling (LS)...
2026-05-20 06:44:05,065 - INFO - LS using bilinearly interpolated CPC mean (smooth).
2026-05-20 06:44:05,067 - INFO - Saving LS corrected precipitation...
2026-05-20 06:44:05,070 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (275, 9, 14)
2026-05-20 06:44:05,114 - INFO - Saved Linear Scaling corrected precipitation for month 01, dekad 21 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_ls/bali_cli_ls_corrected_imergl_month01_dekad21.nc4
2026-05-20 06:44:05,115 - INFO - Applying Empirical Quantile Mapping (EQM) on 9x14 grid...
2026-05-20 06:44:05,200 - INFO - EQM progress: row 9/9 (100%) | 80 land pixels done | elapsed 0s, ETA 0s
2026-05-20 06:44:05,203 - INFO - EQM complete: 80/126 grid points corrected (46 masked/ocean pixels skipped)
2026-05-20 06:44:05,204 - INFO - Saving LSEQM corrected precipitation...
2026-05-20 06:44:05,206 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (275, 9, 14)
2026-05-20 06:44:05,251 - INFO - Saved Linear Scaling and Empirical Quantile Mapping corrected precipitation for month 01, dekad 21 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqm/bali_cli_lseqm_corrected_imergl_month01_dekad21.nc4
2026-05-20 06:44:05,253 - INFO - Pipeline [01 d3]: Training / loading DL model...
2026-05-20 06:44:05,254 - INFO - Checking if the model file exists at: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month01_dekad21.keras
2026-05-20 06:44:05,322 - INFO - Model: "sequential_2"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ conv2d_4 (Conv2D) │ (None, 9, 14, 32) │ 320 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_4 (MaxPooling2D) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_6 (Dropout) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_5 (Conv2D) │ (None, 4, 7, 64) │ 18,496 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_5 (MaxPooling2D) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_7 (Dropout) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ flatten_2 (Flatten) │ (None, 384) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_4 (Dense) │ (None, 128) │ 49,280 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_8 (Dropout) │ (None, 128) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_5 (Dense) │ (None, 126) │ 16,254 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ reshape_2 (Reshape) │ (None, 9, 14) │ 0 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 84,350 (329.49 KB)
Trainable params: 84,350 (329.49 KB)
Non-trainable params: 0 (0.00 B)
Epoch 1/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 2s 101ms/step - loss: 0.2031 - mae: 0.3292 - val_loss: 0.1773 - val_mae: 0.2997
Epoch 2/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.1562 - mae: 0.2919 - val_loss: 0.1163 - val_mae: 0.2450
Epoch 3/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 49ms/step - loss: 0.1307 - mae: 0.2743 - val_loss: 0.0928 - val_mae: 0.2148
Epoch 4/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 41ms/step - loss: 0.1088 - mae: 0.2491 - val_loss: 0.0926 - val_mae: 0.2132
Epoch 5/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 45ms/step - loss: 0.0947 - mae: 0.2327 - val_loss: 0.0737 - val_mae: 0.1914
Epoch 6/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 45ms/step - loss: 0.0831 - mae: 0.2217 - val_loss: 0.0670 - val_mae: 0.1827
Epoch 7/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0775 - mae: 0.2145 - val_loss: 0.0700 - val_mae: 0.1878
Epoch 8/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 30ms/step - loss: 0.0716 - mae: 0.2055 - val_loss: 0.0686 - val_mae: 0.1861
Epoch 9/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 45ms/step - loss: 0.0694 - mae: 0.2015 - val_loss: 0.0666 - val_mae: 0.1828
Epoch 10/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 45ms/step - loss: 0.0649 - mae: 0.1957 - val_loss: 0.0598 - val_mae: 0.1730
Epoch 11/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0641 - mae: 0.1941 - val_loss: 0.0585 - val_mae: 0.1706
Epoch 12/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0604 - mae: 0.1867 - val_loss: 0.0599 - val_mae: 0.1722
Epoch 13/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0604 - mae: 0.1872 - val_loss: 0.0556 - val_mae: 0.1658
Epoch 14/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0582 - mae: 0.1827 - val_loss: 0.0560 - val_mae: 0.1663
Epoch 15/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0581 - mae: 0.1801 - val_loss: 0.0597 - val_mae: 0.1713
Epoch 16/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0563 - mae: 0.1786 - val_loss: 0.0503 - val_mae: 0.1574
Epoch 17/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0551 - mae: 0.1771 - val_loss: 0.0542 - val_mae: 0.1633
Epoch 18/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step - loss: 0.0554 - mae: 0.1765 - val_loss: 0.0516 - val_mae: 0.1591
Epoch 19/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0546 - mae: 0.1746 - val_loss: 0.0510 - val_mae: 0.1581
Epoch 20/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0537 - mae: 0.1733 - val_loss: 0.0511 - val_mae: 0.1583
Epoch 21/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0534 - mae: 0.1714 - val_loss: 0.0525 - val_mae: 0.1606
2026-05-20 06:44:10,033 - INFO - Final training history: {'loss': [0.20308782160282135, 0.15620145201683044, 0.13070771098136902, 0.10880111157894135, 0.094716377556324, 0.08307013660669327, 0.07754601538181305, 0.07164481282234192, 0.06943210959434509, 0.06493032723665237, 0.06407537311315536, 0.06037707254290581, 0.06043918803334236, 0.05817326158285141, 0.05809958651661873, 0.056274596601724625, 0.05509977415204048, 0.055397406220436096, 0.0545777902007103, 0.05367562174797058, 0.05340550094842911], 'mae': [0.3291586935520172, 0.2919415533542633, 0.2742677330970764, 0.24910393357276917, 0.2326553910970688, 0.22174835205078125, 0.21446503698825836, 0.20547913014888763, 0.2015177309513092, 0.1957298219203949, 0.19407248497009277, 0.18672092258930206, 0.18720294535160065, 0.18272656202316284, 0.18012239038944244, 0.17860625684261322, 0.17714005708694458, 0.17649713158607483, 0.17459401488304138, 0.17332904040813446, 0.17135991156101227], 'val_loss': [0.17734308540821075, 0.1162656769156456, 0.09278219938278198, 0.09264571219682693, 0.07370201498270035, 0.06695155054330826, 0.06997953355312347, 0.0686386376619339, 0.06655775010585785, 0.059843502938747406, 0.058455754071474075, 0.059916336089372635, 0.05556359887123108, 0.056043840944767, 0.05965633690357208, 0.05033942684531212, 0.05424860864877701, 0.05160541087388992, 0.05097566172480583, 0.0511496365070343, 0.052493561059236526], 'val_mae': [0.2996959686279297, 0.24504882097244263, 0.21479792892932892, 0.21317322552204132, 0.1914076954126358, 0.18270330131053925, 0.18779592216014862, 0.18614886701107025, 0.1827651560306549, 0.17299506068229675, 0.17057952284812927, 0.17221589386463165, 0.1657562106847763, 0.16630299389362335, 0.17132316529750824, 0.15742506086826324, 0.1632954478263855, 0.15914182364940643, 0.15807445347309113, 0.15828336775302887, 0.16059334576129913]}
2026-05-20 06:44:10,178 - INFO - Model training complete. Best model saved as /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month01_dekad21.keras
2026-05-20 06:44:10,180 - INFO - Pipeline [01 d3]: Loading confidence mask...
2026-05-20 06:44:10,185 - INFO - Loading existing confidence mask: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/station_density/confidence_mask_station_density.nc4
2026-05-20 06:44:10,186 - INFO - Pipeline [01 d3]: Applying DL refinement...
2026-05-20 06:44:10,200 - INFO - Pixel-wise threshold map computed at 80th percentile. threshold_2d shape: (9, 14)
2026-05-20 06:44:10,201 - INFO - DL blending: base alpha=0.70 (LSEQM weight), 1-alpha=0.30 (DL weight)
2026-05-20 06:44:10,204 - INFO - Confidence mask active: spatial alpha modulation enabled. Confidence range: [0.000, 0.411]
2026-05-20 06:44:29,515 - INFO - DL blending complete: 275 daily slices processed, 4,400 extreme pixels blended (alpha=0.70)
2026-05-20 06:44:29,607 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (275, 9, 14)
2026-05-20 06:44:29,679 - INFO - Saved Hybrid Deep Learning-Physical (Linear Scaling and Empirical Quantile Mapping) Approach corrected precipitation for month 01, dekad 21 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_lseqmdl_corrected_imergl_month01_dekad21.nc4
2026-05-20 06:44:29,681 - INFO - Pipeline [01 d3]: Complete.
✓ month 01 dekad 3 — saved: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_imergl_lseqmdl_corrected_precip_month01_dekad21.nc4
============================================================
▸ month 02 dekad 1
============================================================
2026-05-20 06:44:29,683 - INFO - Pipeline [02 d1]: Running LSEQM...
2026-05-20 06:44:29,688 - INFO - Aligning IMERG and CPC datasets...
2026-05-20 06:44:29,707 - INFO - After alignment: IMERG has 9131 time steps, CPC has 9131 time steps
2026-05-20 06:44:29,708 - INFO - Creating time-based masks...
2026-05-20 06:44:29,720 - INFO - Applying time masks...
2026-05-20 06:44:29,736 - INFO - IMERG dekad data shape: (250, 9, 14)
2026-05-20 06:44:29,737 - INFO - CPC dekad data shape: (250, 9, 14)
2026-05-20 06:44:29,742 - INFO - Using native-resolution CPC parameter fitting (BCSD principle)...
2026-05-20 06:44:29,767 - INFO - CPC native dekad data: (250, 4, 6) (lat -9.25–-7.75, lon 113.75–116.25)
2026-05-20 06:44:32,030 - INFO - Native CPC fitting: row 4/4 (100%) | 24 fitted, 0 skipped | elapsed 2s, ETA 0s
2026-05-20 06:44:32,031 - INFO - Fitted CPC params on native grid: 24/24 cells
2026-05-20 06:44:32,074 - INFO - Interpolated CPC params to IMERG grid: 126/126 valid pixels
2026-05-20 06:44:32,075 - INFO - Performing Linear Scaling (LS)...
2026-05-20 06:44:32,084 - INFO - LS using bilinearly interpolated CPC mean (smooth).
2026-05-20 06:44:32,087 - INFO - Saving LS corrected precipitation...
2026-05-20 06:44:32,090 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:44:32,139 - INFO - Saved Linear Scaling corrected precipitation for month 02, dekad 01 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_ls/bali_cli_ls_corrected_imergl_month02_dekad01.nc4
2026-05-20 06:44:32,140 - INFO - Applying Empirical Quantile Mapping (EQM) on 9x14 grid...
2026-05-20 06:44:32,222 - INFO - EQM progress: row 9/9 (100%) | 80 land pixels done | elapsed 0s, ETA 0s
2026-05-20 06:44:32,225 - INFO - EQM complete: 80/126 grid points corrected (46 masked/ocean pixels skipped)
2026-05-20 06:44:32,227 - INFO - Saving LSEQM corrected precipitation...
2026-05-20 06:44:32,230 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:44:32,273 - INFO - Saved Linear Scaling and Empirical Quantile Mapping corrected precipitation for month 02, dekad 01 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqm/bali_cli_lseqm_corrected_imergl_month02_dekad01.nc4
2026-05-20 06:44:32,274 - INFO - Pipeline [02 d1]: Training / loading DL model...
2026-05-20 06:44:32,276 - INFO - Checking if the model file exists at: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month02_dekad01.keras
2026-05-20 06:44:32,339 - INFO - Model: "sequential_3"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ conv2d_6 (Conv2D) │ (None, 9, 14, 32) │ 320 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_6 (MaxPooling2D) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_9 (Dropout) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_7 (Conv2D) │ (None, 4, 7, 64) │ 18,496 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_7 (MaxPooling2D) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_10 (Dropout) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ flatten_3 (Flatten) │ (None, 384) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_6 (Dense) │ (None, 128) │ 49,280 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_11 (Dropout) │ (None, 128) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_7 (Dense) │ (None, 126) │ 16,254 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ reshape_3 (Reshape) │ (None, 9, 14) │ 0 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 84,350 (329.49 KB)
Trainable params: 84,350 (329.49 KB)
Non-trainable params: 0 (0.00 B)
Epoch 1/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 1s 92ms/step - loss: 0.2135 - mae: 0.3382 - val_loss: 0.2026 - val_mae: 0.3245
Epoch 2/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 41ms/step - loss: 0.1735 - mae: 0.3055 - val_loss: 0.1509 - val_mae: 0.2838
Epoch 3/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 45ms/step - loss: 0.1401 - mae: 0.2825 - val_loss: 0.1036 - val_mae: 0.2351
Epoch 4/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.1202 - mae: 0.2650 - val_loss: 0.0934 - val_mae: 0.2179
Epoch 5/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 47ms/step - loss: 0.1002 - mae: 0.2402 - val_loss: 0.0892 - val_mae: 0.2111
Epoch 6/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 41ms/step - loss: 0.0880 - mae: 0.2254 - val_loss: 0.0725 - val_mae: 0.1913
Epoch 7/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 45ms/step - loss: 0.0808 - mae: 0.2184 - val_loss: 0.0616 - val_mae: 0.1763
Epoch 8/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0757 - mae: 0.2114 - val_loss: 0.0746 - val_mae: 0.1912
Epoch 9/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0734 - mae: 0.2053 - val_loss: 0.0728 - val_mae: 0.1887
Epoch 10/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0696 - mae: 0.2014 - val_loss: 0.0600 - val_mae: 0.1724
Epoch 11/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 46ms/step - loss: 0.0696 - mae: 0.2016 - val_loss: 0.0545 - val_mae: 0.1633
Epoch 12/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 25ms/step - loss: 0.0650 - mae: 0.1950 - val_loss: 0.0596 - val_mae: 0.1698
Epoch 13/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0618 - mae: 0.1897 - val_loss: 0.0660 - val_mae: 0.1787
Epoch 14/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 25ms/step - loss: 0.0628 - mae: 0.1889 - val_loss: 0.0582 - val_mae: 0.1688
Epoch 15/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0610 - mae: 0.1878 - val_loss: 0.0593 - val_mae: 0.1689
Epoch 16/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0603 - mae: 0.1844 - val_loss: 0.0624 - val_mae: 0.1725
2026-05-20 06:44:36,128 - INFO - Final training history: {'loss': [0.21354831755161285, 0.17349596321582794, 0.14014247059822083, 0.12023284286260605, 0.10020788013935089, 0.08801314979791641, 0.08079531788825989, 0.0756792277097702, 0.07335935533046722, 0.0696042850613594, 0.06962169706821442, 0.06498753279447556, 0.06180281192064285, 0.06279342621564865, 0.060997847467660904, 0.06030552461743355], 'mae': [0.3382287621498108, 0.3054918944835663, 0.282470703125, 0.26499703526496887, 0.24015909433364868, 0.22543779015541077, 0.2183951735496521, 0.21139270067214966, 0.2053055614233017, 0.20136885344982147, 0.2016371488571167, 0.19496563076972961, 0.18969713151454926, 0.1888928860425949, 0.1877540647983551, 0.18438327312469482], 'val_loss': [0.20260170102119446, 0.15089011192321777, 0.10364017635583878, 0.09337744116783142, 0.08917540311813354, 0.07253894954919815, 0.061626411974430084, 0.07464388757944107, 0.07278508692979813, 0.05998211354017258, 0.05448383465409279, 0.05960274115204811, 0.06602084636688232, 0.05823378264904022, 0.05928121507167816, 0.06240106746554375], 'val_mae': [0.32445797324180603, 0.2837862968444824, 0.23509134352207184, 0.2179330438375473, 0.21114669740200043, 0.19128113985061646, 0.1763399839401245, 0.19121074676513672, 0.1887337863445282, 0.172370046377182, 0.16327837109565735, 0.16983062028884888, 0.17870882153511047, 0.1688223034143448, 0.1689072549343109, 0.1724947690963745]}
2026-05-20 06:44:36,274 - INFO - Model training complete. Best model saved as /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month02_dekad01.keras
2026-05-20 06:44:36,279 - INFO - Pipeline [02 d1]: Loading confidence mask...
2026-05-20 06:44:36,280 - INFO - Loading existing confidence mask: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/station_density/confidence_mask_station_density.nc4
2026-05-20 06:44:36,281 - INFO - Pipeline [02 d1]: Applying DL refinement...
2026-05-20 06:44:36,299 - INFO - Pixel-wise threshold map computed at 80th percentile. threshold_2d shape: (9, 14)
2026-05-20 06:44:36,300 - INFO - DL blending: base alpha=0.70 (LSEQM weight), 1-alpha=0.30 (DL weight)
2026-05-20 06:44:36,301 - INFO - Confidence mask active: spatial alpha modulation enabled. Confidence range: [0.000, 0.411]
2026-05-20 06:44:53,566 - INFO - DL blending complete: 250 daily slices processed, 4,000 extreme pixels blended (alpha=0.70)
2026-05-20 06:44:53,653 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:44:53,697 - INFO - Saved Hybrid Deep Learning-Physical (Linear Scaling and Empirical Quantile Mapping) Approach corrected precipitation for month 02, dekad 01 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_lseqmdl_corrected_imergl_month02_dekad01.nc4
2026-05-20 06:44:53,699 - INFO - Pipeline [02 d1]: Complete.
✓ month 02 dekad 1 — saved: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_imergl_lseqmdl_corrected_precip_month02_dekad01.nc4
============================================================
▸ month 02 dekad 2
============================================================
2026-05-20 06:44:53,701 - INFO - Pipeline [02 d2]: Running LSEQM...
2026-05-20 06:44:53,707 - INFO - Aligning IMERG and CPC datasets...
2026-05-20 06:44:53,714 - INFO - After alignment: IMERG has 9131 time steps, CPC has 9131 time steps
2026-05-20 06:44:53,715 - INFO - Creating time-based masks...
2026-05-20 06:44:53,727 - INFO - Applying time masks...
2026-05-20 06:44:53,737 - INFO - IMERG dekad data shape: (250, 9, 14)
2026-05-20 06:44:53,738 - INFO - CPC dekad data shape: (250, 9, 14)
2026-05-20 06:44:53,742 - INFO - Using native-resolution CPC parameter fitting (BCSD principle)...
2026-05-20 06:44:53,766 - INFO - CPC native dekad data: (250, 4, 6) (lat -9.25–-7.75, lon 113.75–116.25)
2026-05-20 06:44:56,016 - INFO - Native CPC fitting: row 4/4 (100%) | 24 fitted, 0 skipped | elapsed 2s, ETA 0s
2026-05-20 06:44:56,017 - INFO - Fitted CPC params on native grid: 24/24 cells
2026-05-20 06:44:56,060 - INFO - Interpolated CPC params to IMERG grid: 126/126 valid pixels
2026-05-20 06:44:56,060 - INFO - Performing Linear Scaling (LS)...
2026-05-20 06:44:56,070 - INFO - LS using bilinearly interpolated CPC mean (smooth).
2026-05-20 06:44:56,073 - INFO - Saving LS corrected precipitation...
2026-05-20 06:44:56,078 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:44:56,130 - INFO - Saved Linear Scaling corrected precipitation for month 02, dekad 11 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_ls/bali_cli_ls_corrected_imergl_month02_dekad11.nc4
2026-05-20 06:44:56,132 - INFO - Applying Empirical Quantile Mapping (EQM) on 9x14 grid...
2026-05-20 06:44:56,222 - INFO - EQM progress: row 9/9 (100%) | 80 land pixels done | elapsed 0s, ETA 0s
2026-05-20 06:44:56,226 - INFO - EQM complete: 80/126 grid points corrected (46 masked/ocean pixels skipped)
2026-05-20 06:44:56,228 - INFO - Saving LSEQM corrected precipitation...
2026-05-20 06:44:56,230 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:44:56,283 - INFO - Saved Linear Scaling and Empirical Quantile Mapping corrected precipitation for month 02, dekad 11 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqm/bali_cli_lseqm_corrected_imergl_month02_dekad11.nc4
2026-05-20 06:44:56,284 - INFO - Pipeline [02 d2]: Training / loading DL model...
2026-05-20 06:44:56,285 - INFO - Checking if the model file exists at: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month02_dekad11.keras
2026-05-20 06:44:56,352 - INFO - Model: "sequential_4"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ conv2d_8 (Conv2D) │ (None, 9, 14, 32) │ 320 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_8 (MaxPooling2D) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_12 (Dropout) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_9 (Conv2D) │ (None, 4, 7, 64) │ 18,496 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_9 (MaxPooling2D) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_13 (Dropout) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ flatten_4 (Flatten) │ (None, 384) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_8 (Dense) │ (None, 128) │ 49,280 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_14 (Dropout) │ (None, 128) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_9 (Dense) │ (None, 126) │ 16,254 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ reshape_4 (Reshape) │ (None, 9, 14) │ 0 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 84,350 (329.49 KB)
Trainable params: 84,350 (329.49 KB)
Non-trainable params: 0 (0.00 B)
Epoch 1/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 1s 93ms/step - loss: 0.1845 - mae: 0.3021 - val_loss: 0.1777 - val_mae: 0.2977
Epoch 2/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 45ms/step - loss: 0.1586 - mae: 0.2801 - val_loss: 0.1428 - val_mae: 0.2681
Epoch 3/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.1313 - mae: 0.2635 - val_loss: 0.0997 - val_mae: 0.2232
Epoch 4/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 46ms/step - loss: 0.1154 - mae: 0.2555 - val_loss: 0.0855 - val_mae: 0.2020
Epoch 5/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 39ms/step - loss: 0.0961 - mae: 0.2309 - val_loss: 0.0838 - val_mae: 0.1974
Epoch 6/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0872 - mae: 0.2200 - val_loss: 0.0684 - val_mae: 0.1804
Epoch 7/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 41ms/step - loss: 0.0817 - mae: 0.2167 - val_loss: 0.0613 - val_mae: 0.1703
Epoch 8/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 40ms/step - loss: 0.0727 - mae: 0.2045 - val_loss: 0.0606 - val_mae: 0.1671
Epoch 9/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0698 - mae: 0.1989 - val_loss: 0.0556 - val_mae: 0.1599
Epoch 10/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0672 - mae: 0.1960 - val_loss: 0.0535 - val_mae: 0.1566
Epoch 11/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0649 - mae: 0.1925 - val_loss: 0.0539 - val_mae: 0.1567
Epoch 12/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0633 - mae: 0.1898 - val_loss: 0.0517 - val_mae: 0.1539
Epoch 13/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0602 - mae: 0.1856 - val_loss: 0.0514 - val_mae: 0.1529
Epoch 14/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0604 - mae: 0.1844 - val_loss: 0.0499 - val_mae: 0.1510
Epoch 15/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0554 - mae: 0.1773 - val_loss: 0.0522 - val_mae: 0.1536
Epoch 16/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 25ms/step - loss: 0.0587 - mae: 0.1801 - val_loss: 0.0526 - val_mae: 0.1538
Epoch 17/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0569 - mae: 0.1781 - val_loss: 0.0465 - val_mae: 0.1471
Epoch 18/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0562 - mae: 0.1777 - val_loss: 0.0519 - val_mae: 0.1521
Epoch 19/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0548 - mae: 0.1733 - val_loss: 0.0527 - val_mae: 0.1527
Epoch 20/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0550 - mae: 0.1727 - val_loss: 0.0501 - val_mae: 0.1498
Epoch 21/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0542 - mae: 0.1726 - val_loss: 0.0484 - val_mae: 0.1480
Epoch 22/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0535 - mae: 0.1712 - val_loss: 0.0500 - val_mae: 0.1501
2026-05-20 06:45:01,082 - INFO - Final training history: {'loss': [0.1844872683286667, 0.15857023000717163, 0.1312524378299713, 0.11537105590105057, 0.09609176963567734, 0.0872235894203186, 0.08174058049917221, 0.0726628452539444, 0.06978287547826767, 0.06724546104669571, 0.06486018002033234, 0.0632866844534874, 0.060169514268636703, 0.060375723987817764, 0.0553988441824913, 0.05870674178004265, 0.056928765028715134, 0.056202102452516556, 0.05476796627044678, 0.0549740307033062, 0.05421825870871544, 0.053516682237386703], 'mae': [0.302129864692688, 0.28008314967155457, 0.2635427415370941, 0.2555197477340698, 0.2308991402387619, 0.21996565163135529, 0.2167135626077652, 0.20451687276363373, 0.1989201158285141, 0.19598805904388428, 0.19251291453838348, 0.1897735446691513, 0.18563523888587952, 0.18439266085624695, 0.1772807240486145, 0.18010199069976807, 0.1780635118484497, 0.1776948869228363, 0.17328386008739471, 0.17269054055213928, 0.17257174849510193, 0.17122691869735718], 'val_loss': [0.17765425145626068, 0.14280562102794647, 0.09970273077487946, 0.0855330154299736, 0.08376310020685196, 0.06844213604927063, 0.06130163371562958, 0.060635682195425034, 0.055611833930015564, 0.0534619465470314, 0.0539204403758049, 0.05168478190898895, 0.05141167715191841, 0.049936044961214066, 0.0521651953458786, 0.05261595547199249, 0.046503759920597076, 0.05192512646317482, 0.05272190272808075, 0.05013742297887802, 0.04839179664850235, 0.049999259412288666], 'val_mae': [0.2977409064769745, 0.26813608407974243, 0.22319895029067993, 0.2019546627998352, 0.19736939668655396, 0.180392324924469, 0.1703275442123413, 0.16707275807857513, 0.1598917543888092, 0.15662142634391785, 0.1567327082157135, 0.15392018854618073, 0.15288327634334564, 0.15104813873767853, 0.15358345210552216, 0.15384948253631592, 0.14708565175533295, 0.1520715206861496, 0.15267649292945862, 0.14983941614627838, 0.14802150428295135, 0.15014119446277618]}
2026-05-20 06:45:01,237 - INFO - Model training complete. Best model saved as /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month02_dekad11.keras
2026-05-20 06:45:01,239 - INFO - Pipeline [02 d2]: Loading confidence mask...
2026-05-20 06:45:01,242 - INFO - Loading existing confidence mask: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/station_density/confidence_mask_station_density.nc4
2026-05-20 06:45:01,243 - INFO - Pipeline [02 d2]: Applying DL refinement...
2026-05-20 06:45:01,258 - INFO - Pixel-wise threshold map computed at 80th percentile. threshold_2d shape: (9, 14)
2026-05-20 06:45:01,259 - INFO - DL blending: base alpha=0.70 (LSEQM weight), 1-alpha=0.30 (DL weight)
2026-05-20 06:45:01,260 - INFO - Confidence mask active: spatial alpha modulation enabled. Confidence range: [0.000, 0.411]
2026-05-20 06:45:19,032 - INFO - DL blending complete: 250 daily slices processed, 4,000 extreme pixels blended (alpha=0.70)
2026-05-20 06:45:19,573 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:45:19,632 - INFO - Saved Hybrid Deep Learning-Physical (Linear Scaling and Empirical Quantile Mapping) Approach corrected precipitation for month 02, dekad 11 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_lseqmdl_corrected_imergl_month02_dekad11.nc4
2026-05-20 06:45:19,633 - INFO - Pipeline [02 d2]: Complete.
✓ month 02 dekad 2 — saved: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_imergl_lseqmdl_corrected_precip_month02_dekad11.nc4
============================================================
▸ month 02 dekad 3
============================================================
2026-05-20 06:45:19,638 - INFO - Pipeline [02 d3]: Running LSEQM...
2026-05-20 06:45:19,643 - INFO - Aligning IMERG and CPC datasets...
2026-05-20 06:45:19,651 - INFO - After alignment: IMERG has 9131 time steps, CPC has 9131 time steps
2026-05-20 06:45:19,652 - INFO - Creating time-based masks...
2026-05-20 06:45:19,661 - INFO - Applying time masks...
2026-05-20 06:45:19,671 - INFO - IMERG dekad data shape: (206, 9, 14)
2026-05-20 06:45:19,671 - INFO - CPC dekad data shape: (206, 9, 14)
2026-05-20 06:45:19,677 - INFO - Using native-resolution CPC parameter fitting (BCSD principle)...
2026-05-20 06:45:19,697 - INFO - CPC native dekad data: (206, 4, 6) (lat -9.25–-7.75, lon 113.75–116.25)
2026-05-20 06:45:21,857 - INFO - Native CPC fitting: row 4/4 (100%) | 24 fitted, 0 skipped | elapsed 2s, ETA 0s
2026-05-20 06:45:21,857 - INFO - Fitted CPC params on native grid: 24/24 cells
2026-05-20 06:45:21,896 - INFO - Interpolated CPC params to IMERG grid: 126/126 valid pixels
2026-05-20 06:45:21,897 - INFO - Performing Linear Scaling (LS)...
2026-05-20 06:45:21,907 - INFO - LS using bilinearly interpolated CPC mean (smooth).
2026-05-20 06:45:21,909 - INFO - Saving LS corrected precipitation...
2026-05-20 06:45:21,912 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (206, 9, 14)
2026-05-20 06:45:21,962 - INFO - Saved Linear Scaling corrected precipitation for month 02, dekad 21 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_ls/bali_cli_ls_corrected_imergl_month02_dekad21.nc4
2026-05-20 06:45:21,964 - INFO - Applying Empirical Quantile Mapping (EQM) on 9x14 grid...
2026-05-20 06:45:22,045 - INFO - EQM progress: row 9/9 (100%) | 80 land pixels done | elapsed 0s, ETA 0s
2026-05-20 06:45:22,049 - INFO - EQM complete: 80/126 grid points corrected (46 masked/ocean pixels skipped)
2026-05-20 06:45:22,049 - INFO - Saving LSEQM corrected precipitation...
2026-05-20 06:45:22,052 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (206, 9, 14)
2026-05-20 06:45:22,097 - INFO - Saved Linear Scaling and Empirical Quantile Mapping corrected precipitation for month 02, dekad 21 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqm/bali_cli_lseqm_corrected_imergl_month02_dekad21.nc4
2026-05-20 06:45:22,099 - INFO - Pipeline [02 d3]: Training / loading DL model...
2026-05-20 06:45:22,101 - INFO - Checking if the model file exists at: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month02_dekad21.keras
2026-05-20 06:45:22,170 - INFO - Model: "sequential_5"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ conv2d_10 (Conv2D) │ (None, 9, 14, 32) │ 320 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_10 (MaxPooling2D) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_15 (Dropout) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_11 (Conv2D) │ (None, 4, 7, 64) │ 18,496 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_11 (MaxPooling2D) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_16 (Dropout) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ flatten_5 (Flatten) │ (None, 384) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_10 (Dense) │ (None, 128) │ 49,280 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_17 (Dropout) │ (None, 128) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_11 (Dense) │ (None, 126) │ 16,254 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ reshape_5 (Reshape) │ (None, 9, 14) │ 0 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 84,350 (329.49 KB)
Trainable params: 84,350 (329.49 KB)
Non-trainable params: 0 (0.00 B)
Epoch 1/50
3/3 ━━━━━━━━━━━━━━━━━━━━ 2s 139ms/step - loss: 0.1790 - mae: 0.2979 - val_loss: 0.2276 - val_mae: 0.3497
Epoch 2/50
3/3 ━━━━━━━━━━━━━━━━━━━━ 0s 55ms/step - loss: 0.1603 - mae: 0.2808 - val_loss: 0.1987 - val_mae: 0.3260
Epoch 3/50
3/3 ━━━━━━━━━━━━━━━━━━━━ 0s 62ms/step - loss: 0.1395 - mae: 0.2654 - val_loss: 0.1499 - val_mae: 0.2794
Epoch 4/50
3/3 ━━━━━━━━━━━━━━━━━━━━ 0s 66ms/step - loss: 0.1179 - mae: 0.2526 - val_loss: 0.1069 - val_mae: 0.2327
Epoch 5/50
3/3 ━━━━━━━━━━━━━━━━━━━━ 0s 60ms/step - loss: 0.1078 - mae: 0.2466 - val_loss: 0.0923 - val_mae: 0.2121
Epoch 6/50
3/3 ━━━━━━━━━━━━━━━━━━━━ 0s 34ms/step - loss: 0.0946 - mae: 0.2300 - val_loss: 0.0942 - val_mae: 0.2129
Epoch 7/50
3/3 ━━━━━━━━━━━━━━━━━━━━ 0s 64ms/step - loss: 0.0858 - mae: 0.2167 - val_loss: 0.0892 - val_mae: 0.2076
Epoch 8/50
3/3 ━━━━━━━━━━━━━━━━━━━━ 0s 65ms/step - loss: 0.0793 - mae: 0.2093 - val_loss: 0.0750 - val_mae: 0.1903
Epoch 9/50
3/3 ━━━━━━━━━━━━━━━━━━━━ 0s 58ms/step - loss: 0.0718 - mae: 0.2015 - val_loss: 0.0637 - val_mae: 0.1750
Epoch 10/50
3/3 ━━━━━━━━━━━━━━━━━━━━ 0s 37ms/step - loss: 0.0690 - mae: 0.1989 - val_loss: 0.0669 - val_mae: 0.1781
Epoch 11/50
3/3 ━━━━━━━━━━━━━━━━━━━━ 0s 39ms/step - loss: 0.0646 - mae: 0.1905 - val_loss: 0.0717 - val_mae: 0.1838
Epoch 12/50
3/3 ━━━━━━━━━━━━━━━━━━━━ 0s 35ms/step - loss: 0.0637 - mae: 0.1885 - val_loss: 0.0660 - val_mae: 0.1754
Epoch 13/50
3/3 ━━━━━━━━━━━━━━━━━━━━ 0s 57ms/step - loss: 0.0635 - mae: 0.1884 - val_loss: 0.0588 - val_mae: 0.1646
Epoch 14/50
3/3 ━━━━━━━━━━━━━━━━━━━━ 0s 34ms/step - loss: 0.0606 - mae: 0.1851 - val_loss: 0.0588 - val_mae: 0.1642
Epoch 15/50
3/3 ━━━━━━━━━━━━━━━━━━━━ 0s 34ms/step - loss: 0.0576 - mae: 0.1804 - val_loss: 0.0608 - val_mae: 0.1671
Epoch 16/50
3/3 ━━━━━━━━━━━━━━━━━━━━ 0s 36ms/step - loss: 0.0587 - mae: 0.1805 - val_loss: 0.0646 - val_mae: 0.1723
Epoch 17/50
3/3 ━━━━━━━━━━━━━━━━━━━━ 0s 37ms/step - loss: 0.0570 - mae: 0.1768 - val_loss: 0.0642 - val_mae: 0.1717
Epoch 18/50
3/3 ━━━━━━━━━━━━━━━━━━━━ 0s 60ms/step - loss: 0.0566 - mae: 0.1757 - val_loss: 0.0560 - val_mae: 0.1599
Epoch 19/50
3/3 ━━━━━━━━━━━━━━━━━━━━ 0s 67ms/step - loss: 0.0545 - mae: 0.1736 - val_loss: 0.0539 - val_mae: 0.1566
Epoch 20/50
3/3 ━━━━━━━━━━━━━━━━━━━━ 0s 34ms/step - loss: 0.0546 - mae: 0.1728 - val_loss: 0.0655 - val_mae: 0.1730
Epoch 21/50
3/3 ━━━━━━━━━━━━━━━━━━━━ 0s 36ms/step - loss: 0.0543 - mae: 0.1704 - val_loss: 0.0581 - val_mae: 0.1621
Epoch 22/50
3/3 ━━━━━━━━━━━━━━━━━━━━ 0s 61ms/step - loss: 0.0513 - mae: 0.1673 - val_loss: 0.0511 - val_mae: 0.1518
Epoch 23/50
3/3 ━━━━━━━━━━━━━━━━━━━━ 0s 35ms/step - loss: 0.0530 - mae: 0.1715 - val_loss: 0.0549 - val_mae: 0.1571
Epoch 24/50
3/3 ━━━━━━━━━━━━━━━━━━━━ 0s 36ms/step - loss: 0.0521 - mae: 0.1672 - val_loss: 0.0636 - val_mae: 0.1696
Epoch 25/50
3/3 ━━━━━━━━━━━━━━━━━━━━ 0s 35ms/step - loss: 0.0528 - mae: 0.1671 - val_loss: 0.0535 - val_mae: 0.1551
Epoch 26/50
3/3 ━━━━━━━━━━━━━━━━━━━━ 0s 71ms/step - loss: 0.0492 - mae: 0.1627 - val_loss: 0.0500 - val_mae: 0.1500
Epoch 27/50
3/3 ━━━━━━━━━━━━━━━━━━━━ 0s 35ms/step - loss: 0.0509 - mae: 0.1653 - val_loss: 0.0558 - val_mae: 0.1582
Epoch 28/50
3/3 ━━━━━━━━━━━━━━━━━━━━ 0s 33ms/step - loss: 0.0495 - mae: 0.1625 - val_loss: 0.0564 - val_mae: 0.1590
Epoch 29/50
3/3 ━━━━━━━━━━━━━━━━━━━━ 0s 36ms/step - loss: 0.0488 - mae: 0.1611 - val_loss: 0.0516 - val_mae: 0.1520
Epoch 30/50
3/3 ━━━━━━━━━━━━━━━━━━━━ 0s 38ms/step - loss: 0.0472 - mae: 0.1600 - val_loss: 0.0530 - val_mae: 0.1539
Epoch 31/50
3/3 ━━━━━━━━━━━━━━━━━━━━ 0s 39ms/step - loss: 0.0480 - mae: 0.1589 - val_loss: 0.0569 - val_mae: 0.1598
2026-05-20 06:45:27,893 - INFO - Final training history: {'loss': [0.1789560317993164, 0.16030049324035645, 0.1395014524459839, 0.11793255060911179, 0.10776296257972717, 0.09461528807878494, 0.0858316421508789, 0.0793251171708107, 0.07181664556264877, 0.06903320550918579, 0.06458926945924759, 0.06369287520647049, 0.06352037936449051, 0.06055975705385208, 0.05764571577310562, 0.058689385652542114, 0.05703069642186165, 0.0565606914460659, 0.05452672392129898, 0.0546339713037014, 0.05426904186606407, 0.051314808428287506, 0.053042370826005936, 0.05213363468647003, 0.05278407782316208, 0.04921576380729675, 0.05087651312351227, 0.049510855227708817, 0.04875699058175087, 0.04723681882023811, 0.0479959212243557], 'mae': [0.29793086647987366, 0.280754029750824, 0.26538658142089844, 0.2526302635669708, 0.24662499129772186, 0.23004448413848877, 0.21669109165668488, 0.2093299776315689, 0.20145337283611298, 0.19893448054790497, 0.19050325453281403, 0.18846529722213745, 0.1884266585111618, 0.18507538735866547, 0.1803891658782959, 0.18050722777843475, 0.1767542064189911, 0.17568863928318024, 0.17358900606632233, 0.172810897231102, 0.17041583359241486, 0.16732916235923767, 0.1715494990348816, 0.1672215759754181, 0.1671314239501953, 0.1626947671175003, 0.16533508896827698, 0.16247057914733887, 0.16112643480300903, 0.16003049910068512, 0.15885137021541595], 'val_loss': [0.22762072086334229, 0.19868600368499756, 0.14994600415229797, 0.10694567114114761, 0.0922965481877327, 0.09416032582521439, 0.08922995626926422, 0.07503973692655563, 0.06369492411613464, 0.066945381462574, 0.07171638309955597, 0.06601365655660629, 0.05876309424638748, 0.05877707526087761, 0.06082889065146446, 0.06462284922599792, 0.06417165696620941, 0.0559767410159111, 0.05388910323381424, 0.06546879559755325, 0.058074820786714554, 0.05113634467124939, 0.05488074570894241, 0.06360161304473877, 0.05350528284907341, 0.05004037171602249, 0.05576566234230995, 0.05637217313051224, 0.05164773762226105, 0.05299306660890579, 0.056892555207014084], 'val_mae': [0.3496755063533783, 0.3260327875614166, 0.279406875371933, 0.23274174332618713, 0.2120528221130371, 0.2128923088312149, 0.20755161345005035, 0.19025371968746185, 0.17504706978797913, 0.17805004119873047, 0.18379242718219757, 0.1754438430070877, 0.16464030742645264, 0.16424515843391418, 0.16714923083782196, 0.17234119772911072, 0.17165033519268036, 0.1598782241344452, 0.1566443145275116, 0.17302894592285156, 0.16206865012645721, 0.15184511244297028, 0.15714871883392334, 0.16963137686252594, 0.15509192645549774, 0.14999493956565857, 0.15817081928253174, 0.15903544425964355, 0.15197508037090302, 0.15392892062664032, 0.15977522730827332]}
2026-05-20 06:45:28,030 - INFO - Model training complete. Best model saved as /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month02_dekad21.keras
2026-05-20 06:45:28,032 - INFO - Pipeline [02 d3]: Loading confidence mask...
2026-05-20 06:45:28,034 - INFO - Loading existing confidence mask: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/station_density/confidence_mask_station_density.nc4
2026-05-20 06:45:28,035 - INFO - Pipeline [02 d3]: Applying DL refinement...
2026-05-20 06:45:28,052 - INFO - Pixel-wise threshold map computed at 80th percentile. threshold_2d shape: (9, 14)
2026-05-20 06:45:28,053 - INFO - DL blending: base alpha=0.70 (LSEQM weight), 1-alpha=0.30 (DL weight)
2026-05-20 06:45:28,055 - INFO - Confidence mask active: spatial alpha modulation enabled. Confidence range: [0.000, 0.411]
2026-05-20 06:45:42,176 - INFO - DL blending complete: 206 daily slices processed, 3,280 extreme pixels blended (alpha=0.70)
2026-05-20 06:45:42,278 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (206, 9, 14)
2026-05-20 06:45:42,321 - INFO - Saved Hybrid Deep Learning-Physical (Linear Scaling and Empirical Quantile Mapping) Approach corrected precipitation for month 02, dekad 21 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_lseqmdl_corrected_imergl_month02_dekad21.nc4
2026-05-20 06:45:42,324 - INFO - Pipeline [02 d3]: Complete.
✓ month 02 dekad 3 — saved: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_imergl_lseqmdl_corrected_precip_month02_dekad21.nc4
============================================================
▸ month 03 dekad 1
============================================================
2026-05-20 06:45:42,325 - INFO - Pipeline [03 d1]: Running LSEQM...
2026-05-20 06:45:42,329 - INFO - Aligning IMERG and CPC datasets...
2026-05-20 06:45:42,339 - INFO - After alignment: IMERG has 9131 time steps, CPC has 9131 time steps
2026-05-20 06:45:42,340 - INFO - Creating time-based masks...
2026-05-20 06:45:42,353 - INFO - Applying time masks...
2026-05-20 06:45:42,365 - INFO - IMERG dekad data shape: (250, 9, 14)
2026-05-20 06:45:42,367 - INFO - CPC dekad data shape: (250, 9, 14)
2026-05-20 06:45:42,371 - INFO - Using native-resolution CPC parameter fitting (BCSD principle)...
2026-05-20 06:45:42,409 - INFO - CPC native dekad data: (250, 4, 6) (lat -9.25–-7.75, lon 113.75–116.25)
2026-05-20 06:45:44,972 - INFO - Native CPC fitting: row 4/4 (100%) | 24 fitted, 0 skipped | elapsed 3s, ETA 0s
2026-05-20 06:45:44,973 - INFO - Fitted CPC params on native grid: 24/24 cells
2026-05-20 06:45:45,014 - INFO - Interpolated CPC params to IMERG grid: 126/126 valid pixels
2026-05-20 06:45:45,014 - INFO - Performing Linear Scaling (LS)...
2026-05-20 06:45:45,024 - INFO - LS using bilinearly interpolated CPC mean (smooth).
2026-05-20 06:45:45,026 - INFO - Saving LS corrected precipitation...
2026-05-20 06:45:45,028 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:45:45,076 - INFO - Saved Linear Scaling corrected precipitation for month 03, dekad 01 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_ls/bali_cli_ls_corrected_imergl_month03_dekad01.nc4
2026-05-20 06:45:45,079 - INFO - Applying Empirical Quantile Mapping (EQM) on 9x14 grid...
2026-05-20 06:45:45,165 - INFO - EQM progress: row 9/9 (100%) | 80 land pixels done | elapsed 0s, ETA 0s
2026-05-20 06:45:45,168 - INFO - EQM complete: 80/126 grid points corrected (46 masked/ocean pixels skipped)
2026-05-20 06:45:45,169 - INFO - Saving LSEQM corrected precipitation...
2026-05-20 06:45:45,172 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:45:45,236 - INFO - Saved Linear Scaling and Empirical Quantile Mapping corrected precipitation for month 03, dekad 01 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqm/bali_cli_lseqm_corrected_imergl_month03_dekad01.nc4
2026-05-20 06:45:45,237 - INFO - Pipeline [03 d1]: Training / loading DL model...
2026-05-20 06:45:45,239 - INFO - Checking if the model file exists at: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month03_dekad01.keras
2026-05-20 06:45:45,306 - INFO - Model: "sequential_6"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ conv2d_12 (Conv2D) │ (None, 9, 14, 32) │ 320 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_12 (MaxPooling2D) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_18 (Dropout) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_13 (Conv2D) │ (None, 4, 7, 64) │ 18,496 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_13 (MaxPooling2D) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_19 (Dropout) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ flatten_6 (Flatten) │ (None, 384) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_12 (Dense) │ (None, 128) │ 49,280 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_20 (Dropout) │ (None, 128) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_13 (Dense) │ (None, 126) │ 16,254 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ reshape_6 (Reshape) │ (None, 9, 14) │ 0 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 84,350 (329.49 KB)
Trainable params: 84,350 (329.49 KB)
Non-trainable params: 0 (0.00 B)
Epoch 1/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 1s 88ms/step - loss: 0.1936 - mae: 0.3075 - val_loss: 0.1814 - val_mae: 0.2885
Epoch 2/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.1657 - mae: 0.2851 - val_loss: 0.1453 - val_mae: 0.2637
Epoch 3/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 38ms/step - loss: 0.1338 - mae: 0.2667 - val_loss: 0.0985 - val_mae: 0.2236
Epoch 4/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 40ms/step - loss: 0.1190 - mae: 0.2613 - val_loss: 0.0827 - val_mae: 0.2016
Epoch 5/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0983 - mae: 0.2355 - val_loss: 0.0896 - val_mae: 0.2066
Epoch 6/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0898 - mae: 0.2213 - val_loss: 0.0845 - val_mae: 0.2015
Epoch 7/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 40ms/step - loss: 0.0826 - mae: 0.2143 - val_loss: 0.0678 - val_mae: 0.1839
Epoch 8/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 41ms/step - loss: 0.0791 - mae: 0.2149 - val_loss: 0.0620 - val_mae: 0.1757
Epoch 9/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0747 - mae: 0.2086 - val_loss: 0.0654 - val_mae: 0.1779
Epoch 10/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 25ms/step - loss: 0.0690 - mae: 0.1985 - val_loss: 0.0680 - val_mae: 0.1801
Epoch 11/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0683 - mae: 0.1957 - val_loss: 0.0647 - val_mae: 0.1762
Epoch 12/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 40ms/step - loss: 0.0650 - mae: 0.1917 - val_loss: 0.0619 - val_mae: 0.1726
Epoch 13/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0654 - mae: 0.1929 - val_loss: 0.0597 - val_mae: 0.1693
Epoch 14/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0625 - mae: 0.1875 - val_loss: 0.0640 - val_mae: 0.1733
Epoch 15/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0626 - mae: 0.1853 - val_loss: 0.0674 - val_mae: 0.1768
Epoch 16/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 48ms/step - loss: 0.0624 - mae: 0.1842 - val_loss: 0.0590 - val_mae: 0.1673
Epoch 17/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 40ms/step - loss: 0.0605 - mae: 0.1834 - val_loss: 0.0563 - val_mae: 0.1639
Epoch 18/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0593 - mae: 0.1810 - val_loss: 0.0605 - val_mae: 0.1684
Epoch 19/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0577 - mae: 0.1783 - val_loss: 0.0553 - val_mae: 0.1623
Epoch 20/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 41ms/step - loss: 0.0582 - mae: 0.1801 - val_loss: 0.0543 - val_mae: 0.1609
Epoch 21/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0561 - mae: 0.1768 - val_loss: 0.0626 - val_mae: 0.1703
Epoch 22/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0569 - mae: 0.1741 - val_loss: 0.0587 - val_mae: 0.1658
Epoch 23/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 60ms/step - loss: 0.0552 - mae: 0.1743 - val_loss: 0.0530 - val_mae: 0.1590
Epoch 24/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0543 - mae: 0.1728 - val_loss: 0.0572 - val_mae: 0.1636
Epoch 25/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0538 - mae: 0.1713 - val_loss: 0.0540 - val_mae: 0.1598
Epoch 26/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0517 - mae: 0.1680 - val_loss: 0.0533 - val_mae: 0.1592
Epoch 27/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 25ms/step - loss: 0.0546 - mae: 0.1733 - val_loss: 0.0565 - val_mae: 0.1630
Epoch 28/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0506 - mae: 0.1658 - val_loss: 0.0538 - val_mae: 0.1600
2026-05-20 06:45:50,587 - INFO - Final training history: {'loss': [0.1935749053955078, 0.16571149230003357, 0.13381434977054596, 0.1189967691898346, 0.09832841157913208, 0.08977304399013519, 0.08262119442224503, 0.07905475795269012, 0.07466351985931396, 0.06903257220983505, 0.06826126575469971, 0.06503330171108246, 0.06539613008499146, 0.06247830390930176, 0.06259702146053314, 0.06244172528386116, 0.06051862612366676, 0.05927416682243347, 0.057709354907274246, 0.05817247927188873, 0.05613325536251068, 0.05689767003059387, 0.055218882858753204, 0.05428982153534889, 0.05379246547818184, 0.05171801522374153, 0.054591547697782516, 0.050599027425050735], 'mae': [0.30753931403160095, 0.28506433963775635, 0.26670530438423157, 0.2612638771533966, 0.23554864525794983, 0.22134973108768463, 0.2142675369977951, 0.2149144560098648, 0.208627849817276, 0.1985369473695755, 0.1956886351108551, 0.19169357419013977, 0.19291695952415466, 0.18745389580726624, 0.18534225225448608, 0.18419240415096283, 0.1833987832069397, 0.18097378313541412, 0.17830316722393036, 0.18013334274291992, 0.17679239809513092, 0.17407092452049255, 0.17432737350463867, 0.17284400761127472, 0.17132949829101562, 0.16797754168510437, 0.1732950061559677, 0.16575641930103302], 'val_loss': [0.18138131499290466, 0.14533524215221405, 0.09850285202264786, 0.08273722976446152, 0.08962836861610413, 0.08445116132497787, 0.0678304061293602, 0.061985958367586136, 0.06543078273534775, 0.06800179928541183, 0.06470678746700287, 0.06191898509860039, 0.05967690795660019, 0.06396065652370453, 0.06742255389690399, 0.05903690680861473, 0.05634145811200142, 0.0605105385184288, 0.05530820041894913, 0.0542621947824955, 0.0625881627202034, 0.05865564942359924, 0.05298766493797302, 0.05719616264104843, 0.053986143320798874, 0.053296007215976715, 0.05647846683859825, 0.05375916510820389], 'val_mae': [0.28850603103637695, 0.26371029019355774, 0.2236127257347107, 0.2016483098268509, 0.2066257894039154, 0.20146967470645905, 0.18389223515987396, 0.17570903897285461, 0.17791429162025452, 0.18013599514961243, 0.1761535406112671, 0.1725877970457077, 0.16931277513504028, 0.1732896864414215, 0.17678675055503845, 0.16733264923095703, 0.1639212816953659, 0.16837137937545776, 0.16230939328670502, 0.1608862727880478, 0.17034544050693512, 0.1657872051000595, 0.1589600294828415, 0.16355659067630768, 0.15981101989746094, 0.15915948152542114, 0.16300208866596222, 0.1599869281053543]}
2026-05-20 06:45:50,729 - INFO - Model training complete. Best model saved as /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month03_dekad01.keras
2026-05-20 06:45:50,732 - INFO - Pipeline [03 d1]: Loading confidence mask...
2026-05-20 06:45:50,734 - INFO - Loading existing confidence mask: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/station_density/confidence_mask_station_density.nc4
2026-05-20 06:45:50,735 - INFO - Pipeline [03 d1]: Applying DL refinement...
2026-05-20 06:45:50,749 - INFO - Pixel-wise threshold map computed at 80th percentile. threshold_2d shape: (9, 14)
2026-05-20 06:45:50,750 - INFO - DL blending: base alpha=0.70 (LSEQM weight), 1-alpha=0.30 (DL weight)
2026-05-20 06:45:50,751 - INFO - Confidence mask active: spatial alpha modulation enabled. Confidence range: [0.000, 0.411]
2026-05-20 06:46:08,045 - INFO - DL blending complete: 250 daily slices processed, 4,000 extreme pixels blended (alpha=0.70)
2026-05-20 06:46:08,177 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:46:08,225 - INFO - Saved Hybrid Deep Learning-Physical (Linear Scaling and Empirical Quantile Mapping) Approach corrected precipitation for month 03, dekad 01 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_lseqmdl_corrected_imergl_month03_dekad01.nc4
2026-05-20 06:46:08,226 - INFO - Pipeline [03 d1]: Complete.
✓ month 03 dekad 1 — saved: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_imergl_lseqmdl_corrected_precip_month03_dekad01.nc4
============================================================
▸ month 03 dekad 2
============================================================
2026-05-20 06:46:08,227 - INFO - Pipeline [03 d2]: Running LSEQM...
2026-05-20 06:46:08,234 - INFO - Aligning IMERG and CPC datasets...
2026-05-20 06:46:08,242 - INFO - After alignment: IMERG has 9131 time steps, CPC has 9131 time steps
2026-05-20 06:46:08,244 - INFO - Creating time-based masks...
2026-05-20 06:46:08,254 - INFO - Applying time masks...
2026-05-20 06:46:08,265 - INFO - IMERG dekad data shape: (250, 9, 14)
2026-05-20 06:46:08,266 - INFO - CPC dekad data shape: (250, 9, 14)
2026-05-20 06:46:08,270 - INFO - Using native-resolution CPC parameter fitting (BCSD principle)...
2026-05-20 06:46:08,302 - INFO - CPC native dekad data: (250, 4, 6) (lat -9.25–-7.75, lon 113.75–116.25)
2026-05-20 06:46:10,558 - INFO - Native CPC fitting: row 4/4 (100%) | 24 fitted, 0 skipped | elapsed 2s, ETA 0s
2026-05-20 06:46:10,559 - INFO - Fitted CPC params on native grid: 24/24 cells
2026-05-20 06:46:10,598 - INFO - Interpolated CPC params to IMERG grid: 126/126 valid pixels
2026-05-20 06:46:10,599 - INFO - Performing Linear Scaling (LS)...
2026-05-20 06:46:10,611 - INFO - LS using bilinearly interpolated CPC mean (smooth).
2026-05-20 06:46:10,613 - INFO - Saving LS corrected precipitation...
2026-05-20 06:46:10,615 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:46:10,662 - INFO - Saved Linear Scaling corrected precipitation for month 03, dekad 11 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_ls/bali_cli_ls_corrected_imergl_month03_dekad11.nc4
2026-05-20 06:46:10,667 - INFO - Applying Empirical Quantile Mapping (EQM) on 9x14 grid...
2026-05-20 06:46:10,751 - INFO - EQM progress: row 9/9 (100%) | 80 land pixels done | elapsed 0s, ETA 0s
2026-05-20 06:46:10,755 - INFO - EQM complete: 80/126 grid points corrected (46 masked/ocean pixels skipped)
2026-05-20 06:46:10,756 - INFO - Saving LSEQM corrected precipitation...
2026-05-20 06:46:10,760 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:46:10,806 - INFO - Saved Linear Scaling and Empirical Quantile Mapping corrected precipitation for month 03, dekad 11 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqm/bali_cli_lseqm_corrected_imergl_month03_dekad11.nc4
2026-05-20 06:46:10,808 - INFO - Pipeline [03 d2]: Training / loading DL model...
2026-05-20 06:46:10,809 - INFO - Checking if the model file exists at: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month03_dekad11.keras
2026-05-20 06:46:10,872 - INFO - Model: "sequential_7"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ conv2d_14 (Conv2D) │ (None, 9, 14, 32) │ 320 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_14 (MaxPooling2D) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_21 (Dropout) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_15 (Conv2D) │ (None, 4, 7, 64) │ 18,496 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_15 (MaxPooling2D) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_22 (Dropout) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ flatten_7 (Flatten) │ (None, 384) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_14 (Dense) │ (None, 128) │ 49,280 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_23 (Dropout) │ (None, 128) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_15 (Dense) │ (None, 126) │ 16,254 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ reshape_7 (Reshape) │ (None, 9, 14) │ 0 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 84,350 (329.49 KB)
Trainable params: 84,350 (329.49 KB)
Non-trainable params: 0 (0.00 B)
Epoch 1/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 1s 94ms/step - loss: 0.1563 - mae: 0.2651 - val_loss: 0.1564 - val_mae: 0.2506
Epoch 2/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 41ms/step - loss: 0.1328 - mae: 0.2464 - val_loss: 0.1184 - val_mae: 0.2276
Epoch 3/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.1094 - mae: 0.2387 - val_loss: 0.0845 - val_mae: 0.2014
Epoch 4/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0952 - mae: 0.2310 - val_loss: 0.0793 - val_mae: 0.1911
Epoch 5/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 25ms/step - loss: 0.0829 - mae: 0.2104 - val_loss: 0.0824 - val_mae: 0.1923
Epoch 6/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0773 - mae: 0.2018 - val_loss: 0.0708 - val_mae: 0.1814
Epoch 7/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0721 - mae: 0.1991 - val_loss: 0.0647 - val_mae: 0.1756
Epoch 8/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0678 - mae: 0.1962 - val_loss: 0.0648 - val_mae: 0.1759
Epoch 9/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 25ms/step - loss: 0.0674 - mae: 0.1931 - val_loss: 0.0688 - val_mae: 0.1792
Epoch 10/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 25ms/step - loss: 0.0654 - mae: 0.1868 - val_loss: 0.0651 - val_mae: 0.1759
Epoch 11/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 38ms/step - loss: 0.0633 - mae: 0.1877 - val_loss: 0.0589 - val_mae: 0.1709
Epoch 12/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 25ms/step - loss: 0.0633 - mae: 0.1900 - val_loss: 0.0608 - val_mae: 0.1715
Epoch 13/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step - loss: 0.0605 - mae: 0.1843 - val_loss: 0.0657 - val_mae: 0.1762
Epoch 14/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0602 - mae: 0.1797 - val_loss: 0.0674 - val_mae: 0.1780
Epoch 15/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 25ms/step - loss: 0.0591 - mae: 0.1790 - val_loss: 0.0591 - val_mae: 0.1709
Epoch 16/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 32ms/step - loss: 0.0580 - mae: 0.1819 - val_loss: 0.0598 - val_mae: 0.1708
2026-05-20 06:46:14,700 - INFO - Final training history: {'loss': [0.15633638203144073, 0.13283002376556396, 0.10942745208740234, 0.09518388658761978, 0.08294174075126648, 0.07727556675672531, 0.07206316292285919, 0.06783264875411987, 0.06736456602811813, 0.0653635784983635, 0.06325610727071762, 0.06328616291284561, 0.06045630946755409, 0.06017812713980675, 0.0590805783867836, 0.05798782408237457], 'mae': [0.2651006579399109, 0.24635644257068634, 0.23870962858200073, 0.23103660345077515, 0.2104225903749466, 0.20178814232349396, 0.1990831345319748, 0.19617623090744019, 0.19310660660266876, 0.1867769956588745, 0.18769899010658264, 0.19003058969974518, 0.18427622318267822, 0.17971622943878174, 0.17902757227420807, 0.18193313479423523], 'val_loss': [0.15636344254016876, 0.11838407814502716, 0.08451204001903534, 0.07927192747592926, 0.08237151056528091, 0.07077886164188385, 0.06473255902528763, 0.06477515399456024, 0.06883372366428375, 0.06510224938392639, 0.05893873795866966, 0.060756076127290726, 0.06574708968400955, 0.06737107038497925, 0.05913986638188362, 0.059787772595882416], 'val_mae': [0.2505999505519867, 0.22760894894599915, 0.2014314830303192, 0.19114281237125397, 0.19230343401432037, 0.1814073771238327, 0.17564788460731506, 0.1759425699710846, 0.17920330166816711, 0.17593753337860107, 0.17090488970279694, 0.1715165674686432, 0.17621777951717377, 0.177983358502388, 0.17086684703826904, 0.17084099352359772]}
2026-05-20 06:46:14,847 - INFO - Model training complete. Best model saved as /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month03_dekad11.keras
2026-05-20 06:46:14,848 - INFO - Pipeline [03 d2]: Loading confidence mask...
2026-05-20 06:46:14,851 - INFO - Loading existing confidence mask: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/station_density/confidence_mask_station_density.nc4
2026-05-20 06:46:14,852 - INFO - Pipeline [03 d2]: Applying DL refinement...
2026-05-20 06:46:14,868 - INFO - Pixel-wise threshold map computed at 80th percentile. threshold_2d shape: (9, 14)
2026-05-20 06:46:14,869 - INFO - DL blending: base alpha=0.70 (LSEQM weight), 1-alpha=0.30 (DL weight)
2026-05-20 06:46:14,870 - INFO - Confidence mask active: spatial alpha modulation enabled. Confidence range: [0.000, 0.411]
2026-05-20 06:46:33,489 - INFO - DL blending complete: 250 daily slices processed, 4,000 extreme pixels blended (alpha=0.70)
2026-05-20 06:46:33,574 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:46:33,619 - INFO - Saved Hybrid Deep Learning-Physical (Linear Scaling and Empirical Quantile Mapping) Approach corrected precipitation for month 03, dekad 11 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_lseqmdl_corrected_imergl_month03_dekad11.nc4
2026-05-20 06:46:33,621 - INFO - Pipeline [03 d2]: Complete.
✓ month 03 dekad 2 — saved: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_imergl_lseqmdl_corrected_precip_month03_dekad11.nc4
============================================================
▸ month 03 dekad 3
============================================================
2026-05-20 06:46:33,627 - INFO - Pipeline [03 d3]: Running LSEQM...
2026-05-20 06:46:33,631 - INFO - Aligning IMERG and CPC datasets...
2026-05-20 06:46:33,639 - INFO - After alignment: IMERG has 9131 time steps, CPC has 9131 time steps
2026-05-20 06:46:33,640 - INFO - Creating time-based masks...
2026-05-20 06:46:33,653 - INFO - Applying time masks...
2026-05-20 06:46:33,663 - INFO - IMERG dekad data shape: (275, 9, 14)
2026-05-20 06:46:33,664 - INFO - CPC dekad data shape: (275, 9, 14)
2026-05-20 06:46:33,668 - INFO - Using native-resolution CPC parameter fitting (BCSD principle)...
2026-05-20 06:46:33,698 - INFO - CPC native dekad data: (275, 4, 6) (lat -9.25–-7.75, lon 113.75–116.25)
2026-05-20 06:46:35,741 - INFO - Native CPC fitting: row 4/4 (100%) | 24 fitted, 0 skipped | elapsed 2s, ETA 0s
2026-05-20 06:46:35,742 - INFO - Fitted CPC params on native grid: 24/24 cells
2026-05-20 06:46:35,786 - INFO - Interpolated CPC params to IMERG grid: 126/126 valid pixels
2026-05-20 06:46:35,786 - INFO - Performing Linear Scaling (LS)...
2026-05-20 06:46:35,797 - INFO - LS using bilinearly interpolated CPC mean (smooth).
2026-05-20 06:46:35,799 - INFO - Saving LS corrected precipitation...
2026-05-20 06:46:35,801 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (275, 9, 14)
2026-05-20 06:46:35,854 - INFO - Saved Linear Scaling corrected precipitation for month 03, dekad 21 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_ls/bali_cli_ls_corrected_imergl_month03_dekad21.nc4
2026-05-20 06:46:35,857 - INFO - Applying Empirical Quantile Mapping (EQM) on 9x14 grid...
2026-05-20 06:46:35,934 - INFO - EQM progress: row 9/9 (100%) | 80 land pixels done | elapsed 0s, ETA 0s
2026-05-20 06:46:35,937 - INFO - EQM complete: 80/126 grid points corrected (46 masked/ocean pixels skipped)
2026-05-20 06:46:35,939 - INFO - Saving LSEQM corrected precipitation...
2026-05-20 06:46:35,941 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (275, 9, 14)
2026-05-20 06:46:36,005 - INFO - Saved Linear Scaling and Empirical Quantile Mapping corrected precipitation for month 03, dekad 21 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqm/bali_cli_lseqm_corrected_imergl_month03_dekad21.nc4
2026-05-20 06:46:36,006 - INFO - Pipeline [03 d3]: Training / loading DL model...
2026-05-20 06:46:36,008 - INFO - Checking if the model file exists at: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month03_dekad21.keras
2026-05-20 06:46:36,079 - INFO - Model: "sequential_8"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ conv2d_16 (Conv2D) │ (None, 9, 14, 32) │ 320 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_16 (MaxPooling2D) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_24 (Dropout) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_17 (Conv2D) │ (None, 4, 7, 64) │ 18,496 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_17 (MaxPooling2D) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_25 (Dropout) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ flatten_8 (Flatten) │ (None, 384) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_16 (Dense) │ (None, 128) │ 49,280 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_26 (Dropout) │ (None, 128) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_17 (Dense) │ (None, 126) │ 16,254 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ reshape_8 (Reshape) │ (None, 9, 14) │ 0 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 84,350 (329.49 KB)
Trainable params: 84,350 (329.49 KB)
Non-trainable params: 0 (0.00 B)
Epoch 1/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 2s 106ms/step - loss: 0.1486 - mae: 0.2534 - val_loss: 0.1601 - val_mae: 0.2616
Epoch 2/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.1247 - mae: 0.2374 - val_loss: 0.1206 - val_mae: 0.2354
Epoch 3/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 41ms/step - loss: 0.1045 - mae: 0.2321 - val_loss: 0.0875 - val_mae: 0.2043
Epoch 4/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 40ms/step - loss: 0.0922 - mae: 0.2228 - val_loss: 0.0815 - val_mae: 0.1933
Epoch 5/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0803 - mae: 0.2054 - val_loss: 0.0804 - val_mae: 0.1908
Epoch 6/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0735 - mae: 0.1969 - val_loss: 0.0695 - val_mae: 0.1807
Epoch 7/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 53ms/step - loss: 0.0697 - mae: 0.1957 - val_loss: 0.0671 - val_mae: 0.1778
Epoch 8/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0670 - mae: 0.1912 - val_loss: 0.0690 - val_mae: 0.1787
Epoch 9/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 45ms/step - loss: 0.0645 - mae: 0.1868 - val_loss: 0.0637 - val_mae: 0.1727
Epoch 10/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 48ms/step - loss: 0.0617 - mae: 0.1840 - val_loss: 0.0610 - val_mae: 0.1688
Epoch 11/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0606 - mae: 0.1833 - val_loss: 0.0592 - val_mae: 0.1660
Epoch 12/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0588 - mae: 0.1788 - val_loss: 0.0656 - val_mae: 0.1723
Epoch 13/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step - loss: 0.0570 - mae: 0.1738 - val_loss: 0.0611 - val_mae: 0.1671
Epoch 14/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 47ms/step - loss: 0.0557 - mae: 0.1741 - val_loss: 0.0567 - val_mae: 0.1619
Epoch 15/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0554 - mae: 0.1727 - val_loss: 0.0628 - val_mae: 0.1681
Epoch 16/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0560 - mae: 0.1720 - val_loss: 0.0569 - val_mae: 0.1614
Epoch 17/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step - loss: 0.0556 - mae: 0.1737 - val_loss: 0.0579 - val_mae: 0.1622
Epoch 18/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0538 - mae: 0.1684 - val_loss: 0.0604 - val_mae: 0.1648
Epoch 19/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step - loss: 0.0534 - mae: 0.1673 - val_loss: 0.0576 - val_mae: 0.1619
2026-05-20 06:46:40,415 - INFO - Final training history: {'loss': [0.1486247181892395, 0.12474008649587631, 0.10446824878454208, 0.09219775348901749, 0.08034949004650116, 0.07354581356048584, 0.0697454959154129, 0.06704194843769073, 0.06454382091760635, 0.06173782795667648, 0.060625068843364716, 0.05876670777797699, 0.056956905871629715, 0.05568213015794754, 0.05544725060462952, 0.05596039444208145, 0.0556037463247776, 0.0538356676697731, 0.053403571248054504], 'mae': [0.2533796727657318, 0.23736613988876343, 0.23207591474056244, 0.22284558415412903, 0.20539025962352753, 0.19686917960643768, 0.19568213820457458, 0.1911807358264923, 0.18675149977207184, 0.18397296965122223, 0.18328478932380676, 0.17881368100643158, 0.17380672693252563, 0.17405660450458527, 0.1727098822593689, 0.17201824486255646, 0.17372870445251465, 0.16842813789844513, 0.1673118770122528], 'val_loss': [0.16013602912425995, 0.12060847133398056, 0.0875018760561943, 0.0815289095044136, 0.08042622357606888, 0.069490946829319, 0.06714429706335068, 0.06898806989192963, 0.06367726624011993, 0.06100372225046158, 0.05920865014195442, 0.06557763367891312, 0.061073895543813705, 0.056674130260944366, 0.06282216310501099, 0.05688079819083214, 0.05788086727261543, 0.060373879969120026, 0.057592280209064484], 'val_mae': [0.26159602403640747, 0.2354479730129242, 0.2043067067861557, 0.19329778850078583, 0.1907675862312317, 0.18073821067810059, 0.17780058085918427, 0.17865495383739471, 0.17270468175411224, 0.16878341138362885, 0.16596275568008423, 0.17230075597763062, 0.16713552176952362, 0.1618914008140564, 0.16807346045970917, 0.1613905131816864, 0.16224080324172974, 0.16480329632759094, 0.16192518174648285]}
2026-05-20 06:46:40,566 - INFO - Model training complete. Best model saved as /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month03_dekad21.keras
2026-05-20 06:46:40,568 - INFO - Pipeline [03 d3]: Loading confidence mask...
2026-05-20 06:46:40,573 - INFO - Loading existing confidence mask: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/station_density/confidence_mask_station_density.nc4
2026-05-20 06:46:40,574 - INFO - Pipeline [03 d3]: Applying DL refinement...
2026-05-20 06:46:40,591 - INFO - Pixel-wise threshold map computed at 80th percentile. threshold_2d shape: (9, 14)
2026-05-20 06:46:40,592 - INFO - DL blending: base alpha=0.70 (LSEQM weight), 1-alpha=0.30 (DL weight)
2026-05-20 06:46:40,593 - INFO - Confidence mask active: spatial alpha modulation enabled. Confidence range: [0.000, 0.411]
2026-05-20 06:47:00,456 - INFO - DL blending complete: 275 daily slices processed, 4,400 extreme pixels blended (alpha=0.70)
2026-05-20 06:47:00,553 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (275, 9, 14)
2026-05-20 06:47:00,610 - INFO - Saved Hybrid Deep Learning-Physical (Linear Scaling and Empirical Quantile Mapping) Approach corrected precipitation for month 03, dekad 21 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_lseqmdl_corrected_imergl_month03_dekad21.nc4
2026-05-20 06:47:00,612 - INFO - Pipeline [03 d3]: Complete.
✓ month 03 dekad 3 — saved: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_imergl_lseqmdl_corrected_precip_month03_dekad21.nc4
============================================================
▸ month 04 dekad 1
============================================================
2026-05-20 06:47:00,613 - INFO - Pipeline [04 d1]: Running LSEQM...
2026-05-20 06:47:00,619 - INFO - Aligning IMERG and CPC datasets...
2026-05-20 06:47:00,627 - INFO - After alignment: IMERG has 9131 time steps, CPC has 9131 time steps
2026-05-20 06:47:00,629 - INFO - Creating time-based masks...
2026-05-20 06:47:00,642 - INFO - Applying time masks...
2026-05-20 06:47:00,653 - INFO - IMERG dekad data shape: (250, 9, 14)
2026-05-20 06:47:00,654 - INFO - CPC dekad data shape: (250, 9, 14)
2026-05-20 06:47:00,658 - INFO - Using native-resolution CPC parameter fitting (BCSD principle)...
2026-05-20 06:47:00,683 - INFO - CPC native dekad data: (250, 4, 6) (lat -9.25–-7.75, lon 113.75–116.25)
2026-05-20 06:47:02,928 - INFO - Native CPC fitting: row 4/4 (100%) | 24 fitted, 0 skipped | elapsed 2s, ETA 0s
2026-05-20 06:47:02,929 - INFO - Fitted CPC params on native grid: 24/24 cells
2026-05-20 06:47:02,969 - INFO - Interpolated CPC params to IMERG grid: 126/126 valid pixels
2026-05-20 06:47:02,970 - INFO - Performing Linear Scaling (LS)...
2026-05-20 06:47:02,984 - INFO - LS using bilinearly interpolated CPC mean (smooth).
2026-05-20 06:47:02,986 - INFO - Saving LS corrected precipitation...
2026-05-20 06:47:02,989 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:47:03,041 - INFO - Saved Linear Scaling corrected precipitation for month 04, dekad 01 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_ls/bali_cli_ls_corrected_imergl_month04_dekad01.nc4
2026-05-20 06:47:03,043 - INFO - Applying Empirical Quantile Mapping (EQM) on 9x14 grid...
2026-05-20 06:47:03,124 - INFO - EQM progress: row 9/9 (100%) | 80 land pixels done | elapsed 0s, ETA 0s
2026-05-20 06:47:03,127 - INFO - EQM complete: 80/126 grid points corrected (46 masked/ocean pixels skipped)
2026-05-20 06:47:03,128 - INFO - Saving LSEQM corrected precipitation...
2026-05-20 06:47:03,130 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:47:03,185 - INFO - Saved Linear Scaling and Empirical Quantile Mapping corrected precipitation for month 04, dekad 01 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqm/bali_cli_lseqm_corrected_imergl_month04_dekad01.nc4
2026-05-20 06:47:03,188 - INFO - Pipeline [04 d1]: Training / loading DL model...
2026-05-20 06:47:03,189 - INFO - Checking if the model file exists at: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month04_dekad01.keras
2026-05-20 06:47:03,265 - INFO - Model: "sequential_9"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ conv2d_18 (Conv2D) │ (None, 9, 14, 32) │ 320 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_18 (MaxPooling2D) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_27 (Dropout) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_19 (Conv2D) │ (None, 4, 7, 64) │ 18,496 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_19 (MaxPooling2D) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_28 (Dropout) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ flatten_9 (Flatten) │ (None, 384) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_18 (Dense) │ (None, 128) │ 49,280 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_29 (Dropout) │ (None, 128) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_19 (Dense) │ (None, 126) │ 16,254 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ reshape_9 (Reshape) │ (None, 9, 14) │ 0 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 84,350 (329.49 KB)
Trainable params: 84,350 (329.49 KB)
Non-trainable params: 0 (0.00 B)
Epoch 1/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 2s 96ms/step - loss: 0.1539 - mae: 0.2582 - val_loss: 0.1506 - val_mae: 0.2512
Epoch 2/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.1321 - mae: 0.2433 - val_loss: 0.1191 - val_mae: 0.2285
Epoch 3/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 49ms/step - loss: 0.1098 - mae: 0.2367 - val_loss: 0.0897 - val_mae: 0.2050
Epoch 4/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 41ms/step - loss: 0.0975 - mae: 0.2311 - val_loss: 0.0805 - val_mae: 0.1905
Epoch 5/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 41ms/step - loss: 0.0840 - mae: 0.2124 - val_loss: 0.0755 - val_mae: 0.1828
Epoch 6/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 53ms/step - loss: 0.0772 - mae: 0.2040 - val_loss: 0.0698 - val_mae: 0.1763
Epoch 7/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 46ms/step - loss: 0.0724 - mae: 0.1987 - val_loss: 0.0608 - val_mae: 0.1683
Epoch 8/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0671 - mae: 0.1957 - val_loss: 0.0569 - val_mae: 0.1636
Epoch 9/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 30ms/step - loss: 0.0653 - mae: 0.1916 - val_loss: 0.0585 - val_mae: 0.1630
Epoch 10/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0605 - mae: 0.1831 - val_loss: 0.0568 - val_mae: 0.1604
Epoch 11/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0621 - mae: 0.1844 - val_loss: 0.0556 - val_mae: 0.1581
Epoch 12/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0584 - mae: 0.1779 - val_loss: 0.0525 - val_mae: 0.1543
Epoch 13/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0590 - mae: 0.1813 - val_loss: 0.0484 - val_mae: 0.1493
Epoch 14/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 24ms/step - loss: 0.0590 - mae: 0.1809 - val_loss: 0.0516 - val_mae: 0.1515
Epoch 15/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step - loss: 0.0566 - mae: 0.1740 - val_loss: 0.0524 - val_mae: 0.1521
Epoch 16/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0553 - mae: 0.1717 - val_loss: 0.0499 - val_mae: 0.1492
Epoch 17/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 45ms/step - loss: 0.0551 - mae: 0.1725 - val_loss: 0.0501 - val_mae: 0.1494
Epoch 18/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 46ms/step - loss: 0.0554 - mae: 0.1725 - val_loss: 0.0512 - val_mae: 0.1509
2026-05-20 06:47:08,405 - INFO - Final training history: {'loss': [0.15394049882888794, 0.13211078941822052, 0.1097647100687027, 0.09745383262634277, 0.08397488296031952, 0.07722828537225723, 0.07244645059108734, 0.06711531430482864, 0.0652877688407898, 0.0605187751352787, 0.06206999346613884, 0.05835144221782684, 0.05901411920785904, 0.05897693336009979, 0.056601785123348236, 0.055329032242298126, 0.05513356998562813, 0.05542376637458801], 'mae': [0.2581782639026642, 0.2433014065027237, 0.2366829514503479, 0.2311168611049652, 0.21238189935684204, 0.20404906570911407, 0.19874465465545654, 0.19567644596099854, 0.191559299826622, 0.18311336636543274, 0.18435142934322357, 0.1779160350561142, 0.1812630593776703, 0.18089886009693146, 0.17403028905391693, 0.17171697318553925, 0.1724579930305481, 0.17246046662330627], 'val_loss': [0.15062880516052246, 0.11906477063894272, 0.08969228714704514, 0.08046826720237732, 0.0755346491932869, 0.06980090588331223, 0.06079058721661568, 0.056936297565698624, 0.05847600847482681, 0.05682871490716934, 0.05564194172620773, 0.05250610038638115, 0.04840632900595665, 0.05155408754944801, 0.052386246621608734, 0.04985462501645088, 0.050065722316503525, 0.05121822655200958], 'val_mae': [0.2511894106864929, 0.2284536212682724, 0.20496955513954163, 0.19049029052257538, 0.18275800347328186, 0.17632748186588287, 0.1683058887720108, 0.16355343163013458, 0.16301898658275604, 0.160383403301239, 0.15810443460941315, 0.15429335832595825, 0.14930300414562225, 0.1515234410762787, 0.15212145447731018, 0.14919906854629517, 0.1493528038263321, 0.15087708830833435]}
2026-05-20 06:47:08,584 - INFO - Model training complete. Best model saved as /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month04_dekad01.keras
2026-05-20 06:47:08,587 - INFO - Pipeline [04 d1]: Loading confidence mask...
2026-05-20 06:47:08,588 - INFO - Loading existing confidence mask: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/station_density/confidence_mask_station_density.nc4
2026-05-20 06:47:08,589 - INFO - Pipeline [04 d1]: Applying DL refinement...
2026-05-20 06:47:08,614 - INFO - Pixel-wise threshold map computed at 80th percentile. threshold_2d shape: (9, 14)
2026-05-20 06:47:08,617 - INFO - DL blending: base alpha=0.70 (LSEQM weight), 1-alpha=0.30 (DL weight)
2026-05-20 06:47:08,618 - INFO - Confidence mask active: spatial alpha modulation enabled. Confidence range: [0.000, 0.411]
2026-05-20 06:47:25,886 - INFO - DL blending complete: 250 daily slices processed, 3,999 extreme pixels blended (alpha=0.70)
2026-05-20 06:47:25,965 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:47:26,007 - INFO - Saved Hybrid Deep Learning-Physical (Linear Scaling and Empirical Quantile Mapping) Approach corrected precipitation for month 04, dekad 01 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_lseqmdl_corrected_imergl_month04_dekad01.nc4
2026-05-20 06:47:26,008 - INFO - Pipeline [04 d1]: Complete.
✓ month 04 dekad 1 — saved: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_imergl_lseqmdl_corrected_precip_month04_dekad01.nc4
============================================================
▸ month 04 dekad 2
============================================================
2026-05-20 06:47:26,009 - INFO - Pipeline [04 d2]: Running LSEQM...
2026-05-20 06:47:26,016 - INFO - Aligning IMERG and CPC datasets...
2026-05-20 06:47:26,026 - INFO - After alignment: IMERG has 9131 time steps, CPC has 9131 time steps
2026-05-20 06:47:26,026 - INFO - Creating time-based masks...
2026-05-20 06:47:26,038 - INFO - Applying time masks...
2026-05-20 06:47:26,048 - INFO - IMERG dekad data shape: (250, 9, 14)
2026-05-20 06:47:26,049 - INFO - CPC dekad data shape: (250, 9, 14)
2026-05-20 06:47:26,052 - INFO - Using native-resolution CPC parameter fitting (BCSD principle)...
2026-05-20 06:47:26,079 - INFO - CPC native dekad data: (250, 4, 6) (lat -9.25–-7.75, lon 113.75–116.25)
2026-05-20 06:47:28,531 - INFO - Native CPC fitting: row 4/4 (100%) | 24 fitted, 0 skipped | elapsed 2s, ETA 0s
2026-05-20 06:47:28,532 - INFO - Fitted CPC params on native grid: 24/24 cells
2026-05-20 06:47:28,583 - INFO - Interpolated CPC params to IMERG grid: 126/126 valid pixels
2026-05-20 06:47:28,583 - INFO - Performing Linear Scaling (LS)...
2026-05-20 06:47:28,593 - INFO - LS using bilinearly interpolated CPC mean (smooth).
2026-05-20 06:47:28,596 - INFO - Saving LS corrected precipitation...
2026-05-20 06:47:28,598 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:47:28,660 - INFO - Saved Linear Scaling corrected precipitation for month 04, dekad 11 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_ls/bali_cli_ls_corrected_imergl_month04_dekad11.nc4
2026-05-20 06:47:28,662 - INFO - Applying Empirical Quantile Mapping (EQM) on 9x14 grid...
2026-05-20 06:47:28,763 - INFO - EQM progress: row 9/9 (100%) | 80 land pixels done | elapsed 0s, ETA 0s
2026-05-20 06:47:28,768 - INFO - EQM complete: 80/126 grid points corrected (46 masked/ocean pixels skipped)
2026-05-20 06:47:28,770 - INFO - Saving LSEQM corrected precipitation...
2026-05-20 06:47:28,776 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:47:28,844 - INFO - Saved Linear Scaling and Empirical Quantile Mapping corrected precipitation for month 04, dekad 11 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqm/bali_cli_lseqm_corrected_imergl_month04_dekad11.nc4
2026-05-20 06:47:28,845 - INFO - Pipeline [04 d2]: Training / loading DL model...
2026-05-20 06:47:28,847 - INFO - Checking if the model file exists at: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month04_dekad11.keras
2026-05-20 06:47:28,926 - INFO - Model: "sequential_10"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ conv2d_20 (Conv2D) │ (None, 9, 14, 32) │ 320 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_20 (MaxPooling2D) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_30 (Dropout) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_21 (Conv2D) │ (None, 4, 7, 64) │ 18,496 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_21 (MaxPooling2D) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_31 (Dropout) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ flatten_10 (Flatten) │ (None, 384) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_20 (Dense) │ (None, 128) │ 49,280 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_32 (Dropout) │ (None, 128) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_21 (Dense) │ (None, 126) │ 16,254 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ reshape_10 (Reshape) │ (None, 9, 14) │ 0 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 84,350 (329.49 KB)
Trainable params: 84,350 (329.49 KB)
Non-trainable params: 0 (0.00 B)
Epoch 1/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 2s 118ms/step - loss: 0.1422 - mae: 0.2443 - val_loss: 0.1422 - val_mae: 0.2272
Epoch 2/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 55ms/step - loss: 0.1245 - mae: 0.2296 - val_loss: 0.1207 - val_mae: 0.2175
Epoch 3/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 53ms/step - loss: 0.1067 - mae: 0.2233 - val_loss: 0.0990 - val_mae: 0.2031
Epoch 4/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 68ms/step - loss: 0.0958 - mae: 0.2193 - val_loss: 0.0901 - val_mae: 0.1948
Epoch 5/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 58ms/step - loss: 0.0839 - mae: 0.2038 - val_loss: 0.0865 - val_mae: 0.1919
Epoch 6/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 60ms/step - loss: 0.0781 - mae: 0.1979 - val_loss: 0.0787 - val_mae: 0.1876
Epoch 7/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 68ms/step - loss: 0.0736 - mae: 0.1966 - val_loss: 0.0748 - val_mae: 0.1850
Epoch 8/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 64ms/step - loss: 0.0697 - mae: 0.1913 - val_loss: 0.0742 - val_mae: 0.1841
Epoch 9/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 81ms/step - loss: 0.0659 - mae: 0.1865 - val_loss: 0.0710 - val_mae: 0.1816
Epoch 10/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 100ms/step - loss: 0.0637 - mae: 0.1853 - val_loss: 0.0654 - val_mae: 0.1773
Epoch 11/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 88ms/step - loss: 0.0616 - mae: 0.1850 - val_loss: 0.0647 - val_mae: 0.1754
Epoch 12/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 52ms/step - loss: 0.0615 - mae: 0.1833 - val_loss: 0.0666 - val_mae: 0.1756
Epoch 13/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0589 - mae: 0.1764 - val_loss: 0.0661 - val_mae: 0.1752
Epoch 14/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 68ms/step - loss: 0.0594 - mae: 0.1791 - val_loss: 0.0618 - val_mae: 0.1732
Epoch 15/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 51ms/step - loss: 0.0590 - mae: 0.1820 - val_loss: 0.0626 - val_mae: 0.1725
Epoch 16/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 54ms/step - loss: 0.0580 - mae: 0.1776 - val_loss: 0.0659 - val_mae: 0.1745
Epoch 17/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 39ms/step - loss: 0.0567 - mae: 0.1728 - val_loss: 0.0628 - val_mae: 0.1728
Epoch 18/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 82ms/step - loss: 0.0565 - mae: 0.1753 - val_loss: 0.0613 - val_mae: 0.1720
Epoch 19/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 49ms/step - loss: 0.0564 - mae: 0.1767 - val_loss: 0.0615 - val_mae: 0.1719
Epoch 20/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 45ms/step - loss: 0.0530 - mae: 0.1684 - val_loss: 0.0653 - val_mae: 0.1732
Epoch 21/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 57ms/step - loss: 0.0542 - mae: 0.1664 - val_loss: 0.0643 - val_mae: 0.1715
Epoch 22/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 54ms/step - loss: 0.0554 - mae: 0.1684 - val_loss: 0.0620 - val_mae: 0.1693
Epoch 23/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 41ms/step - loss: 0.0531 - mae: 0.1664 - val_loss: 0.0609 - val_mae: 0.1688
Epoch 24/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0546 - mae: 0.1694 - val_loss: 0.0593 - val_mae: 0.1688
Epoch 25/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0549 - mae: 0.1726 - val_loss: 0.0611 - val_mae: 0.1701
Epoch 26/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0516 - mae: 0.1629 - val_loss: 0.0665 - val_mae: 0.1741
Epoch 27/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0537 - mae: 0.1638 - val_loss: 0.0623 - val_mae: 0.1712
Epoch 28/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0524 - mae: 0.1669 - val_loss: 0.0587 - val_mae: 0.1688
Epoch 29/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0559 - mae: 0.1729 - val_loss: 0.0596 - val_mae: 0.1677
Epoch 30/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0516 - mae: 0.1622 - val_loss: 0.0634 - val_mae: 0.1699
Epoch 31/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step - loss: 0.0527 - mae: 0.1620 - val_loss: 0.0605 - val_mae: 0.1678
Epoch 32/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0516 - mae: 0.1638 - val_loss: 0.0577 - val_mae: 0.1669
Epoch 33/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 31ms/step - loss: 0.0520 - mae: 0.1662 - val_loss: 0.0590 - val_mae: 0.1674
Epoch 34/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 31ms/step - loss: 0.0503 - mae: 0.1614 - val_loss: 0.0622 - val_mae: 0.1695
Epoch 35/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step - loss: 0.0499 - mae: 0.1578 - val_loss: 0.0610 - val_mae: 0.1682
Epoch 36/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 31ms/step - loss: 0.0502 - mae: 0.1606 - val_loss: 0.0579 - val_mae: 0.1666
Epoch 37/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0500 - mae: 0.1614 - val_loss: 0.0603 - val_mae: 0.1668
2026-05-20 06:47:38,430 - INFO - Final training history: {'loss': [0.14215907454490662, 0.12451154738664627, 0.1066712737083435, 0.09575962275266647, 0.0838986337184906, 0.07810245454311371, 0.07362668216228485, 0.06972600519657135, 0.06593984365463257, 0.06366309523582458, 0.061596713960170746, 0.06154300272464752, 0.05890747159719467, 0.059387531131505966, 0.05903331935405731, 0.057997122406959534, 0.0566590391099453, 0.05647846311330795, 0.056356146931648254, 0.05302301421761513, 0.054199691861867905, 0.055363159626722336, 0.05306379497051239, 0.054610010236501694, 0.05485718697309494, 0.05155205354094505, 0.05370788648724556, 0.05244055762887001, 0.05588429048657417, 0.051645904779434204, 0.05265128239989281, 0.051623620092868805, 0.0519549660384655, 0.05030107870697975, 0.04990279674530029, 0.05016324669122696, 0.04996078088879585], 'mae': [0.2443312406539917, 0.22964192926883698, 0.22331461310386658, 0.21929048001766205, 0.2037608027458191, 0.19793830811977386, 0.19655412435531616, 0.19128692150115967, 0.18649324774742126, 0.1853291392326355, 0.18500246107578278, 0.18326161801815033, 0.1764276921749115, 0.179067462682724, 0.18196091055870056, 0.1776028871536255, 0.17278264462947845, 0.17528685927391052, 0.17671355605125427, 0.16839629411697388, 0.16638317704200745, 0.1683877408504486, 0.1664092242717743, 0.16942666471004486, 0.1725933849811554, 0.16285651922225952, 0.16378086805343628, 0.1669229120016098, 0.17293106019496918, 0.16223211586475372, 0.16197893023490906, 0.16379886865615845, 0.1662367880344391, 0.1613708734512329, 0.15783075988292694, 0.160623699426651, 0.16141124069690704], 'val_loss': [0.1422123908996582, 0.1206950694322586, 0.09900271147489548, 0.09013476967811584, 0.08646438270807266, 0.07874225080013275, 0.07483633607625961, 0.07419443875551224, 0.0709652230143547, 0.0653558224439621, 0.06468098610639572, 0.06659094244241714, 0.066098652780056, 0.061834026128053665, 0.06258366256952286, 0.06588312983512878, 0.06275317072868347, 0.06133070960640907, 0.06151886284351349, 0.06525139510631561, 0.06430724263191223, 0.062040187418460846, 0.060940220952034, 0.05925793945789337, 0.06107077747583389, 0.06649642437696457, 0.06231202930212021, 0.05869992822408676, 0.059634093195199966, 0.06336653232574463, 0.060454387217760086, 0.05770797282457352, 0.05903223529458046, 0.062236886471509933, 0.061030540615320206, 0.05785100907087326, 0.060286976397037506], 'val_mae': [0.22716107964515686, 0.21751661598682404, 0.20306561887264252, 0.19483806192874908, 0.19192995131015778, 0.18762195110321045, 0.18503810465335846, 0.1840599775314331, 0.18157507479190826, 0.17728514969348907, 0.17537517845630646, 0.17560508847236633, 0.1752289980649948, 0.1732434779405594, 0.1725481152534485, 0.17453338205814362, 0.17284493148326874, 0.1720268279314041, 0.1718539446592331, 0.17321594059467316, 0.17149269580841064, 0.16926126182079315, 0.16878993809223175, 0.1688169687986374, 0.17008823156356812, 0.1740674376487732, 0.17117348313331604, 0.16879220306873322, 0.16773365437984467, 0.1698978841304779, 0.16783194243907928, 0.1668676733970642, 0.16742801666259766, 0.16945919394493103, 0.1682325154542923, 0.16662681102752686, 0.16678239405155182]}
2026-05-20 06:47:38,578 - INFO - Model training complete. Best model saved as /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month04_dekad11.keras
2026-05-20 06:47:38,580 - INFO - Pipeline [04 d2]: Loading confidence mask...
2026-05-20 06:47:38,582 - INFO - Loading existing confidence mask: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/station_density/confidence_mask_station_density.nc4
2026-05-20 06:47:38,583 - INFO - Pipeline [04 d2]: Applying DL refinement...
2026-05-20 06:47:38,601 - INFO - Pixel-wise threshold map computed at 80th percentile. threshold_2d shape: (9, 14)
2026-05-20 06:47:38,601 - INFO - DL blending: base alpha=0.70 (LSEQM weight), 1-alpha=0.30 (DL weight)
2026-05-20 06:47:38,603 - INFO - Confidence mask active: spatial alpha modulation enabled. Confidence range: [0.000, 0.411]
2026-05-20 06:47:58,696 - INFO - DL blending complete: 250 daily slices processed, 4,000 extreme pixels blended (alpha=0.70)
2026-05-20 06:47:58,813 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:47:58,872 - INFO - Saved Hybrid Deep Learning-Physical (Linear Scaling and Empirical Quantile Mapping) Approach corrected precipitation for month 04, dekad 11 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_lseqmdl_corrected_imergl_month04_dekad11.nc4
2026-05-20 06:47:58,874 - INFO - Pipeline [04 d2]: Complete.
✓ month 04 dekad 2 — saved: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_imergl_lseqmdl_corrected_precip_month04_dekad11.nc4
============================================================
▸ month 04 dekad 3
============================================================
2026-05-20 06:47:58,878 - INFO - Pipeline [04 d3]: Running LSEQM...
2026-05-20 06:47:58,883 - INFO - Aligning IMERG and CPC datasets...
2026-05-20 06:47:58,894 - INFO - After alignment: IMERG has 9131 time steps, CPC has 9131 time steps
2026-05-20 06:47:58,897 - INFO - Creating time-based masks...
2026-05-20 06:47:58,913 - INFO - Applying time masks...
2026-05-20 06:47:58,931 - INFO - IMERG dekad data shape: (250, 9, 14)
2026-05-20 06:47:58,931 - INFO - CPC dekad data shape: (250, 9, 14)
2026-05-20 06:47:58,937 - INFO - Using native-resolution CPC parameter fitting (BCSD principle)...
2026-05-20 06:47:58,977 - INFO - CPC native dekad data: (250, 4, 6) (lat -9.25–-7.75, lon 113.75–116.25)
2026-05-20 06:48:03,734 - INFO - Native CPC fitting: row 4/4 (100%) | 24 fitted, 0 skipped | elapsed 5s, ETA 0s
2026-05-20 06:48:03,735 - INFO - Fitted CPC params on native grid: 24/24 cells
2026-05-20 06:48:03,779 - INFO - Interpolated CPC params to IMERG grid: 126/126 valid pixels
2026-05-20 06:48:03,780 - INFO - Performing Linear Scaling (LS)...
2026-05-20 06:48:03,792 - INFO - LS using bilinearly interpolated CPC mean (smooth).
2026-05-20 06:48:03,795 - INFO - Saving LS corrected precipitation...
2026-05-20 06:48:03,797 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:48:03,860 - INFO - Saved Linear Scaling corrected precipitation for month 04, dekad 21 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_ls/bali_cli_ls_corrected_imergl_month04_dekad21.nc4
2026-05-20 06:48:03,861 - INFO - Applying Empirical Quantile Mapping (EQM) on 9x14 grid...
2026-05-20 06:48:03,939 - INFO - EQM progress: row 9/9 (100%) | 80 land pixels done | elapsed 0s, ETA 0s
2026-05-20 06:48:03,942 - INFO - EQM complete: 80/126 grid points corrected (46 masked/ocean pixels skipped)
2026-05-20 06:48:03,942 - INFO - Saving LSEQM corrected precipitation...
2026-05-20 06:48:03,944 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:48:03,994 - INFO - Saved Linear Scaling and Empirical Quantile Mapping corrected precipitation for month 04, dekad 21 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqm/bali_cli_lseqm_corrected_imergl_month04_dekad21.nc4
2026-05-20 06:48:03,995 - INFO - Pipeline [04 d3]: Training / loading DL model...
2026-05-20 06:48:03,997 - INFO - Checking if the model file exists at: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month04_dekad21.keras
2026-05-20 06:48:04,066 - INFO - Model: "sequential_11"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ conv2d_22 (Conv2D) │ (None, 9, 14, 32) │ 320 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_22 (MaxPooling2D) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_33 (Dropout) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_23 (Conv2D) │ (None, 4, 7, 64) │ 18,496 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_23 (MaxPooling2D) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_34 (Dropout) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ flatten_11 (Flatten) │ (None, 384) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_22 (Dense) │ (None, 128) │ 49,280 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_35 (Dropout) │ (None, 128) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_23 (Dense) │ (None, 126) │ 16,254 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ reshape_11 (Reshape) │ (None, 9, 14) │ 0 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 84,350 (329.49 KB)
Trainable params: 84,350 (329.49 KB)
Non-trainable params: 0 (0.00 B)
Epoch 1/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 2s 100ms/step - loss: 0.0989 - mae: 0.1842 - val_loss: 0.1201 - val_mae: 0.1877
Epoch 2/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 49ms/step - loss: 0.0871 - mae: 0.1733 - val_loss: 0.1093 - val_mae: 0.1852
Epoch 3/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 45ms/step - loss: 0.0786 - mae: 0.1744 - val_loss: 0.0981 - val_mae: 0.1815
Epoch 4/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 45ms/step - loss: 0.0716 - mae: 0.1736 - val_loss: 0.0910 - val_mae: 0.1781
Epoch 5/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 46ms/step - loss: 0.0653 - mae: 0.1721 - val_loss: 0.0852 - val_mae: 0.1767
Epoch 6/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 48ms/step - loss: 0.0611 - mae: 0.1694 - val_loss: 0.0822 - val_mae: 0.1755
Epoch 7/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 45ms/step - loss: 0.0569 - mae: 0.1655 - val_loss: 0.0788 - val_mae: 0.1745
Epoch 8/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 51ms/step - loss: 0.0560 - mae: 0.1662 - val_loss: 0.0765 - val_mae: 0.1737
Epoch 9/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 46ms/step - loss: 0.0534 - mae: 0.1643 - val_loss: 0.0756 - val_mae: 0.1725
Epoch 10/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 47ms/step - loss: 0.0521 - mae: 0.1626 - val_loss: 0.0737 - val_mae: 0.1723
Epoch 11/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0516 - mae: 0.1627 - val_loss: 0.0741 - val_mae: 0.1714
Epoch 12/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step - loss: 0.0519 - mae: 0.1604 - val_loss: 0.0750 - val_mae: 0.1709
Epoch 13/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0497 - mae: 0.1572 - val_loss: 0.0722 - val_mae: 0.1718
Epoch 14/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 51ms/step - loss: 0.0495 - mae: 0.1605 - val_loss: 0.0708 - val_mae: 0.1720
Epoch 15/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 32ms/step - loss: 0.0506 - mae: 0.1632 - val_loss: 0.0721 - val_mae: 0.1699
Epoch 16/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 31ms/step - loss: 0.0497 - mae: 0.1538 - val_loss: 0.0776 - val_mae: 0.1685
Epoch 17/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 32ms/step - loss: 0.0503 - mae: 0.1496 - val_loss: 0.0761 - val_mae: 0.1679
Epoch 18/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 31ms/step - loss: 0.0492 - mae: 0.1497 - val_loss: 0.0728 - val_mae: 0.1680
Epoch 19/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 30ms/step - loss: 0.0484 - mae: 0.1536 - val_loss: 0.0713 - val_mae: 0.1689
2026-05-20 06:48:08,814 - INFO - Final training history: {'loss': [0.09891261160373688, 0.08712243288755417, 0.0785958468914032, 0.07160237431526184, 0.06531382352113724, 0.061099667102098465, 0.05689946562051773, 0.0559757724404335, 0.05336742475628853, 0.0521375946700573, 0.05160956829786301, 0.05187227204442024, 0.04969247803092003, 0.04951668903231621, 0.05058357119560242, 0.04971477389335632, 0.05027178302407265, 0.04921961948275566, 0.04838501289486885], 'mae': [0.1841803789138794, 0.17333678901195526, 0.17439061403274536, 0.17358650267124176, 0.17213909327983856, 0.1693936586380005, 0.16549085080623627, 0.1661989837884903, 0.16431786119937897, 0.1625504046678543, 0.16274391114711761, 0.16036197543144226, 0.15720823407173157, 0.16045139729976654, 0.16319313645362854, 0.15380734205245972, 0.1495828479528427, 0.14967596530914307, 0.15356388688087463], 'val_loss': [0.12009873241186142, 0.10933937132358551, 0.09809994697570801, 0.09095077216625214, 0.0851721316576004, 0.0822310671210289, 0.07877040654420853, 0.07653028517961502, 0.07558482140302658, 0.07367373257875443, 0.07405561953783035, 0.07504857331514359, 0.0721549466252327, 0.07084856927394867, 0.0721442699432373, 0.07756002992391586, 0.07609498500823975, 0.07282237708568573, 0.07127934694290161], 'val_mae': [0.18770110607147217, 0.18516908586025238, 0.18151533603668213, 0.1780567616224289, 0.17670099437236786, 0.17553302645683289, 0.17445175349712372, 0.17366531491279602, 0.17246653139591217, 0.17229290306568146, 0.17135624587535858, 0.17093700170516968, 0.17178745567798615, 0.17197899520397186, 0.16994020342826843, 0.16854175925254822, 0.16790452599525452, 0.16804231703281403, 0.1688529998064041]}
2026-05-20 06:48:08,981 - INFO - Model training complete. Best model saved as /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month04_dekad21.keras
2026-05-20 06:48:08,984 - INFO - Pipeline [04 d3]: Loading confidence mask...
2026-05-20 06:48:08,987 - INFO - Loading existing confidence mask: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/station_density/confidence_mask_station_density.nc4
2026-05-20 06:48:08,988 - INFO - Pipeline [04 d3]: Applying DL refinement...
2026-05-20 06:48:09,009 - INFO - Pixel-wise threshold map computed at 80th percentile. threshold_2d shape: (9, 14)
2026-05-20 06:48:09,010 - INFO - DL blending: base alpha=0.70 (LSEQM weight), 1-alpha=0.30 (DL weight)
2026-05-20 06:48:09,011 - INFO - Confidence mask active: spatial alpha modulation enabled. Confidence range: [0.000, 0.411]
2026-05-20 06:48:27,827 - INFO - DL blending complete: 250 daily slices processed, 3,996 extreme pixels blended (alpha=0.70)
2026-05-20 06:48:27,917 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:48:27,988 - INFO - Saved Hybrid Deep Learning-Physical (Linear Scaling and Empirical Quantile Mapping) Approach corrected precipitation for month 04, dekad 21 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_lseqmdl_corrected_imergl_month04_dekad21.nc4
2026-05-20 06:48:27,989 - INFO - Pipeline [04 d3]: Complete.
✓ month 04 dekad 3 — saved: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_imergl_lseqmdl_corrected_precip_month04_dekad21.nc4
============================================================
▸ month 05 dekad 1
============================================================
2026-05-20 06:48:27,990 - INFO - Pipeline [05 d1]: Running LSEQM...
2026-05-20 06:48:27,996 - INFO - Aligning IMERG and CPC datasets...
2026-05-20 06:48:28,006 - INFO - After alignment: IMERG has 9131 time steps, CPC has 9131 time steps
2026-05-20 06:48:28,007 - INFO - Creating time-based masks...
2026-05-20 06:48:28,021 - INFO - Applying time masks...
2026-05-20 06:48:28,035 - INFO - IMERG dekad data shape: (250, 9, 14)
2026-05-20 06:48:28,036 - INFO - CPC dekad data shape: (250, 9, 14)
2026-05-20 06:48:28,039 - INFO - Using native-resolution CPC parameter fitting (BCSD principle)...
2026-05-20 06:48:28,068 - INFO - CPC native dekad data: (250, 4, 6) (lat -9.25–-7.75, lon 113.75–116.25)
2026-05-20 06:48:30,598 - INFO - Native CPC fitting: row 4/4 (100%) | 24 fitted, 0 skipped | elapsed 3s, ETA 0s
2026-05-20 06:48:30,599 - INFO - Fitted CPC params on native grid: 24/24 cells
2026-05-20 06:48:30,641 - INFO - Interpolated CPC params to IMERG grid: 126/126 valid pixels
2026-05-20 06:48:30,642 - INFO - Performing Linear Scaling (LS)...
2026-05-20 06:48:30,652 - INFO - LS using bilinearly interpolated CPC mean (smooth).
2026-05-20 06:48:30,654 - INFO - Saving LS corrected precipitation...
2026-05-20 06:48:30,656 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:48:30,719 - INFO - Saved Linear Scaling corrected precipitation for month 05, dekad 01 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_ls/bali_cli_ls_corrected_imergl_month05_dekad01.nc4
2026-05-20 06:48:30,720 - INFO - Applying Empirical Quantile Mapping (EQM) on 9x14 grid...
2026-05-20 06:48:30,797 - INFO - EQM progress: row 9/9 (100%) | 80 land pixels done | elapsed 0s, ETA 0s
2026-05-20 06:48:30,800 - INFO - EQM complete: 80/126 grid points corrected (46 masked/ocean pixels skipped)
2026-05-20 06:48:30,802 - INFO - Saving LSEQM corrected precipitation...
2026-05-20 06:48:30,806 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:48:30,857 - INFO - Saved Linear Scaling and Empirical Quantile Mapping corrected precipitation for month 05, dekad 01 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqm/bali_cli_lseqm_corrected_imergl_month05_dekad01.nc4
2026-05-20 06:48:30,859 - INFO - Pipeline [05 d1]: Training / loading DL model...
2026-05-20 06:48:30,860 - INFO - Checking if the model file exists at: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month05_dekad01.keras
2026-05-20 06:48:30,927 - INFO - Model: "sequential_12"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ conv2d_24 (Conv2D) │ (None, 9, 14, 32) │ 320 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_24 (MaxPooling2D) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_36 (Dropout) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_25 (Conv2D) │ (None, 4, 7, 64) │ 18,496 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_25 (MaxPooling2D) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_37 (Dropout) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ flatten_12 (Flatten) │ (None, 384) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_24 (Dense) │ (None, 128) │ 49,280 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_38 (Dropout) │ (None, 128) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_25 (Dense) │ (None, 126) │ 16,254 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ reshape_12 (Reshape) │ (None, 9, 14) │ 0 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 84,350 (329.49 KB)
Trainable params: 84,350 (329.49 KB)
Non-trainable params: 0 (0.00 B)
Epoch 1/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 2s 95ms/step - loss: 0.1205 - mae: 0.2093 - val_loss: 0.1105 - val_mae: 0.1780
Epoch 2/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.1066 - mae: 0.1999 - val_loss: 0.0946 - val_mae: 0.1727
Epoch 3/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 40ms/step - loss: 0.0924 - mae: 0.1979 - val_loss: 0.0780 - val_mae: 0.1699
Epoch 4/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0840 - mae: 0.1987 - val_loss: 0.0714 - val_mae: 0.1660
Epoch 5/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 41ms/step - loss: 0.0787 - mae: 0.1954 - val_loss: 0.0683 - val_mae: 0.1636
Epoch 6/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 40ms/step - loss: 0.0718 - mae: 0.1873 - val_loss: 0.0645 - val_mae: 0.1633
Epoch 7/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 41ms/step - loss: 0.0685 - mae: 0.1877 - val_loss: 0.0617 - val_mae: 0.1634
Epoch 8/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 53ms/step - loss: 0.0658 - mae: 0.1857 - val_loss: 0.0615 - val_mae: 0.1623
Epoch 9/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 41ms/step - loss: 0.0633 - mae: 0.1813 - val_loss: 0.0606 - val_mae: 0.1623
Epoch 10/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0621 - mae: 0.1803 - val_loss: 0.0606 - val_mae: 0.1617
Epoch 11/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0593 - mae: 0.1751 - val_loss: 0.0593 - val_mae: 0.1600
Epoch 12/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 45ms/step - loss: 0.0600 - mae: 0.1764 - val_loss: 0.0566 - val_mae: 0.1590
Epoch 13/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 41ms/step - loss: 0.0575 - mae: 0.1746 - val_loss: 0.0541 - val_mae: 0.1601
Epoch 14/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0581 - mae: 0.1762 - val_loss: 0.0549 - val_mae: 0.1581
Epoch 15/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 25ms/step - loss: 0.0557 - mae: 0.1709 - val_loss: 0.0564 - val_mae: 0.1570
Epoch 16/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 25ms/step - loss: 0.0548 - mae: 0.1668 - val_loss: 0.0569 - val_mae: 0.1562
Epoch 17/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0544 - mae: 0.1658 - val_loss: 0.0544 - val_mae: 0.1558
Epoch 18/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0537 - mae: 0.1668 - val_loss: 0.0532 - val_mae: 0.1550
Epoch 19/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0540 - mae: 0.1643 - val_loss: 0.0568 - val_mae: 0.1521
Epoch 20/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0549 - mae: 0.1602 - val_loss: 0.0569 - val_mae: 0.1515
Epoch 21/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0537 - mae: 0.1606 - val_loss: 0.0531 - val_mae: 0.1530
Epoch 22/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0527 - mae: 0.1626 - val_loss: 0.0557 - val_mae: 0.1529
Epoch 23/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 47ms/step - loss: 0.0524 - mae: 0.1581 - val_loss: 0.0594 - val_mae: 0.1535
Epoch 24/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 49ms/step - loss: 0.0544 - mae: 0.1590 - val_loss: 0.0552 - val_mae: 0.1529
Epoch 25/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 65ms/step - loss: 0.0512 - mae: 0.1590 - val_loss: 0.0527 - val_mae: 0.1544
Epoch 26/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 49ms/step - loss: 0.0508 - mae: 0.1605 - val_loss: 0.0530 - val_mae: 0.1547
Epoch 27/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 37ms/step - loss: 0.0509 - mae: 0.1611 - val_loss: 0.0536 - val_mae: 0.1553
Epoch 28/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 37ms/step - loss: 0.0517 - mae: 0.1606 - val_loss: 0.0563 - val_mae: 0.1555
Epoch 29/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0507 - mae: 0.1565 - val_loss: 0.0569 - val_mae: 0.1559
Epoch 30/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 58ms/step - loss: 0.0492 - mae: 0.1569 - val_loss: 0.0539 - val_mae: 0.1572
2026-05-20 06:48:38,029 - INFO - Final training history: {'loss': [0.120545893907547, 0.1066436842083931, 0.09237426519393921, 0.08403754979372025, 0.0786781907081604, 0.0717955008149147, 0.06849085539579391, 0.0658264234662056, 0.06333868205547333, 0.062112342566251755, 0.05929124727845192, 0.05998072773218155, 0.05754288658499718, 0.05808235704898834, 0.05567918345332146, 0.05476163327693939, 0.054404906928539276, 0.05372648313641548, 0.05404586344957352, 0.05490563064813614, 0.05369286239147186, 0.05271346867084503, 0.05235811695456505, 0.05435873940587044, 0.05120992660522461, 0.05076372250914574, 0.05090257525444031, 0.05172980949282646, 0.05065399035811424, 0.04917478933930397], 'mae': [0.2092822790145874, 0.1998680680990219, 0.1978827863931656, 0.19869765639305115, 0.19541795551776886, 0.18730202317237854, 0.18769250810146332, 0.18574461340904236, 0.18134182691574097, 0.1803014576435089, 0.17509466409683228, 0.17643654346466064, 0.1746356338262558, 0.176175057888031, 0.17087173461914062, 0.16677168011665344, 0.16578811407089233, 0.16679221391677856, 0.16432054340839386, 0.160222589969635, 0.16060903668403625, 0.1625596582889557, 0.15809014439582825, 0.1589808613061905, 0.15900225937366486, 0.16054479777812958, 0.16108030080795288, 0.16056828200817108, 0.15647171437740326, 0.15685325860977173], 'val_loss': [0.1105087548494339, 0.09463251382112503, 0.0779963880777359, 0.07136678695678711, 0.0683329850435257, 0.06446623057126999, 0.06166113540530205, 0.06145995110273361, 0.06057997792959213, 0.060627177357673645, 0.059339672327041626, 0.05655497685074806, 0.05405626446008682, 0.05491970106959343, 0.056356173008680344, 0.05688299983739853, 0.05438946187496185, 0.053222235292196274, 0.05683084949851036, 0.05694226175546646, 0.05308990180492401, 0.05572457239031792, 0.05935775861144066, 0.05522617697715759, 0.05266954377293587, 0.05303828418254852, 0.053569402545690536, 0.05634178966283798, 0.05691635608673096, 0.05389132350683212], 'val_mae': [0.17795105278491974, 0.17269374430179596, 0.16987277567386627, 0.16604764759540558, 0.16361147165298462, 0.16334415972232819, 0.16336265206336975, 0.16234464943408966, 0.16229377686977386, 0.16171802580356598, 0.15997625887393951, 0.15898501873016357, 0.16005486249923706, 0.1581091284751892, 0.15700137615203857, 0.15618525445461273, 0.15584240853786469, 0.1550205945968628, 0.1521446853876114, 0.15150262415409088, 0.15301711857318878, 0.1528840810060501, 0.15351518988609314, 0.1528749316930771, 0.1543823778629303, 0.1547269970178604, 0.15528373420238495, 0.15552935004234314, 0.15585759282112122, 0.15721260011196136]}
2026-05-20 06:48:38,202 - INFO - Model training complete. Best model saved as /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month05_dekad01.keras
2026-05-20 06:48:38,205 - INFO - Pipeline [05 d1]: Loading confidence mask...
2026-05-20 06:48:38,207 - INFO - Loading existing confidence mask: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/station_density/confidence_mask_station_density.nc4
2026-05-20 06:48:38,207 - INFO - Pipeline [05 d1]: Applying DL refinement...
2026-05-20 06:48:38,224 - INFO - Pixel-wise threshold map computed at 80th percentile. threshold_2d shape: (9, 14)
2026-05-20 06:48:38,227 - INFO - DL blending: base alpha=0.70 (LSEQM weight), 1-alpha=0.30 (DL weight)
2026-05-20 06:48:38,229 - INFO - Confidence mask active: spatial alpha modulation enabled. Confidence range: [0.000, 0.411]
2026-05-20 06:48:55,773 - INFO - DL blending complete: 250 daily slices processed, 3,999 extreme pixels blended (alpha=0.70)
2026-05-20 06:48:55,869 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:48:55,917 - INFO - Saved Hybrid Deep Learning-Physical (Linear Scaling and Empirical Quantile Mapping) Approach corrected precipitation for month 05, dekad 01 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_lseqmdl_corrected_imergl_month05_dekad01.nc4
2026-05-20 06:48:55,918 - INFO - Pipeline [05 d1]: Complete.
✓ month 05 dekad 1 — saved: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_imergl_lseqmdl_corrected_precip_month05_dekad01.nc4
============================================================
▸ month 05 dekad 2
============================================================
2026-05-20 06:48:55,919 - INFO - Pipeline [05 d2]: Running LSEQM...
2026-05-20 06:48:55,925 - INFO - Aligning IMERG and CPC datasets...
2026-05-20 06:48:55,935 - INFO - After alignment: IMERG has 9131 time steps, CPC has 9131 time steps
2026-05-20 06:48:55,937 - INFO - Creating time-based masks...
2026-05-20 06:48:55,948 - INFO - Applying time masks...
2026-05-20 06:48:55,962 - INFO - IMERG dekad data shape: (250, 9, 14)
2026-05-20 06:48:55,963 - INFO - CPC dekad data shape: (250, 9, 14)
2026-05-20 06:48:55,965 - INFO - Using native-resolution CPC parameter fitting (BCSD principle)...
2026-05-20 06:48:55,993 - INFO - CPC native dekad data: (250, 4, 6) (lat -9.25–-7.75, lon 113.75–116.25)
2026-05-20 06:48:58,843 - INFO - Native CPC fitting: row 4/4 (100%) | 24 fitted, 0 skipped | elapsed 3s, ETA 0s
2026-05-20 06:48:58,844 - INFO - Fitted CPC params on native grid: 24/24 cells
2026-05-20 06:48:58,888 - INFO - Interpolated CPC params to IMERG grid: 126/126 valid pixels
2026-05-20 06:48:58,889 - INFO - Performing Linear Scaling (LS)...
2026-05-20 06:48:58,900 - INFO - LS using bilinearly interpolated CPC mean (smooth).
2026-05-20 06:48:58,903 - INFO - Saving LS corrected precipitation...
2026-05-20 06:48:58,905 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:48:58,953 - INFO - Saved Linear Scaling corrected precipitation for month 05, dekad 11 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_ls/bali_cli_ls_corrected_imergl_month05_dekad11.nc4
2026-05-20 06:48:58,955 - INFO - Applying Empirical Quantile Mapping (EQM) on 9x14 grid...
2026-05-20 06:48:59,030 - INFO - EQM progress: row 9/9 (100%) | 80 land pixels done | elapsed 0s, ETA 0s
2026-05-20 06:48:59,035 - INFO - EQM complete: 80/126 grid points corrected (46 masked/ocean pixels skipped)
2026-05-20 06:48:59,035 - INFO - Saving LSEQM corrected precipitation...
2026-05-20 06:48:59,038 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:48:59,101 - INFO - Saved Linear Scaling and Empirical Quantile Mapping corrected precipitation for month 05, dekad 11 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqm/bali_cli_lseqm_corrected_imergl_month05_dekad11.nc4
2026-05-20 06:48:59,102 - INFO - Pipeline [05 d2]: Training / loading DL model...
2026-05-20 06:48:59,103 - INFO - Checking if the model file exists at: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month05_dekad11.keras
2026-05-20 06:48:59,168 - INFO - Model: "sequential_13"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ conv2d_26 (Conv2D) │ (None, 9, 14, 32) │ 320 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_26 (MaxPooling2D) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_39 (Dropout) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_27 (Conv2D) │ (None, 4, 7, 64) │ 18,496 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_27 (MaxPooling2D) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_40 (Dropout) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ flatten_13 (Flatten) │ (None, 384) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_26 (Dense) │ (None, 128) │ 49,280 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_41 (Dropout) │ (None, 128) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_27 (Dense) │ (None, 126) │ 16,254 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ reshape_13 (Reshape) │ (None, 9, 14) │ 0 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 84,350 (329.49 KB)
Trainable params: 84,350 (329.49 KB)
Non-trainable params: 0 (0.00 B)
Epoch 1/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 2s 96ms/step - loss: 0.0866 - mae: 0.1583 - val_loss: 0.0697 - val_mae: 0.1225
Epoch 2/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 40ms/step - loss: 0.0769 - mae: 0.1512 - val_loss: 0.0603 - val_mae: 0.1219
Epoch 3/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 40ms/step - loss: 0.0683 - mae: 0.1525 - val_loss: 0.0502 - val_mae: 0.1235
Epoch 4/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 45ms/step - loss: 0.0628 - mae: 0.1588 - val_loss: 0.0464 - val_mae: 0.1266
Epoch 5/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0576 - mae: 0.1580 - val_loss: 0.0454 - val_mae: 0.1291
Epoch 6/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 79ms/step - loss: 0.0551 - mae: 0.1582 - val_loss: 0.0447 - val_mae: 0.1322
Epoch 7/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 49ms/step - loss: 0.0531 - mae: 0.1595 - val_loss: 0.0454 - val_mae: 0.1318
Epoch 8/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 51ms/step - loss: 0.0505 - mae: 0.1530 - val_loss: 0.0456 - val_mae: 0.1297
Epoch 9/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 59ms/step - loss: 0.0503 - mae: 0.1521 - val_loss: 0.0423 - val_mae: 0.1309
Epoch 10/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 68ms/step - loss: 0.0491 - mae: 0.1568 - val_loss: 0.0413 - val_mae: 0.1319
Epoch 11/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 39ms/step - loss: 0.0487 - mae: 0.1546 - val_loss: 0.0431 - val_mae: 0.1288
Epoch 12/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 49ms/step - loss: 0.0475 - mae: 0.1489 - val_loss: 0.0432 - val_mae: 0.1275
Epoch 13/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 38ms/step - loss: 0.0469 - mae: 0.1460 - val_loss: 0.0446 - val_mae: 0.1251
Epoch 14/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 39ms/step - loss: 0.0470 - mae: 0.1411 - val_loss: 0.0448 - val_mae: 0.1239
Epoch 15/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 40ms/step - loss: 0.0455 - mae: 0.1388 - val_loss: 0.0418 - val_mae: 0.1237
2026-05-20 06:49:03,970 - INFO - Final training history: {'loss': [0.0866302028298378, 0.07689818739891052, 0.06833107769489288, 0.06276442855596542, 0.05760066956281662, 0.05513514205813408, 0.05307568237185478, 0.050471626222133636, 0.050263967365026474, 0.04909396171569824, 0.04867681860923767, 0.04752471297979355, 0.04690123721957207, 0.04697450250387192, 0.045482784509658813], 'mae': [0.15832071006298065, 0.15121875703334808, 0.15253736078739166, 0.15884333848953247, 0.15799875557422638, 0.15822508931159973, 0.1594753861427307, 0.1529974788427353, 0.15211187303066254, 0.15677955746650696, 0.15464553236961365, 0.14888840913772583, 0.1460086852312088, 0.14105378091335297, 0.13880734145641327], 'val_loss': [0.06970789283514023, 0.06027485430240631, 0.05020306631922722, 0.04639311134815216, 0.0453735776245594, 0.04465862363576889, 0.045426949858665466, 0.04558419808745384, 0.042337559163570404, 0.04125295579433441, 0.04311931133270264, 0.04320567101240158, 0.04456551373004913, 0.04479394108057022, 0.041840702295303345], 'val_mae': [0.12246495485305786, 0.12185020744800568, 0.12348344922065735, 0.12659423053264618, 0.12905003130435944, 0.13218747079372406, 0.13181240856647491, 0.12971799075603485, 0.13090333342552185, 0.131905198097229, 0.1288420706987381, 0.12751273810863495, 0.12514182925224304, 0.12388631701469421, 0.12368525564670563]}
2026-05-20 06:49:04,101 - INFO - Model training complete. Best model saved as /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month05_dekad11.keras
2026-05-20 06:49:04,104 - INFO - Pipeline [05 d2]: Loading confidence mask...
2026-05-20 06:49:04,107 - INFO - Loading existing confidence mask: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/station_density/confidence_mask_station_density.nc4
2026-05-20 06:49:04,108 - INFO - Pipeline [05 d2]: Applying DL refinement...
2026-05-20 06:49:04,126 - INFO - Pixel-wise threshold map computed at 80th percentile. threshold_2d shape: (9, 14)
2026-05-20 06:49:04,127 - INFO - DL blending: base alpha=0.70 (LSEQM weight), 1-alpha=0.30 (DL weight)
2026-05-20 06:49:04,129 - INFO - Confidence mask active: spatial alpha modulation enabled. Confidence range: [0.000, 0.411]
2026-05-20 06:49:20,288 - INFO - DL blending complete: 250 daily slices processed, 3,928 extreme pixels blended (alpha=0.70)
2026-05-20 06:49:20,928 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:49:20,986 - INFO - Saved Hybrid Deep Learning-Physical (Linear Scaling and Empirical Quantile Mapping) Approach corrected precipitation for month 05, dekad 11 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_lseqmdl_corrected_imergl_month05_dekad11.nc4
2026-05-20 06:49:20,987 - INFO - Pipeline [05 d2]: Complete.
✓ month 05 dekad 2 — saved: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_imergl_lseqmdl_corrected_precip_month05_dekad11.nc4
============================================================
▸ month 05 dekad 3
============================================================
2026-05-20 06:49:20,991 - INFO - Pipeline [05 d3]: Running LSEQM...
2026-05-20 06:49:20,996 - INFO - Aligning IMERG and CPC datasets...
2026-05-20 06:49:21,004 - INFO - After alignment: IMERG has 9131 time steps, CPC has 9131 time steps
2026-05-20 06:49:21,005 - INFO - Creating time-based masks...
2026-05-20 06:49:21,018 - INFO - Applying time masks...
2026-05-20 06:49:21,029 - INFO - IMERG dekad data shape: (275, 9, 14)
2026-05-20 06:49:21,030 - INFO - CPC dekad data shape: (275, 9, 14)
2026-05-20 06:49:21,032 - INFO - Using native-resolution CPC parameter fitting (BCSD principle)...
2026-05-20 06:49:21,061 - INFO - CPC native dekad data: (275, 4, 6) (lat -9.25–-7.75, lon 113.75–116.25)
2026-05-20 06:49:23,283 - INFO - Native CPC fitting: row 4/4 (100%) | 24 fitted, 0 skipped | elapsed 2s, ETA 0s
2026-05-20 06:49:23,284 - INFO - Fitted CPC params on native grid: 24/24 cells
2026-05-20 06:49:23,325 - INFO - Interpolated CPC params to IMERG grid: 126/126 valid pixels
2026-05-20 06:49:23,327 - INFO - Performing Linear Scaling (LS)...
2026-05-20 06:49:23,337 - INFO - LS using bilinearly interpolated CPC mean (smooth).
2026-05-20 06:49:23,340 - INFO - Saving LS corrected precipitation...
2026-05-20 06:49:23,343 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (275, 9, 14)
2026-05-20 06:49:23,400 - INFO - Saved Linear Scaling corrected precipitation for month 05, dekad 21 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_ls/bali_cli_ls_corrected_imergl_month05_dekad21.nc4
2026-05-20 06:49:23,401 - INFO - Applying Empirical Quantile Mapping (EQM) on 9x14 grid...
2026-05-20 06:49:23,495 - INFO - EQM progress: row 9/9 (100%) | 80 land pixels done | elapsed 0s, ETA 0s
2026-05-20 06:49:23,498 - INFO - EQM complete: 80/126 grid points corrected (46 masked/ocean pixels skipped)
2026-05-20 06:49:23,499 - INFO - Saving LSEQM corrected precipitation...
2026-05-20 06:49:23,500 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (275, 9, 14)
2026-05-20 06:49:23,551 - INFO - Saved Linear Scaling and Empirical Quantile Mapping corrected precipitation for month 05, dekad 21 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqm/bali_cli_lseqm_corrected_imergl_month05_dekad21.nc4
2026-05-20 06:49:23,553 - INFO - Pipeline [05 d3]: Training / loading DL model...
2026-05-20 06:49:23,554 - INFO - Checking if the model file exists at: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month05_dekad21.keras
2026-05-20 06:49:23,619 - INFO - Model: "sequential_14"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ conv2d_28 (Conv2D) │ (None, 9, 14, 32) │ 320 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_28 (MaxPooling2D) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_42 (Dropout) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_29 (Conv2D) │ (None, 4, 7, 64) │ 18,496 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_29 (MaxPooling2D) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_43 (Dropout) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ flatten_14 (Flatten) │ (None, 384) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_28 (Dense) │ (None, 128) │ 49,280 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_44 (Dropout) │ (None, 128) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_29 (Dense) │ (None, 126) │ 16,254 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ reshape_14 (Reshape) │ (None, 9, 14) │ 0 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 84,350 (329.49 KB)
Trainable params: 84,350 (329.49 KB)
Non-trainable params: 0 (0.00 B)
Epoch 1/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 2s 92ms/step - loss: 0.1080 - mae: 0.1904 - val_loss: 0.0948 - val_mae: 0.1557
Epoch 2/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0932 - mae: 0.1822 - val_loss: 0.0787 - val_mae: 0.1562
Epoch 3/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0813 - mae: 0.1859 - val_loss: 0.0668 - val_mae: 0.1572
Epoch 4/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0735 - mae: 0.1864 - val_loss: 0.0643 - val_mae: 0.1539
Epoch 5/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step - loss: 0.0675 - mae: 0.1764 - val_loss: 0.0647 - val_mae: 0.1535
Epoch 6/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0639 - mae: 0.1717 - val_loss: 0.0608 - val_mae: 0.1561
Epoch 7/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 59ms/step - loss: 0.0612 - mae: 0.1764 - val_loss: 0.0585 - val_mae: 0.1582
Epoch 8/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 41ms/step - loss: 0.0580 - mae: 0.1732 - val_loss: 0.0600 - val_mae: 0.1555
Epoch 9/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 37ms/step - loss: 0.0556 - mae: 0.1651 - val_loss: 0.0614 - val_mae: 0.1545
Epoch 10/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 40ms/step - loss: 0.0556 - mae: 0.1647 - val_loss: 0.0587 - val_mae: 0.1562
Epoch 11/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 78ms/step - loss: 0.0542 - mae: 0.1667 - val_loss: 0.0583 - val_mae: 0.1554
Epoch 12/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 58ms/step - loss: 0.0522 - mae: 0.1610 - val_loss: 0.0609 - val_mae: 0.1529
Epoch 13/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 50ms/step - loss: 0.0525 - mae: 0.1567 - val_loss: 0.0605 - val_mae: 0.1520
Epoch 14/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 61ms/step - loss: 0.0508 - mae: 0.1550 - val_loss: 0.0580 - val_mae: 0.1533
Epoch 15/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 45ms/step - loss: 0.0512 - mae: 0.1591 - val_loss: 0.0584 - val_mae: 0.1518
Epoch 16/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 46ms/step - loss: 0.0505 - mae: 0.1540 - val_loss: 0.0599 - val_mae: 0.1500
Epoch 17/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0502 - mae: 0.1522 - val_loss: 0.0581 - val_mae: 0.1509
Epoch 18/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 54ms/step - loss: 0.0489 - mae: 0.1532 - val_loss: 0.0571 - val_mae: 0.1521
Epoch 19/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 30ms/step - loss: 0.0485 - mae: 0.1521 - val_loss: 0.0577 - val_mae: 0.1520
Epoch 20/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step - loss: 0.0474 - mae: 0.1501 - val_loss: 0.0577 - val_mae: 0.1524
Epoch 21/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0486 - mae: 0.1509 - val_loss: 0.0582 - val_mae: 0.1525
Epoch 22/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0464 - mae: 0.1490 - val_loss: 0.0572 - val_mae: 0.1538
Epoch 23/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0464 - mae: 0.1498 - val_loss: 0.0576 - val_mae: 0.1520
2026-05-20 06:49:29,673 - INFO - Final training history: {'loss': [0.10797258466482162, 0.0931568518280983, 0.08125656843185425, 0.07353061437606812, 0.06749986857175827, 0.06385603547096252, 0.06116514280438423, 0.058045316487550735, 0.055600836873054504, 0.05564284697175026, 0.05421166121959686, 0.05217868462204933, 0.052462946623563766, 0.05078626424074173, 0.05123508349061012, 0.05051745846867561, 0.05020274221897125, 0.04885043948888779, 0.048456136137247086, 0.047379836440086365, 0.04855860769748688, 0.04639146104454994, 0.04637191444635391], 'mae': [0.19042493402957916, 0.18220022320747375, 0.1858827769756317, 0.1863582581281662, 0.1764059215784073, 0.17170333862304688, 0.17639116942882538, 0.17322537302970886, 0.16507072746753693, 0.16473358869552612, 0.1667071133852005, 0.16102226078510284, 0.1567452847957611, 0.15501494705677032, 0.15911507606506348, 0.15404456853866577, 0.15218918025493622, 0.15324059128761292, 0.15213404595851898, 0.1500624269247055, 0.15088491141796112, 0.1489524394273758, 0.14981885254383087], 'val_loss': [0.09484756737947464, 0.07868664711713791, 0.06676054000854492, 0.06432539969682693, 0.0646577775478363, 0.06076204404234886, 0.05848774313926697, 0.06003013253211975, 0.061441570520401, 0.058659281581640244, 0.058332812041044235, 0.060931023210287094, 0.060469966381788254, 0.05796152353286743, 0.05838095396757126, 0.05990026518702507, 0.05808161571621895, 0.057137876749038696, 0.057661090046167374, 0.05771995708346367, 0.05820516496896744, 0.057181958109140396, 0.057633936405181885], 'val_mae': [0.1557234674692154, 0.15619711577892303, 0.15721692144870758, 0.1538674384355545, 0.15353190898895264, 0.1560802459716797, 0.1582418978214264, 0.15546487271785736, 0.15445971488952637, 0.15620854496955872, 0.15539932250976562, 0.15286320447921753, 0.15203335881233215, 0.15329627692699432, 0.1518465280532837, 0.14999984204769135, 0.15086442232131958, 0.15212909877300262, 0.15204374492168427, 0.15241727232933044, 0.1525048315525055, 0.15376704931259155, 0.15200519561767578]}
2026-05-20 06:49:29,820 - INFO - Model training complete. Best model saved as /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month05_dekad21.keras
2026-05-20 06:49:29,823 - INFO - Pipeline [05 d3]: Loading confidence mask...
2026-05-20 06:49:29,826 - INFO - Loading existing confidence mask: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/station_density/confidence_mask_station_density.nc4
2026-05-20 06:49:29,826 - INFO - Pipeline [05 d3]: Applying DL refinement...
2026-05-20 06:49:29,841 - INFO - Pixel-wise threshold map computed at 80th percentile. threshold_2d shape: (9, 14)
2026-05-20 06:49:29,842 - INFO - DL blending: base alpha=0.70 (LSEQM weight), 1-alpha=0.30 (DL weight)
2026-05-20 06:49:29,843 - INFO - Confidence mask active: spatial alpha modulation enabled. Confidence range: [0.000, 0.411]
2026-05-20 06:49:48,932 - INFO - DL blending complete: 275 daily slices processed, 4,386 extreme pixels blended (alpha=0.70)
2026-05-20 06:49:49,038 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (275, 9, 14)
2026-05-20 06:49:49,085 - INFO - Saved Hybrid Deep Learning-Physical (Linear Scaling and Empirical Quantile Mapping) Approach corrected precipitation for month 05, dekad 21 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_lseqmdl_corrected_imergl_month05_dekad21.nc4
2026-05-20 06:49:49,087 - INFO - Pipeline [05 d3]: Complete.
✓ month 05 dekad 3 — saved: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_imergl_lseqmdl_corrected_precip_month05_dekad21.nc4
============================================================
▸ month 06 dekad 1
============================================================
2026-05-20 06:49:49,087 - INFO - Pipeline [06 d1]: Running LSEQM...
2026-05-20 06:49:49,092 - INFO - Aligning IMERG and CPC datasets...
2026-05-20 06:49:49,100 - INFO - After alignment: IMERG has 9131 time steps, CPC has 9131 time steps
2026-05-20 06:49:49,101 - INFO - Creating time-based masks...
2026-05-20 06:49:49,112 - INFO - Applying time masks...
2026-05-20 06:49:49,124 - INFO - IMERG dekad data shape: (250, 9, 14)
2026-05-20 06:49:49,125 - INFO - CPC dekad data shape: (250, 9, 14)
2026-05-20 06:49:49,128 - INFO - Using native-resolution CPC parameter fitting (BCSD principle)...
2026-05-20 06:49:49,158 - INFO - CPC native dekad data: (250, 4, 6) (lat -9.25–-7.75, lon 113.75–116.25)
2026-05-20 06:49:51,785 - INFO - Native CPC fitting: row 4/4 (100%) | 24 fitted, 0 skipped | elapsed 3s, ETA 0s
2026-05-20 06:49:51,786 - INFO - Fitted CPC params on native grid: 24/24 cells
2026-05-20 06:49:51,844 - INFO - Interpolated CPC params to IMERG grid: 126/126 valid pixels
2026-05-20 06:49:51,845 - INFO - Performing Linear Scaling (LS)...
2026-05-20 06:49:51,856 - INFO - LS using bilinearly interpolated CPC mean (smooth).
2026-05-20 06:49:51,859 - INFO - Saving LS corrected precipitation...
2026-05-20 06:49:51,862 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:49:51,927 - INFO - Saved Linear Scaling corrected precipitation for month 06, dekad 01 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_ls/bali_cli_ls_corrected_imergl_month06_dekad01.nc4
2026-05-20 06:49:51,930 - INFO - Applying Empirical Quantile Mapping (EQM) on 9x14 grid...
2026-05-20 06:49:52,038 - INFO - EQM progress: row 9/9 (100%) | 80 land pixels done | elapsed 0s, ETA 0s
2026-05-20 06:49:52,042 - INFO - EQM complete: 80/126 grid points corrected (46 masked/ocean pixels skipped)
2026-05-20 06:49:52,042 - INFO - Saving LSEQM corrected precipitation...
2026-05-20 06:49:52,044 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:49:52,106 - INFO - Saved Linear Scaling and Empirical Quantile Mapping corrected precipitation for month 06, dekad 01 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqm/bali_cli_lseqm_corrected_imergl_month06_dekad01.nc4
2026-05-20 06:49:52,107 - INFO - Pipeline [06 d1]: Training / loading DL model...
2026-05-20 06:49:52,108 - INFO - Checking if the model file exists at: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month06_dekad01.keras
2026-05-20 06:49:52,184 - INFO - Model: "sequential_15"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ conv2d_30 (Conv2D) │ (None, 9, 14, 32) │ 320 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_30 (MaxPooling2D) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_45 (Dropout) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_31 (Conv2D) │ (None, 4, 7, 64) │ 18,496 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_31 (MaxPooling2D) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_46 (Dropout) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ flatten_15 (Flatten) │ (None, 384) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_30 (Dense) │ (None, 128) │ 49,280 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_47 (Dropout) │ (None, 128) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_31 (Dense) │ (None, 126) │ 16,254 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ reshape_15 (Reshape) │ (None, 9, 14) │ 0 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 84,350 (329.49 KB)
Trainable params: 84,350 (329.49 KB)
Non-trainable params: 0 (0.00 B)
Epoch 1/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 2s 94ms/step - loss: 0.0792 - mae: 0.1503 - val_loss: 0.1296 - val_mae: 0.2028
Epoch 2/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0716 - mae: 0.1425 - val_loss: 0.1188 - val_mae: 0.1974
Epoch 3/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0657 - mae: 0.1460 - val_loss: 0.1016 - val_mae: 0.1907
Epoch 4/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0625 - mae: 0.1598 - val_loss: 0.0882 - val_mae: 0.1845
Epoch 5/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0605 - mae: 0.1663 - val_loss: 0.0862 - val_mae: 0.1815
Epoch 6/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0558 - mae: 0.1561 - val_loss: 0.0935 - val_mae: 0.1835
Epoch 7/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 25ms/step - loss: 0.0545 - mae: 0.1465 - val_loss: 0.0970 - val_mae: 0.1844
Epoch 8/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0537 - mae: 0.1439 - val_loss: 0.0929 - val_mae: 0.1822
Epoch 9/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0528 - mae: 0.1473 - val_loss: 0.0862 - val_mae: 0.1792
Epoch 10/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0510 - mae: 0.1501 - val_loss: 0.0804 - val_mae: 0.1770
Epoch 11/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0520 - mae: 0.1583 - val_loss: 0.0772 - val_mae: 0.1763
Epoch 12/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0495 - mae: 0.1538 - val_loss: 0.0842 - val_mae: 0.1775
Epoch 13/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0499 - mae: 0.1470 - val_loss: 0.0901 - val_mae: 0.1797
Epoch 14/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0487 - mae: 0.1383 - val_loss: 0.0918 - val_mae: 0.1802
Epoch 15/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 25ms/step - loss: 0.0493 - mae: 0.1397 - val_loss: 0.0870 - val_mae: 0.1779
Epoch 16/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0470 - mae: 0.1423 - val_loss: 0.0805 - val_mae: 0.1757
2026-05-20 06:49:56,386 - INFO - Final training history: {'loss': [0.0791606679558754, 0.07155061513185501, 0.0656743124127388, 0.06245379522442818, 0.0604904368519783, 0.05575619637966156, 0.05454027280211449, 0.053716570138931274, 0.052839674055576324, 0.05096527189016342, 0.052003707736730576, 0.049456313252449036, 0.049868784844875336, 0.04871615022420883, 0.049315862357616425, 0.04700249060988426], 'mae': [0.15033148229122162, 0.14245548844337463, 0.1460343301296234, 0.15978211164474487, 0.1662972867488861, 0.15613874793052673, 0.14649467170238495, 0.14391763508319855, 0.14727729558944702, 0.15007521212100983, 0.15834812819957733, 0.15381883084774017, 0.14698494970798492, 0.138309046626091, 0.13972334563732147, 0.1423317939043045], 'val_loss': [0.12955039739608765, 0.11878000944852829, 0.1015729233622551, 0.0881829485297203, 0.08616572618484497, 0.09354107826948166, 0.09695792943239212, 0.09286118298768997, 0.08617819100618362, 0.08037249743938446, 0.0772017240524292, 0.08417084068059921, 0.09006255120038986, 0.09176885336637497, 0.08697670698165894, 0.08045343309640884], 'val_mae': [0.20282715559005737, 0.19737040996551514, 0.19065441191196442, 0.18454837799072266, 0.18152350187301636, 0.18345409631729126, 0.18440020084381104, 0.1821877807378769, 0.17915397882461548, 0.17700134217739105, 0.1762513667345047, 0.17751523852348328, 0.17973874509334564, 0.18016394972801208, 0.17787867784500122, 0.17567680776119232]}
2026-05-20 06:49:56,524 - INFO - Model training complete. Best model saved as /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month06_dekad01.keras
2026-05-20 06:49:56,525 - INFO - Pipeline [06 d1]: Loading confidence mask...
2026-05-20 06:49:56,527 - INFO - Loading existing confidence mask: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/station_density/confidence_mask_station_density.nc4
2026-05-20 06:49:56,528 - INFO - Pipeline [06 d1]: Applying DL refinement...
2026-05-20 06:49:56,543 - INFO - Pixel-wise threshold map computed at 80th percentile. threshold_2d shape: (9, 14)
2026-05-20 06:49:56,544 - INFO - DL blending: base alpha=0.70 (LSEQM weight), 1-alpha=0.30 (DL weight)
2026-05-20 06:49:56,545 - INFO - Confidence mask active: spatial alpha modulation enabled. Confidence range: [0.000, 0.411]
2026-05-20 06:50:13,391 - INFO - DL blending complete: 250 daily slices processed, 3,861 extreme pixels blended (alpha=0.70)
2026-05-20 06:50:13,483 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:50:13,528 - INFO - Saved Hybrid Deep Learning-Physical (Linear Scaling and Empirical Quantile Mapping) Approach corrected precipitation for month 06, dekad 01 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_lseqmdl_corrected_imergl_month06_dekad01.nc4
2026-05-20 06:50:13,529 - INFO - Pipeline [06 d1]: Complete.
✓ month 06 dekad 1 — saved: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_imergl_lseqmdl_corrected_precip_month06_dekad01.nc4
============================================================
▸ month 06 dekad 2
============================================================
2026-05-20 06:50:13,530 - INFO - Pipeline [06 d2]: Running LSEQM...
2026-05-20 06:50:13,536 - INFO - Aligning IMERG and CPC datasets...
2026-05-20 06:50:13,544 - INFO - After alignment: IMERG has 9131 time steps, CPC has 9131 time steps
2026-05-20 06:50:13,545 - INFO - Creating time-based masks...
2026-05-20 06:50:13,558 - INFO - Applying time masks...
2026-05-20 06:50:13,572 - INFO - IMERG dekad data shape: (250, 9, 14)
2026-05-20 06:50:13,574 - INFO - CPC dekad data shape: (250, 9, 14)
2026-05-20 06:50:13,579 - INFO - Using native-resolution CPC parameter fitting (BCSD principle)...
2026-05-20 06:50:13,608 - INFO - CPC native dekad data: (250, 4, 6) (lat -9.25–-7.75, lon 113.75–116.25)
2026-05-20 06:50:16,059 - INFO - Native CPC fitting: row 4/4 (100%) | 24 fitted, 0 skipped | elapsed 2s, ETA 0s
2026-05-20 06:50:16,060 - INFO - Fitted CPC params on native grid: 24/24 cells
2026-05-20 06:50:16,111 - INFO - Interpolated CPC params to IMERG grid: 126/126 valid pixels
2026-05-20 06:50:16,112 - INFO - Performing Linear Scaling (LS)...
2026-05-20 06:50:16,122 - INFO - LS using bilinearly interpolated CPC mean (smooth).
2026-05-20 06:50:16,125 - INFO - Saving LS corrected precipitation...
2026-05-20 06:50:16,128 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:50:16,175 - INFO - Saved Linear Scaling corrected precipitation for month 06, dekad 11 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_ls/bali_cli_ls_corrected_imergl_month06_dekad11.nc4
2026-05-20 06:50:16,176 - INFO - Applying Empirical Quantile Mapping (EQM) on 9x14 grid...
2026-05-20 06:50:16,271 - INFO - EQM progress: row 9/9 (100%) | 80 land pixels done | elapsed 0s, ETA 0s
2026-05-20 06:50:16,274 - INFO - EQM complete: 80/126 grid points corrected (46 masked/ocean pixels skipped)
2026-05-20 06:50:16,276 - INFO - Saving LSEQM corrected precipitation...
2026-05-20 06:50:16,279 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:50:16,329 - INFO - Saved Linear Scaling and Empirical Quantile Mapping corrected precipitation for month 06, dekad 11 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqm/bali_cli_lseqm_corrected_imergl_month06_dekad11.nc4
2026-05-20 06:50:16,330 - INFO - Pipeline [06 d2]: Training / loading DL model...
2026-05-20 06:50:16,331 - INFO - Checking if the model file exists at: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month06_dekad11.keras
2026-05-20 06:50:16,426 - INFO - Model: "sequential_16"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ conv2d_32 (Conv2D) │ (None, 9, 14, 32) │ 320 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_32 (MaxPooling2D) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_48 (Dropout) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_33 (Conv2D) │ (None, 4, 7, 64) │ 18,496 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_33 (MaxPooling2D) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_49 (Dropout) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ flatten_16 (Flatten) │ (None, 384) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_32 (Dense) │ (None, 128) │ 49,280 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_50 (Dropout) │ (None, 128) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_33 (Dense) │ (None, 126) │ 16,254 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ reshape_16 (Reshape) │ (None, 9, 14) │ 0 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 84,350 (329.49 KB)
Trainable params: 84,350 (329.49 KB)
Non-trainable params: 0 (0.00 B)
Epoch 1/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 2s 147ms/step - loss: 0.0835 - mae: 0.1509 - val_loss: 0.0697 - val_mae: 0.1229
Epoch 2/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 68ms/step - loss: 0.0759 - mae: 0.1460 - val_loss: 0.0613 - val_mae: 0.1264
Epoch 3/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 69ms/step - loss: 0.0674 - mae: 0.1490 - val_loss: 0.0521 - val_mae: 0.1344
Epoch 4/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0621 - mae: 0.1581 - val_loss: 0.0476 - val_mae: 0.1351
Epoch 5/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 52ms/step - loss: 0.0585 - mae: 0.1555 - val_loss: 0.0467 - val_mae: 0.1288
Epoch 6/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0558 - mae: 0.1505 - val_loss: 0.0461 - val_mae: 0.1283
Epoch 7/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 45ms/step - loss: 0.0529 - mae: 0.1487 - val_loss: 0.0436 - val_mae: 0.1316
Epoch 8/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 41ms/step - loss: 0.0501 - mae: 0.1521 - val_loss: 0.0419 - val_mae: 0.1346
Epoch 9/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0502 - mae: 0.1530 - val_loss: 0.0421 - val_mae: 0.1297
Epoch 10/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0483 - mae: 0.1467 - val_loss: 0.0426 - val_mae: 0.1285
Epoch 11/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0483 - mae: 0.1466 - val_loss: 0.0431 - val_mae: 0.1278
Epoch 12/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 32ms/step - loss: 0.0478 - mae: 0.1450 - val_loss: 0.0433 - val_mae: 0.1267
Epoch 13/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0462 - mae: 0.1428 - val_loss: 0.0419 - val_mae: 0.1281
2026-05-20 06:50:20,619 - INFO - Final training history: {'loss': [0.08345184475183487, 0.07585816085338593, 0.06735112518072128, 0.0621207095682621, 0.05848045274615288, 0.05584409087896347, 0.05286280810832977, 0.05008812993764877, 0.050193339586257935, 0.04829326272010803, 0.0482722707092762, 0.0478421151638031, 0.04616359621286392], 'mae': [0.15085065364837646, 0.1459515541791916, 0.14896894991397858, 0.158124640583992, 0.1555299162864685, 0.1504731923341751, 0.14871905744075775, 0.1521255075931549, 0.15299810469150543, 0.1466529816389084, 0.146592378616333, 0.14495819807052612, 0.1427943855524063], 'val_loss': [0.06969944387674332, 0.061264511197805405, 0.05211564525961876, 0.04761667549610138, 0.04666709899902344, 0.04613615572452545, 0.04356122016906738, 0.04190877825021744, 0.04208673536777496, 0.04259612038731575, 0.04313831403851509, 0.04331562668085098, 0.04192585125565529], 'val_mae': [0.12289228290319443, 0.12638305127620697, 0.13435202836990356, 0.13506077229976654, 0.1288232058286667, 0.12831439077854156, 0.13162168860435486, 0.1345810741186142, 0.12972812354564667, 0.12854953110218048, 0.12784641981124878, 0.12671999633312225, 0.12814520299434662]}
2026-05-20 06:50:20,761 - INFO - Model training complete. Best model saved as /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month06_dekad11.keras
2026-05-20 06:50:20,765 - INFO - Pipeline [06 d2]: Loading confidence mask...
2026-05-20 06:50:20,767 - INFO - Loading existing confidence mask: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/station_density/confidence_mask_station_density.nc4
2026-05-20 06:50:20,768 - INFO - Pipeline [06 d2]: Applying DL refinement...
2026-05-20 06:50:20,783 - INFO - Pixel-wise threshold map computed at 80th percentile. threshold_2d shape: (9, 14)
2026-05-20 06:50:20,785 - INFO - DL blending: base alpha=0.70 (LSEQM weight), 1-alpha=0.30 (DL weight)
2026-05-20 06:50:20,786 - INFO - Confidence mask active: spatial alpha modulation enabled. Confidence range: [0.000, 0.411]
2026-05-20 06:50:37,622 - INFO - DL blending complete: 250 daily slices processed, 3,840 extreme pixels blended (alpha=0.70)
2026-05-20 06:50:37,712 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:50:37,760 - INFO - Saved Hybrid Deep Learning-Physical (Linear Scaling and Empirical Quantile Mapping) Approach corrected precipitation for month 06, dekad 11 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_lseqmdl_corrected_imergl_month06_dekad11.nc4
2026-05-20 06:50:37,762 - INFO - Pipeline [06 d2]: Complete.
✓ month 06 dekad 2 — saved: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_imergl_lseqmdl_corrected_precip_month06_dekad11.nc4
============================================================
▸ month 06 dekad 3
============================================================
2026-05-20 06:50:37,766 - INFO - Pipeline [06 d3]: Running LSEQM...
2026-05-20 06:50:37,769 - INFO - Aligning IMERG and CPC datasets...
2026-05-20 06:50:37,777 - INFO - After alignment: IMERG has 9131 time steps, CPC has 9131 time steps
2026-05-20 06:50:37,778 - INFO - Creating time-based masks...
2026-05-20 06:50:37,789 - INFO - Applying time masks...
2026-05-20 06:50:37,799 - INFO - IMERG dekad data shape: (250, 9, 14)
2026-05-20 06:50:37,800 - INFO - CPC dekad data shape: (250, 9, 14)
2026-05-20 06:50:37,803 - INFO - Using native-resolution CPC parameter fitting (BCSD principle)...
2026-05-20 06:50:37,832 - INFO - CPC native dekad data: (250, 4, 6) (lat -9.25–-7.75, lon 113.75–116.25)
2026-05-20 06:50:41,163 - INFO - Native CPC fitting: row 4/4 (100%) | 24 fitted, 0 skipped | elapsed 3s, ETA 0s
2026-05-20 06:50:41,164 - INFO - Fitted CPC params on native grid: 24/24 cells
2026-05-20 06:50:41,213 - INFO - Interpolated CPC params to IMERG grid: 126/126 valid pixels
2026-05-20 06:50:41,214 - INFO - Performing Linear Scaling (LS)...
2026-05-20 06:50:41,226 - INFO - LS using bilinearly interpolated CPC mean (smooth).
2026-05-20 06:50:41,231 - INFO - Saving LS corrected precipitation...
2026-05-20 06:50:41,233 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:50:41,283 - INFO - Saved Linear Scaling corrected precipitation for month 06, dekad 21 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_ls/bali_cli_ls_corrected_imergl_month06_dekad21.nc4
2026-05-20 06:50:41,284 - INFO - Applying Empirical Quantile Mapping (EQM) on 9x14 grid...
2026-05-20 06:50:41,362 - INFO - EQM progress: row 9/9 (100%) | 80 land pixels done | elapsed 0s, ETA 0s
2026-05-20 06:50:41,365 - INFO - EQM complete: 80/126 grid points corrected (46 masked/ocean pixels skipped)
2026-05-20 06:50:41,366 - INFO - Saving LSEQM corrected precipitation...
2026-05-20 06:50:41,368 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:50:41,413 - INFO - Saved Linear Scaling and Empirical Quantile Mapping corrected precipitation for month 06, dekad 21 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqm/bali_cli_lseqm_corrected_imergl_month06_dekad21.nc4
2026-05-20 06:50:41,414 - INFO - Pipeline [06 d3]: Training / loading DL model...
2026-05-20 06:50:41,415 - INFO - Checking if the model file exists at: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month06_dekad21.keras
2026-05-20 06:50:41,472 - INFO - Model: "sequential_17"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ conv2d_34 (Conv2D) │ (None, 9, 14, 32) │ 320 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_34 (MaxPooling2D) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_51 (Dropout) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_35 (Conv2D) │ (None, 4, 7, 64) │ 18,496 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_35 (MaxPooling2D) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_52 (Dropout) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ flatten_17 (Flatten) │ (None, 384) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_34 (Dense) │ (None, 128) │ 49,280 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_53 (Dropout) │ (None, 128) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_35 (Dense) │ (None, 126) │ 16,254 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ reshape_17 (Reshape) │ (None, 9, 14) │ 0 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 84,350 (329.49 KB)
Trainable params: 84,350 (329.49 KB)
Non-trainable params: 0 (0.00 B)
Epoch 1/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 2s 156ms/step - loss: 0.0731 - mae: 0.1358 - val_loss: 0.1162 - val_mae: 0.1798
Epoch 2/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 68ms/step - loss: 0.0668 - mae: 0.1342 - val_loss: 0.1043 - val_mae: 0.1765
Epoch 3/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 72ms/step - loss: 0.0613 - mae: 0.1418 - val_loss: 0.0903 - val_mae: 0.1705
Epoch 4/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 60ms/step - loss: 0.0569 - mae: 0.1447 - val_loss: 0.0849 - val_mae: 0.1661
Epoch 5/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0537 - mae: 0.1424 - val_loss: 0.0810 - val_mae: 0.1646
Epoch 6/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 45ms/step - loss: 0.0512 - mae: 0.1420 - val_loss: 0.0786 - val_mae: 0.1636
Epoch 7/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 41ms/step - loss: 0.0496 - mae: 0.1399 - val_loss: 0.0747 - val_mae: 0.1608
Epoch 8/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0474 - mae: 0.1409 - val_loss: 0.0669 - val_mae: 0.1561
Epoch 9/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0466 - mae: 0.1447 - val_loss: 0.0650 - val_mae: 0.1540
Epoch 10/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0448 - mae: 0.1409 - val_loss: 0.0693 - val_mae: 0.1552
Epoch 11/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0438 - mae: 0.1339 - val_loss: 0.0687 - val_mae: 0.1537
Epoch 12/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0433 - mae: 0.1325 - val_loss: 0.0663 - val_mae: 0.1507
Epoch 13/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0437 - mae: 0.1340 - val_loss: 0.0655 - val_mae: 0.1494
Epoch 14/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0428 - mae: 0.1313 - val_loss: 0.0637 - val_mae: 0.1480
Epoch 15/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 25ms/step - loss: 0.0434 - mae: 0.1345 - val_loss: 0.0640 - val_mae: 0.1484
Epoch 16/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0419 - mae: 0.1303 - val_loss: 0.0677 - val_mae: 0.1514
Epoch 17/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 33ms/step - loss: 0.0405 - mae: 0.1266 - val_loss: 0.0654 - val_mae: 0.1511
Epoch 18/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0409 - mae: 0.1297 - val_loss: 0.0610 - val_mae: 0.1492
Epoch 19/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0412 - mae: 0.1346 - val_loss: 0.0607 - val_mae: 0.1484
Epoch 20/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0396 - mae: 0.1282 - val_loss: 0.0655 - val_mae: 0.1505
Epoch 21/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0393 - mae: 0.1250 - val_loss: 0.0654 - val_mae: 0.1501
Epoch 22/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0390 - mae: 0.1239 - val_loss: 0.0629 - val_mae: 0.1480
Epoch 23/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0376 - mae: 0.1235 - val_loss: 0.0577 - val_mae: 0.1445
Epoch 24/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0380 - mae: 0.1269 - val_loss: 0.0610 - val_mae: 0.1468
Epoch 25/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step - loss: 0.0374 - mae: 0.1211 - val_loss: 0.0671 - val_mae: 0.1516
Epoch 26/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0371 - mae: 0.1184 - val_loss: 0.0628 - val_mae: 0.1493
Epoch 27/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step - loss: 0.0363 - mae: 0.1214 - val_loss: 0.0603 - val_mae: 0.1469
Epoch 28/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0359 - mae: 0.1193 - val_loss: 0.0639 - val_mae: 0.1483
2026-05-20 06:50:47,871 - INFO - Final training history: {'loss': [0.07314199209213257, 0.06677485257387161, 0.06125982850790024, 0.056873250752687454, 0.053693875670433044, 0.05119451507925987, 0.04958430305123329, 0.04742421582341194, 0.046553559601306915, 0.04479329660534859, 0.04383884370326996, 0.04333679750561714, 0.043743059039115906, 0.04284200072288513, 0.0434027761220932, 0.04194317385554314, 0.04054374247789383, 0.040868304669857025, 0.04117201641201973, 0.039614904671907425, 0.039305683225393295, 0.039024002850055695, 0.037619397044181824, 0.037999071180820465, 0.03739568963646889, 0.03707868605852127, 0.036310821771621704, 0.0358746200799942], 'mae': [0.13575682044029236, 0.1341608166694641, 0.14175379276275635, 0.14466774463653564, 0.14240941405296326, 0.14198508858680725, 0.13994911313056946, 0.1409258246421814, 0.14469249546527863, 0.14088012278079987, 0.13390447199344635, 0.13247039914131165, 0.1339654177427292, 0.1312968134880066, 0.13448302447795868, 0.1302804797887802, 0.12659992277622223, 0.12974891066551208, 0.13459302484989166, 0.1281658411026001, 0.12504807114601135, 0.12389599531888962, 0.1235310286283493, 0.12691152095794678, 0.12111031264066696, 0.1184399425983429, 0.12143527716398239, 0.11925309151411057], 'val_loss': [0.11619880795478821, 0.10433206707239151, 0.09025426208972931, 0.08489899337291718, 0.08097648620605469, 0.07856178283691406, 0.07470483332872391, 0.06687261909246445, 0.06495925784111023, 0.06934753060340881, 0.06874413788318634, 0.06632674485445023, 0.06554964184761047, 0.06365610659122467, 0.06402934342622757, 0.06767497956752777, 0.06538909673690796, 0.06097377464175224, 0.060680270195007324, 0.06547584384679794, 0.06543764472007751, 0.06292259693145752, 0.05771482363343239, 0.060981228947639465, 0.06714217364788055, 0.06281597167253494, 0.06032043322920799, 0.06390929222106934], 'val_mae': [0.17979268729686737, 0.17647680640220642, 0.1705453097820282, 0.16613319516181946, 0.16463981568813324, 0.16359438002109528, 0.16080434620380402, 0.15609626471996307, 0.1540326029062271, 0.15520766377449036, 0.1537226289510727, 0.15070189535617828, 0.14938437938690186, 0.14801108837127686, 0.14842626452445984, 0.15135253965854645, 0.151140496134758, 0.14923861622810364, 0.14839614927768707, 0.1505349576473236, 0.1501423567533493, 0.14797283709049225, 0.144475519657135, 0.14680437743663788, 0.15156497061252594, 0.14931227266788483, 0.1469028741121292, 0.1482950747013092]}
2026-05-20 06:50:48,015 - INFO - Model training complete. Best model saved as /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month06_dekad21.keras
2026-05-20 06:50:48,017 - INFO - Pipeline [06 d3]: Loading confidence mask...
2026-05-20 06:50:48,019 - INFO - Loading existing confidence mask: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/station_density/confidence_mask_station_density.nc4
2026-05-20 06:50:48,019 - INFO - Pipeline [06 d3]: Applying DL refinement...
2026-05-20 06:50:48,036 - INFO - Pixel-wise threshold map computed at 80th percentile. threshold_2d shape: (9, 14)
2026-05-20 06:50:48,037 - INFO - DL blending: base alpha=0.70 (LSEQM weight), 1-alpha=0.30 (DL weight)
2026-05-20 06:50:48,038 - INFO - Confidence mask active: spatial alpha modulation enabled. Confidence range: [0.000, 0.411]
2026-05-20 06:51:09,086 - INFO - DL blending complete: 250 daily slices processed, 3,496 extreme pixels blended (alpha=0.70)
2026-05-20 06:51:09,184 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:51:09,249 - INFO - Saved Hybrid Deep Learning-Physical (Linear Scaling and Empirical Quantile Mapping) Approach corrected precipitation for month 06, dekad 21 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_lseqmdl_corrected_imergl_month06_dekad21.nc4
2026-05-20 06:51:09,250 - INFO - Pipeline [06 d3]: Complete.
✓ month 06 dekad 3 — saved: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_imergl_lseqmdl_corrected_precip_month06_dekad21.nc4
============================================================
▸ month 07 dekad 1
============================================================
2026-05-20 06:51:09,251 - INFO - Pipeline [07 d1]: Running LSEQM...
2026-05-20 06:51:09,257 - INFO - Aligning IMERG and CPC datasets...
2026-05-20 06:51:09,266 - INFO - After alignment: IMERG has 9131 time steps, CPC has 9131 time steps
2026-05-20 06:51:09,267 - INFO - Creating time-based masks...
2026-05-20 06:51:09,279 - INFO - Applying time masks...
2026-05-20 06:51:09,292 - INFO - IMERG dekad data shape: (250, 9, 14)
2026-05-20 06:51:09,293 - INFO - CPC dekad data shape: (250, 9, 14)
2026-05-20 06:51:09,296 - INFO - Using native-resolution CPC parameter fitting (BCSD principle)...
2026-05-20 06:51:09,328 - INFO - CPC native dekad data: (250, 4, 6) (lat -9.25–-7.75, lon 113.75–116.25)
2026-05-20 06:51:12,788 - INFO - Native CPC fitting: row 4/4 (100%) | 24 fitted, 0 skipped | elapsed 3s, ETA 0s
2026-05-20 06:51:12,789 - INFO - Fitted CPC params on native grid: 24/24 cells
2026-05-20 06:51:12,833 - INFO - Interpolated CPC params to IMERG grid: 126/126 valid pixels
2026-05-20 06:51:12,834 - INFO - Performing Linear Scaling (LS)...
2026-05-20 06:51:12,846 - INFO - LS using bilinearly interpolated CPC mean (smooth).
2026-05-20 06:51:12,850 - INFO - Saving LS corrected precipitation...
2026-05-20 06:51:12,855 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:51:12,903 - INFO - Saved Linear Scaling corrected precipitation for month 07, dekad 01 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_ls/bali_cli_ls_corrected_imergl_month07_dekad01.nc4
2026-05-20 06:51:12,904 - INFO - Applying Empirical Quantile Mapping (EQM) on 9x14 grid...
2026-05-20 06:51:12,978 - INFO - EQM progress: row 9/9 (100%) | 80 land pixels done | elapsed 0s, ETA 0s
2026-05-20 06:51:12,981 - INFO - EQM complete: 80/126 grid points corrected (46 masked/ocean pixels skipped)
2026-05-20 06:51:12,983 - INFO - Saving LSEQM corrected precipitation...
2026-05-20 06:51:12,986 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:51:13,033 - INFO - Saved Linear Scaling and Empirical Quantile Mapping corrected precipitation for month 07, dekad 01 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqm/bali_cli_lseqm_corrected_imergl_month07_dekad01.nc4
2026-05-20 06:51:13,034 - INFO - Pipeline [07 d1]: Training / loading DL model...
2026-05-20 06:51:13,036 - INFO - Checking if the model file exists at: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month07_dekad01.keras
2026-05-20 06:51:13,099 - INFO - Model: "sequential_18"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ conv2d_36 (Conv2D) │ (None, 9, 14, 32) │ 320 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_36 (MaxPooling2D) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_54 (Dropout) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_37 (Conv2D) │ (None, 4, 7, 64) │ 18,496 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_37 (MaxPooling2D) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_55 (Dropout) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ flatten_18 (Flatten) │ (None, 384) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_36 (Dense) │ (None, 128) │ 49,280 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_56 (Dropout) │ (None, 128) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_37 (Dense) │ (None, 126) │ 16,254 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ reshape_18 (Reshape) │ (None, 9, 14) │ 0 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 84,350 (329.49 KB)
Trainable params: 84,350 (329.49 KB)
Non-trainable params: 0 (0.00 B)
Epoch 1/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 2s 92ms/step - loss: 0.0665 - mae: 0.1222 - val_loss: 0.1410 - val_mae: 0.2133
Epoch 2/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0615 - mae: 0.1209 - val_loss: 0.1279 - val_mae: 0.2082
Epoch 3/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 48ms/step - loss: 0.0576 - mae: 0.1285 - val_loss: 0.1107 - val_mae: 0.1998
Epoch 4/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 41ms/step - loss: 0.0542 - mae: 0.1377 - val_loss: 0.0974 - val_mae: 0.1913
Epoch 5/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0521 - mae: 0.1417 - val_loss: 0.0918 - val_mae: 0.1872
Epoch 6/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 50ms/step - loss: 0.0502 - mae: 0.1432 - val_loss: 0.0911 - val_mae: 0.1867
Epoch 7/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0490 - mae: 0.1376 - val_loss: 0.0938 - val_mae: 0.1871
Epoch 8/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 62ms/step - loss: 0.0474 - mae: 0.1350 - val_loss: 0.0864 - val_mae: 0.1825
Epoch 9/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 46ms/step - loss: 0.0462 - mae: 0.1390 - val_loss: 0.0781 - val_mae: 0.1770
Epoch 10/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step - loss: 0.0455 - mae: 0.1413 - val_loss: 0.0786 - val_mae: 0.1758
Epoch 11/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0444 - mae: 0.1347 - val_loss: 0.0840 - val_mae: 0.1778
Epoch 12/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0435 - mae: 0.1290 - val_loss: 0.0810 - val_mae: 0.1746
Epoch 13/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0434 - mae: 0.1302 - val_loss: 0.0754 - val_mae: 0.1691
Epoch 14/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0427 - mae: 0.1297 - val_loss: 0.0702 - val_mae: 0.1639
Epoch 15/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step - loss: 0.0426 - mae: 0.1306 - val_loss: 0.0707 - val_mae: 0.1619
Epoch 16/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 45ms/step - loss: 0.0420 - mae: 0.1272 - val_loss: 0.0691 - val_mae: 0.1588
Epoch 17/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0413 - mae: 0.1254 - val_loss: 0.0682 - val_mae: 0.1576
Epoch 18/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0410 - mae: 0.1247 - val_loss: 0.0666 - val_mae: 0.1564
Epoch 19/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0405 - mae: 0.1272 - val_loss: 0.0651 - val_mae: 0.1562
Epoch 20/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0398 - mae: 0.1270 - val_loss: 0.0657 - val_mae: 0.1569
Epoch 21/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0397 - mae: 0.1257 - val_loss: 0.0703 - val_mae: 0.1608
Epoch 22/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step - loss: 0.0400 - mae: 0.1241 - val_loss: 0.0723 - val_mae: 0.1626
Epoch 23/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 45ms/step - loss: 0.0395 - mae: 0.1233 - val_loss: 0.0698 - val_mae: 0.1616
Epoch 24/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 53ms/step - loss: 0.0394 - mae: 0.1257 - val_loss: 0.0677 - val_mae: 0.1600
2026-05-20 06:51:18,977 - INFO - Final training history: {'loss': [0.06646904349327087, 0.06152022257447243, 0.05761547014117241, 0.05422685667872429, 0.052075911313295364, 0.0502198189496994, 0.048963919281959534, 0.047417089343070984, 0.04624073579907417, 0.04546453803777695, 0.04444355517625809, 0.04353206977248192, 0.04337691888213158, 0.04273562133312225, 0.04258893057703972, 0.04203431308269501, 0.04132099449634552, 0.04102727398276329, 0.04051414504647255, 0.03979272022843361, 0.03973110765218735, 0.04004065692424774, 0.039530180394649506, 0.039381466805934906], 'mae': [0.12223294377326965, 0.12089289724826813, 0.1284726858139038, 0.13765603303909302, 0.14166919887065887, 0.14316172897815704, 0.1375780552625656, 0.13495609164237976, 0.1390019804239273, 0.14132702350616455, 0.13473321497440338, 0.12898360192775726, 0.13017910718917847, 0.1297467052936554, 0.13061554729938507, 0.12724679708480835, 0.12538297474384308, 0.12474469840526581, 0.12717518210411072, 0.1269800066947937, 0.12568651139736176, 0.12410372495651245, 0.12326554954051971, 0.12572301924228668], 'val_loss': [0.14096498489379883, 0.12785212695598602, 0.11071997880935669, 0.09738446027040482, 0.09183797240257263, 0.09113001823425293, 0.09375102818012238, 0.08638553321361542, 0.07809469103813171, 0.0785900428891182, 0.08404318988323212, 0.08100021630525589, 0.07538628578186035, 0.07021810859441757, 0.07069497555494308, 0.0690591037273407, 0.0682322084903717, 0.0665564090013504, 0.06512641906738281, 0.06573011726140976, 0.07031749188899994, 0.07231573015451431, 0.06981682032346725, 0.06774471700191498], 'val_mae': [0.21329627931118011, 0.2081674337387085, 0.19980916380882263, 0.19126775860786438, 0.18716207146644592, 0.18673622608184814, 0.18713070452213287, 0.18246635794639587, 0.17702430486679077, 0.1758396476507187, 0.17775142192840576, 0.174584299325943, 0.16905330121517181, 0.1638714075088501, 0.16185235977172852, 0.1587957888841629, 0.1575566828250885, 0.156357541680336, 0.15621638298034668, 0.15685439109802246, 0.16081644594669342, 0.16261011362075806, 0.16157081723213196, 0.15998372435569763]}
2026-05-20 06:51:19,156 - INFO - Model training complete. Best model saved as /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month07_dekad01.keras
2026-05-20 06:51:19,158 - INFO - Pipeline [07 d1]: Loading confidence mask...
2026-05-20 06:51:19,160 - INFO - Loading existing confidence mask: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/station_density/confidence_mask_station_density.nc4
2026-05-20 06:51:19,160 - INFO - Pipeline [07 d1]: Applying DL refinement...
2026-05-20 06:51:19,174 - INFO - Pixel-wise threshold map computed at 80th percentile. threshold_2d shape: (9, 14)
2026-05-20 06:51:19,176 - INFO - DL blending: base alpha=0.70 (LSEQM weight), 1-alpha=0.30 (DL weight)
2026-05-20 06:51:19,177 - INFO - Confidence mask active: spatial alpha modulation enabled. Confidence range: [0.000, 0.411]
2026-05-20 06:51:36,516 - INFO - DL blending complete: 250 daily slices processed, 3,448 extreme pixels blended (alpha=0.70)
2026-05-20 06:51:36,607 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:51:36,652 - INFO - Saved Hybrid Deep Learning-Physical (Linear Scaling and Empirical Quantile Mapping) Approach corrected precipitation for month 07, dekad 01 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_lseqmdl_corrected_imergl_month07_dekad01.nc4
2026-05-20 06:51:36,654 - INFO - Pipeline [07 d1]: Complete.
✓ month 07 dekad 1 — saved: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_imergl_lseqmdl_corrected_precip_month07_dekad01.nc4
============================================================
▸ month 07 dekad 2
============================================================
2026-05-20 06:51:36,655 - INFO - Pipeline [07 d2]: Running LSEQM...
2026-05-20 06:51:36,659 - INFO - Aligning IMERG and CPC datasets...
2026-05-20 06:51:36,668 - INFO - After alignment: IMERG has 9131 time steps, CPC has 9131 time steps
2026-05-20 06:51:36,669 - INFO - Creating time-based masks...
2026-05-20 06:51:36,681 - INFO - Applying time masks...
2026-05-20 06:51:36,692 - INFO - IMERG dekad data shape: (250, 9, 14)
2026-05-20 06:51:36,693 - INFO - CPC dekad data shape: (250, 9, 14)
2026-05-20 06:51:36,697 - INFO - Using native-resolution CPC parameter fitting (BCSD principle)...
2026-05-20 06:51:36,728 - INFO - CPC native dekad data: (250, 4, 6) (lat -9.25–-7.75, lon 113.75–116.25)
2026-05-20 06:51:39,469 - INFO - Native CPC fitting: row 4/4 (100%) | 24 fitted, 0 skipped | elapsed 3s, ETA 0s
2026-05-20 06:51:39,470 - INFO - Fitted CPC params on native grid: 24/24 cells
2026-05-20 06:51:39,512 - INFO - Interpolated CPC params to IMERG grid: 126/126 valid pixels
2026-05-20 06:51:39,513 - INFO - Performing Linear Scaling (LS)...
2026-05-20 06:51:39,522 - INFO - LS using bilinearly interpolated CPC mean (smooth).
2026-05-20 06:51:39,526 - INFO - Saving LS corrected precipitation...
2026-05-20 06:51:39,528 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:51:39,577 - INFO - Saved Linear Scaling corrected precipitation for month 07, dekad 11 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_ls/bali_cli_ls_corrected_imergl_month07_dekad11.nc4
2026-05-20 06:51:39,578 - INFO - Applying Empirical Quantile Mapping (EQM) on 9x14 grid...
2026-05-20 06:51:39,653 - INFO - EQM progress: row 9/9 (100%) | 80 land pixels done | elapsed 0s, ETA 0s
2026-05-20 06:51:39,656 - INFO - EQM complete: 80/126 grid points corrected (46 masked/ocean pixels skipped)
2026-05-20 06:51:39,657 - INFO - Saving LSEQM corrected precipitation...
2026-05-20 06:51:39,659 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:51:39,727 - INFO - Saved Linear Scaling and Empirical Quantile Mapping corrected precipitation for month 07, dekad 11 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqm/bali_cli_lseqm_corrected_imergl_month07_dekad11.nc4
2026-05-20 06:51:39,728 - INFO - Pipeline [07 d2]: Training / loading DL model...
2026-05-20 06:51:39,730 - INFO - Checking if the model file exists at: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month07_dekad11.keras
2026-05-20 06:51:39,790 - INFO - Model: "sequential_19"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ conv2d_38 (Conv2D) │ (None, 9, 14, 32) │ 320 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_38 (MaxPooling2D) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_57 (Dropout) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_39 (Conv2D) │ (None, 4, 7, 64) │ 18,496 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_39 (MaxPooling2D) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_58 (Dropout) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ flatten_19 (Flatten) │ (None, 384) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_38 (Dense) │ (None, 128) │ 49,280 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_59 (Dropout) │ (None, 128) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_39 (Dense) │ (None, 126) │ 16,254 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ reshape_19 (Reshape) │ (None, 9, 14) │ 0 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 84,350 (329.49 KB)
Trainable params: 84,350 (329.49 KB)
Non-trainable params: 0 (0.00 B)
Epoch 1/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 1s 97ms/step - loss: 0.0863 - mae: 0.1564 - val_loss: 0.0334 - val_mae: 0.0654
Epoch 2/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0774 - mae: 0.1513 - val_loss: 0.0312 - val_mae: 0.0776
Epoch 3/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 41ms/step - loss: 0.0692 - mae: 0.1565 - val_loss: 0.0310 - val_mae: 0.0961
Epoch 4/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0644 - mae: 0.1632 - val_loss: 0.0310 - val_mae: 0.1027
Epoch 5/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0600 - mae: 0.1594 - val_loss: 0.0303 - val_mae: 0.1022
Epoch 6/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 41ms/step - loss: 0.0570 - mae: 0.1568 - val_loss: 0.0302 - val_mae: 0.1052
Epoch 7/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0549 - mae: 0.1559 - val_loss: 0.0305 - val_mae: 0.1085
Epoch 8/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0537 - mae: 0.1549 - val_loss: 0.0308 - val_mae: 0.1108
Epoch 9/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0525 - mae: 0.1566 - val_loss: 0.0323 - val_mae: 0.1179
Epoch 10/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0509 - mae: 0.1564 - val_loss: 0.0312 - val_mae: 0.1129
Epoch 11/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 46ms/step - loss: 0.0512 - mae: 0.1537 - val_loss: 0.0300 - val_mae: 0.1074
Epoch 12/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0488 - mae: 0.1481 - val_loss: 0.0303 - val_mae: 0.1093
Epoch 13/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 25ms/step - loss: 0.0499 - mae: 0.1509 - val_loss: 0.0303 - val_mae: 0.1093
Epoch 14/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 25ms/step - loss: 0.0490 - mae: 0.1488 - val_loss: 0.0301 - val_mae: 0.1079
Epoch 15/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 69ms/step - loss: 0.0476 - mae: 0.1471 - val_loss: 0.0298 - val_mae: 0.1058
Epoch 16/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 55ms/step - loss: 0.0477 - mae: 0.1450 - val_loss: 0.0297 - val_mae: 0.1044
Epoch 17/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 38ms/step - loss: 0.0468 - mae: 0.1440 - val_loss: 0.0310 - val_mae: 0.1097
Epoch 18/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 51ms/step - loss: 0.0465 - mae: 0.1453 - val_loss: 0.0310 - val_mae: 0.1099
Epoch 19/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 53ms/step - loss: 0.0464 - mae: 0.1458 - val_loss: 0.0300 - val_mae: 0.1051
Epoch 20/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 56ms/step - loss: 0.0452 - mae: 0.1405 - val_loss: 0.0294 - val_mae: 0.1011
Epoch 21/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 35ms/step - loss: 0.0467 - mae: 0.1400 - val_loss: 0.0298 - val_mae: 0.1027
Epoch 22/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 39ms/step - loss: 0.0440 - mae: 0.1371 - val_loss: 0.0309 - val_mae: 0.1066
Epoch 23/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0450 - mae: 0.1400 - val_loss: 0.0310 - val_mae: 0.1049
Epoch 24/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 51ms/step - loss: 0.0443 - mae: 0.1373 - val_loss: 0.0313 - val_mae: 0.1052
Epoch 25/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 53ms/step - loss: 0.0437 - mae: 0.1379 - val_loss: 0.0310 - val_mae: 0.1034
2026-05-20 06:51:45,920 - INFO - Final training history: {'loss': [0.08629389107227325, 0.07737090438604355, 0.06924473494291306, 0.06437871605157852, 0.06004292517900467, 0.05695082247257233, 0.05494553595781326, 0.05366172641515732, 0.052453555166721344, 0.05088984593749046, 0.05121656507253647, 0.04883558303117752, 0.04992125928401947, 0.04902736097574234, 0.04758533090353012, 0.04774816334247589, 0.046835724264383316, 0.04647469148039818, 0.04640980064868927, 0.045166317373514175, 0.04673363268375397, 0.04403715208172798, 0.04502858966588974, 0.04431094601750374, 0.04367678239941597], 'mae': [0.15641427040100098, 0.1512853503227234, 0.156511127948761, 0.16322967410087585, 0.1594480574131012, 0.15678873658180237, 0.15592166781425476, 0.1549346148967743, 0.15661679208278656, 0.15635570883750916, 0.15365056693553925, 0.14808204770088196, 0.15094581246376038, 0.14878030121326447, 0.14709289371967316, 0.14497001469135284, 0.14395830035209656, 0.14525549113750458, 0.14575906097888947, 0.14047561585903168, 0.13995420932769775, 0.13707472383975983, 0.14001670479774475, 0.13729800283908844, 0.13788582384586334], 'val_loss': [0.033359330147504807, 0.03120044618844986, 0.03097272478044033, 0.031032491475343704, 0.030267581343650818, 0.03021947853267193, 0.030468938872218132, 0.030762916430830956, 0.032322321087121964, 0.03118383139371872, 0.030042123049497604, 0.030318904668092728, 0.030344288796186447, 0.03006981685757637, 0.029764872044324875, 0.029701299965381622, 0.03096764162182808, 0.031033730134367943, 0.02998359501361847, 0.02941671572625637, 0.02983895316720009, 0.03092704527080059, 0.03103628009557724, 0.03131347894668579, 0.031032798811793327], 'val_mae': [0.06543505936861038, 0.07764019817113876, 0.09611154347658157, 0.10267660021781921, 0.10220783203840256, 0.10517766326665878, 0.10845991969108582, 0.11083409190177917, 0.1179051473736763, 0.11292988806962967, 0.10738621652126312, 0.10925423353910446, 0.1092718318104744, 0.10786283761262894, 0.10580672323703766, 0.10441321134567261, 0.10972169041633606, 0.10994536429643631, 0.1050637885928154, 0.10112235695123672, 0.10265634208917618, 0.1065891832113266, 0.10489752143621445, 0.10519848763942719, 0.10341211408376694]}
2026-05-20 06:51:46,114 - INFO - Model training complete. Best model saved as /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month07_dekad11.keras
2026-05-20 06:51:46,116 - INFO - Pipeline [07 d2]: Loading confidence mask...
2026-05-20 06:51:46,119 - INFO - Loading existing confidence mask: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/station_density/confidence_mask_station_density.nc4
2026-05-20 06:51:46,120 - INFO - Pipeline [07 d2]: Applying DL refinement...
2026-05-20 06:51:46,134 - INFO - Pixel-wise threshold map computed at 80th percentile. threshold_2d shape: (9, 14)
2026-05-20 06:51:46,135 - INFO - DL blending: base alpha=0.70 (LSEQM weight), 1-alpha=0.30 (DL weight)
2026-05-20 06:51:46,136 - INFO - Confidence mask active: spatial alpha modulation enabled. Confidence range: [0.000, 0.411]
2026-05-20 06:52:02,827 - INFO - DL blending complete: 250 daily slices processed, 2,721 extreme pixels blended (alpha=0.70)
2026-05-20 06:52:02,914 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:52:02,976 - INFO - Saved Hybrid Deep Learning-Physical (Linear Scaling and Empirical Quantile Mapping) Approach corrected precipitation for month 07, dekad 11 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_lseqmdl_corrected_imergl_month07_dekad11.nc4
2026-05-20 06:52:02,977 - INFO - Pipeline [07 d2]: Complete.
✓ month 07 dekad 2 — saved: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_imergl_lseqmdl_corrected_precip_month07_dekad11.nc4
============================================================
▸ month 07 dekad 3
============================================================
2026-05-20 06:52:02,982 - INFO - Pipeline [07 d3]: Running LSEQM...
2026-05-20 06:52:02,985 - INFO - Aligning IMERG and CPC datasets...
2026-05-20 06:52:02,995 - INFO - After alignment: IMERG has 9131 time steps, CPC has 9131 time steps
2026-05-20 06:52:02,996 - INFO - Creating time-based masks...
2026-05-20 06:52:03,009 - INFO - Applying time masks...
2026-05-20 06:52:03,020 - INFO - IMERG dekad data shape: (275, 9, 14)
2026-05-20 06:52:03,020 - INFO - CPC dekad data shape: (275, 9, 14)
2026-05-20 06:52:03,023 - INFO - Using native-resolution CPC parameter fitting (BCSD principle)...
2026-05-20 06:52:03,057 - INFO - CPC native dekad data: (275, 4, 6) (lat -9.25–-7.75, lon 113.75–116.25)
2026-05-20 06:52:06,330 - INFO - Native CPC fitting: row 4/4 (100%) | 24 fitted, 0 skipped | elapsed 3s, ETA 0s
2026-05-20 06:52:06,331 - INFO - Fitted CPC params on native grid: 24/24 cells
2026-05-20 06:52:06,377 - INFO - Interpolated CPC params to IMERG grid: 126/126 valid pixels
2026-05-20 06:52:06,378 - INFO - Performing Linear Scaling (LS)...
2026-05-20 06:52:06,390 - INFO - LS using bilinearly interpolated CPC mean (smooth).
2026-05-20 06:52:06,396 - INFO - Saving LS corrected precipitation...
2026-05-20 06:52:06,399 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (275, 9, 14)
2026-05-20 06:52:06,452 - INFO - Saved Linear Scaling corrected precipitation for month 07, dekad 21 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_ls/bali_cli_ls_corrected_imergl_month07_dekad21.nc4
2026-05-20 06:52:06,453 - INFO - Applying Empirical Quantile Mapping (EQM) on 9x14 grid...
2026-05-20 06:52:06,525 - INFO - EQM progress: row 9/9 (100%) | 80 land pixels done | elapsed 0s, ETA 0s
2026-05-20 06:52:06,528 - INFO - EQM complete: 80/126 grid points corrected (46 masked/ocean pixels skipped)
2026-05-20 06:52:06,530 - INFO - Saving LSEQM corrected precipitation...
2026-05-20 06:52:06,532 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (275, 9, 14)
2026-05-20 06:52:06,581 - INFO - Saved Linear Scaling and Empirical Quantile Mapping corrected precipitation for month 07, dekad 21 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqm/bali_cli_lseqm_corrected_imergl_month07_dekad21.nc4
2026-05-20 06:52:06,582 - INFO - Pipeline [07 d3]: Training / loading DL model...
2026-05-20 06:52:06,583 - INFO - Checking if the model file exists at: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month07_dekad21.keras
2026-05-20 06:52:06,643 - INFO - Model: "sequential_20"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ conv2d_40 (Conv2D) │ (None, 9, 14, 32) │ 320 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_40 (MaxPooling2D) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_60 (Dropout) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_41 (Conv2D) │ (None, 4, 7, 64) │ 18,496 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_41 (MaxPooling2D) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_61 (Dropout) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ flatten_20 (Flatten) │ (None, 384) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_40 (Dense) │ (None, 128) │ 49,280 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_62 (Dropout) │ (None, 128) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_41 (Dense) │ (None, 126) │ 16,254 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ reshape_20 (Reshape) │ (None, 9, 14) │ 0 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 84,350 (329.49 KB)
Trainable params: 84,350 (329.49 KB)
Non-trainable params: 0 (0.00 B)
Epoch 1/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 1s 94ms/step - loss: 0.0642 - mae: 0.1201 - val_loss: 0.0864 - val_mae: 0.1290
Epoch 2/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 1s 69ms/step - loss: 0.0585 - mae: 0.1196 - val_loss: 0.0811 - val_mae: 0.1339
Epoch 3/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 67ms/step - loss: 0.0539 - mae: 0.1279 - val_loss: 0.0751 - val_mae: 0.1406
Epoch 4/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 62ms/step - loss: 0.0522 - mae: 0.1399 - val_loss: 0.0716 - val_mae: 0.1437
Epoch 5/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 78ms/step - loss: 0.0491 - mae: 0.1376 - val_loss: 0.0713 - val_mae: 0.1429
Epoch 6/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 72ms/step - loss: 0.0478 - mae: 0.1340 - val_loss: 0.0707 - val_mae: 0.1436
Epoch 7/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 85ms/step - loss: 0.0469 - mae: 0.1335 - val_loss: 0.0694 - val_mae: 0.1449
Epoch 8/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 79ms/step - loss: 0.0461 - mae: 0.1352 - val_loss: 0.0679 - val_mae: 0.1465
Epoch 9/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 81ms/step - loss: 0.0448 - mae: 0.1370 - val_loss: 0.0665 - val_mae: 0.1479
Epoch 10/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 54ms/step - loss: 0.0425 - mae: 0.1345 - val_loss: 0.0660 - val_mae: 0.1474
Epoch 11/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 33ms/step - loss: 0.0444 - mae: 0.1368 - val_loss: 0.0664 - val_mae: 0.1456
Epoch 12/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 31ms/step - loss: 0.0420 - mae: 0.1317 - val_loss: 0.0663 - val_mae: 0.1450
Epoch 13/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 31ms/step - loss: 0.0426 - mae: 0.1308 - val_loss: 0.0663 - val_mae: 0.1442
Epoch 14/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 30ms/step - loss: 0.0426 - mae: 0.1307 - val_loss: 0.0662 - val_mae: 0.1440
Epoch 15/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 30ms/step - loss: 0.0410 - mae: 0.1262 - val_loss: 0.0666 - val_mae: 0.1424
2026-05-20 06:52:11,625 - INFO - Final training history: {'loss': [0.06419536471366882, 0.05849197134375572, 0.053922779858112335, 0.05217796191573143, 0.04907995089888573, 0.04781720042228699, 0.046887148171663284, 0.04605589807033539, 0.044809576123952866, 0.042463839054107666, 0.04443817585706711, 0.042021848261356354, 0.042597267776727676, 0.042610540986061096, 0.04104218631982803], 'mae': [0.12009401619434357, 0.1196429654955864, 0.12791557610034943, 0.13985304534435272, 0.1376340389251709, 0.13396935164928436, 0.13352321088314056, 0.13522589206695557, 0.13700005412101746, 0.13454598188400269, 0.1368408054113388, 0.13165651261806488, 0.13078410923480988, 0.13066892325878143, 0.12624956667423248], 'val_loss': [0.08635202050209045, 0.0810931995511055, 0.0750611200928688, 0.0715707391500473, 0.07128927856683731, 0.0706707239151001, 0.06938961893320084, 0.06787177920341492, 0.06650321185588837, 0.06604878604412079, 0.06635648757219315, 0.066328264772892, 0.06630721688270569, 0.06619668006896973, 0.06661516427993774], 'val_mae': [0.12902098894119263, 0.13392585515975952, 0.14062634110450745, 0.14374171197414398, 0.1429266482591629, 0.14363297820091248, 0.14488224685192108, 0.14653344452381134, 0.14790917932987213, 0.14739389717578888, 0.1455858051776886, 0.145002543926239, 0.14418615400791168, 0.143959179520607, 0.14239180088043213]}
2026-05-20 06:52:11,772 - INFO - Model training complete. Best model saved as /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month07_dekad21.keras
2026-05-20 06:52:11,774 - INFO - Pipeline [07 d3]: Loading confidence mask...
2026-05-20 06:52:11,776 - INFO - Loading existing confidence mask: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/station_density/confidence_mask_station_density.nc4
2026-05-20 06:52:11,777 - INFO - Pipeline [07 d3]: Applying DL refinement...
2026-05-20 06:52:11,795 - INFO - Pixel-wise threshold map computed at 80th percentile. threshold_2d shape: (9, 14)
2026-05-20 06:52:11,796 - INFO - DL blending: base alpha=0.70 (LSEQM weight), 1-alpha=0.30 (DL weight)
2026-05-20 06:52:11,797 - INFO - Confidence mask active: spatial alpha modulation enabled. Confidence range: [0.000, 0.411]
2026-05-20 06:52:30,534 - INFO - DL blending complete: 275 daily slices processed, 2,071 extreme pixels blended (alpha=0.70)
2026-05-20 06:52:30,631 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (275, 9, 14)
2026-05-20 06:52:30,681 - INFO - Saved Hybrid Deep Learning-Physical (Linear Scaling and Empirical Quantile Mapping) Approach corrected precipitation for month 07, dekad 21 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_lseqmdl_corrected_imergl_month07_dekad21.nc4
2026-05-20 06:52:30,682 - INFO - Pipeline [07 d3]: Complete.
✓ month 07 dekad 3 — saved: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_imergl_lseqmdl_corrected_precip_month07_dekad21.nc4
============================================================
▸ month 08 dekad 1
============================================================
2026-05-20 06:52:30,684 - INFO - Pipeline [08 d1]: Running LSEQM...
2026-05-20 06:52:30,688 - INFO - Aligning IMERG and CPC datasets...
2026-05-20 06:52:30,696 - INFO - After alignment: IMERG has 9131 time steps, CPC has 9131 time steps
2026-05-20 06:52:30,697 - INFO - Creating time-based masks...
2026-05-20 06:52:30,709 - INFO - Applying time masks...
2026-05-20 06:52:30,721 - INFO - IMERG dekad data shape: (250, 9, 14)
2026-05-20 06:52:30,723 - INFO - CPC dekad data shape: (250, 9, 14)
2026-05-20 06:52:30,726 - INFO - Using native-resolution CPC parameter fitting (BCSD principle)...
2026-05-20 06:52:30,762 - INFO - CPC native dekad data: (250, 4, 6) (lat -9.25–-7.75, lon 113.75–116.25)
2026-05-20 06:52:32,422 - INFO - Native CPC fitting: row 4/4 (100%) | 24 fitted, 0 skipped | elapsed 2s, ETA 0s
2026-05-20 06:52:32,423 - INFO - Fitted CPC params on native grid: 24/24 cells
2026-05-20 06:52:32,466 - INFO - Interpolated CPC params to IMERG grid: 126/126 valid pixels
2026-05-20 06:52:32,467 - INFO - Performing Linear Scaling (LS)...
2026-05-20 06:52:32,475 - INFO - LS using bilinearly interpolated CPC mean (smooth).
2026-05-20 06:52:32,479 - INFO - Saving LS corrected precipitation...
2026-05-20 06:52:32,481 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:52:32,526 - INFO - Saved Linear Scaling corrected precipitation for month 08, dekad 01 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_ls/bali_cli_ls_corrected_imergl_month08_dekad01.nc4
2026-05-20 06:52:32,527 - INFO - Applying Empirical Quantile Mapping (EQM) on 9x14 grid...
2026-05-20 06:52:32,608 - INFO - EQM progress: row 9/9 (100%) | 80 land pixels done | elapsed 0s, ETA 0s
2026-05-20 06:52:32,611 - INFO - EQM complete: 80/126 grid points corrected (46 masked/ocean pixels skipped)
2026-05-20 06:52:32,613 - INFO - Saving LSEQM corrected precipitation...
2026-05-20 06:52:32,616 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:52:32,667 - INFO - Saved Linear Scaling and Empirical Quantile Mapping corrected precipitation for month 08, dekad 01 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqm/bali_cli_lseqm_corrected_imergl_month08_dekad01.nc4
2026-05-20 06:52:32,668 - INFO - Pipeline [08 d1]: Training / loading DL model...
2026-05-20 06:52:32,670 - INFO - Checking if the model file exists at: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month08_dekad01.keras
2026-05-20 06:52:32,738 - INFO - Model: "sequential_21"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ conv2d_42 (Conv2D) │ (None, 9, 14, 32) │ 320 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_42 (MaxPooling2D) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_63 (Dropout) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_43 (Conv2D) │ (None, 4, 7, 64) │ 18,496 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_43 (MaxPooling2D) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_64 (Dropout) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ flatten_21 (Flatten) │ (None, 384) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_42 (Dense) │ (None, 128) │ 49,280 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_65 (Dropout) │ (None, 128) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_43 (Dense) │ (None, 126) │ 16,254 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ reshape_21 (Reshape) │ (None, 9, 14) │ 0 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 84,350 (329.49 KB)
Trainable params: 84,350 (329.49 KB)
Non-trainable params: 0 (0.00 B)
Epoch 1/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 3s 154ms/step - loss: 0.0612 - mae: 0.1151 - val_loss: 0.0537 - val_mae: 0.0980
Epoch 2/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 51ms/step - loss: 0.0566 - mae: 0.1139 - val_loss: 0.0493 - val_mae: 0.1035
Epoch 3/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 50ms/step - loss: 0.0523 - mae: 0.1197 - val_loss: 0.0450 - val_mae: 0.1084
Epoch 4/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0497 - mae: 0.1288 - val_loss: 0.0416 - val_mae: 0.1130
Epoch 5/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0481 - mae: 0.1340 - val_loss: 0.0407 - val_mae: 0.1125
Epoch 6/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0457 - mae: 0.1292 - val_loss: 0.0407 - val_mae: 0.1113
Epoch 7/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0441 - mae: 0.1274 - val_loss: 0.0390 - val_mae: 0.1139
Epoch 8/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0419 - mae: 0.1286 - val_loss: 0.0375 - val_mae: 0.1151
Epoch 9/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0413 - mae: 0.1305 - val_loss: 0.0362 - val_mae: 0.1142
Epoch 10/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0406 - mae: 0.1291 - val_loss: 0.0354 - val_mae: 0.1103
Epoch 11/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0404 - mae: 0.1262 - val_loss: 0.0344 - val_mae: 0.1075
Epoch 12/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0392 - mae: 0.1230 - val_loss: 0.0340 - val_mae: 0.1051
Epoch 13/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0389 - mae: 0.1205 - val_loss: 0.0335 - val_mae: 0.1041
Epoch 14/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0382 - mae: 0.1198 - val_loss: 0.0328 - val_mae: 0.1050
Epoch 15/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0379 - mae: 0.1219 - val_loss: 0.0323 - val_mae: 0.1046
Epoch 16/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0389 - mae: 0.1232 - val_loss: 0.0325 - val_mae: 0.1031
Epoch 17/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0374 - mae: 0.1177 - val_loss: 0.0339 - val_mae: 0.1008
Epoch 18/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 25ms/step - loss: 0.0379 - mae: 0.1132 - val_loss: 0.0357 - val_mae: 0.0994
Epoch 19/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0382 - mae: 0.1105 - val_loss: 0.0347 - val_mae: 0.0998
Epoch 20/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0366 - mae: 0.1123 - val_loss: 0.0328 - val_mae: 0.1020
2026-05-20 06:52:38,843 - INFO - Final training history: {'loss': [0.06116192787885666, 0.056623734533786774, 0.052310843020677567, 0.04974722862243652, 0.04807167872786522, 0.04565104469656944, 0.04408213496208191, 0.041901908814907074, 0.04131875932216644, 0.04059003293514252, 0.04039132967591286, 0.039246536791324615, 0.03886261582374573, 0.03823035582900047, 0.037890490144491196, 0.03894070163369179, 0.03738722205162048, 0.03788219019770622, 0.03817710280418396, 0.03659714385867119], 'mae': [0.11510160565376282, 0.11386770009994507, 0.11968556046485901, 0.128845676779747, 0.1339576095342636, 0.1291738897562027, 0.1274377405643463, 0.1285766065120697, 0.13053861260414124, 0.1290857195854187, 0.12622174620628357, 0.12302564829587936, 0.12054617702960968, 0.11979904025793076, 0.12186962366104126, 0.12323497980833054, 0.11765381693840027, 0.11320607364177704, 0.11047321557998657, 0.11230016499757767], 'val_loss': [0.05372031778097153, 0.04926348850131035, 0.04500998556613922, 0.041572365909814835, 0.040720440447330475, 0.04067278280854225, 0.03897784277796745, 0.037505339831113815, 0.03617609292268753, 0.03542013093829155, 0.03439558669924736, 0.03401034697890282, 0.03350801765918732, 0.032750729471445084, 0.03234447166323662, 0.03250761702656746, 0.03385837376117706, 0.03567790985107422, 0.034670885652303696, 0.03284592553973198], 'val_mae': [0.09804916381835938, 0.10352516174316406, 0.10839466750621796, 0.11298207938671112, 0.11247634142637253, 0.11131389439105988, 0.11385134607553482, 0.11512956023216248, 0.11424732953310013, 0.110320083796978, 0.10746343433856964, 0.10505639016628265, 0.10405762493610382, 0.10497218370437622, 0.10458848625421524, 0.1030755415558815, 0.10081621259450912, 0.09936967492103577, 0.09981438517570496, 0.10201821476221085]}
2026-05-20 06:52:38,980 - INFO - Model training complete. Best model saved as /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month08_dekad01.keras
2026-05-20 06:52:38,981 - INFO - Pipeline [08 d1]: Loading confidence mask...
2026-05-20 06:52:38,984 - INFO - Loading existing confidence mask: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/station_density/confidence_mask_station_density.nc4
2026-05-20 06:52:38,985 - INFO - Pipeline [08 d1]: Applying DL refinement...
2026-05-20 06:52:39,002 - INFO - Pixel-wise threshold map computed at 80th percentile. threshold_2d shape: (9, 14)
2026-05-20 06:52:39,002 - INFO - DL blending: base alpha=0.70 (LSEQM weight), 1-alpha=0.30 (DL weight)
2026-05-20 06:52:39,004 - INFO - Confidence mask active: spatial alpha modulation enabled. Confidence range: [0.000, 0.411]
2026-05-20 06:52:56,369 - INFO - DL blending complete: 250 daily slices processed, 2,019 extreme pixels blended (alpha=0.70)
2026-05-20 06:52:56,464 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:52:56,518 - INFO - Saved Hybrid Deep Learning-Physical (Linear Scaling and Empirical Quantile Mapping) Approach corrected precipitation for month 08, dekad 01 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_lseqmdl_corrected_imergl_month08_dekad01.nc4
2026-05-20 06:52:56,519 - INFO - Pipeline [08 d1]: Complete.
✓ month 08 dekad 1 — saved: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_imergl_lseqmdl_corrected_precip_month08_dekad01.nc4
============================================================
▸ month 08 dekad 2
============================================================
2026-05-20 06:52:56,521 - INFO - Pipeline [08 d2]: Running LSEQM...
2026-05-20 06:52:56,527 - INFO - Aligning IMERG and CPC datasets...
2026-05-20 06:52:56,536 - INFO - After alignment: IMERG has 9131 time steps, CPC has 9131 time steps
2026-05-20 06:52:56,537 - INFO - Creating time-based masks...
2026-05-20 06:52:56,548 - INFO - Applying time masks...
2026-05-20 06:52:56,558 - INFO - IMERG dekad data shape: (250, 9, 14)
2026-05-20 06:52:56,560 - INFO - CPC dekad data shape: (250, 9, 14)
2026-05-20 06:52:56,563 - INFO - Using native-resolution CPC parameter fitting (BCSD principle)...
2026-05-20 06:52:56,596 - INFO - CPC native dekad data: (250, 4, 6) (lat -9.25–-7.75, lon 113.75–116.25)
2026-05-20 06:52:59,238 - INFO - Native CPC fitting: row 4/4 (100%) | 24 fitted, 0 skipped | elapsed 3s, ETA 0s
2026-05-20 06:52:59,240 - INFO - Fitted CPC params on native grid: 24/24 cells
2026-05-20 06:52:59,310 - INFO - Interpolated CPC params to IMERG grid: 126/126 valid pixels
2026-05-20 06:52:59,311 - INFO - Performing Linear Scaling (LS)...
2026-05-20 06:52:59,329 - INFO - LS using bilinearly interpolated CPC mean (smooth).
2026-05-20 06:52:59,333 - INFO - Saving LS corrected precipitation...
2026-05-20 06:52:59,337 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:52:59,399 - INFO - Saved Linear Scaling corrected precipitation for month 08, dekad 11 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_ls/bali_cli_ls_corrected_imergl_month08_dekad11.nc4
2026-05-20 06:52:59,401 - INFO - Applying Empirical Quantile Mapping (EQM) on 9x14 grid...
2026-05-20 06:52:59,526 - INFO - EQM progress: row 9/9 (100%) | 80 land pixels done | elapsed 0s, ETA 0s
2026-05-20 06:52:59,531 - INFO - EQM complete: 80/126 grid points corrected (46 masked/ocean pixels skipped)
2026-05-20 06:52:59,534 - INFO - Saving LSEQM corrected precipitation...
2026-05-20 06:52:59,537 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:52:59,601 - INFO - Saved Linear Scaling and Empirical Quantile Mapping corrected precipitation for month 08, dekad 11 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqm/bali_cli_lseqm_corrected_imergl_month08_dekad11.nc4
2026-05-20 06:52:59,603 - INFO - Pipeline [08 d2]: Training / loading DL model...
2026-05-20 06:52:59,604 - INFO - Checking if the model file exists at: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month08_dekad11.keras
2026-05-20 06:52:59,685 - INFO - Model: "sequential_22"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ conv2d_44 (Conv2D) │ (None, 9, 14, 32) │ 320 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_44 (MaxPooling2D) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_66 (Dropout) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_45 (Conv2D) │ (None, 4, 7, 64) │ 18,496 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_45 (MaxPooling2D) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_67 (Dropout) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ flatten_22 (Flatten) │ (None, 384) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_44 (Dense) │ (None, 128) │ 49,280 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_68 (Dropout) │ (None, 128) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_45 (Dense) │ (None, 126) │ 16,254 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ reshape_22 (Reshape) │ (None, 9, 14) │ 0 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 84,350 (329.49 KB)
Trainable params: 84,350 (329.49 KB)
Non-trainable params: 0 (0.00 B)
Epoch 1/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 2s 98ms/step - loss: 0.0643 - mae: 0.1201 - val_loss: 0.0800 - val_mae: 0.1394
Epoch 2/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0592 - mae: 0.1187 - val_loss: 0.0733 - val_mae: 0.1414
Epoch 3/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0553 - mae: 0.1262 - val_loss: 0.0661 - val_mae: 0.1443
Epoch 4/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 46ms/step - loss: 0.0524 - mae: 0.1357 - val_loss: 0.0623 - val_mae: 0.1440
Epoch 5/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0501 - mae: 0.1386 - val_loss: 0.0600 - val_mae: 0.1439
Epoch 6/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 45ms/step - loss: 0.0486 - mae: 0.1403 - val_loss: 0.0591 - val_mae: 0.1425
Epoch 7/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0477 - mae: 0.1364 - val_loss: 0.0602 - val_mae: 0.1402
Epoch 8/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 53ms/step - loss: 0.0464 - mae: 0.1332 - val_loss: 0.0582 - val_mae: 0.1409
Epoch 9/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0454 - mae: 0.1357 - val_loss: 0.0562 - val_mae: 0.1416
Epoch 10/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 46ms/step - loss: 0.0452 - mae: 0.1411 - val_loss: 0.0547 - val_mae: 0.1426
Epoch 11/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 47ms/step - loss: 0.0456 - mae: 0.1442 - val_loss: 0.0542 - val_mae: 0.1420
Epoch 12/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 48ms/step - loss: 0.0453 - mae: 0.1447 - val_loss: 0.0540 - val_mae: 0.1413
Epoch 13/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0440 - mae: 0.1418 - val_loss: 0.0538 - val_mae: 0.1407
Epoch 14/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0431 - mae: 0.1394 - val_loss: 0.0551 - val_mae: 0.1384
Epoch 15/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0423 - mae: 0.1332 - val_loss: 0.0574 - val_mae: 0.1361
Epoch 16/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0428 - mae: 0.1282 - val_loss: 0.0596 - val_mae: 0.1347
Epoch 17/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0419 - mae: 0.1214 - val_loss: 0.0603 - val_mae: 0.1339
Epoch 18/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step - loss: 0.0420 - mae: 0.1221 - val_loss: 0.0580 - val_mae: 0.1336
2026-05-20 06:53:04,343 - INFO - Final training history: {'loss': [0.06427085399627686, 0.05916542187333107, 0.055257268249988556, 0.05240292102098465, 0.050061289221048355, 0.04859553650021553, 0.047676172107458115, 0.04641430824995041, 0.04541876167058945, 0.0451759397983551, 0.04564473032951355, 0.04533297196030617, 0.04395178705453873, 0.0431477315723896, 0.04233712702989578, 0.04283126816153526, 0.041946038603782654, 0.04199719801545143], 'mae': [0.12010989338159561, 0.11866267025470734, 0.12619157135486603, 0.13572727143764496, 0.13861368596553802, 0.14034312963485718, 0.13638949394226074, 0.13318799436092377, 0.13574932515621185, 0.1410706639289856, 0.1441953182220459, 0.14466966688632965, 0.14175854623317719, 0.13940945267677307, 0.13320715725421906, 0.12824766337871552, 0.1214454397559166, 0.1221221387386322], 'val_loss': [0.08004463464021683, 0.07331717759370804, 0.06609638035297394, 0.06230679899454117, 0.05996818095445633, 0.05909447744488716, 0.06018564850091934, 0.05824277549982071, 0.056232139468193054, 0.054655734449625015, 0.05420207604765892, 0.05396587401628494, 0.05382118374109268, 0.055051565170288086, 0.05735825374722481, 0.05956258624792099, 0.060276929289102554, 0.0580151304602623], 'val_mae': [0.13937972486019135, 0.1413688063621521, 0.14429737627506256, 0.14404746890068054, 0.14388799667358398, 0.14251407980918884, 0.14018158614635468, 0.14088165760040283, 0.14164729416370392, 0.14257007837295532, 0.14200957119464874, 0.14131921529769897, 0.14074814319610596, 0.13836316764354706, 0.13613063097000122, 0.13469929993152618, 0.1338530033826828, 0.1336313635110855]}
2026-05-20 06:53:04,491 - INFO - Model training complete. Best model saved as /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month08_dekad11.keras
2026-05-20 06:53:04,495 - INFO - Pipeline [08 d2]: Loading confidence mask...
2026-05-20 06:53:04,498 - INFO - Loading existing confidence mask: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/station_density/confidence_mask_station_density.nc4
2026-05-20 06:53:04,501 - INFO - Pipeline [08 d2]: Applying DL refinement...
2026-05-20 06:53:04,516 - INFO - Pixel-wise threshold map computed at 80th percentile. threshold_2d shape: (9, 14)
2026-05-20 06:53:04,517 - INFO - DL blending: base alpha=0.70 (LSEQM weight), 1-alpha=0.30 (DL weight)
2026-05-20 06:53:04,518 - INFO - Confidence mask active: spatial alpha modulation enabled. Confidence range: [0.000, 0.411]
2026-05-20 06:53:21,328 - INFO - DL blending complete: 250 daily slices processed, 2,219 extreme pixels blended (alpha=0.70)
2026-05-20 06:53:21,415 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:53:21,454 - INFO - Saved Hybrid Deep Learning-Physical (Linear Scaling and Empirical Quantile Mapping) Approach corrected precipitation for month 08, dekad 11 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_lseqmdl_corrected_imergl_month08_dekad11.nc4
2026-05-20 06:53:21,455 - INFO - Pipeline [08 d2]: Complete.
✓ month 08 dekad 2 — saved: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_imergl_lseqmdl_corrected_precip_month08_dekad11.nc4
============================================================
▸ month 08 dekad 3
============================================================
2026-05-20 06:53:21,458 - INFO - Pipeline [08 d3]: Running LSEQM...
2026-05-20 06:53:21,463 - INFO - Aligning IMERG and CPC datasets...
2026-05-20 06:53:21,473 - INFO - After alignment: IMERG has 9131 time steps, CPC has 9131 time steps
2026-05-20 06:53:21,474 - INFO - Creating time-based masks...
2026-05-20 06:53:21,486 - INFO - Applying time masks...
2026-05-20 06:53:21,498 - INFO - IMERG dekad data shape: (275, 9, 14)
2026-05-20 06:53:21,498 - INFO - CPC dekad data shape: (275, 9, 14)
2026-05-20 06:53:21,503 - INFO - Using native-resolution CPC parameter fitting (BCSD principle)...
2026-05-20 06:53:21,536 - INFO - CPC native dekad data: (275, 4, 6) (lat -9.25–-7.75, lon 113.75–116.25)
2026-05-20 06:53:24,021 - INFO - Native CPC fitting: row 4/4 (100%) | 24 fitted, 0 skipped | elapsed 2s, ETA 0s
2026-05-20 06:53:24,022 - INFO - Fitted CPC params on native grid: 24/24 cells
2026-05-20 06:53:24,076 - INFO - Interpolated CPC params to IMERG grid: 126/126 valid pixels
2026-05-20 06:53:24,077 - INFO - Performing Linear Scaling (LS)...
2026-05-20 06:53:24,086 - INFO - LS using bilinearly interpolated CPC mean (smooth).
2026-05-20 06:53:24,090 - INFO - Saving LS corrected precipitation...
2026-05-20 06:53:24,092 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (275, 9, 14)
2026-05-20 06:53:24,157 - INFO - Saved Linear Scaling corrected precipitation for month 08, dekad 21 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_ls/bali_cli_ls_corrected_imergl_month08_dekad21.nc4
2026-05-20 06:53:24,160 - INFO - Applying Empirical Quantile Mapping (EQM) on 9x14 grid...
2026-05-20 06:53:24,276 - INFO - EQM progress: row 9/9 (100%) | 80 land pixels done | elapsed 0s, ETA 0s
2026-05-20 06:53:24,283 - INFO - EQM complete: 80/126 grid points corrected (46 masked/ocean pixels skipped)
2026-05-20 06:53:24,284 - INFO - Saving LSEQM corrected precipitation...
2026-05-20 06:53:24,286 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (275, 9, 14)
2026-05-20 06:53:24,347 - INFO - Saved Linear Scaling and Empirical Quantile Mapping corrected precipitation for month 08, dekad 21 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqm/bali_cli_lseqm_corrected_imergl_month08_dekad21.nc4
2026-05-20 06:53:24,349 - INFO - Pipeline [08 d3]: Training / loading DL model...
2026-05-20 06:53:24,349 - INFO - Checking if the model file exists at: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month08_dekad21.keras
2026-05-20 06:53:24,427 - INFO - Model: "sequential_23"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ conv2d_46 (Conv2D) │ (None, 9, 14, 32) │ 320 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_46 (MaxPooling2D) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_69 (Dropout) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_47 (Conv2D) │ (None, 4, 7, 64) │ 18,496 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_47 (MaxPooling2D) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_70 (Dropout) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ flatten_23 (Flatten) │ (None, 384) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_46 (Dense) │ (None, 128) │ 49,280 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_71 (Dropout) │ (None, 128) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_47 (Dense) │ (None, 126) │ 16,254 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ reshape_23 (Reshape) │ (None, 9, 14) │ 0 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 84,350 (329.49 KB)
Trainable params: 84,350 (329.49 KB)
Non-trainable params: 0 (0.00 B)
Epoch 1/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 2s 105ms/step - loss: 0.0527 - mae: 0.1000 - val_loss: 0.0584 - val_mae: 0.0954
Epoch 2/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 45ms/step - loss: 0.0489 - mae: 0.0987 - val_loss: 0.0550 - val_mae: 0.1002
Epoch 3/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0461 - mae: 0.1036 - val_loss: 0.0516 - val_mae: 0.1053
Epoch 4/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0438 - mae: 0.1111 - val_loss: 0.0485 - val_mae: 0.1116
Epoch 5/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0430 - mae: 0.1181 - val_loss: 0.0475 - val_mae: 0.1141
Epoch 6/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step - loss: 0.0413 - mae: 0.1181 - val_loss: 0.0476 - val_mae: 0.1144
Epoch 7/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 46ms/step - loss: 0.0404 - mae: 0.1160 - val_loss: 0.0473 - val_mae: 0.1152
Epoch 8/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 45ms/step - loss: 0.0397 - mae: 0.1184 - val_loss: 0.0464 - val_mae: 0.1177
Epoch 9/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 45ms/step - loss: 0.0395 - mae: 0.1214 - val_loss: 0.0463 - val_mae: 0.1168
Epoch 10/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 31ms/step - loss: 0.0386 - mae: 0.1174 - val_loss: 0.0467 - val_mae: 0.1144
Epoch 11/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0393 - mae: 0.1157 - val_loss: 0.0473 - val_mae: 0.1121
Epoch 12/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step - loss: 0.0377 - mae: 0.1101 - val_loss: 0.0471 - val_mae: 0.1117
Epoch 13/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 46ms/step - loss: 0.0377 - mae: 0.1130 - val_loss: 0.0458 - val_mae: 0.1158
Epoch 14/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0365 - mae: 0.1166 - val_loss: 0.0450 - val_mae: 0.1187
Epoch 15/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step - loss: 0.0363 - mae: 0.1165 - val_loss: 0.0457 - val_mae: 0.1148
Epoch 16/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0360 - mae: 0.1109 - val_loss: 0.0467 - val_mae: 0.1111
Epoch 17/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0363 - mae: 0.1080 - val_loss: 0.0469 - val_mae: 0.1103
Epoch 18/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0361 - mae: 0.1062 - val_loss: 0.0464 - val_mae: 0.1106
Epoch 19/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0355 - mae: 0.1082 - val_loss: 0.0454 - val_mae: 0.1129
2026-05-20 06:53:29,141 - INFO - Final training history: {'loss': [0.052683450281620026, 0.04894439876079559, 0.04614520072937012, 0.04377656430006027, 0.04299024119973183, 0.0413011871278286, 0.04041396081447601, 0.039664506912231445, 0.03953145071864128, 0.038625895977020264, 0.039252445101737976, 0.037657175213098526, 0.037708964198827744, 0.03647177293896675, 0.036287158727645874, 0.036025919020175934, 0.036328744143247604, 0.03607558086514473, 0.03549504652619362], 'mae': [0.09995052218437195, 0.09865744411945343, 0.10361288487911224, 0.11113294214010239, 0.1181262657046318, 0.11810366064310074, 0.11597929894924164, 0.11844741553068161, 0.12140600383281708, 0.1174427717924118, 0.11565195769071579, 0.11005387455224991, 0.11295762658119202, 0.1166088879108429, 0.11653508991003036, 0.11090037971735, 0.10796243697404861, 0.10622791200876236, 0.10821817070245743], 'val_loss': [0.05842522159218788, 0.05495268478989601, 0.051591407507658005, 0.04850035160779953, 0.047529980540275574, 0.04762759804725647, 0.047324288636446, 0.04637359827756882, 0.046305328607559204, 0.04666989669203758, 0.04728473722934723, 0.047130048274993896, 0.045755647122859955, 0.045045606791973114, 0.04570969194173813, 0.0467301644384861, 0.046911388635635376, 0.046390313655138016, 0.045448604971170425], 'val_mae': [0.09536220878362656, 0.10019825398921967, 0.10528550297021866, 0.11162266880273819, 0.11413943767547607, 0.11442534625530243, 0.11524150520563126, 0.11765346676111221, 0.11679786443710327, 0.11443264037370682, 0.11209078878164291, 0.11174062639474869, 0.11584629863500595, 0.11871983855962753, 0.11482322216033936, 0.11114253848791122, 0.11031882464885712, 0.11055810004472733, 0.11287226527929306]}
2026-05-20 06:53:29,285 - INFO - Model training complete. Best model saved as /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month08_dekad21.keras
2026-05-20 06:53:29,287 - INFO - Pipeline [08 d3]: Loading confidence mask...
2026-05-20 06:53:29,289 - INFO - Loading existing confidence mask: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/station_density/confidence_mask_station_density.nc4
2026-05-20 06:53:29,290 - INFO - Pipeline [08 d3]: Applying DL refinement...
2026-05-20 06:53:29,309 - INFO - Pixel-wise threshold map computed at 80th percentile. threshold_2d shape: (9, 14)
2026-05-20 06:53:29,310 - INFO - DL blending: base alpha=0.70 (LSEQM weight), 1-alpha=0.30 (DL weight)
2026-05-20 06:53:29,311 - INFO - Confidence mask active: spatial alpha modulation enabled. Confidence range: [0.000, 0.411]
2026-05-20 06:53:47,499 - INFO - DL blending complete: 275 daily slices processed, 1,801 extreme pixels blended (alpha=0.70)
2026-05-20 06:53:47,597 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (275, 9, 14)
2026-05-20 06:53:47,641 - INFO - Saved Hybrid Deep Learning-Physical (Linear Scaling and Empirical Quantile Mapping) Approach corrected precipitation for month 08, dekad 21 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_lseqmdl_corrected_imergl_month08_dekad21.nc4
2026-05-20 06:53:47,642 - INFO - Pipeline [08 d3]: Complete.
✓ month 08 dekad 3 — saved: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_imergl_lseqmdl_corrected_precip_month08_dekad21.nc4
============================================================
▸ month 09 dekad 1
============================================================
2026-05-20 06:53:47,643 - INFO - Pipeline [09 d1]: Running LSEQM...
2026-05-20 06:53:47,646 - INFO - Aligning IMERG and CPC datasets...
2026-05-20 06:53:47,654 - INFO - After alignment: IMERG has 9131 time steps, CPC has 9131 time steps
2026-05-20 06:53:47,655 - INFO - Creating time-based masks...
2026-05-20 06:53:47,666 - INFO - Applying time masks...
2026-05-20 06:53:47,677 - INFO - IMERG dekad data shape: (250, 9, 14)
2026-05-20 06:53:47,678 - INFO - CPC dekad data shape: (250, 9, 14)
2026-05-20 06:53:47,680 - INFO - Using native-resolution CPC parameter fitting (BCSD principle)...
2026-05-20 06:53:47,709 - INFO - CPC native dekad data: (250, 4, 6) (lat -9.25–-7.75, lon 113.75–116.25)
2026-05-20 06:53:51,560 - INFO - Native CPC fitting: row 4/4 (100%) | 24 fitted, 0 skipped | elapsed 4s, ETA 0s
2026-05-20 06:53:51,561 - INFO - Fitted CPC params on native grid: 24/24 cells
2026-05-20 06:53:51,607 - INFO - Interpolated CPC params to IMERG grid: 126/126 valid pixels
2026-05-20 06:53:51,608 - INFO - Performing Linear Scaling (LS)...
2026-05-20 06:53:51,618 - INFO - LS using bilinearly interpolated CPC mean (smooth).
2026-05-20 06:53:51,621 - INFO - Saving LS corrected precipitation...
2026-05-20 06:53:51,625 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:53:51,679 - INFO - Saved Linear Scaling corrected precipitation for month 09, dekad 01 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_ls/bali_cli_ls_corrected_imergl_month09_dekad01.nc4
2026-05-20 06:53:51,680 - INFO - Applying Empirical Quantile Mapping (EQM) on 9x14 grid...
2026-05-20 06:53:51,767 - INFO - EQM progress: row 9/9 (100%) | 80 land pixels done | elapsed 0s, ETA 0s
2026-05-20 06:53:51,771 - INFO - EQM complete: 80/126 grid points corrected (46 masked/ocean pixels skipped)
2026-05-20 06:53:51,773 - INFO - Saving LSEQM corrected precipitation...
2026-05-20 06:53:51,776 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:53:51,822 - INFO - Saved Linear Scaling and Empirical Quantile Mapping corrected precipitation for month 09, dekad 01 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqm/bali_cli_lseqm_corrected_imergl_month09_dekad01.nc4
2026-05-20 06:53:51,823 - INFO - Pipeline [09 d1]: Training / loading DL model...
2026-05-20 06:53:51,824 - INFO - Checking if the model file exists at: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month09_dekad01.keras
2026-05-20 06:53:51,889 - INFO - Model: "sequential_24"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ conv2d_48 (Conv2D) │ (None, 9, 14, 32) │ 320 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_48 (MaxPooling2D) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_72 (Dropout) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_49 (Conv2D) │ (None, 4, 7, 64) │ 18,496 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_49 (MaxPooling2D) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_73 (Dropout) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ flatten_24 (Flatten) │ (None, 384) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_48 (Dense) │ (None, 128) │ 49,280 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_74 (Dropout) │ (None, 128) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_49 (Dense) │ (None, 126) │ 16,254 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ reshape_24 (Reshape) │ (None, 9, 14) │ 0 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 84,350 (329.49 KB)
Trainable params: 84,350 (329.49 KB)
Non-trainable params: 0 (0.00 B)
Epoch 1/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 1s 94ms/step - loss: 0.0456 - mae: 0.0849 - val_loss: 0.0794 - val_mae: 0.1165
Epoch 2/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0431 - mae: 0.0849 - val_loss: 0.0751 - val_mae: 0.1194
Epoch 3/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 41ms/step - loss: 0.0408 - mae: 0.0893 - val_loss: 0.0698 - val_mae: 0.1225
Epoch 4/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 47ms/step - loss: 0.0391 - mae: 0.0957 - val_loss: 0.0645 - val_mae: 0.1257
Epoch 5/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0376 - mae: 0.1029 - val_loss: 0.0603 - val_mae: 0.1284
Epoch 6/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0369 - mae: 0.1074 - val_loss: 0.0597 - val_mae: 0.1265
Epoch 7/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0359 - mae: 0.1030 - val_loss: 0.0610 - val_mae: 0.1249
Epoch 8/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0349 - mae: 0.1004 - val_loss: 0.0599 - val_mae: 0.1260
Epoch 9/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0351 - mae: 0.1031 - val_loss: 0.0574 - val_mae: 0.1266
Epoch 10/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0341 - mae: 0.1061 - val_loss: 0.0547 - val_mae: 0.1274
Epoch 11/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 50ms/step - loss: 0.0344 - mae: 0.1091 - val_loss: 0.0543 - val_mae: 0.1261
Epoch 12/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0335 - mae: 0.1064 - val_loss: 0.0540 - val_mae: 0.1240
Epoch 13/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0337 - mae: 0.1040 - val_loss: 0.0527 - val_mae: 0.1211
Epoch 14/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 39ms/step - loss: 0.0332 - mae: 0.1002 - val_loss: 0.0522 - val_mae: 0.1184
Epoch 15/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0328 - mae: 0.0987 - val_loss: 0.0512 - val_mae: 0.1162
Epoch 16/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 25ms/step - loss: 0.0324 - mae: 0.0945 - val_loss: 0.0512 - val_mae: 0.1139
Epoch 17/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 40ms/step - loss: 0.0328 - mae: 0.0955 - val_loss: 0.0487 - val_mae: 0.1126
Epoch 18/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0309 - mae: 0.0934 - val_loss: 0.0493 - val_mae: 0.1113
Epoch 19/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0313 - mae: 0.0926 - val_loss: 0.0483 - val_mae: 0.1104
Epoch 20/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0311 - mae: 0.0928 - val_loss: 0.0472 - val_mae: 0.1112
Epoch 21/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 45ms/step - loss: 0.0308 - mae: 0.0960 - val_loss: 0.0453 - val_mae: 0.1147
Epoch 22/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 40ms/step - loss: 0.0305 - mae: 0.1033 - val_loss: 0.0446 - val_mae: 0.1185
Epoch 23/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0305 - mae: 0.1047 - val_loss: 0.0459 - val_mae: 0.1183
Epoch 24/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0302 - mae: 0.1033 - val_loss: 0.0449 - val_mae: 0.1178
Epoch 25/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0305 - mae: 0.1027 - val_loss: 0.0463 - val_mae: 0.1146
Epoch 26/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0295 - mae: 0.0960 - val_loss: 0.0448 - val_mae: 0.1118
Epoch 27/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 41ms/step - loss: 0.0302 - mae: 0.0960 - val_loss: 0.0436 - val_mae: 0.1103
Epoch 28/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0292 - mae: 0.0942 - val_loss: 0.0444 - val_mae: 0.1104
Epoch 29/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0293 - mae: 0.0921 - val_loss: 0.0487 - val_mae: 0.1134
Epoch 30/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0288 - mae: 0.0894 - val_loss: 0.0486 - val_mae: 0.1143
Epoch 31/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0290 - mae: 0.0910 - val_loss: 0.0458 - val_mae: 0.1145
Epoch 32/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0286 - mae: 0.0932 - val_loss: 0.0447 - val_mae: 0.1140
2026-05-20 06:53:58,408 - INFO - Final training history: {'loss': [0.045557256788015366, 0.04312313720583916, 0.04083985835313797, 0.03910211846232414, 0.03760546073317528, 0.0368603840470314, 0.035860124975442886, 0.03491396829485893, 0.0350646898150444, 0.03414170816540718, 0.034404926002025604, 0.0334603413939476, 0.03366396576166153, 0.0331958569586277, 0.03278857469558716, 0.03244151175022125, 0.0328044593334198, 0.030930740758776665, 0.03130440413951874, 0.031088940799236298, 0.03076360933482647, 0.0305167343467474, 0.03049212135374546, 0.030199041590094566, 0.030508195981383324, 0.029484856873750687, 0.030195552855730057, 0.029195889830589294, 0.029283512383699417, 0.028817474842071533, 0.028979528695344925, 0.02863040380179882], 'mae': [0.08490967005491257, 0.08485931158065796, 0.08927986770868301, 0.09568033367395401, 0.10288164019584656, 0.10743315517902374, 0.10299083590507507, 0.10037574917078018, 0.10307413339614868, 0.10613051056861877, 0.10905858874320984, 0.10642068088054657, 0.10403858870267868, 0.10021980106830597, 0.09869290143251419, 0.09449458867311478, 0.09554342925548553, 0.09339774399995804, 0.09262269735336304, 0.0928344652056694, 0.09598898887634277, 0.10325462371110916, 0.10466516762971878, 0.10330292582511902, 0.10270357131958008, 0.0960417166352272, 0.09600207954645157, 0.09415534883737564, 0.09212712943553925, 0.08935093134641647, 0.09098001569509506, 0.09317238628864288], 'val_loss': [0.07938532531261444, 0.075092613697052, 0.06982868909835815, 0.06454376876354218, 0.06031987816095352, 0.05967835336923599, 0.06098480522632599, 0.05987606570124626, 0.05739022418856621, 0.054735392332077026, 0.05433342605829239, 0.053991612046957016, 0.052710190415382385, 0.05220646411180496, 0.05119461938738823, 0.051241785287857056, 0.04871862381696701, 0.049300070852041245, 0.04833843186497688, 0.04718441516160965, 0.04528304189443588, 0.04463167116045952, 0.04587622731924057, 0.04491173103451729, 0.046336326748132706, 0.044784318655729294, 0.04355756938457489, 0.04437073692679405, 0.048668503761291504, 0.04860960319638252, 0.04575659707188606, 0.04469941928982735], 'val_mae': [0.11651212722063065, 0.11938305199146271, 0.12246257066726685, 0.1257246881723404, 0.12836188077926636, 0.1265316903591156, 0.12488450855016708, 0.12603284418582916, 0.12657278776168823, 0.1274293065071106, 0.126051664352417, 0.12404938787221909, 0.12107589840888977, 0.11844882369041443, 0.11622802913188934, 0.11392375081777573, 0.11264760047197342, 0.1113375648856163, 0.11044511198997498, 0.11115732789039612, 0.11467573791742325, 0.11847969144582748, 0.11830943077802658, 0.11781205236911774, 0.11459039896726608, 0.1117839366197586, 0.11028176546096802, 0.1104186475276947, 0.1133776605129242, 0.11431824415922165, 0.1145104467868805, 0.11402354389429092]}
2026-05-20 06:53:58,549 - INFO - Model training complete. Best model saved as /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month09_dekad01.keras
2026-05-20 06:53:58,551 - INFO - Pipeline [09 d1]: Loading confidence mask...
2026-05-20 06:53:58,554 - INFO - Loading existing confidence mask: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/station_density/confidence_mask_station_density.nc4
2026-05-20 06:53:58,555 - INFO - Pipeline [09 d1]: Applying DL refinement...
2026-05-20 06:53:58,571 - INFO - Pixel-wise threshold map computed at 80th percentile. threshold_2d shape: (9, 14)
2026-05-20 06:53:58,572 - INFO - DL blending: base alpha=0.70 (LSEQM weight), 1-alpha=0.30 (DL weight)
2026-05-20 06:53:58,573 - INFO - Confidence mask active: spatial alpha modulation enabled. Confidence range: [0.000, 0.411]
2026-05-20 06:54:15,579 - INFO - DL blending complete: 250 daily slices processed, 1,545 extreme pixels blended (alpha=0.70)
2026-05-20 06:54:16,527 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:54:16,588 - INFO - Saved Hybrid Deep Learning-Physical (Linear Scaling and Empirical Quantile Mapping) Approach corrected precipitation for month 09, dekad 01 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_lseqmdl_corrected_imergl_month09_dekad01.nc4
2026-05-20 06:54:16,589 - INFO - Pipeline [09 d1]: Complete.
✓ month 09 dekad 1 — saved: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_imergl_lseqmdl_corrected_precip_month09_dekad01.nc4
============================================================
▸ month 09 dekad 2
============================================================
2026-05-20 06:54:16,590 - INFO - Pipeline [09 d2]: Running LSEQM...
2026-05-20 06:54:16,593 - INFO - Aligning IMERG and CPC datasets...
2026-05-20 06:54:16,602 - INFO - After alignment: IMERG has 9131 time steps, CPC has 9131 time steps
2026-05-20 06:54:16,603 - INFO - Creating time-based masks...
2026-05-20 06:54:16,616 - INFO - Applying time masks...
2026-05-20 06:54:16,627 - INFO - IMERG dekad data shape: (250, 9, 14)
2026-05-20 06:54:16,627 - INFO - CPC dekad data shape: (250, 9, 14)
2026-05-20 06:54:16,631 - INFO - Using native-resolution CPC parameter fitting (BCSD principle)...
2026-05-20 06:54:16,661 - INFO - CPC native dekad data: (250, 4, 6) (lat -9.25–-7.75, lon 113.75–116.25)
2026-05-20 06:54:20,413 - INFO - Native CPC fitting: row 4/4 (100%) | 24 fitted, 0 skipped | elapsed 4s, ETA 0s
2026-05-20 06:54:20,414 - INFO - Fitted CPC params on native grid: 24/24 cells
2026-05-20 06:54:20,457 - INFO - Interpolated CPC params to IMERG grid: 126/126 valid pixels
2026-05-20 06:54:20,458 - INFO - Performing Linear Scaling (LS)...
2026-05-20 06:54:20,468 - INFO - LS using bilinearly interpolated CPC mean (smooth).
2026-05-20 06:54:20,471 - INFO - Saving LS corrected precipitation...
2026-05-20 06:54:20,474 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:54:20,534 - INFO - Saved Linear Scaling corrected precipitation for month 09, dekad 11 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_ls/bali_cli_ls_corrected_imergl_month09_dekad11.nc4
2026-05-20 06:54:20,536 - INFO - Applying Empirical Quantile Mapping (EQM) on 9x14 grid...
2026-05-20 06:54:20,616 - INFO - EQM progress: row 9/9 (100%) | 80 land pixels done | elapsed 0s, ETA 0s
2026-05-20 06:54:20,619 - INFO - EQM complete: 80/126 grid points corrected (46 masked/ocean pixels skipped)
2026-05-20 06:54:20,621 - INFO - Saving LSEQM corrected precipitation...
2026-05-20 06:54:20,623 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:54:20,669 - INFO - Saved Linear Scaling and Empirical Quantile Mapping corrected precipitation for month 09, dekad 11 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqm/bali_cli_lseqm_corrected_imergl_month09_dekad11.nc4
2026-05-20 06:54:20,671 - INFO - Pipeline [09 d2]: Training / loading DL model...
2026-05-20 06:54:20,673 - INFO - Checking if the model file exists at: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month09_dekad11.keras
2026-05-20 06:54:20,754 - INFO - Model: "sequential_25"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ conv2d_50 (Conv2D) │ (None, 9, 14, 32) │ 320 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_50 (MaxPooling2D) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_75 (Dropout) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_51 (Conv2D) │ (None, 4, 7, 64) │ 18,496 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_51 (MaxPooling2D) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_76 (Dropout) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ flatten_25 (Flatten) │ (None, 384) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_50 (Dense) │ (None, 128) │ 49,280 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_77 (Dropout) │ (None, 128) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_51 (Dense) │ (None, 126) │ 16,254 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ reshape_25 (Reshape) │ (None, 9, 14) │ 0 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 84,350 (329.49 KB)
Trainable params: 84,350 (329.49 KB)
Non-trainable params: 0 (0.00 B)
Epoch 1/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 2s 95ms/step - loss: 0.0596 - mae: 0.1115 - val_loss: 0.1010 - val_mae: 0.1619
Epoch 2/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 47ms/step - loss: 0.0545 - mae: 0.1071 - val_loss: 0.0926 - val_mae: 0.1600
Epoch 3/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0502 - mae: 0.1123 - val_loss: 0.0783 - val_mae: 0.1574
Epoch 4/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 48ms/step - loss: 0.0460 - mae: 0.1222 - val_loss: 0.0668 - val_mae: 0.1545
Epoch 5/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 46ms/step - loss: 0.0443 - mae: 0.1292 - val_loss: 0.0632 - val_mae: 0.1517
Epoch 6/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 30ms/step - loss: 0.0408 - mae: 0.1236 - val_loss: 0.0646 - val_mae: 0.1495
Epoch 7/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 31ms/step - loss: 0.0394 - mae: 0.1185 - val_loss: 0.0653 - val_mae: 0.1480
Epoch 8/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 32ms/step - loss: 0.0379 - mae: 0.1131 - val_loss: 0.0639 - val_mae: 0.1456
Epoch 9/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0368 - mae: 0.1128 - val_loss: 0.0593 - val_mae: 0.1425
Epoch 10/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 49ms/step - loss: 0.0368 - mae: 0.1163 - val_loss: 0.0568 - val_mae: 0.1410
Epoch 11/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step - loss: 0.0357 - mae: 0.1145 - val_loss: 0.0597 - val_mae: 0.1407
Epoch 12/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0348 - mae: 0.1076 - val_loss: 0.0618 - val_mae: 0.1405
Epoch 13/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0336 - mae: 0.1038 - val_loss: 0.0594 - val_mae: 0.1388
Epoch 14/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 30ms/step - loss: 0.0338 - mae: 0.1062 - val_loss: 0.0570 - val_mae: 0.1373
Epoch 15/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0338 - mae: 0.1104 - val_loss: 0.0539 - val_mae: 0.1360
Epoch 16/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step - loss: 0.0332 - mae: 0.1105 - val_loss: 0.0544 - val_mae: 0.1351
Epoch 17/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step - loss: 0.0325 - mae: 0.1078 - val_loss: 0.0571 - val_mae: 0.1358
Epoch 18/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 32ms/step - loss: 0.0332 - mae: 0.1040 - val_loss: 0.0606 - val_mae: 0.1372
Epoch 19/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0332 - mae: 0.1018 - val_loss: 0.0583 - val_mae: 0.1356
Epoch 20/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0324 - mae: 0.1032 - val_loss: 0.0546 - val_mae: 0.1334
2026-05-20 06:54:25,155 - INFO - Final training history: {'loss': [0.059617675840854645, 0.054460231214761734, 0.05022703483700752, 0.045959580689668655, 0.044316474348306656, 0.040770579129457474, 0.039400164037942886, 0.03785902261734009, 0.036818232387304306, 0.03675307333469391, 0.03568599745631218, 0.034778207540512085, 0.033586710691452026, 0.03382240608334541, 0.0337684191763401, 0.03317071497440338, 0.032471515238285065, 0.0331912524998188, 0.03320016711950302, 0.032366883009672165], 'mae': [0.11149376630783081, 0.10711850225925446, 0.1122724637389183, 0.12218839675188065, 0.12923890352249146, 0.12357473373413086, 0.11854356527328491, 0.11308985948562622, 0.1128457635641098, 0.1162806898355484, 0.11447913944721222, 0.10756674408912659, 0.10381033271551132, 0.10622890293598175, 0.11044089496135712, 0.11050760000944138, 0.10780450701713562, 0.10402468591928482, 0.10181715339422226, 0.10320603102445602], 'val_loss': [0.10103539377450943, 0.09257004410028458, 0.07832158356904984, 0.0668492540717125, 0.06320939213037491, 0.06455975025892258, 0.06529798358678818, 0.06394466757774353, 0.05930386111140251, 0.056845057755708694, 0.05969074368476868, 0.0617574006319046, 0.05937136337161064, 0.05703025683760643, 0.05386710539460182, 0.054362449795007706, 0.0570707768201828, 0.06057634949684143, 0.05826202780008316, 0.054635632783174515], 'val_mae': [0.16192300617694855, 0.15998655557632446, 0.15741214156150818, 0.15453654527664185, 0.1516793668270111, 0.1494675576686859, 0.14803162217140198, 0.14560693502426147, 0.1425386220216751, 0.14101633429527283, 0.14072087407112122, 0.1404995173215866, 0.13882727921009064, 0.13731876015663147, 0.13602286577224731, 0.13514356315135956, 0.1358080506324768, 0.13720062375068665, 0.1355734020471573, 0.13338717818260193]}
2026-05-20 06:54:25,303 - INFO - Model training complete. Best model saved as /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month09_dekad11.keras
2026-05-20 06:54:25,305 - INFO - Pipeline [09 d2]: Loading confidence mask...
2026-05-20 06:54:25,307 - INFO - Loading existing confidence mask: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/station_density/confidence_mask_station_density.nc4
2026-05-20 06:54:25,308 - INFO - Pipeline [09 d2]: Applying DL refinement...
2026-05-20 06:54:25,322 - INFO - Pixel-wise threshold map computed at 80th percentile. threshold_2d shape: (9, 14)
2026-05-20 06:54:25,323 - INFO - DL blending: base alpha=0.70 (LSEQM weight), 1-alpha=0.30 (DL weight)
2026-05-20 06:54:25,324 - INFO - Confidence mask active: spatial alpha modulation enabled. Confidence range: [0.000, 0.411]
2026-05-20 06:54:43,403 - INFO - DL blending complete: 250 daily slices processed, 2,671 extreme pixels blended (alpha=0.70)
2026-05-20 06:54:43,512 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:54:43,568 - INFO - Saved Hybrid Deep Learning-Physical (Linear Scaling and Empirical Quantile Mapping) Approach corrected precipitation for month 09, dekad 11 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_lseqmdl_corrected_imergl_month09_dekad11.nc4
2026-05-20 06:54:43,569 - INFO - Pipeline [09 d2]: Complete.
✓ month 09 dekad 2 — saved: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_imergl_lseqmdl_corrected_precip_month09_dekad11.nc4
============================================================
▸ month 09 dekad 3
============================================================
2026-05-20 06:54:43,573 - INFO - Pipeline [09 d3]: Running LSEQM...
2026-05-20 06:54:43,578 - INFO - Aligning IMERG and CPC datasets...
2026-05-20 06:54:43,584 - INFO - After alignment: IMERG has 9131 time steps, CPC has 9131 time steps
2026-05-20 06:54:43,585 - INFO - Creating time-based masks...
2026-05-20 06:54:43,595 - INFO - Applying time masks...
2026-05-20 06:54:43,608 - INFO - IMERG dekad data shape: (250, 9, 14)
2026-05-20 06:54:43,609 - INFO - CPC dekad data shape: (250, 9, 14)
2026-05-20 06:54:43,611 - INFO - Using native-resolution CPC parameter fitting (BCSD principle)...
2026-05-20 06:54:43,640 - INFO - CPC native dekad data: (250, 4, 6) (lat -9.25–-7.75, lon 113.75–116.25)
2026-05-20 06:54:47,945 - INFO - Native CPC fitting: row 4/4 (100%) | 24 fitted, 0 skipped | elapsed 4s, ETA 0s
2026-05-20 06:54:47,946 - INFO - Fitted CPC params on native grid: 24/24 cells
2026-05-20 06:54:47,990 - INFO - Interpolated CPC params to IMERG grid: 126/126 valid pixels
2026-05-20 06:54:47,990 - INFO - Performing Linear Scaling (LS)...
2026-05-20 06:54:48,000 - INFO - LS using bilinearly interpolated CPC mean (smooth).
2026-05-20 06:54:48,003 - INFO - Saving LS corrected precipitation...
2026-05-20 06:54:48,005 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:54:48,060 - INFO - Saved Linear Scaling corrected precipitation for month 09, dekad 21 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_ls/bali_cli_ls_corrected_imergl_month09_dekad21.nc4
2026-05-20 06:54:48,061 - INFO - Applying Empirical Quantile Mapping (EQM) on 9x14 grid...
2026-05-20 06:54:48,135 - INFO - EQM progress: row 9/9 (100%) | 80 land pixels done | elapsed 0s, ETA 0s
2026-05-20 06:54:48,139 - INFO - EQM complete: 80/126 grid points corrected (46 masked/ocean pixels skipped)
2026-05-20 06:54:48,140 - INFO - Saving LSEQM corrected precipitation...
2026-05-20 06:54:48,143 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:54:48,201 - INFO - Saved Linear Scaling and Empirical Quantile Mapping corrected precipitation for month 09, dekad 21 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqm/bali_cli_lseqm_corrected_imergl_month09_dekad21.nc4
2026-05-20 06:54:48,204 - INFO - Pipeline [09 d3]: Training / loading DL model...
2026-05-20 06:54:48,205 - INFO - Checking if the model file exists at: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month09_dekad21.keras
2026-05-20 06:54:48,277 - INFO - Model: "sequential_26"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ conv2d_52 (Conv2D) │ (None, 9, 14, 32) │ 320 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_52 (MaxPooling2D) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_78 (Dropout) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_53 (Conv2D) │ (None, 4, 7, 64) │ 18,496 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_53 (MaxPooling2D) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_79 (Dropout) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ flatten_26 (Flatten) │ (None, 384) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_52 (Dense) │ (None, 128) │ 49,280 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_80 (Dropout) │ (None, 128) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_53 (Dense) │ (None, 126) │ 16,254 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ reshape_26 (Reshape) │ (None, 9, 14) │ 0 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 84,350 (329.49 KB)
Trainable params: 84,350 (329.49 KB)
Non-trainable params: 0 (0.00 B)
Epoch 1/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 2s 103ms/step - loss: 0.0533 - mae: 0.0953 - val_loss: 0.0880 - val_mae: 0.1361
Epoch 2/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0495 - mae: 0.0947 - val_loss: 0.0819 - val_mae: 0.1370
Epoch 3/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0458 - mae: 0.1002 - val_loss: 0.0739 - val_mae: 0.1374
Epoch 4/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 41ms/step - loss: 0.0421 - mae: 0.1052 - val_loss: 0.0667 - val_mae: 0.1373
Epoch 5/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 45ms/step - loss: 0.0397 - mae: 0.1097 - val_loss: 0.0623 - val_mae: 0.1367
Epoch 6/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 50ms/step - loss: 0.0382 - mae: 0.1114 - val_loss: 0.0606 - val_mae: 0.1356
Epoch 7/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0363 - mae: 0.1094 - val_loss: 0.0611 - val_mae: 0.1343
Epoch 8/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 39ms/step - loss: 0.0357 - mae: 0.1051 - val_loss: 0.0625 - val_mae: 0.1334
Epoch 9/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 61ms/step - loss: 0.0353 - mae: 0.1041 - val_loss: 0.0603 - val_mae: 0.1324
Epoch 10/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 47ms/step - loss: 0.0337 - mae: 0.1033 - val_loss: 0.0611 - val_mae: 0.1316
Epoch 11/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 52ms/step - loss: 0.0336 - mae: 0.1010 - val_loss: 0.0613 - val_mae: 0.1307
Epoch 12/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 68ms/step - loss: 0.0326 - mae: 0.0999 - val_loss: 0.0596 - val_mae: 0.1299
Epoch 13/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 47ms/step - loss: 0.0330 - mae: 0.1010 - val_loss: 0.0599 - val_mae: 0.1294
Epoch 14/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0323 - mae: 0.0993 - val_loss: 0.0600 - val_mae: 0.1293
Epoch 15/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 46ms/step - loss: 0.0312 - mae: 0.0980 - val_loss: 0.0601 - val_mae: 0.1289
Epoch 16/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 54ms/step - loss: 0.0308 - mae: 0.0966 - val_loss: 0.0596 - val_mae: 0.1288
Epoch 17/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 40ms/step - loss: 0.0314 - mae: 0.0974 - val_loss: 0.0607 - val_mae: 0.1285
2026-05-20 06:54:53,261 - INFO - Final training history: {'loss': [0.05326901748776436, 0.049477167427539825, 0.04584936797618866, 0.0421304851770401, 0.039698317646980286, 0.03823232278227806, 0.03630959615111351, 0.03569743037223816, 0.035346683114767075, 0.03368527069687843, 0.03362767770886421, 0.03255169093608856, 0.03301411494612694, 0.032330311834812164, 0.031170325353741646, 0.030835676938295364, 0.031421102583408356], 'mae': [0.09526127576828003, 0.09474653005599976, 0.1001855731010437, 0.10521513223648071, 0.10974914580583572, 0.11143942177295685, 0.10943304002285004, 0.10512390732765198, 0.10410098731517792, 0.10327516496181488, 0.10101645439863205, 0.09987122565507889, 0.10098633170127869, 0.09929303824901581, 0.09803888946771622, 0.09655699878931046, 0.09744459390640259], 'val_loss': [0.0879761278629303, 0.08187472075223923, 0.07391377538442612, 0.06673507392406464, 0.062285054475069046, 0.06056736409664154, 0.061072077602148056, 0.0625082403421402, 0.06034145504236221, 0.061077702790498734, 0.06134149059653282, 0.05955713242292404, 0.05993760749697685, 0.060031503438949585, 0.06014275178313255, 0.05964856967329979, 0.06070274859666824], 'val_mae': [0.13608361780643463, 0.13695211708545685, 0.13738763332366943, 0.13726657629013062, 0.13665015995502472, 0.13557296991348267, 0.1342921257019043, 0.13336244225502014, 0.13236671686172485, 0.13159741461277008, 0.13067053258419037, 0.12991304695606232, 0.12942305207252502, 0.12925077974796295, 0.1289292871952057, 0.1288449913263321, 0.12851712107658386]}
2026-05-20 06:54:53,408 - INFO - Model training complete. Best model saved as /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month09_dekad21.keras
2026-05-20 06:54:53,410 - INFO - Pipeline [09 d3]: Loading confidence mask...
2026-05-20 06:54:53,413 - INFO - Loading existing confidence mask: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/station_density/confidence_mask_station_density.nc4
2026-05-20 06:54:53,414 - INFO - Pipeline [09 d3]: Applying DL refinement...
2026-05-20 06:54:53,428 - INFO - Pixel-wise threshold map computed at 80th percentile. threshold_2d shape: (9, 14)
2026-05-20 06:54:53,429 - INFO - DL blending: base alpha=0.70 (LSEQM weight), 1-alpha=0.30 (DL weight)
2026-05-20 06:54:53,431 - INFO - Confidence mask active: spatial alpha modulation enabled. Confidence range: [0.000, 0.411]
2026-05-20 06:55:09,844 - INFO - DL blending complete: 250 daily slices processed, 2,361 extreme pixels blended (alpha=0.70)
2026-05-20 06:55:09,936 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:55:09,977 - INFO - Saved Hybrid Deep Learning-Physical (Linear Scaling and Empirical Quantile Mapping) Approach corrected precipitation for month 09, dekad 21 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_lseqmdl_corrected_imergl_month09_dekad21.nc4
2026-05-20 06:55:09,977 - INFO - Pipeline [09 d3]: Complete.
✓ month 09 dekad 3 — saved: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_imergl_lseqmdl_corrected_precip_month09_dekad21.nc4
============================================================
▸ month 10 dekad 1
============================================================
2026-05-20 06:55:09,979 - INFO - Pipeline [10 d1]: Running LSEQM...
2026-05-20 06:55:09,984 - INFO - Aligning IMERG and CPC datasets...
2026-05-20 06:55:09,992 - INFO - After alignment: IMERG has 9131 time steps, CPC has 9131 time steps
2026-05-20 06:55:09,993 - INFO - Creating time-based masks...
2026-05-20 06:55:10,004 - INFO - Applying time masks...
2026-05-20 06:55:10,015 - INFO - IMERG dekad data shape: (250, 9, 14)
2026-05-20 06:55:10,016 - INFO - CPC dekad data shape: (250, 9, 14)
2026-05-20 06:55:10,019 - INFO - Using native-resolution CPC parameter fitting (BCSD principle)...
2026-05-20 06:55:10,048 - INFO - CPC native dekad data: (250, 4, 6) (lat -9.25–-7.75, lon 113.75–116.25)
2026-05-20 06:55:13,788 - INFO - Native CPC fitting: row 4/4 (100%) | 24 fitted, 0 skipped | elapsed 4s, ETA 0s
2026-05-20 06:55:13,789 - INFO - Fitted CPC params on native grid: 24/24 cells
2026-05-20 06:55:13,834 - INFO - Interpolated CPC params to IMERG grid: 126/126 valid pixels
2026-05-20 06:55:13,835 - INFO - Performing Linear Scaling (LS)...
2026-05-20 06:55:13,844 - INFO - LS using bilinearly interpolated CPC mean (smooth).
2026-05-20 06:55:13,849 - INFO - Saving LS corrected precipitation...
2026-05-20 06:55:13,853 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:55:13,905 - INFO - Saved Linear Scaling corrected precipitation for month 10, dekad 01 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_ls/bali_cli_ls_corrected_imergl_month10_dekad01.nc4
2026-05-20 06:55:13,906 - INFO - Applying Empirical Quantile Mapping (EQM) on 9x14 grid...
2026-05-20 06:55:13,990 - INFO - EQM progress: row 9/9 (100%) | 80 land pixels done | elapsed 0s, ETA 0s
2026-05-20 06:55:13,994 - INFO - EQM complete: 80/126 grid points corrected (46 masked/ocean pixels skipped)
2026-05-20 06:55:13,996 - INFO - Saving LSEQM corrected precipitation...
2026-05-20 06:55:13,999 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:55:14,044 - INFO - Saved Linear Scaling and Empirical Quantile Mapping corrected precipitation for month 10, dekad 01 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqm/bali_cli_lseqm_corrected_imergl_month10_dekad01.nc4
2026-05-20 06:55:14,046 - INFO - Pipeline [10 d1]: Training / loading DL model...
2026-05-20 06:55:14,047 - INFO - Checking if the model file exists at: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month10_dekad01.keras
2026-05-20 06:55:14,112 - INFO - Model: "sequential_27"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ conv2d_54 (Conv2D) │ (None, 9, 14, 32) │ 320 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_54 (MaxPooling2D) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_81 (Dropout) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_55 (Conv2D) │ (None, 4, 7, 64) │ 18,496 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_55 (MaxPooling2D) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_82 (Dropout) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ flatten_27 (Flatten) │ (None, 384) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_54 (Dense) │ (None, 128) │ 49,280 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_83 (Dropout) │ (None, 128) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_55 (Dense) │ (None, 126) │ 16,254 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ reshape_27 (Reshape) │ (None, 9, 14) │ 0 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 84,350 (329.49 KB)
Trainable params: 84,350 (329.49 KB)
Non-trainable params: 0 (0.00 B)
Epoch 1/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 1s 97ms/step - loss: 0.0788 - mae: 0.1399 - val_loss: 0.0943 - val_mae: 0.1531
Epoch 2/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 90ms/step - loss: 0.0706 - mae: 0.1369 - val_loss: 0.0831 - val_mae: 0.1539
Epoch 3/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 1s 69ms/step - loss: 0.0636 - mae: 0.1434 - val_loss: 0.0705 - val_mae: 0.1542
Epoch 4/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 54ms/step - loss: 0.0595 - mae: 0.1517 - val_loss: 0.0654 - val_mae: 0.1515
Epoch 5/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 40ms/step - loss: 0.0554 - mae: 0.1479 - val_loss: 0.0661 - val_mae: 0.1495
Epoch 6/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 62ms/step - loss: 0.0534 - mae: 0.1423 - val_loss: 0.0638 - val_mae: 0.1482
Epoch 7/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 69ms/step - loss: 0.0503 - mae: 0.1411 - val_loss: 0.0581 - val_mae: 0.1467
Epoch 8/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 66ms/step - loss: 0.0495 - mae: 0.1440 - val_loss: 0.0576 - val_mae: 0.1440
Epoch 9/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 33ms/step - loss: 0.0479 - mae: 0.1398 - val_loss: 0.0599 - val_mae: 0.1418
Epoch 10/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 24ms/step - loss: 0.0466 - mae: 0.1332 - val_loss: 0.0610 - val_mae: 0.1410
Epoch 11/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 24ms/step - loss: 0.0469 - mae: 0.1325 - val_loss: 0.0582 - val_mae: 0.1405
Epoch 12/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0450 - mae: 0.1346 - val_loss: 0.0556 - val_mae: 0.1417
Epoch 13/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0435 - mae: 0.1366 - val_loss: 0.0557 - val_mae: 0.1411
Epoch 14/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0442 - mae: 0.1352 - val_loss: 0.0574 - val_mae: 0.1398
Epoch 15/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0429 - mae: 0.1287 - val_loss: 0.0592 - val_mae: 0.1397
Epoch 16/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 40ms/step - loss: 0.0434 - mae: 0.1299 - val_loss: 0.0555 - val_mae: 0.1411
Epoch 17/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0427 - mae: 0.1340 - val_loss: 0.0548 - val_mae: 0.1422
Epoch 18/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 25ms/step - loss: 0.0425 - mae: 0.1340 - val_loss: 0.0569 - val_mae: 0.1402
Epoch 19/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0412 - mae: 0.1256 - val_loss: 0.0614 - val_mae: 0.1400
Epoch 20/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0428 - mae: 0.1217 - val_loss: 0.0640 - val_mae: 0.1404
Epoch 21/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0429 - mae: 0.1217 - val_loss: 0.0591 - val_mae: 0.1391
Epoch 22/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0408 - mae: 0.1259 - val_loss: 0.0548 - val_mae: 0.1415
Epoch 23/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 41ms/step - loss: 0.0424 - mae: 0.1353 - val_loss: 0.0547 - val_mae: 0.1409
Epoch 24/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0408 - mae: 0.1298 - val_loss: 0.0565 - val_mae: 0.1382
Epoch 25/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0401 - mae: 0.1241 - val_loss: 0.0569 - val_mae: 0.1367
Epoch 26/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0391 - mae: 0.1210 - val_loss: 0.0552 - val_mae: 0.1362
Epoch 27/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 41ms/step - loss: 0.0395 - mae: 0.1256 - val_loss: 0.0545 - val_mae: 0.1367
Epoch 28/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 30ms/step - loss: 0.0391 - mae: 0.1237 - val_loss: 0.0561 - val_mae: 0.1353
Epoch 29/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 25ms/step - loss: 0.0393 - mae: 0.1197 - val_loss: 0.0585 - val_mae: 0.1353
Epoch 30/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 25ms/step - loss: 0.0381 - mae: 0.1163 - val_loss: 0.0566 - val_mae: 0.1352
Epoch 31/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step - loss: 0.0386 - mae: 0.1212 - val_loss: 0.0547 - val_mae: 0.1374
Epoch 32/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0378 - mae: 0.1225 - val_loss: 0.0560 - val_mae: 0.1380
2026-05-20 06:55:21,173 - INFO - Final training history: {'loss': [0.07877185195684433, 0.07060347497463226, 0.0636444091796875, 0.05948655679821968, 0.055363431572914124, 0.05335824936628342, 0.05027700960636139, 0.04945417493581772, 0.04790539667010307, 0.046647459268569946, 0.04692937433719635, 0.044962115585803986, 0.04352641478180885, 0.04424150288105011, 0.04294867441058159, 0.04340656101703644, 0.04273797944188118, 0.042483292520046234, 0.041241396218538284, 0.042824435979127884, 0.042893651872873306, 0.04082709178328514, 0.04243702068924904, 0.04081106185913086, 0.04011654481291771, 0.03913022577762604, 0.03954990953207016, 0.03906913846731186, 0.03926856815814972, 0.03812476620078087, 0.03862013295292854, 0.03779379650950432], 'mae': [0.1398637592792511, 0.13689838349819183, 0.143386110663414, 0.15169091522693634, 0.14785662293434143, 0.1423337459564209, 0.1411297470331192, 0.14395613968372345, 0.13983196020126343, 0.13323894143104553, 0.13251186907291412, 0.13455528020858765, 0.13660524785518646, 0.1352059245109558, 0.12874308228492737, 0.12993097305297852, 0.13397298753261566, 0.13402964174747467, 0.12560492753982544, 0.12166021019220352, 0.12166793644428253, 0.12585172057151794, 0.13530640304088593, 0.12977728247642517, 0.12409737706184387, 0.12098536640405655, 0.12564051151275635, 0.1237465962767601, 0.11974618583917618, 0.11626625806093216, 0.1211782917380333, 0.12247908860445023], 'val_loss': [0.0942917987704277, 0.08308178186416626, 0.07052161544561386, 0.06543108820915222, 0.06608022749423981, 0.06383650749921799, 0.05806504189968109, 0.05761536583304405, 0.05990125983953476, 0.061005111783742905, 0.058229535818099976, 0.05556682124733925, 0.05570846423506737, 0.05743567645549774, 0.0591556541621685, 0.055529989302158356, 0.054798342287540436, 0.05688982829451561, 0.0614473819732666, 0.06397537887096405, 0.059058934450149536, 0.054772138595581055, 0.05471380054950714, 0.0565381720662117, 0.05692733824253082, 0.05518342927098274, 0.05452406406402588, 0.05614074692130089, 0.058503951877355576, 0.05662835016846657, 0.054728418588638306, 0.05597059801220894], 'val_mae': [0.15313643217086792, 0.153941810131073, 0.15419277548789978, 0.15148776769638062, 0.14947864413261414, 0.1481587290763855, 0.1467464417219162, 0.14398038387298584, 0.14176003634929657, 0.14099207520484924, 0.1405165046453476, 0.1417093425989151, 0.14113856852054596, 0.13976013660430908, 0.13969090580940247, 0.14105316996574402, 0.14217285811901093, 0.14018863439559937, 0.13999196887016296, 0.14043028652668, 0.1390514075756073, 0.14145775139331818, 0.14093071222305298, 0.13823965191841125, 0.1366613358259201, 0.13622036576271057, 0.13670714199543, 0.13527098298072815, 0.13525110483169556, 0.1351894736289978, 0.13738641142845154, 0.1380077600479126]}
2026-05-20 06:55:21,331 - INFO - Model training complete. Best model saved as /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month10_dekad01.keras
2026-05-20 06:55:21,332 - INFO - Pipeline [10 d1]: Loading confidence mask...
2026-05-20 06:55:21,334 - INFO - Loading existing confidence mask: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/station_density/confidence_mask_station_density.nc4
2026-05-20 06:55:21,335 - INFO - Pipeline [10 d1]: Applying DL refinement...
2026-05-20 06:55:21,352 - INFO - Pixel-wise threshold map computed at 80th percentile. threshold_2d shape: (9, 14)
2026-05-20 06:55:21,353 - INFO - DL blending: base alpha=0.70 (LSEQM weight), 1-alpha=0.30 (DL weight)
2026-05-20 06:55:21,354 - INFO - Confidence mask active: spatial alpha modulation enabled. Confidence range: [0.000, 0.411]
2026-05-20 06:55:37,604 - INFO - DL blending complete: 250 daily slices processed, 3,709 extreme pixels blended (alpha=0.70)
2026-05-20 06:55:37,691 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:55:37,754 - INFO - Saved Hybrid Deep Learning-Physical (Linear Scaling and Empirical Quantile Mapping) Approach corrected precipitation for month 10, dekad 01 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_lseqmdl_corrected_imergl_month10_dekad01.nc4
2026-05-20 06:55:37,755 - INFO - Pipeline [10 d1]: Complete.
✓ month 10 dekad 1 — saved: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_imergl_lseqmdl_corrected_precip_month10_dekad01.nc4
============================================================
▸ month 10 dekad 2
============================================================
2026-05-20 06:55:37,757 - INFO - Pipeline [10 d2]: Running LSEQM...
2026-05-20 06:55:37,760 - INFO - Aligning IMERG and CPC datasets...
2026-05-20 06:55:37,768 - INFO - After alignment: IMERG has 9131 time steps, CPC has 9131 time steps
2026-05-20 06:55:37,769 - INFO - Creating time-based masks...
2026-05-20 06:55:37,782 - INFO - Applying time masks...
2026-05-20 06:55:37,793 - INFO - IMERG dekad data shape: (250, 9, 14)
2026-05-20 06:55:37,794 - INFO - CPC dekad data shape: (250, 9, 14)
2026-05-20 06:55:37,799 - INFO - Using native-resolution CPC parameter fitting (BCSD principle)...
2026-05-20 06:55:37,829 - INFO - CPC native dekad data: (250, 4, 6) (lat -9.25–-7.75, lon 113.75–116.25)
2026-05-20 06:55:43,861 - INFO - Native CPC fitting: row 4/4 (100%) | 24 fitted, 0 skipped | elapsed 6s, ETA 0s
2026-05-20 06:55:43,862 - INFO - Fitted CPC params on native grid: 24/24 cells
2026-05-20 06:55:43,908 - INFO - Interpolated CPC params to IMERG grid: 126/126 valid pixels
2026-05-20 06:55:43,908 - INFO - Performing Linear Scaling (LS)...
2026-05-20 06:55:43,918 - INFO - LS using bilinearly interpolated CPC mean (smooth).
2026-05-20 06:55:43,921 - INFO - Saving LS corrected precipitation...
2026-05-20 06:55:43,925 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:55:43,982 - INFO - Saved Linear Scaling corrected precipitation for month 10, dekad 11 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_ls/bali_cli_ls_corrected_imergl_month10_dekad11.nc4
2026-05-20 06:55:43,983 - INFO - Applying Empirical Quantile Mapping (EQM) on 9x14 grid...
2026-05-20 06:55:44,060 - INFO - EQM progress: row 9/9 (100%) | 80 land pixels done | elapsed 0s, ETA 0s
2026-05-20 06:55:44,063 - INFO - EQM complete: 80/126 grid points corrected (46 masked/ocean pixels skipped)
2026-05-20 06:55:44,064 - INFO - Saving LSEQM corrected precipitation...
2026-05-20 06:55:44,067 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:55:44,113 - INFO - Saved Linear Scaling and Empirical Quantile Mapping corrected precipitation for month 10, dekad 11 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqm/bali_cli_lseqm_corrected_imergl_month10_dekad11.nc4
2026-05-20 06:55:44,115 - INFO - Pipeline [10 d2]: Training / loading DL model...
2026-05-20 06:55:44,116 - INFO - Checking if the model file exists at: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month10_dekad11.keras
2026-05-20 06:55:44,177 - INFO - Model: "sequential_28"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ conv2d_56 (Conv2D) │ (None, 9, 14, 32) │ 320 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_56 (MaxPooling2D) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_84 (Dropout) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_57 (Conv2D) │ (None, 4, 7, 64) │ 18,496 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_57 (MaxPooling2D) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_85 (Dropout) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ flatten_28 (Flatten) │ (None, 384) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_56 (Dense) │ (None, 128) │ 49,280 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_86 (Dropout) │ (None, 128) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_57 (Dense) │ (None, 126) │ 16,254 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ reshape_28 (Reshape) │ (None, 9, 14) │ 0 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 84,350 (329.49 KB)
Trainable params: 84,350 (329.49 KB)
Non-trainable params: 0 (0.00 B)
Epoch 1/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 1s 93ms/step - loss: 0.0601 - mae: 0.1130 - val_loss: 0.0909 - val_mae: 0.1465
Epoch 2/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 45ms/step - loss: 0.0552 - mae: 0.1104 - val_loss: 0.0815 - val_mae: 0.1456
Epoch 3/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 45ms/step - loss: 0.0509 - mae: 0.1156 - val_loss: 0.0706 - val_mae: 0.1432
Epoch 4/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0473 - mae: 0.1231 - val_loss: 0.0633 - val_mae: 0.1412
Epoch 5/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 45ms/step - loss: 0.0451 - mae: 0.1282 - val_loss: 0.0599 - val_mae: 0.1404
Epoch 6/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0445 - mae: 0.1267 - val_loss: 0.0623 - val_mae: 0.1415
Epoch 7/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0430 - mae: 0.1231 - val_loss: 0.0606 - val_mae: 0.1420
Epoch 8/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0424 - mae: 0.1233 - val_loss: 0.0586 - val_mae: 0.1416
Epoch 9/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0417 - mae: 0.1254 - val_loss: 0.0560 - val_mae: 0.1414
Epoch 10/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 51ms/step - loss: 0.0413 - mae: 0.1263 - val_loss: 0.0555 - val_mae: 0.1411
Epoch 11/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0403 - mae: 0.1241 - val_loss: 0.0557 - val_mae: 0.1403
Epoch 12/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0400 - mae: 0.1214 - val_loss: 0.0558 - val_mae: 0.1390
Epoch 13/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 40ms/step - loss: 0.0403 - mae: 0.1201 - val_loss: 0.0538 - val_mae: 0.1381
Epoch 14/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 38ms/step - loss: 0.0394 - mae: 0.1225 - val_loss: 0.0502 - val_mae: 0.1391
Epoch 15/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 25ms/step - loss: 0.0383 - mae: 0.1243 - val_loss: 0.0505 - val_mae: 0.1370
Epoch 16/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0379 - mae: 0.1200 - val_loss: 0.0539 - val_mae: 0.1358
Epoch 17/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 25ms/step - loss: 0.0385 - mae: 0.1137 - val_loss: 0.0561 - val_mae: 0.1353
Epoch 18/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0369 - mae: 0.1104 - val_loss: 0.0509 - val_mae: 0.1342
Epoch 19/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 41ms/step - loss: 0.0359 - mae: 0.1148 - val_loss: 0.0476 - val_mae: 0.1362
Epoch 20/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0380 - mae: 0.1247 - val_loss: 0.0474 - val_mae: 0.1360
Epoch 21/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step - loss: 0.0363 - mae: 0.1195 - val_loss: 0.0498 - val_mae: 0.1328
Epoch 22/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 25ms/step - loss: 0.0358 - mae: 0.1120 - val_loss: 0.0518 - val_mae: 0.1325
Epoch 23/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step - loss: 0.0357 - mae: 0.1095 - val_loss: 0.0508 - val_mae: 0.1327
Epoch 24/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0341 - mae: 0.1093 - val_loss: 0.0495 - val_mae: 0.1322
Epoch 25/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0353 - mae: 0.1120 - val_loss: 0.0480 - val_mae: 0.1310
2026-05-20 06:55:49,080 - INFO - Final training history: {'loss': [0.06008393317461014, 0.0552307665348053, 0.05093305557966232, 0.04732554033398628, 0.04514576122164726, 0.044519729912281036, 0.0430450439453125, 0.04241933673620224, 0.04170806705951691, 0.041285332292318344, 0.04032624140381813, 0.04000728577375412, 0.04033735767006874, 0.03939785435795784, 0.03831653296947479, 0.03789406642317772, 0.038503725081682205, 0.03693240508437157, 0.03593670576810837, 0.03797829523682594, 0.03625626116991043, 0.03575946018099785, 0.03574793040752411, 0.03410962224006653, 0.03534657880663872], 'mae': [0.11295035481452942, 0.11040982604026794, 0.11561942100524902, 0.12307244539260864, 0.1282454878091812, 0.12673673033714294, 0.12310273945331573, 0.12329009920358658, 0.12535017728805542, 0.12631642818450928, 0.1240614503622055, 0.12141670286655426, 0.12009694427251816, 0.12247524410486221, 0.12425806373357773, 0.11997395753860474, 0.11371462047100067, 0.11035951972007751, 0.11480945348739624, 0.12466448545455933, 0.11949079483747482, 0.11199665814638138, 0.10945911705493927, 0.10933396965265274, 0.11202505975961685], 'val_loss': [0.09091813117265701, 0.08149569481611252, 0.07059366255998611, 0.06327500194311142, 0.059868112206459045, 0.06226518005132675, 0.06055671349167824, 0.05856205150485039, 0.056021977216005325, 0.055547162890434265, 0.0557301789522171, 0.05577867850661278, 0.053824231028556824, 0.0501796156167984, 0.050527140498161316, 0.053886543959379196, 0.0561058409512043, 0.05087091773748398, 0.04761843755841255, 0.047385796904563904, 0.04982520267367363, 0.051821425557136536, 0.05075281113386154, 0.04950198531150818, 0.04802544414997101], 'val_mae': [0.14648132026195526, 0.14559206366539001, 0.14315146207809448, 0.1411682367324829, 0.1403511017560959, 0.1414555311203003, 0.1419820338487625, 0.14155010879039764, 0.14139027893543243, 0.14114947617053986, 0.1403382271528244, 0.1389797180891037, 0.13806961476802826, 0.1390795260667801, 0.13695505261421204, 0.13576535880565643, 0.13527821004390717, 0.13417571783065796, 0.1362261176109314, 0.1360425502061844, 0.13277994096279144, 0.13250957429409027, 0.13270917534828186, 0.13218306005001068, 0.13098573684692383]}
2026-05-20 06:55:49,228 - INFO - Model training complete. Best model saved as /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month10_dekad11.keras
2026-05-20 06:55:49,229 - INFO - Pipeline [10 d2]: Loading confidence mask...
2026-05-20 06:55:49,231 - INFO - Loading existing confidence mask: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/station_density/confidence_mask_station_density.nc4
2026-05-20 06:55:49,232 - INFO - Pipeline [10 d2]: Applying DL refinement...
2026-05-20 06:55:49,247 - INFO - Pixel-wise threshold map computed at 80th percentile. threshold_2d shape: (9, 14)
2026-05-20 06:55:49,248 - INFO - DL blending: base alpha=0.70 (LSEQM weight), 1-alpha=0.30 (DL weight)
2026-05-20 06:55:49,250 - INFO - Confidence mask active: spatial alpha modulation enabled. Confidence range: [0.000, 0.411]
2026-05-20 06:56:05,506 - INFO - DL blending complete: 250 daily slices processed, 3,425 extreme pixels blended (alpha=0.70)
2026-05-20 06:56:05,593 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:56:05,635 - INFO - Saved Hybrid Deep Learning-Physical (Linear Scaling and Empirical Quantile Mapping) Approach corrected precipitation for month 10, dekad 11 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_lseqmdl_corrected_imergl_month10_dekad11.nc4
2026-05-20 06:56:05,636 - INFO - Pipeline [10 d2]: Complete.
✓ month 10 dekad 2 — saved: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_imergl_lseqmdl_corrected_precip_month10_dekad11.nc4
============================================================
▸ month 10 dekad 3
============================================================
2026-05-20 06:56:05,641 - INFO - Pipeline [10 d3]: Running LSEQM...
2026-05-20 06:56:05,645 - INFO - Aligning IMERG and CPC datasets...
2026-05-20 06:56:05,652 - INFO - After alignment: IMERG has 9131 time steps, CPC has 9131 time steps
2026-05-20 06:56:05,653 - INFO - Creating time-based masks...
2026-05-20 06:56:05,664 - INFO - Applying time masks...
2026-05-20 06:56:05,679 - INFO - IMERG dekad data shape: (275, 9, 14)
2026-05-20 06:56:05,682 - INFO - CPC dekad data shape: (275, 9, 14)
2026-05-20 06:56:05,686 - INFO - Using native-resolution CPC parameter fitting (BCSD principle)...
2026-05-20 06:56:05,741 - INFO - CPC native dekad data: (275, 4, 6) (lat -9.25–-7.75, lon 113.75–116.25)
2026-05-20 06:56:09,014 - INFO - Native CPC fitting: row 4/4 (100%) | 24 fitted, 0 skipped | elapsed 3s, ETA 0s
2026-05-20 06:56:09,015 - INFO - Fitted CPC params on native grid: 24/24 cells
2026-05-20 06:56:09,062 - INFO - Interpolated CPC params to IMERG grid: 126/126 valid pixels
2026-05-20 06:56:09,063 - INFO - Performing Linear Scaling (LS)...
2026-05-20 06:56:09,073 - INFO - LS using bilinearly interpolated CPC mean (smooth).
2026-05-20 06:56:09,077 - INFO - Saving LS corrected precipitation...
2026-05-20 06:56:09,079 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (275, 9, 14)
2026-05-20 06:56:09,135 - INFO - Saved Linear Scaling corrected precipitation for month 10, dekad 21 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_ls/bali_cli_ls_corrected_imergl_month10_dekad21.nc4
2026-05-20 06:56:09,137 - INFO - Applying Empirical Quantile Mapping (EQM) on 9x14 grid...
2026-05-20 06:56:09,226 - INFO - EQM progress: row 9/9 (100%) | 80 land pixels done | elapsed 0s, ETA 0s
2026-05-20 06:56:09,229 - INFO - EQM complete: 80/126 grid points corrected (46 masked/ocean pixels skipped)
2026-05-20 06:56:09,229 - INFO - Saving LSEQM corrected precipitation...
2026-05-20 06:56:09,233 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (275, 9, 14)
2026-05-20 06:56:09,288 - INFO - Saved Linear Scaling and Empirical Quantile Mapping corrected precipitation for month 10, dekad 21 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqm/bali_cli_lseqm_corrected_imergl_month10_dekad21.nc4
2026-05-20 06:56:09,290 - INFO - Pipeline [10 d3]: Training / loading DL model...
2026-05-20 06:56:09,292 - INFO - Checking if the model file exists at: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month10_dekad21.keras
2026-05-20 06:56:09,375 - INFO - Model: "sequential_29"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ conv2d_58 (Conv2D) │ (None, 9, 14, 32) │ 320 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_58 (MaxPooling2D) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_87 (Dropout) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_59 (Conv2D) │ (None, 4, 7, 64) │ 18,496 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_59 (MaxPooling2D) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_88 (Dropout) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ flatten_29 (Flatten) │ (None, 384) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_58 (Dense) │ (None, 128) │ 49,280 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_89 (Dropout) │ (None, 128) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_59 (Dense) │ (None, 126) │ 16,254 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ reshape_29 (Reshape) │ (None, 9, 14) │ 0 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 84,350 (329.49 KB)
Trainable params: 84,350 (329.49 KB)
Non-trainable params: 0 (0.00 B)
Epoch 1/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 2s 101ms/step - loss: 0.0786 - mae: 0.1447 - val_loss: 0.0868 - val_mae: 0.1502
Epoch 2/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0683 - mae: 0.1398 - val_loss: 0.0717 - val_mae: 0.1494
Epoch 3/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0606 - mae: 0.1477 - val_loss: 0.0589 - val_mae: 0.1478
Epoch 4/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 46ms/step - loss: 0.0567 - mae: 0.1500 - val_loss: 0.0563 - val_mae: 0.1427
Epoch 5/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0516 - mae: 0.1433 - val_loss: 0.0545 - val_mae: 0.1408
Epoch 6/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 41ms/step - loss: 0.0486 - mae: 0.1405 - val_loss: 0.0500 - val_mae: 0.1394
Epoch 7/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0468 - mae: 0.1424 - val_loss: 0.0463 - val_mae: 0.1366
Epoch 8/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0452 - mae: 0.1407 - val_loss: 0.0454 - val_mae: 0.1346
Epoch 9/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0450 - mae: 0.1384 - val_loss: 0.0475 - val_mae: 0.1336
Epoch 10/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0437 - mae: 0.1344 - val_loss: 0.0457 - val_mae: 0.1326
Epoch 11/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 31ms/step - loss: 0.0437 - mae: 0.1344 - val_loss: 0.0459 - val_mae: 0.1318
Epoch 12/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 46ms/step - loss: 0.0412 - mae: 0.1307 - val_loss: 0.0442 - val_mae: 0.1308
Epoch 13/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0414 - mae: 0.1309 - val_loss: 0.0456 - val_mae: 0.1308
Epoch 14/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 45ms/step - loss: 0.0416 - mae: 0.1306 - val_loss: 0.0440 - val_mae: 0.1307
Epoch 15/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0413 - mae: 0.1309 - val_loss: 0.0438 - val_mae: 0.1302
Epoch 16/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step - loss: 0.0411 - mae: 0.1315 - val_loss: 0.0441 - val_mae: 0.1298
Epoch 17/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 30ms/step - loss: 0.0406 - mae: 0.1284 - val_loss: 0.0449 - val_mae: 0.1300
Epoch 18/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step - loss: 0.0399 - mae: 0.1252 - val_loss: 0.0460 - val_mae: 0.1297
Epoch 19/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step - loss: 0.0390 - mae: 0.1221 - val_loss: 0.0443 - val_mae: 0.1291
Epoch 20/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 46ms/step - loss: 0.0398 - mae: 0.1271 - val_loss: 0.0431 - val_mae: 0.1291
Epoch 21/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0388 - mae: 0.1238 - val_loss: 0.0451 - val_mae: 0.1277
Epoch 22/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0385 - mae: 0.1212 - val_loss: 0.0427 - val_mae: 0.1271
Epoch 23/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step - loss: 0.0389 - mae: 0.1246 - val_loss: 0.0433 - val_mae: 0.1273
Epoch 24/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 30ms/step - loss: 0.0370 - mae: 0.1199 - val_loss: 0.0452 - val_mae: 0.1275
Epoch 25/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0363 - mae: 0.1169 - val_loss: 0.0431 - val_mae: 0.1265
Epoch 26/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 32ms/step - loss: 0.0382 - mae: 0.1227 - val_loss: 0.0429 - val_mae: 0.1261
Epoch 27/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 35ms/step - loss: 0.0358 - mae: 0.1166 - val_loss: 0.0461 - val_mae: 0.1259
2026-05-20 06:56:15,777 - INFO - Final training history: {'loss': [0.07859811186790466, 0.06833048909902573, 0.06061331182718277, 0.05668221414089203, 0.05159769952297211, 0.04863608255982399, 0.04679586738348007, 0.04516185075044632, 0.04501824826002121, 0.043700993061065674, 0.04365229606628418, 0.041175320744514465, 0.04139929264783859, 0.04162811487913132, 0.04129773750901222, 0.04109833016991615, 0.04058264568448067, 0.039927247911691666, 0.038969818502664566, 0.03976041078567505, 0.03880302235484123, 0.038481421768665314, 0.03893505781888962, 0.037046607583761215, 0.036321014165878296, 0.03815653920173645, 0.035789940506219864], 'mae': [0.14466539025306702, 0.139840230345726, 0.14768527448177338, 0.15003758668899536, 0.14330178499221802, 0.14053837954998016, 0.14240103960037231, 0.1407356709241867, 0.13841691613197327, 0.1344147026538849, 0.13437242805957794, 0.13069507479667664, 0.13088826835155487, 0.13058428466320038, 0.13085252046585083, 0.13150711357593536, 0.12837938964366913, 0.12518653273582458, 0.12212513387203217, 0.12706419825553894, 0.12384582310914993, 0.12120663374662399, 0.12464939802885056, 0.1199280396103859, 0.1169460117816925, 0.1227494329214096, 0.11656299978494644], 'val_loss': [0.08683072775602341, 0.07170918583869934, 0.058932606130838394, 0.0563044548034668, 0.05448870733380318, 0.050027213990688324, 0.04633679240942001, 0.04544999822974205, 0.047507792711257935, 0.04569133743643761, 0.045925483107566833, 0.04422806575894356, 0.045642413198947906, 0.044016748666763306, 0.04377652332186699, 0.044148679822683334, 0.044903505593538284, 0.04600239917635918, 0.04434258118271828, 0.043067771941423416, 0.045113738626241684, 0.0426991730928421, 0.04333950951695442, 0.04516805708408356, 0.04311192408204079, 0.04286530613899231, 0.046057797968387604], 'val_mae': [0.15023542940616608, 0.1493598222732544, 0.1478208601474762, 0.1427467316389084, 0.14079649746418, 0.13938985764980316, 0.13661137223243713, 0.13455961644649506, 0.13364267349243164, 0.13260556757450104, 0.13181428611278534, 0.13081195950508118, 0.13084058463573456, 0.13072530925273895, 0.1302371323108673, 0.1297520101070404, 0.12996815145015717, 0.129736989736557, 0.12911126017570496, 0.12913289666175842, 0.1276615709066391, 0.12707668542861938, 0.12729626893997192, 0.12754809856414795, 0.1264977753162384, 0.12610602378845215, 0.1259448379278183]}
2026-05-20 06:56:15,922 - INFO - Model training complete. Best model saved as /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month10_dekad21.keras
2026-05-20 06:56:15,924 - INFO - Pipeline [10 d3]: Loading confidence mask...
2026-05-20 06:56:15,925 - INFO - Loading existing confidence mask: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/station_density/confidence_mask_station_density.nc4
2026-05-20 06:56:15,926 - INFO - Pipeline [10 d3]: Applying DL refinement...
2026-05-20 06:56:15,941 - INFO - Pixel-wise threshold map computed at 80th percentile. threshold_2d shape: (9, 14)
2026-05-20 06:56:15,942 - INFO - DL blending: base alpha=0.70 (LSEQM weight), 1-alpha=0.30 (DL weight)
2026-05-20 06:56:15,943 - INFO - Confidence mask active: spatial alpha modulation enabled. Confidence range: [0.000, 0.411]
2026-05-20 06:56:36,609 - INFO - DL blending complete: 275 daily slices processed, 4,380 extreme pixels blended (alpha=0.70)
2026-05-20 06:56:36,716 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (275, 9, 14)
2026-05-20 06:56:36,765 - INFO - Saved Hybrid Deep Learning-Physical (Linear Scaling and Empirical Quantile Mapping) Approach corrected precipitation for month 10, dekad 21 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_lseqmdl_corrected_imergl_month10_dekad21.nc4
2026-05-20 06:56:36,766 - INFO - Pipeline [10 d3]: Complete.
✓ month 10 dekad 3 — saved: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_imergl_lseqmdl_corrected_precip_month10_dekad21.nc4
============================================================
▸ month 11 dekad 1
============================================================
2026-05-20 06:56:36,768 - INFO - Pipeline [11 d1]: Running LSEQM...
2026-05-20 06:56:36,772 - INFO - Aligning IMERG and CPC datasets...
2026-05-20 06:56:36,778 - INFO - After alignment: IMERG has 9131 time steps, CPC has 9131 time steps
2026-05-20 06:56:36,779 - INFO - Creating time-based masks...
2026-05-20 06:56:36,789 - INFO - Applying time masks...
2026-05-20 06:56:36,800 - INFO - IMERG dekad data shape: (250, 9, 14)
2026-05-20 06:56:36,801 - INFO - CPC dekad data shape: (250, 9, 14)
2026-05-20 06:56:36,804 - INFO - Using native-resolution CPC parameter fitting (BCSD principle)...
2026-05-20 06:56:36,835 - INFO - CPC native dekad data: (250, 4, 6) (lat -9.25–-7.75, lon 113.75–116.25)
2026-05-20 06:56:38,864 - INFO - Native CPC fitting: row 4/4 (100%) | 24 fitted, 0 skipped | elapsed 2s, ETA 0s
2026-05-20 06:56:38,865 - INFO - Fitted CPC params on native grid: 24/24 cells
2026-05-20 06:56:38,909 - INFO - Interpolated CPC params to IMERG grid: 126/126 valid pixels
2026-05-20 06:56:38,909 - INFO - Performing Linear Scaling (LS)...
2026-05-20 06:56:38,919 - INFO - LS using bilinearly interpolated CPC mean (smooth).
2026-05-20 06:56:38,923 - INFO - Saving LS corrected precipitation...
2026-05-20 06:56:38,925 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:56:38,979 - INFO - Saved Linear Scaling corrected precipitation for month 11, dekad 01 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_ls/bali_cli_ls_corrected_imergl_month11_dekad01.nc4
2026-05-20 06:56:38,981 - INFO - Applying Empirical Quantile Mapping (EQM) on 9x14 grid...
2026-05-20 06:56:39,067 - INFO - EQM progress: row 9/9 (100%) | 80 land pixels done | elapsed 0s, ETA 0s
2026-05-20 06:56:39,072 - INFO - EQM complete: 80/126 grid points corrected (46 masked/ocean pixels skipped)
2026-05-20 06:56:39,073 - INFO - Saving LSEQM corrected precipitation...
2026-05-20 06:56:39,076 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:56:39,134 - INFO - Saved Linear Scaling and Empirical Quantile Mapping corrected precipitation for month 11, dekad 01 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqm/bali_cli_lseqm_corrected_imergl_month11_dekad01.nc4
2026-05-20 06:56:39,135 - INFO - Pipeline [11 d1]: Training / loading DL model...
2026-05-20 06:56:39,137 - INFO - Checking if the model file exists at: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month11_dekad01.keras
2026-05-20 06:56:39,207 - INFO - Model: "sequential_30"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ conv2d_60 (Conv2D) │ (None, 9, 14, 32) │ 320 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_60 (MaxPooling2D) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_90 (Dropout) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_61 (Conv2D) │ (None, 4, 7, 64) │ 18,496 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_61 (MaxPooling2D) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_91 (Dropout) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ flatten_30 (Flatten) │ (None, 384) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_60 (Dense) │ (None, 128) │ 49,280 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_92 (Dropout) │ (None, 128) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_61 (Dense) │ (None, 126) │ 16,254 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ reshape_30 (Reshape) │ (None, 9, 14) │ 0 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 84,350 (329.49 KB)
Trainable params: 84,350 (329.49 KB)
Non-trainable params: 0 (0.00 B)
Epoch 1/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 2s 93ms/step - loss: 0.1038 - mae: 0.1835 - val_loss: 0.1444 - val_mae: 0.2285
Epoch 2/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0913 - mae: 0.1745 - val_loss: 0.1218 - val_mae: 0.2182
Epoch 3/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0806 - mae: 0.1794 - val_loss: 0.0939 - val_mae: 0.2024
Epoch 4/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0709 - mae: 0.1803 - val_loss: 0.0825 - val_mae: 0.1926
Epoch 5/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 50ms/step - loss: 0.0649 - mae: 0.1765 - val_loss: 0.0767 - val_mae: 0.1873
Epoch 6/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 45ms/step - loss: 0.0624 - mae: 0.1747 - val_loss: 0.0760 - val_mae: 0.1842
Epoch 7/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0601 - mae: 0.1668 - val_loss: 0.0785 - val_mae: 0.1834
Epoch 8/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 50ms/step - loss: 0.0580 - mae: 0.1645 - val_loss: 0.0709 - val_mae: 0.1794
Epoch 9/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 45ms/step - loss: 0.0554 - mae: 0.1654 - val_loss: 0.0695 - val_mae: 0.1776
Epoch 10/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step - loss: 0.0543 - mae: 0.1621 - val_loss: 0.0725 - val_mae: 0.1775
Epoch 11/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0528 - mae: 0.1572 - val_loss: 0.0737 - val_mae: 0.1778
Epoch 12/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0518 - mae: 0.1540 - val_loss: 0.0750 - val_mae: 0.1778
Epoch 13/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0523 - mae: 0.1543 - val_loss: 0.0729 - val_mae: 0.1758
Epoch 14/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 45ms/step - loss: 0.0505 - mae: 0.1545 - val_loss: 0.0678 - val_mae: 0.1731
Epoch 15/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step - loss: 0.0508 - mae: 0.1564 - val_loss: 0.0707 - val_mae: 0.1737
Epoch 16/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0494 - mae: 0.1499 - val_loss: 0.0761 - val_mae: 0.1764
Epoch 17/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0505 - mae: 0.1477 - val_loss: 0.0765 - val_mae: 0.1761
Epoch 18/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 46ms/step - loss: 0.0493 - mae: 0.1459 - val_loss: 0.0685 - val_mae: 0.1713
Epoch 19/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 60ms/step - loss: 0.0500 - mae: 0.1528 - val_loss: 0.0648 - val_mae: 0.1693
Epoch 20/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 56ms/step - loss: 0.0485 - mae: 0.1521 - val_loss: 0.0683 - val_mae: 0.1710
Epoch 21/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 49ms/step - loss: 0.0480 - mae: 0.1469 - val_loss: 0.0736 - val_mae: 0.1739
Epoch 22/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 64ms/step - loss: 0.0471 - mae: 0.1421 - val_loss: 0.0701 - val_mae: 0.1716
Epoch 23/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 81ms/step - loss: 0.0472 - mae: 0.1474 - val_loss: 0.0647 - val_mae: 0.1686
Epoch 24/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 50ms/step - loss: 0.0477 - mae: 0.1517 - val_loss: 0.0677 - val_mae: 0.1694
Epoch 25/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 45ms/step - loss: 0.0454 - mae: 0.1418 - val_loss: 0.0770 - val_mae: 0.1754
Epoch 26/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 57ms/step - loss: 0.0466 - mae: 0.1395 - val_loss: 0.0691 - val_mae: 0.1699
Epoch 27/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 75ms/step - loss: 0.0442 - mae: 0.1441 - val_loss: 0.0625 - val_mae: 0.1659
Epoch 28/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0455 - mae: 0.1475 - val_loss: 0.0657 - val_mae: 0.1650
Epoch 29/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0451 - mae: 0.1393 - val_loss: 0.0729 - val_mae: 0.1685
Epoch 30/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0463 - mae: 0.1341 - val_loss: 0.0738 - val_mae: 0.1697
Epoch 31/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0438 - mae: 0.1346 - val_loss: 0.0622 - val_mae: 0.1648
Epoch 32/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0448 - mae: 0.1445 - val_loss: 0.0628 - val_mae: 0.1638
Epoch 33/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step - loss: 0.0396 - mae: 0.1315 - val_loss: 0.0680 - val_mae: 0.1659
Epoch 34/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 30ms/step - loss: 0.0411 - mae: 0.1324 - val_loss: 0.0652 - val_mae: 0.1652
Epoch 35/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0409 - mae: 0.1370 - val_loss: 0.0615 - val_mae: 0.1644
Epoch 36/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0409 - mae: 0.1380 - val_loss: 0.0656 - val_mae: 0.1656
Epoch 37/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0408 - mae: 0.1358 - val_loss: 0.0655 - val_mae: 0.1651
Epoch 38/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0392 - mae: 0.1337 - val_loss: 0.0661 - val_mae: 0.1650
Epoch 39/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 32ms/step - loss: 0.0401 - mae: 0.1293 - val_loss: 0.0687 - val_mae: 0.1659
Epoch 40/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 41ms/step - loss: 0.0381 - mae: 0.1279 - val_loss: 0.0610 - val_mae: 0.1639
Epoch 41/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 25ms/step - loss: 0.0381 - mae: 0.1331 - val_loss: 0.0619 - val_mae: 0.1635
Epoch 42/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 30ms/step - loss: 0.0378 - mae: 0.1288 - val_loss: 0.0668 - val_mae: 0.1644
Epoch 43/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0377 - mae: 0.1230 - val_loss: 0.0690 - val_mae: 0.1651
Epoch 44/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0371 - mae: 0.1196 - val_loss: 0.0653 - val_mae: 0.1632
Epoch 45/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0354 - mae: 0.1225 - val_loss: 0.0637 - val_mae: 0.1631
2026-05-20 06:56:48,060 - INFO - Final training history: {'loss': [0.10375805199146271, 0.09133224189281464, 0.0806044414639473, 0.07093512266874313, 0.064891017973423, 0.0623551569879055, 0.06006322056055069, 0.05797964707016945, 0.055398128926754, 0.0543331652879715, 0.05284234508872032, 0.051847003400325775, 0.05227921903133392, 0.050546903163194656, 0.05084121227264404, 0.049382880330085754, 0.05051715672016144, 0.04931201413273811, 0.049970224499702454, 0.048482008278369904, 0.04796044901013374, 0.047087229788303375, 0.047217439860105515, 0.04766864702105522, 0.045374952256679535, 0.04662345349788666, 0.0442010834813118, 0.04547761753201485, 0.04507628083229065, 0.04625100642442703, 0.04380277171730995, 0.04476509243249893, 0.03955195099115372, 0.041084274649620056, 0.04091621935367584, 0.040938712656497955, 0.04080282151699066, 0.03918987140059471, 0.04006281495094299, 0.03809458389878273, 0.03805375099182129, 0.03775780275464058, 0.03773096576333046, 0.03705164045095444, 0.035433173179626465], 'mae': [0.18352869153022766, 0.1745448261499405, 0.17942211031913757, 0.18033504486083984, 0.17653732001781464, 0.17467431724071503, 0.16684606671333313, 0.16448663175106049, 0.16538859903812408, 0.16209222376346588, 0.15718241035938263, 0.15395423769950867, 0.15425431728363037, 0.15449130535125732, 0.15641790628433228, 0.14993873238563538, 0.14767463505268097, 0.14590390026569366, 0.15278001129627228, 0.15214799344539642, 0.14689600467681885, 0.1421457976102829, 0.14739370346069336, 0.15166634321212769, 0.1417812705039978, 0.13949033617973328, 0.14409375190734863, 0.14746670424938202, 0.13931205868721008, 0.13413597643375397, 0.13455060124397278, 0.14453181624412537, 0.1314675658941269, 0.13238579034805298, 0.1369812786579132, 0.13803882896900177, 0.1358298361301422, 0.13367362320423126, 0.12925446033477783, 0.12793436646461487, 0.1331193894147873, 0.12876325845718384, 0.12298406660556793, 0.11956777423620224, 0.12252528220415115], 'val_loss': [0.14437685906887054, 0.12179510295391083, 0.09386292099952698, 0.08248574286699295, 0.07665248960256577, 0.07598163187503815, 0.07846371084451675, 0.07089116424322128, 0.06952967494726181, 0.07252774387598038, 0.07374541461467743, 0.07498516142368317, 0.07285358011722565, 0.06783793866634369, 0.07073789089918137, 0.07607278972864151, 0.07646681368350983, 0.06846948713064194, 0.06477293372154236, 0.06833180040121078, 0.07364527881145477, 0.07007253915071487, 0.06466685980558395, 0.06766942888498306, 0.07698929309844971, 0.06910867244005203, 0.062487971037626266, 0.06570709496736526, 0.07293383777141571, 0.0737907811999321, 0.06224904954433441, 0.06283682584762573, 0.06798897683620453, 0.06517109274864197, 0.061466529965400696, 0.0655856654047966, 0.06547395139932632, 0.06608836352825165, 0.06873834878206253, 0.060959283262491226, 0.06192952021956444, 0.06682810187339783, 0.06900516152381897, 0.06532829999923706, 0.06373186409473419], 'val_mae': [0.22845050692558289, 0.21820318698883057, 0.20239877700805664, 0.19264638423919678, 0.18726368248462677, 0.18418999016284943, 0.18344518542289734, 0.1794341653585434, 0.1776096671819687, 0.17753636837005615, 0.17778082191944122, 0.17780208587646484, 0.17580372095108032, 0.17312105000019073, 0.17372512817382812, 0.17638948559761047, 0.17607517540454865, 0.17125341296195984, 0.16929851472377777, 0.17098623514175415, 0.1739082932472229, 0.1716020703315735, 0.16855356097221375, 0.16937226057052612, 0.17543640732765198, 0.1698581874370575, 0.16592109203338623, 0.16500160098075867, 0.16852474212646484, 0.1696920543909073, 0.16477569937705994, 0.1638367474079132, 0.1659100353717804, 0.16521857678890228, 0.1643698811531067, 0.1656268686056137, 0.165059894323349, 0.16495540738105774, 0.16591037809848785, 0.1638837456703186, 0.16349487006664276, 0.1644199937582016, 0.16510416567325592, 0.1631712019443512, 0.16309747099876404]}
2026-05-20 06:56:48,196 - INFO - Model training complete. Best model saved as /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month11_dekad01.keras
2026-05-20 06:56:48,198 - INFO - Pipeline [11 d1]: Loading confidence mask...
2026-05-20 06:56:48,200 - INFO - Loading existing confidence mask: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/station_density/confidence_mask_station_density.nc4
2026-05-20 06:56:48,200 - INFO - Pipeline [11 d1]: Applying DL refinement...
2026-05-20 06:56:48,215 - INFO - Pixel-wise threshold map computed at 80th percentile. threshold_2d shape: (9, 14)
2026-05-20 06:56:48,216 - INFO - DL blending: base alpha=0.70 (LSEQM weight), 1-alpha=0.30 (DL weight)
2026-05-20 06:56:48,217 - INFO - Confidence mask active: spatial alpha modulation enabled. Confidence range: [0.000, 0.411]
2026-05-20 06:57:04,645 - INFO - DL blending complete: 250 daily slices processed, 3,998 extreme pixels blended (alpha=0.70)
2026-05-20 06:57:04,736 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:57:04,784 - INFO - Saved Hybrid Deep Learning-Physical (Linear Scaling and Empirical Quantile Mapping) Approach corrected precipitation for month 11, dekad 01 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_lseqmdl_corrected_imergl_month11_dekad01.nc4
2026-05-20 06:57:04,785 - INFO - Pipeline [11 d1]: Complete.
✓ month 11 dekad 1 — saved: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_imergl_lseqmdl_corrected_precip_month11_dekad01.nc4
============================================================
▸ month 11 dekad 2
============================================================
2026-05-20 06:57:04,787 - INFO - Pipeline [11 d2]: Running LSEQM...
2026-05-20 06:57:04,792 - INFO - Aligning IMERG and CPC datasets...
2026-05-20 06:57:04,803 - INFO - After alignment: IMERG has 9131 time steps, CPC has 9131 time steps
2026-05-20 06:57:04,804 - INFO - Creating time-based masks...
2026-05-20 06:57:04,815 - INFO - Applying time masks...
2026-05-20 06:57:04,827 - INFO - IMERG dekad data shape: (250, 9, 14)
2026-05-20 06:57:04,828 - INFO - CPC dekad data shape: (250, 9, 14)
2026-05-20 06:57:04,831 - INFO - Using native-resolution CPC parameter fitting (BCSD principle)...
2026-05-20 06:57:04,860 - INFO - CPC native dekad data: (250, 4, 6) (lat -9.25–-7.75, lon 113.75–116.25)
2026-05-20 06:57:07,153 - INFO - Native CPC fitting: row 4/4 (100%) | 24 fitted, 0 skipped | elapsed 2s, ETA 0s
2026-05-20 06:57:07,154 - INFO - Fitted CPC params on native grid: 24/24 cells
2026-05-20 06:57:07,201 - INFO - Interpolated CPC params to IMERG grid: 126/126 valid pixels
2026-05-20 06:57:07,202 - INFO - Performing Linear Scaling (LS)...
2026-05-20 06:57:07,213 - INFO - LS using bilinearly interpolated CPC mean (smooth).
2026-05-20 06:57:07,216 - INFO - Saving LS corrected precipitation...
2026-05-20 06:57:07,219 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:57:07,303 - INFO - Saved Linear Scaling corrected precipitation for month 11, dekad 11 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_ls/bali_cli_ls_corrected_imergl_month11_dekad11.nc4
2026-05-20 06:57:07,305 - INFO - Applying Empirical Quantile Mapping (EQM) on 9x14 grid...
2026-05-20 06:57:07,389 - INFO - EQM progress: row 9/9 (100%) | 80 land pixels done | elapsed 0s, ETA 0s
2026-05-20 06:57:07,391 - INFO - EQM complete: 80/126 grid points corrected (46 masked/ocean pixels skipped)
2026-05-20 06:57:07,392 - INFO - Saving LSEQM corrected precipitation...
2026-05-20 06:57:07,397 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:57:07,446 - INFO - Saved Linear Scaling and Empirical Quantile Mapping corrected precipitation for month 11, dekad 11 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqm/bali_cli_lseqm_corrected_imergl_month11_dekad11.nc4
2026-05-20 06:57:07,448 - INFO - Pipeline [11 d2]: Training / loading DL model...
2026-05-20 06:57:07,449 - INFO - Checking if the model file exists at: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month11_dekad11.keras
2026-05-20 06:57:07,519 - INFO - Model: "sequential_31"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ conv2d_62 (Conv2D) │ (None, 9, 14, 32) │ 320 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_62 (MaxPooling2D) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_93 (Dropout) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_63 (Conv2D) │ (None, 4, 7, 64) │ 18,496 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_63 (MaxPooling2D) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_94 (Dropout) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ flatten_31 (Flatten) │ (None, 384) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_62 (Dense) │ (None, 128) │ 49,280 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_95 (Dropout) │ (None, 128) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_63 (Dense) │ (None, 126) │ 16,254 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ reshape_31 (Reshape) │ (None, 9, 14) │ 0 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 84,350 (329.49 KB)
Trainable params: 84,350 (329.49 KB)
Non-trainable params: 0 (0.00 B)
Epoch 1/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 2s 142ms/step - loss: 0.1166 - mae: 0.2078 - val_loss: 0.1309 - val_mae: 0.2363
Epoch 2/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 63ms/step - loss: 0.1011 - mae: 0.1961 - val_loss: 0.1047 - val_mae: 0.2159
Epoch 3/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 58ms/step - loss: 0.0887 - mae: 0.1986 - val_loss: 0.0807 - val_mae: 0.1942
Epoch 4/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 62ms/step - loss: 0.0832 - mae: 0.2000 - val_loss: 0.0718 - val_mae: 0.1788
Epoch 5/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 81ms/step - loss: 0.0754 - mae: 0.1891 - val_loss: 0.0699 - val_mae: 0.1738
Epoch 6/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 64ms/step - loss: 0.0699 - mae: 0.1826 - val_loss: 0.0624 - val_mae: 0.1676
Epoch 7/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 64ms/step - loss: 0.0661 - mae: 0.1835 - val_loss: 0.0565 - val_mae: 0.1611
Epoch 8/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0633 - mae: 0.1796 - val_loss: 0.0605 - val_mae: 0.1627
Epoch 9/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0607 - mae: 0.1725 - val_loss: 0.0591 - val_mae: 0.1616
Epoch 10/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 46ms/step - loss: 0.0578 - mae: 0.1713 - val_loss: 0.0517 - val_mae: 0.1544
Epoch 11/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0578 - mae: 0.1756 - val_loss: 0.0513 - val_mae: 0.1519
Epoch 12/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0566 - mae: 0.1709 - val_loss: 0.0578 - val_mae: 0.1574
Epoch 13/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0555 - mae: 0.1664 - val_loss: 0.0560 - val_mae: 0.1556
Epoch 14/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0556 - mae: 0.1686 - val_loss: 0.0546 - val_mae: 0.1543
Epoch 15/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0559 - mae: 0.1663 - val_loss: 0.0590 - val_mae: 0.1583
Epoch 16/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step - loss: 0.0546 - mae: 0.1634 - val_loss: 0.0519 - val_mae: 0.1516
2026-05-20 06:57:12,260 - INFO - Final training history: {'loss': [0.11658474057912827, 0.10107901692390442, 0.08874712139368057, 0.0832381322979927, 0.0754210352897644, 0.06992066651582718, 0.06614238023757935, 0.06327182054519653, 0.060701027512550354, 0.05778523534536362, 0.05781859531998634, 0.056587133556604385, 0.05545840412378311, 0.05563177913427353, 0.05589287355542183, 0.054643414914608], 'mae': [0.20777815580368042, 0.19608014822006226, 0.19855466485023499, 0.20003589987754822, 0.18910308182239532, 0.18260766565799713, 0.18352748453617096, 0.17963238060474396, 0.17249803245067596, 0.1713070273399353, 0.17558808624744415, 0.17092110216617584, 0.16636310517787933, 0.16863402724266052, 0.16628094017505646, 0.1633545160293579], 'val_loss': [0.13094408810138702, 0.10467842221260071, 0.08074001967906952, 0.07175838202238083, 0.06987687200307846, 0.06240537017583847, 0.05652602016925812, 0.06054824963212013, 0.05910893902182579, 0.051652297377586365, 0.05127174034714699, 0.057838987559080124, 0.05599038302898407, 0.0546068400144577, 0.05897819995880127, 0.05187022686004639], 'val_mae': [0.2362709492444992, 0.21590785682201385, 0.19416148960590363, 0.17881831526756287, 0.17384013533592224, 0.16757924854755402, 0.16105644404888153, 0.16268110275268555, 0.16157424449920654, 0.15437519550323486, 0.15193426609039307, 0.15744593739509583, 0.15563227236270905, 0.1542988270521164, 0.15831363201141357, 0.15159215033054352]}
2026-05-20 06:57:12,416 - INFO - Model training complete. Best model saved as /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month11_dekad11.keras
2026-05-20 06:57:12,417 - INFO - Pipeline [11 d2]: Loading confidence mask...
2026-05-20 06:57:12,422 - INFO - Loading existing confidence mask: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/station_density/confidence_mask_station_density.nc4
2026-05-20 06:57:12,422 - INFO - Pipeline [11 d2]: Applying DL refinement...
2026-05-20 06:57:12,441 - INFO - Pixel-wise threshold map computed at 80th percentile. threshold_2d shape: (9, 14)
2026-05-20 06:57:12,441 - INFO - DL blending: base alpha=0.70 (LSEQM weight), 1-alpha=0.30 (DL weight)
2026-05-20 06:57:12,442 - INFO - Confidence mask active: spatial alpha modulation enabled. Confidence range: [0.000, 0.411]
2026-05-20 06:57:29,024 - INFO - DL blending complete: 250 daily slices processed, 4,000 extreme pixels blended (alpha=0.70)
2026-05-20 06:57:29,106 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:57:29,148 - INFO - Saved Hybrid Deep Learning-Physical (Linear Scaling and Empirical Quantile Mapping) Approach corrected precipitation for month 11, dekad 11 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_lseqmdl_corrected_imergl_month11_dekad11.nc4
2026-05-20 06:57:29,148 - INFO - Pipeline [11 d2]: Complete.
✓ month 11 dekad 2 — saved: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_imergl_lseqmdl_corrected_precip_month11_dekad11.nc4
============================================================
▸ month 11 dekad 3
============================================================
2026-05-20 06:57:29,153 - INFO - Pipeline [11 d3]: Running LSEQM...
2026-05-20 06:57:29,157 - INFO - Aligning IMERG and CPC datasets...
2026-05-20 06:57:29,164 - INFO - After alignment: IMERG has 9131 time steps, CPC has 9131 time steps
2026-05-20 06:57:29,165 - INFO - Creating time-based masks...
2026-05-20 06:57:29,178 - INFO - Applying time masks...
2026-05-20 06:57:29,188 - INFO - IMERG dekad data shape: (250, 9, 14)
2026-05-20 06:57:29,190 - INFO - CPC dekad data shape: (250, 9, 14)
2026-05-20 06:57:29,194 - INFO - Using native-resolution CPC parameter fitting (BCSD principle)...
2026-05-20 06:57:29,225 - INFO - CPC native dekad data: (250, 4, 6) (lat -9.25–-7.75, lon 113.75–116.25)
2026-05-20 06:57:31,431 - INFO - Native CPC fitting: row 4/4 (100%) | 24 fitted, 0 skipped | elapsed 2s, ETA 0s
2026-05-20 06:57:31,432 - INFO - Fitted CPC params on native grid: 24/24 cells
2026-05-20 06:57:31,475 - INFO - Interpolated CPC params to IMERG grid: 126/126 valid pixels
2026-05-20 06:57:31,476 - INFO - Performing Linear Scaling (LS)...
2026-05-20 06:57:31,486 - INFO - LS using bilinearly interpolated CPC mean (smooth).
2026-05-20 06:57:31,490 - INFO - Saving LS corrected precipitation...
2026-05-20 06:57:31,493 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:57:31,536 - INFO - Saved Linear Scaling corrected precipitation for month 11, dekad 21 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_ls/bali_cli_ls_corrected_imergl_month11_dekad21.nc4
2026-05-20 06:57:31,537 - INFO - Applying Empirical Quantile Mapping (EQM) on 9x14 grid...
2026-05-20 06:57:31,626 - INFO - EQM progress: row 9/9 (100%) | 80 land pixels done | elapsed 0s, ETA 0s
2026-05-20 06:57:31,630 - INFO - EQM complete: 80/126 grid points corrected (46 masked/ocean pixels skipped)
2026-05-20 06:57:31,632 - INFO - Saving LSEQM corrected precipitation...
2026-05-20 06:57:31,633 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:57:31,685 - INFO - Saved Linear Scaling and Empirical Quantile Mapping corrected precipitation for month 11, dekad 21 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqm/bali_cli_lseqm_corrected_imergl_month11_dekad21.nc4
2026-05-20 06:57:31,686 - INFO - Pipeline [11 d3]: Training / loading DL model...
2026-05-20 06:57:31,687 - INFO - Checking if the model file exists at: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month11_dekad21.keras
2026-05-20 06:57:31,756 - INFO - Model: "sequential_32"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ conv2d_64 (Conv2D) │ (None, 9, 14, 32) │ 320 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_64 (MaxPooling2D) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_96 (Dropout) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_65 (Conv2D) │ (None, 4, 7, 64) │ 18,496 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_65 (MaxPooling2D) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_97 (Dropout) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ flatten_32 (Flatten) │ (None, 384) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_64 (Dense) │ (None, 128) │ 49,280 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_98 (Dropout) │ (None, 128) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_65 (Dense) │ (None, 126) │ 16,254 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ reshape_32 (Reshape) │ (None, 9, 14) │ 0 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 84,350 (329.49 KB)
Trainable params: 84,350 (329.49 KB)
Non-trainable params: 0 (0.00 B)
Epoch 1/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 2s 107ms/step - loss: 0.1464 - mae: 0.2467 - val_loss: 0.1556 - val_mae: 0.2543
Epoch 2/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 82ms/step - loss: 0.1239 - mae: 0.2302 - val_loss: 0.1135 - val_mae: 0.2276
Epoch 3/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 69ms/step - loss: 0.0994 - mae: 0.2207 - val_loss: 0.0780 - val_mae: 0.1995
Epoch 4/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 83ms/step - loss: 0.0874 - mae: 0.2161 - val_loss: 0.0710 - val_mae: 0.1845
Epoch 5/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 46ms/step - loss: 0.0749 - mae: 0.1968 - val_loss: 0.0722 - val_mae: 0.1849
Epoch 6/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 59ms/step - loss: 0.0704 - mae: 0.1902 - val_loss: 0.0610 - val_mae: 0.1754
Epoch 7/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 67ms/step - loss: 0.0655 - mae: 0.1894 - val_loss: 0.0565 - val_mae: 0.1697
Epoch 8/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 47ms/step - loss: 0.0607 - mae: 0.1816 - val_loss: 0.0593 - val_mae: 0.1702
Epoch 9/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 62ms/step - loss: 0.0581 - mae: 0.1760 - val_loss: 0.0554 - val_mae: 0.1653
Epoch 10/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 75ms/step - loss: 0.0567 - mae: 0.1761 - val_loss: 0.0539 - val_mae: 0.1630
Epoch 11/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0550 - mae: 0.1719 - val_loss: 0.0595 - val_mae: 0.1677
Epoch 12/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 35ms/step - loss: 0.0554 - mae: 0.1687 - val_loss: 0.0615 - val_mae: 0.1695
Epoch 13/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 40ms/step - loss: 0.0542 - mae: 0.1669 - val_loss: 0.0539 - val_mae: 0.1620
Epoch 14/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0536 - mae: 0.1713 - val_loss: 0.0533 - val_mae: 0.1626
Epoch 15/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0564 - mae: 0.1747 - val_loss: 0.0538 - val_mae: 0.1605
Epoch 16/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0496 - mae: 0.1604 - val_loss: 0.0591 - val_mae: 0.1656
Epoch 17/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0513 - mae: 0.1616 - val_loss: 0.0535 - val_mae: 0.1593
Epoch 18/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0504 - mae: 0.1619 - val_loss: 0.0513 - val_mae: 0.1570
Epoch 19/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0499 - mae: 0.1623 - val_loss: 0.0521 - val_mae: 0.1570
Epoch 20/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0501 - mae: 0.1595 - val_loss: 0.0527 - val_mae: 0.1574
Epoch 21/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 47ms/step - loss: 0.0477 - mae: 0.1559 - val_loss: 0.0524 - val_mae: 0.1567
Epoch 22/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step - loss: 0.0466 - mae: 0.1549 - val_loss: 0.0517 - val_mae: 0.1557
Epoch 23/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 51ms/step - loss: 0.0479 - mae: 0.1569 - val_loss: 0.0511 - val_mae: 0.1548
Epoch 24/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 49ms/step - loss: 0.0457 - mae: 0.1540 - val_loss: 0.0511 - val_mae: 0.1539
Epoch 25/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 33ms/step - loss: 0.0477 - mae: 0.1544 - val_loss: 0.0529 - val_mae: 0.1549
Epoch 26/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0466 - mae: 0.1512 - val_loss: 0.0519 - val_mae: 0.1542
Epoch 27/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 31ms/step - loss: 0.0456 - mae: 0.1488 - val_loss: 0.0533 - val_mae: 0.1559
Epoch 28/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 49ms/step - loss: 0.0467 - mae: 0.1510 - val_loss: 0.0509 - val_mae: 0.1541
Epoch 29/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 31ms/step - loss: 0.0460 - mae: 0.1519 - val_loss: 0.0516 - val_mae: 0.1549
Epoch 30/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 31ms/step - loss: 0.0449 - mae: 0.1491 - val_loss: 0.0521 - val_mae: 0.1554
Epoch 31/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 36ms/step - loss: 0.0451 - mae: 0.1483 - val_loss: 0.0518 - val_mae: 0.1546
Epoch 32/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 46ms/step - loss: 0.0436 - mae: 0.1461 - val_loss: 0.0503 - val_mae: 0.1535
Epoch 33/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 50ms/step - loss: 0.0460 - mae: 0.1517 - val_loss: 0.0498 - val_mae: 0.1515
Epoch 34/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 52ms/step - loss: 0.0434 - mae: 0.1457 - val_loss: 0.0492 - val_mae: 0.1509
Epoch 35/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 30ms/step - loss: 0.0433 - mae: 0.1460 - val_loss: 0.0492 - val_mae: 0.1508
Epoch 36/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 30ms/step - loss: 0.0431 - mae: 0.1440 - val_loss: 0.0504 - val_mae: 0.1522
Epoch 37/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 32ms/step - loss: 0.0427 - mae: 0.1440 - val_loss: 0.0495 - val_mae: 0.1525
Epoch 38/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0419 - mae: 0.1447 - val_loss: 0.0497 - val_mae: 0.1525
Epoch 39/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 31ms/step - loss: 0.0439 - mae: 0.1474 - val_loss: 0.0497 - val_mae: 0.1518
2026-05-20 06:57:40,692 - INFO - Final training history: {'loss': [0.14637897908687592, 0.12386930733919144, 0.09941360354423523, 0.08741290122270584, 0.07486118376255035, 0.0703708827495575, 0.0654510036110878, 0.06069140508770943, 0.05812019854784012, 0.05673680827021599, 0.05501486733555794, 0.055392373353242874, 0.05417224392294884, 0.053627997636795044, 0.05635685846209526, 0.04959850385785103, 0.051303524523973465, 0.0503988042473793, 0.04990990087389946, 0.05011986568570137, 0.04769665375351906, 0.046562403440475464, 0.04789974167943001, 0.04571681469678879, 0.047692667692899704, 0.04661929979920387, 0.045573025941848755, 0.046650420874357224, 0.046031370759010315, 0.044896773993968964, 0.04514588415622711, 0.04358348250389099, 0.04598651081323624, 0.04338361695408821, 0.04326537624001503, 0.04312434047460556, 0.04269828647375107, 0.04186122864484787, 0.04386705905199051], 'mae': [0.24668116867542267, 0.23020009696483612, 0.22074958682060242, 0.21606674790382385, 0.19683416187763214, 0.19017358124256134, 0.18940375745296478, 0.18161751329898834, 0.17598646879196167, 0.1760786771774292, 0.1719338297843933, 0.16869987547397614, 0.16685760021209717, 0.1713477075099945, 0.17471958696842194, 0.16043168306350708, 0.16162912547588348, 0.16190561652183533, 0.1623096466064453, 0.1594696193933487, 0.15592840313911438, 0.15487150847911835, 0.1569041758775711, 0.15401975810527802, 0.1543969213962555, 0.15117521584033966, 0.14879566431045532, 0.1509714275598526, 0.15188339352607727, 0.14906121790409088, 0.148295596241951, 0.14612388610839844, 0.15166252851486206, 0.14570067822933197, 0.1459888219833374, 0.14403288066387177, 0.1439567506313324, 0.14473631978034973, 0.14740091562271118], 'val_loss': [0.15559424459934235, 0.1134670227766037, 0.07803048193454742, 0.07095550745725632, 0.07221394032239914, 0.06103922054171562, 0.05652314051985741, 0.05925801768898964, 0.05538132041692734, 0.05392031371593475, 0.05947279930114746, 0.06153831630945206, 0.05389127880334854, 0.0532834567129612, 0.05375676974654198, 0.059142909944057465, 0.053545884788036346, 0.051275648176670074, 0.052076950669288635, 0.05266270786523819, 0.052396465092897415, 0.05171719565987587, 0.05109267309308052, 0.05108712986111641, 0.05289442837238312, 0.05191418528556824, 0.05331065505743027, 0.05094055086374283, 0.0515533909201622, 0.05205850303173065, 0.0518382228910923, 0.05025766044855118, 0.04981400445103645, 0.04918632656335831, 0.04924510046839714, 0.05039825290441513, 0.04947013780474663, 0.04971887543797493, 0.049732305109500885], 'val_mae': [0.2543329894542694, 0.2276294082403183, 0.1995287537574768, 0.1844521015882492, 0.18487165868282318, 0.1753837615251541, 0.16969628632068634, 0.17019334435462952, 0.1652645468711853, 0.16295704245567322, 0.16766446828842163, 0.16950851678848267, 0.16202832758426666, 0.16258643567562103, 0.16048818826675415, 0.16559205949306488, 0.15934762358665466, 0.1569758653640747, 0.15698209404945374, 0.1573759913444519, 0.15668538212776184, 0.1557442843914032, 0.15477444231510162, 0.1539236456155777, 0.15485833585262299, 0.15422813594341278, 0.1558568924665451, 0.15411116182804108, 0.1549397110939026, 0.1553599238395691, 0.15463298559188843, 0.1535324603319168, 0.151457741856575, 0.15087220072746277, 0.15084044635295868, 0.15216393768787384, 0.1525300294160843, 0.15245354175567627, 0.15183520317077637]}
2026-05-20 06:57:40,856 - INFO - Model training complete. Best model saved as /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month11_dekad21.keras
2026-05-20 06:57:40,859 - INFO - Pipeline [11 d3]: Loading confidence mask...
2026-05-20 06:57:40,861 - INFO - Loading existing confidence mask: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/station_density/confidence_mask_station_density.nc4
2026-05-20 06:57:40,862 - INFO - Pipeline [11 d3]: Applying DL refinement...
2026-05-20 06:57:40,881 - INFO - Pixel-wise threshold map computed at 80th percentile. threshold_2d shape: (9, 14)
2026-05-20 06:57:40,882 - INFO - DL blending: base alpha=0.70 (LSEQM weight), 1-alpha=0.30 (DL weight)
2026-05-20 06:57:40,885 - INFO - Confidence mask active: spatial alpha modulation enabled. Confidence range: [0.000, 0.411]
2026-05-20 06:57:58,408 - INFO - DL blending complete: 250 daily slices processed, 4,000 extreme pixels blended (alpha=0.70)
2026-05-20 06:57:58,510 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:57:58,554 - INFO - Saved Hybrid Deep Learning-Physical (Linear Scaling and Empirical Quantile Mapping) Approach corrected precipitation for month 11, dekad 21 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_lseqmdl_corrected_imergl_month11_dekad21.nc4
2026-05-20 06:57:58,555 - INFO - Pipeline [11 d3]: Complete.
✓ month 11 dekad 3 — saved: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_imergl_lseqmdl_corrected_precip_month11_dekad21.nc4
============================================================
▸ month 12 dekad 1
============================================================
2026-05-20 06:57:58,556 - INFO - Pipeline [12 d1]: Running LSEQM...
2026-05-20 06:57:58,560 - INFO - Aligning IMERG and CPC datasets...
2026-05-20 06:57:58,577 - INFO - After alignment: IMERG has 9131 time steps, CPC has 9131 time steps
2026-05-20 06:57:58,579 - INFO - Creating time-based masks...
2026-05-20 06:57:58,591 - INFO - Applying time masks...
2026-05-20 06:57:58,608 - INFO - IMERG dekad data shape: (250, 9, 14)
2026-05-20 06:57:58,609 - INFO - CPC dekad data shape: (250, 9, 14)
2026-05-20 06:57:58,612 - INFO - Using native-resolution CPC parameter fitting (BCSD principle)...
2026-05-20 06:57:58,656 - INFO - CPC native dekad data: (250, 4, 6) (lat -9.25–-7.75, lon 113.75–116.25)
2026-05-20 06:58:01,755 - INFO - Native CPC fitting: row 4/4 (100%) | 24 fitted, 0 skipped | elapsed 3s, ETA 0s
2026-05-20 06:58:01,756 - INFO - Fitted CPC params on native grid: 24/24 cells
2026-05-20 06:58:01,802 - INFO - Interpolated CPC params to IMERG grid: 126/126 valid pixels
2026-05-20 06:58:01,803 - INFO - Performing Linear Scaling (LS)...
2026-05-20 06:58:01,812 - INFO - LS using bilinearly interpolated CPC mean (smooth).
2026-05-20 06:58:01,817 - INFO - Saving LS corrected precipitation...
2026-05-20 06:58:01,821 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:58:01,889 - INFO - Saved Linear Scaling corrected precipitation for month 12, dekad 01 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_ls/bali_cli_ls_corrected_imergl_month12_dekad01.nc4
2026-05-20 06:58:01,890 - INFO - Applying Empirical Quantile Mapping (EQM) on 9x14 grid...
2026-05-20 06:58:01,978 - INFO - EQM progress: row 9/9 (100%) | 80 land pixels done | elapsed 0s, ETA 0s
2026-05-20 06:58:01,981 - INFO - EQM complete: 80/126 grid points corrected (46 masked/ocean pixels skipped)
2026-05-20 06:58:01,982 - INFO - Saving LSEQM corrected precipitation...
2026-05-20 06:58:01,985 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:58:02,033 - INFO - Saved Linear Scaling and Empirical Quantile Mapping corrected precipitation for month 12, dekad 01 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqm/bali_cli_lseqm_corrected_imergl_month12_dekad01.nc4
2026-05-20 06:58:02,034 - INFO - Pipeline [12 d1]: Training / loading DL model...
2026-05-20 06:58:02,035 - INFO - Checking if the model file exists at: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month12_dekad01.keras
2026-05-20 06:58:02,110 - INFO - Model: "sequential_33"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ conv2d_66 (Conv2D) │ (None, 9, 14, 32) │ 320 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_66 (MaxPooling2D) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_99 (Dropout) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_67 (Conv2D) │ (None, 4, 7, 64) │ 18,496 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_67 (MaxPooling2D) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_100 (Dropout) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ flatten_33 (Flatten) │ (None, 384) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_66 (Dense) │ (None, 128) │ 49,280 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_101 (Dropout) │ (None, 128) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_67 (Dense) │ (None, 126) │ 16,254 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ reshape_33 (Reshape) │ (None, 9, 14) │ 0 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 84,350 (329.49 KB)
Trainable params: 84,350 (329.49 KB)
Non-trainable params: 0 (0.00 B)
Epoch 1/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 1s 97ms/step - loss: 0.1696 - mae: 0.2840 - val_loss: 0.1754 - val_mae: 0.2803
Epoch 2/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.1420 - mae: 0.2639 - val_loss: 0.1348 - val_mae: 0.2510
Epoch 3/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.1185 - mae: 0.2536 - val_loss: 0.1026 - val_mae: 0.2222
Epoch 4/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.1031 - mae: 0.2422 - val_loss: 0.0951 - val_mae: 0.2089
Epoch 5/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0877 - mae: 0.2205 - val_loss: 0.0912 - val_mae: 0.2031
Epoch 6/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 45ms/step - loss: 0.0817 - mae: 0.2134 - val_loss: 0.0838 - val_mae: 0.1958
Epoch 7/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 46ms/step - loss: 0.0738 - mae: 0.2052 - val_loss: 0.0783 - val_mae: 0.1906
Epoch 8/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0695 - mae: 0.1989 - val_loss: 0.0791 - val_mae: 0.1905
Epoch 9/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 40ms/step - loss: 0.0668 - mae: 0.1947 - val_loss: 0.0779 - val_mae: 0.1887
Epoch 10/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 51ms/step - loss: 0.0632 - mae: 0.1891 - val_loss: 0.0736 - val_mae: 0.1839
Epoch 11/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0620 - mae: 0.1887 - val_loss: 0.0719 - val_mae: 0.1819
Epoch 12/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0610 - mae: 0.1850 - val_loss: 0.0789 - val_mae: 0.1870
Epoch 13/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step - loss: 0.0608 - mae: 0.1809 - val_loss: 0.0791 - val_mae: 0.1870
Epoch 14/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0597 - mae: 0.1803 - val_loss: 0.0719 - val_mae: 0.1810
Epoch 15/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0580 - mae: 0.1799 - val_loss: 0.0712 - val_mae: 0.1801
Epoch 16/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0558 - mae: 0.1760 - val_loss: 0.0722 - val_mae: 0.1810
Epoch 17/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0562 - mae: 0.1758 - val_loss: 0.0726 - val_mae: 0.1813
Epoch 18/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0546 - mae: 0.1731 - val_loss: 0.0726 - val_mae: 0.1811
Epoch 19/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0532 - mae: 0.1698 - val_loss: 0.0714 - val_mae: 0.1799
Epoch 20/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 30ms/step - loss: 0.0550 - mae: 0.1732 - val_loss: 0.0714 - val_mae: 0.1795
2026-05-20 06:58:06,468 - INFO - Final training history: {'loss': [0.1696031391620636, 0.1420111209154129, 0.11850155889987946, 0.10308666527271271, 0.0876702144742012, 0.08166635781526566, 0.07384110987186432, 0.06951603293418884, 0.066753089427948, 0.06319283694028854, 0.0619516484439373, 0.06098174676299095, 0.060818299651145935, 0.05974338576197624, 0.05796949565410614, 0.05575023964047432, 0.056192606687545776, 0.05464734882116318, 0.053153958171606064, 0.05504487827420235], 'mae': [0.28397950530052185, 0.2638658583164215, 0.25362616777420044, 0.24216081202030182, 0.22045931220054626, 0.21342268586158752, 0.20518003404140472, 0.19889715313911438, 0.19466575980186462, 0.18912555277347565, 0.18871845304965973, 0.18495534360408783, 0.18086771667003632, 0.18032515048980713, 0.1798768788576126, 0.1760382056236267, 0.17576618492603302, 0.17314960062503815, 0.16978514194488525, 0.1732139140367508], 'val_loss': [0.17542003095149994, 0.13481110334396362, 0.10256704688072205, 0.0951295793056488, 0.09116010367870331, 0.083806112408638, 0.07831178605556488, 0.07906921207904816, 0.07786817103624344, 0.0736066922545433, 0.0718502402305603, 0.07886878401041031, 0.079136423766613, 0.07191335409879684, 0.07115032523870468, 0.07219410687685013, 0.07264978438615799, 0.07263756543397903, 0.07135149836540222, 0.07142360508441925], 'val_mae': [0.280328631401062, 0.25099337100982666, 0.2221730798482895, 0.20889395475387573, 0.20314958691596985, 0.195846825838089, 0.1906382441520691, 0.1904507279396057, 0.1887224316596985, 0.18392254412174225, 0.18186496198177338, 0.18703077733516693, 0.1870124191045761, 0.18095146119594574, 0.18012304604053497, 0.18099932372570038, 0.18131858110427856, 0.18112899363040924, 0.17988114058971405, 0.17951345443725586]}
2026-05-20 06:58:06,618 - INFO - Model training complete. Best model saved as /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month12_dekad01.keras
2026-05-20 06:58:06,621 - INFO - Pipeline [12 d1]: Loading confidence mask...
2026-05-20 06:58:06,624 - INFO - Loading existing confidence mask: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/station_density/confidence_mask_station_density.nc4
2026-05-20 06:58:06,624 - INFO - Pipeline [12 d1]: Applying DL refinement...
2026-05-20 06:58:06,640 - INFO - Pixel-wise threshold map computed at 80th percentile. threshold_2d shape: (9, 14)
2026-05-20 06:58:06,641 - INFO - DL blending: base alpha=0.70 (LSEQM weight), 1-alpha=0.30 (DL weight)
2026-05-20 06:58:06,642 - INFO - Confidence mask active: spatial alpha modulation enabled. Confidence range: [0.000, 0.411]
2026-05-20 06:58:28,594 - INFO - DL blending complete: 250 daily slices processed, 3,999 extreme pixels blended (alpha=0.70)
2026-05-20 06:58:28,687 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:58:28,736 - INFO - Saved Hybrid Deep Learning-Physical (Linear Scaling and Empirical Quantile Mapping) Approach corrected precipitation for month 12, dekad 01 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_lseqmdl_corrected_imergl_month12_dekad01.nc4
2026-05-20 06:58:28,737 - INFO - Pipeline [12 d1]: Complete.
✓ month 12 dekad 1 — saved: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_imergl_lseqmdl_corrected_precip_month12_dekad01.nc4
============================================================
▸ month 12 dekad 2
============================================================
2026-05-20 06:58:28,738 - INFO - Pipeline [12 d2]: Running LSEQM...
2026-05-20 06:58:28,743 - INFO - Aligning IMERG and CPC datasets...
2026-05-20 06:58:28,754 - INFO - After alignment: IMERG has 9131 time steps, CPC has 9131 time steps
2026-05-20 06:58:28,754 - INFO - Creating time-based masks...
2026-05-20 06:58:28,766 - INFO - Applying time masks...
2026-05-20 06:58:28,779 - INFO - IMERG dekad data shape: (250, 9, 14)
2026-05-20 06:58:28,781 - INFO - CPC dekad data shape: (250, 9, 14)
2026-05-20 06:58:28,785 - INFO - Using native-resolution CPC parameter fitting (BCSD principle)...
2026-05-20 06:58:28,816 - INFO - CPC native dekad data: (250, 4, 6) (lat -9.25–-7.75, lon 113.75–116.25)
2026-05-20 06:58:31,015 - INFO - Native CPC fitting: row 4/4 (100%) | 24 fitted, 0 skipped | elapsed 2s, ETA 0s
2026-05-20 06:58:31,016 - INFO - Fitted CPC params on native grid: 24/24 cells
2026-05-20 06:58:31,062 - INFO - Interpolated CPC params to IMERG grid: 126/126 valid pixels
2026-05-20 06:58:31,062 - INFO - Performing Linear Scaling (LS)...
2026-05-20 06:58:31,071 - INFO - LS using bilinearly interpolated CPC mean (smooth).
2026-05-20 06:58:31,075 - INFO - Saving LS corrected precipitation...
2026-05-20 06:58:31,083 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:58:31,138 - INFO - Saved Linear Scaling corrected precipitation for month 12, dekad 11 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_ls/bali_cli_ls_corrected_imergl_month12_dekad11.nc4
2026-05-20 06:58:31,139 - INFO - Applying Empirical Quantile Mapping (EQM) on 9x14 grid...
2026-05-20 06:58:31,232 - INFO - EQM progress: row 9/9 (100%) | 80 land pixels done | elapsed 0s, ETA 0s
2026-05-20 06:58:31,236 - INFO - EQM complete: 80/126 grid points corrected (46 masked/ocean pixels skipped)
2026-05-20 06:58:31,236 - INFO - Saving LSEQM corrected precipitation...
2026-05-20 06:58:31,239 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:58:31,289 - INFO - Saved Linear Scaling and Empirical Quantile Mapping corrected precipitation for month 12, dekad 11 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqm/bali_cli_lseqm_corrected_imergl_month12_dekad11.nc4
2026-05-20 06:58:31,291 - INFO - Pipeline [12 d2]: Training / loading DL model...
2026-05-20 06:58:31,292 - INFO - Checking if the model file exists at: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month12_dekad11.keras
2026-05-20 06:58:31,379 - INFO - Model: "sequential_34"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ conv2d_68 (Conv2D) │ (None, 9, 14, 32) │ 320 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_68 (MaxPooling2D) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_102 (Dropout) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_69 (Conv2D) │ (None, 4, 7, 64) │ 18,496 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_69 (MaxPooling2D) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_103 (Dropout) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ flatten_34 (Flatten) │ (None, 384) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_68 (Dense) │ (None, 128) │ 49,280 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_104 (Dropout) │ (None, 128) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_69 (Dense) │ (None, 126) │ 16,254 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ reshape_34 (Reshape) │ (None, 9, 14) │ 0 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 84,350 (329.49 KB)
Trainable params: 84,350 (329.49 KB)
Non-trainable params: 0 (0.00 B)
Epoch 1/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 2s 105ms/step - loss: 0.2010 - mae: 0.3237 - val_loss: 0.1908 - val_mae: 0.2958
Epoch 2/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 47ms/step - loss: 0.1636 - mae: 0.2931 - val_loss: 0.1507 - val_mae: 0.2672
Epoch 3/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 58ms/step - loss: 0.1373 - mae: 0.2741 - val_loss: 0.1150 - val_mae: 0.2346
Epoch 4/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 45ms/step - loss: 0.1146 - mae: 0.2538 - val_loss: 0.0947 - val_mae: 0.2135
Epoch 5/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0988 - mae: 0.2362 - val_loss: 0.0898 - val_mae: 0.2089
Epoch 6/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 47ms/step - loss: 0.0871 - mae: 0.2227 - val_loss: 0.0753 - val_mae: 0.1954
Epoch 7/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 0.0813 - mae: 0.2188 - val_loss: 0.0735 - val_mae: 0.1939
Epoch 8/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step - loss: 0.0761 - mae: 0.2107 - val_loss: 0.0785 - val_mae: 0.1993
Epoch 9/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 44ms/step - loss: 0.0731 - mae: 0.2062 - val_loss: 0.0721 - val_mae: 0.1918
Epoch 10/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 45ms/step - loss: 0.0714 - mae: 0.2051 - val_loss: 0.0696 - val_mae: 0.1879
Epoch 11/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 30ms/step - loss: 0.0664 - mae: 0.1971 - val_loss: 0.0701 - val_mae: 0.1877
Epoch 12/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 45ms/step - loss: 0.0650 - mae: 0.1938 - val_loss: 0.0696 - val_mae: 0.1863
Epoch 13/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 47ms/step - loss: 0.0634 - mae: 0.1903 - val_loss: 0.0654 - val_mae: 0.1807
Epoch 14/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0629 - mae: 0.1905 - val_loss: 0.0627 - val_mae: 0.1765
Epoch 15/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0617 - mae: 0.1882 - val_loss: 0.0674 - val_mae: 0.1818
Epoch 16/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step - loss: 0.0625 - mae: 0.1875 - val_loss: 0.0704 - val_mae: 0.1851
Epoch 17/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 46ms/step - loss: 0.0609 - mae: 0.1854 - val_loss: 0.0591 - val_mae: 0.1704
Epoch 18/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 59ms/step - loss: 0.0597 - mae: 0.1828 - val_loss: 0.0691 - val_mae: 0.1827
Epoch 19/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 57ms/step - loss: 0.0591 - mae: 0.1802 - val_loss: 0.0692 - val_mae: 0.1824
Epoch 20/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 55ms/step - loss: 0.0569 - mae: 0.1780 - val_loss: 0.0594 - val_mae: 0.1700
Epoch 21/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 41ms/step - loss: 0.0560 - mae: 0.1772 - val_loss: 0.0633 - val_mae: 0.1751
Epoch 22/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 57ms/step - loss: 0.0581 - mae: 0.1784 - val_loss: 0.0687 - val_mae: 0.1816
2026-05-20 06:58:37,243 - INFO - Final training history: {'loss': [0.20104536414146423, 0.16363900899887085, 0.13728414475917816, 0.11464142054319382, 0.09879805892705917, 0.08712001144886017, 0.08134286105632782, 0.07610350847244263, 0.07306022197008133, 0.07139366865158081, 0.066438227891922, 0.06500431895256042, 0.06342727690935135, 0.06293780356645584, 0.06174610182642937, 0.06247720122337341, 0.06092995032668114, 0.059704914689064026, 0.059108667075634, 0.05691252276301384, 0.055980805307626724, 0.058084845542907715], 'mae': [0.3236854672431946, 0.29307231307029724, 0.2741231620311737, 0.2537694573402405, 0.2361602932214737, 0.22272175550460815, 0.21878011524677277, 0.21072787046432495, 0.20615120232105255, 0.2050563395023346, 0.19707190990447998, 0.19380460679531097, 0.19028858840465546, 0.19047555327415466, 0.1881982982158661, 0.18750885128974915, 0.18544359505176544, 0.18277940154075623, 0.18017223477363586, 0.178045392036438, 0.17718668282032013, 0.17837141454219818], 'val_loss': [0.19082704186439514, 0.1507447361946106, 0.11498957872390747, 0.09465388208627701, 0.0897870734333992, 0.0752611830830574, 0.07351095974445343, 0.07852756977081299, 0.07207057625055313, 0.06958694010972977, 0.0701165422797203, 0.06955045461654663, 0.06541985273361206, 0.06271921098232269, 0.06736274808645248, 0.07037296891212463, 0.05908212810754776, 0.06909916549921036, 0.06916802376508713, 0.05939219892024994, 0.06328025460243225, 0.06868589669466019], 'val_mae': [0.29575738310813904, 0.26717740297317505, 0.23459947109222412, 0.21350997686386108, 0.2089277058839798, 0.19536766409873962, 0.19386456906795502, 0.19930942356586456, 0.191828653216362, 0.18794970214366913, 0.1877155750989914, 0.1862809807062149, 0.18068061769008636, 0.17651115357875824, 0.1818287968635559, 0.18509510159492493, 0.1703776866197586, 0.18265043199062347, 0.18238180875778198, 0.16995956003665924, 0.1750556379556656, 0.18163004517555237]}
2026-05-20 06:58:37,447 - INFO - Model training complete. Best model saved as /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month12_dekad11.keras
2026-05-20 06:58:37,449 - INFO - Pipeline [12 d2]: Loading confidence mask...
2026-05-20 06:58:37,452 - INFO - Loading existing confidence mask: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/station_density/confidence_mask_station_density.nc4
2026-05-20 06:58:37,453 - INFO - Pipeline [12 d2]: Applying DL refinement...
2026-05-20 06:58:37,477 - INFO - Pixel-wise threshold map computed at 80th percentile. threshold_2d shape: (9, 14)
2026-05-20 06:58:37,478 - INFO - DL blending: base alpha=0.70 (LSEQM weight), 1-alpha=0.30 (DL weight)
2026-05-20 06:58:37,479 - INFO - Confidence mask active: spatial alpha modulation enabled. Confidence range: [0.000, 0.411]
2026-05-20 06:58:55,387 - INFO - DL blending complete: 250 daily slices processed, 4,000 extreme pixels blended (alpha=0.70)
2026-05-20 06:58:55,479 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (250, 9, 14)
2026-05-20 06:58:55,522 - INFO - Saved Hybrid Deep Learning-Physical (Linear Scaling and Empirical Quantile Mapping) Approach corrected precipitation for month 12, dekad 11 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_lseqmdl_corrected_imergl_month12_dekad11.nc4
2026-05-20 06:58:55,523 - INFO - Pipeline [12 d2]: Complete.
✓ month 12 dekad 2 — saved: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_imergl_lseqmdl_corrected_precip_month12_dekad11.nc4
============================================================
▸ month 12 dekad 3
============================================================
2026-05-20 06:58:55,527 - INFO - Pipeline [12 d3]: Running LSEQM...
2026-05-20 06:58:55,530 - INFO - Aligning IMERG and CPC datasets...
2026-05-20 06:58:55,538 - INFO - After alignment: IMERG has 9131 time steps, CPC has 9131 time steps
2026-05-20 06:58:55,538 - INFO - Creating time-based masks...
2026-05-20 06:58:55,550 - INFO - Applying time masks...
2026-05-20 06:58:55,561 - INFO - IMERG dekad data shape: (275, 9, 14)
2026-05-20 06:58:55,563 - INFO - CPC dekad data shape: (275, 9, 14)
2026-05-20 06:58:55,566 - INFO - Using native-resolution CPC parameter fitting (BCSD principle)...
2026-05-20 06:58:55,597 - INFO - CPC native dekad data: (275, 4, 6) (lat -9.25–-7.75, lon 113.75–116.25)
2026-05-20 06:58:58,137 - INFO - Native CPC fitting: row 4/4 (100%) | 24 fitted, 0 skipped | elapsed 3s, ETA 0s
2026-05-20 06:58:58,138 - INFO - Fitted CPC params on native grid: 24/24 cells
2026-05-20 06:58:58,189 - INFO - Interpolated CPC params to IMERG grid: 126/126 valid pixels
2026-05-20 06:58:58,189 - INFO - Performing Linear Scaling (LS)...
2026-05-20 06:58:58,201 - INFO - LS using bilinearly interpolated CPC mean (smooth).
2026-05-20 06:58:58,204 - INFO - Saving LS corrected precipitation...
2026-05-20 06:58:58,208 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (275, 9, 14)
2026-05-20 06:58:58,281 - INFO - Saved Linear Scaling corrected precipitation for month 12, dekad 21 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_ls/bali_cli_ls_corrected_imergl_month12_dekad21.nc4
2026-05-20 06:58:58,284 - INFO - Applying Empirical Quantile Mapping (EQM) on 9x14 grid...
2026-05-20 06:58:58,399 - INFO - EQM progress: row 9/9 (100%) | 80 land pixels done | elapsed 0s, ETA 0s
2026-05-20 06:58:58,402 - INFO - EQM complete: 80/126 grid points corrected (46 masked/ocean pixels skipped)
2026-05-20 06:58:58,404 - INFO - Saving LSEQM corrected precipitation...
2026-05-20 06:58:58,406 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (275, 9, 14)
2026-05-20 06:58:58,464 - INFO - Saved Linear Scaling and Empirical Quantile Mapping corrected precipitation for month 12, dekad 21 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqm/bali_cli_lseqm_corrected_imergl_month12_dekad21.nc4
2026-05-20 06:58:58,465 - INFO - Pipeline [12 d3]: Training / loading DL model...
2026-05-20 06:58:58,467 - INFO - Checking if the model file exists at: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month12_dekad21.keras
2026-05-20 06:58:58,541 - INFO - Model: "sequential_35"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ conv2d_70 (Conv2D) │ (None, 9, 14, 32) │ 320 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_70 (MaxPooling2D) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_105 (Dropout) │ (None, 4, 7, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_71 (Conv2D) │ (None, 4, 7, 64) │ 18,496 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_71 (MaxPooling2D) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_106 (Dropout) │ (None, 2, 3, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ flatten_35 (Flatten) │ (None, 384) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_70 (Dense) │ (None, 128) │ 49,280 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_107 (Dropout) │ (None, 128) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_71 (Dense) │ (None, 126) │ 16,254 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ reshape_35 (Reshape) │ (None, 9, 14) │ 0 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 84,350 (329.49 KB)
Trainable params: 84,350 (329.49 KB)
Non-trainable params: 0 (0.00 B)
Epoch 1/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 2s 94ms/step - loss: 0.2071 - mae: 0.3325 - val_loss: 0.1793 - val_mae: 0.2843
Epoch 2/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.1742 - mae: 0.3085 - val_loss: 0.1347 - val_mae: 0.2531
Epoch 3/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.1399 - mae: 0.2826 - val_loss: 0.0963 - val_mae: 0.2194
Epoch 4/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 46ms/step - loss: 0.1177 - mae: 0.2614 - val_loss: 0.0816 - val_mae: 0.2006
Epoch 5/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 71ms/step - loss: 0.0967 - mae: 0.2384 - val_loss: 0.0789 - val_mae: 0.1969
Epoch 6/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 72ms/step - loss: 0.0858 - mae: 0.2231 - val_loss: 0.0701 - val_mae: 0.1886
Epoch 7/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 70ms/step - loss: 0.0769 - mae: 0.2131 - val_loss: 0.0668 - val_mae: 0.1836
Epoch 8/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 50ms/step - loss: 0.0712 - mae: 0.2054 - val_loss: 0.0687 - val_mae: 0.1853
Epoch 9/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 58ms/step - loss: 0.0674 - mae: 0.1985 - val_loss: 0.0680 - val_mae: 0.1856
Epoch 10/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 67ms/step - loss: 0.0639 - mae: 0.1934 - val_loss: 0.0656 - val_mae: 0.1822
Epoch 11/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 50ms/step - loss: 0.0614 - mae: 0.1888 - val_loss: 0.0676 - val_mae: 0.1831
Epoch 12/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 57ms/step - loss: 0.0588 - mae: 0.1834 - val_loss: 0.0648 - val_mae: 0.1795
Epoch 13/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 88ms/step - loss: 0.0569 - mae: 0.1806 - val_loss: 0.0633 - val_mae: 0.1771
Epoch 14/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step - loss: 0.0582 - mae: 0.1828 - val_loss: 0.0642 - val_mae: 0.1776
Epoch 15/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 29ms/step - loss: 0.0548 - mae: 0.1745 - val_loss: 0.0661 - val_mae: 0.1795
Epoch 16/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0546 - mae: 0.1745 - val_loss: 0.0620 - val_mae: 0.1742
Epoch 17/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0520 - mae: 0.1707 - val_loss: 0.0626 - val_mae: 0.1746
Epoch 18/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0528 - mae: 0.1717 - val_loss: 0.0628 - val_mae: 0.1747
Epoch 19/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0518 - mae: 0.1695 - val_loss: 0.0622 - val_mae: 0.1738
Epoch 20/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 33ms/step - loss: 0.0521 - mae: 0.1693 - val_loss: 0.0623 - val_mae: 0.1738
Epoch 21/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0508 - mae: 0.1668 - val_loss: 0.0615 - val_mae: 0.1725
Epoch 22/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0504 - mae: 0.1661 - val_loss: 0.0629 - val_mae: 0.1739
Epoch 23/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 40ms/step - loss: 0.0499 - mae: 0.1645 - val_loss: 0.0610 - val_mae: 0.1712
Epoch 24/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 26ms/step - loss: 0.0491 - mae: 0.1629 - val_loss: 0.0611 - val_mae: 0.1712
Epoch 25/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 0.0483 - mae: 0.1622 - val_loss: 0.0607 - val_mae: 0.1708
Epoch 26/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 30ms/step - loss: 0.0493 - mae: 0.1634 - val_loss: 0.0618 - val_mae: 0.1724
Epoch 27/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 32ms/step - loss: 0.0483 - mae: 0.1602 - val_loss: 0.0627 - val_mae: 0.1735
Epoch 28/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0496 - mae: 0.1633 - val_loss: 0.0613 - val_mae: 0.1716
Epoch 29/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 0.0483 - mae: 0.1607 - val_loss: 0.0642 - val_mae: 0.1755
Epoch 30/50
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step - loss: 0.0480 - mae: 0.1594 - val_loss: 0.0613 - val_mae: 0.1719
2026-05-20 06:59:05,909 - INFO - Final training history: {'loss': [0.20710492134094238, 0.17419464886188507, 0.13989318907260895, 0.11774739623069763, 0.09671374410390854, 0.08582458645105362, 0.07690256088972092, 0.0712321549654007, 0.06740462779998779, 0.06391874700784683, 0.06141659617424011, 0.05875856801867485, 0.056922122836112976, 0.0581967830657959, 0.05477337911725044, 0.05455882474780083, 0.052033036947250366, 0.05283452197909355, 0.051819294691085815, 0.052074190229177475, 0.050782568752765656, 0.05044933781027794, 0.04989024996757507, 0.04906707629561424, 0.04831878840923309, 0.049326635897159576, 0.04827515780925751, 0.04958038777112961, 0.04830646514892578, 0.048034824430942535], 'mae': [0.3324962258338928, 0.3085423409938812, 0.28260335326194763, 0.2613578140735626, 0.2383819967508316, 0.22307367622852325, 0.21312054991722107, 0.20537123084068298, 0.19848820567131042, 0.1933641880750656, 0.1887696385383606, 0.18336787819862366, 0.18062588572502136, 0.18278367817401886, 0.17445872724056244, 0.17448295652866364, 0.17073418200016022, 0.17167675495147705, 0.16951671242713928, 0.1693335771560669, 0.16675259172916412, 0.1661226749420166, 0.1645289957523346, 0.16289611160755157, 0.16219337284564972, 0.16343954205513, 0.16015802323818207, 0.16329263150691986, 0.1606842577457428, 0.15939101576805115], 'val_loss': [0.17926520109176636, 0.13468027114868164, 0.09633959084749222, 0.08162637054920197, 0.07889936119318008, 0.07005398720502853, 0.06675973534584045, 0.06865527480840683, 0.06799622625112534, 0.06556710600852966, 0.0675530880689621, 0.06480791419744492, 0.06326468288898468, 0.06418289989233017, 0.06611692160367966, 0.0620000921189785, 0.06259161233901978, 0.06284815818071365, 0.06222088634967804, 0.062258027493953705, 0.061502546072006226, 0.06290280073881149, 0.06096390634775162, 0.061142995953559875, 0.060722485184669495, 0.061753347516059875, 0.0627223402261734, 0.061327315866947174, 0.06424163281917572, 0.06134744733572006], 'val_mae': [0.2843087911605835, 0.25305867195129395, 0.21937422454357147, 0.20061393082141876, 0.19689252972602844, 0.18856048583984375, 0.18357643485069275, 0.18534110486507416, 0.18559710681438446, 0.18220899999141693, 0.18307587504386902, 0.1795201152563095, 0.17709410190582275, 0.17760701477527618, 0.17951858043670654, 0.17418712377548218, 0.17458729445934296, 0.17471946775913239, 0.17378287017345428, 0.1738131195306778, 0.17250068485736847, 0.17390798032283783, 0.1711757779121399, 0.17117425799369812, 0.17077824473381042, 0.17239253222942352, 0.17349675297737122, 0.17156900465488434, 0.1754867136478424, 0.17185941338539124]}
2026-05-20 06:59:06,058 - INFO - Model training complete. Best model saved as /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/trained_models/bias_correction_model_month12_dekad21.keras
2026-05-20 06:59:06,059 - INFO - Pipeline [12 d3]: Loading confidence mask...
2026-05-20 06:59:06,061 - INFO - Loading existing confidence mask: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/station_density/confidence_mask_station_density.nc4
2026-05-20 06:59:06,062 - INFO - Pipeline [12 d3]: Applying DL refinement...
2026-05-20 06:59:06,077 - INFO - Pixel-wise threshold map computed at 80th percentile. threshold_2d shape: (9, 14)
2026-05-20 06:59:06,078 - INFO - DL blending: base alpha=0.70 (LSEQM weight), 1-alpha=0.30 (DL weight)
2026-05-20 06:59:06,079 - INFO - Confidence mask active: spatial alpha modulation enabled. Confidence range: [0.000, 0.411]
2026-05-20 06:59:23,900 - INFO - DL blending complete: 275 daily slices processed, 4,400 extreme pixels blended (alpha=0.70)
2026-05-20 06:59:23,998 - INFO - Precip data dims: ('time', 'lat', 'lon'), shape: (275, 9, 14)
2026-05-20 06:59:24,045 - INFO - Saved Hybrid Deep Learning-Physical (Linear Scaling and Empirical Quantile Mapping) Approach corrected precipitation for month 12, dekad 21 at /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_lseqmdl_corrected_imergl_month12_dekad21.nc4
2026-05-20 06:59:24,047 - INFO - Pipeline [12 d3]: Complete.
✓ month 12 dekad 3 — saved: /content/drive/MyDrive/hybrid-bias-correction/data/example_bali/output/corrected_lseqmdl/bali_cli_imergl_lseqmdl_corrected_precip_month12_dekad21.nc4
============================================================
Batch complete: 36 periods done, 0 skipped.
============================================================