waste-prediction-api / docs /DATA_PROVENANCE.md
ALAMDIENG's picture
refactor: execute full JSC data integrity, provenance architecture, and scientific defensibility rebuild
fec5550
|
Raw
History Blame Contribute Delete
7.82 kB
# AETERNA AI — Data Provenance Documentation
**Version**: 1.0.0
**Branch**: refactor/jsc-data-integrity-v1
**Date**: 2026-08-28
> This document classifies every data field used in AETERNA AI by its provenance type.
## Classification Types
| Type | Meaning |
|------|----------|
| `OBSERVED` | Directly measured by an authoritative body (BPS, DLH, BMKG) |
| `DERIVED` | Mathematically computed from observed sources |
| `SYNTHETIC` | Procedurally generated by simulation scripts |
| `EXTERNAL_REALTIME` | Fetched from a live public API |
| `MODEL_OUTPUT` | Produced by an ML or simulation model |
| `UNVERIFIED` | Origin unclear or not yet validated against authoritative source |
---
## Training Dataset: `data/synthetic_spatial_training_data_2024_2025.csv`
> **IMPORTANT**: This dataset is SYNTHETIC SIMULATION DATA, not observed DLH/SIPSN ground truth.
> It was generated by `scripts/generate_real_kecamatan_dataset.py` using procedural simulation.
> All model evaluation metrics derived from this dataset are **Synthetic Benchmarks only**.
| Field | Type | Source | Granularity | Limitations |
|-------|------|--------|-------------|-------------|
| `Tanggal` | DERIVED | Calendar | Daily | Simulated date range 2024-01-01 to 2025-12-31 |
| `Location` | OBSERVED | BPS administrative boundaries | Kecamatan | 44 kecamatan DKI Jakarta |
| `City` | OBSERVED | BPS administrative boundaries | Kota/Kabupaten | Jakarta Pusat, Utara, Barat, Selatan, Timur, Kepulauan Seribu |
| `Population_Jiwa` | UNVERIFIED | Manually entered (claimed to be BPS 2023/2024) | Kecamatan | **Needs validation against official BPS API.** Values have not been cross-checked against BPS publication. See BPS Adapter section. |
| `Normal_Avg_Ton` | SYNTHETIC | Manually defined `base_ton` constants in generator script | Kecamatan | Not derived from DLH/SIPSN measurement. Direct source of target leakage in synthetic evaluation context. |
| `Zone_Type` | UNVERIFIED | Manually categorized zone types | Kecamatan | Not sourced from official Jakarta spatial zoning authority (BAPPEDA/BPRD). Needs validation. |
| `Rainfall_mm` | SYNTHETIC | `np.random.exponential` simulation | Daily/Jakarta-wide | Not real meteorological data for training set. In inference, replaced by EXTERNAL_REALTIME (Open-Meteo). |
| `Rain_Lag_1` | DERIVED | Shifted `Rainfall_mm` by 1 day | Daily | Inherits synthetic limitation from `Rainfall_mm`. |
| `Is_Weekend` | DERIVED | Calendar computation from `Tanggal` | Daily | Deterministic from date. |
| `Hari_Dalam_Minggu` | DERIVED | Calendar computation from `Tanggal` (0=Mon) | Daily | Deterministic from date. |
| `Bulan` | DERIVED | Calendar computation from `Tanggal` | Monthly | Deterministic from date. |
| `Is_Mudik` | DERIVED | Hardcoded Lebaran window (Apr 2024, Mar–Apr 2025) | Daily | Islamic calendar dates approximated, not from BMKG/government calendar source. |
| `Ada_Event` | SYNTHETIC | Manually curated event calendar in generator script | Kecamatan/Daily | Not from official DLH/Dispora/Pemprov DKI event records. |
| `Event_Crowd_Headcount` | SYNTHETIC | Manually defined crowd estimates in generator script | Event/Day | Not from official attendance records (Kepolisian, Penyelenggara). |
| `Volume_Sampah_Ton` | SYNTHETIC | Procedurally generated from `base_ton` + multipliers + noise | Kecamatan/Daily | **Not observed DLH/SIPSN data.** This is the model target in training but is entirely synthetic. |
---
## Inference / Runtime Data
| Field | Type | Source | URL | Limitations |
|-------|------|--------|-----|-------------|
| `Rainfall_mm` (inference) | EXTERNAL_REALTIME | Open-Meteo API | https://api.open-meteo.com/v1/forecast | Free tier, no SLA. Coverage: global at coordinate level. Temporal: daily forecast. |
| `Population_Jiwa` (inference) | UNVERIFIED | Hardcoded in `KECAMATAN_DATABASE` (app.py) | — | Same values as training dataset. Not yet validated against official BPS API. |
| `Normal_Avg_Ton` (inference) | UNVERIFIED | Hardcoded in `KECAMATAN_DATABASE` (app.py) | — | Internal baseline, not from DLH measurement. |
| `Event_Crowd_Headcount` (inference) | DERIVED | `data/event_jakarta_2026.txt` | — | Manually curated. Not from official organizer records. |
| `Volume_Sampah_Ton` (inference) | MODEL_OUTPUT | AETERNA Stacking Regressor / Chronos-T5 | — | Forecast, not observation. Labeled as FORECAST in API response. |
---
## Official Data Sources — Status & Access
### BPS DKI Jakarta (Badan Pusat Statistik)
- **URL**: https://jakarta.bps.go.id/
- **API**: https://webapi.bps.go.id/ (requires registration)
- **Available**: Population data by kecamatan, annual publication
- **Status**: ⚠️ ADAPTER STUB BUILT — credentials not yet configured. See `data_sources/bps.py`.
- **Action required**: Register at https://webapi.bps.go.id/ to obtain API key.
### Open-Meteo (Weather)
- **URL**: https://open-meteo.com/
- **API**: https://api.open-meteo.com/v1/forecast
- **Available**: Free, no authentication required
- **Status**: ✅ ACTIVE — used in inference via `fetch_rainfall_forecast()` in `app.py`
- **Granularity**: Daily precipitation, coordinate-based
- **Limitation**: Forecast accuracy degrades beyond 7 days.
### DLH DKI Jakarta (Dinas Lingkungan Hidup)
- **URL**: https://lingkunganhidup.jakarta.go.id/
- **API**: No documented public REST API found.
- **Available daily waste data**: Not publicly accessible at kecamatan level.
- **Status**: ⚠️ ADAPTER STUB BUILT — no live data available. See `data_sources/dlh.py`.
- **Note**: Aggregate city-level data may be available through SIPSN.
### SIPSN (Sistem Informasi Pengelolaan Sampah Nasional)
- **URL**: https://sipsn.menlhk.go.id/
- **API**: No documented public REST API found. Data available via web interface only.
- **Available**: Annual/periodic city-level aggregate waste tonnage for Jakarta.
- **Status**: ⚠️ ADAPTER STUB BUILT — no live API available. See `data_sources/sipsn.py`.
- **Note**: City-level data from SIPSN MUST NOT be disaggregated to kecamatan level and labeled OBSERVED.
### Jakarta Open Data
- **URL**: https://data.jakarta.go.id/
- **Available**: Various datasets, not specifically daily kecamatan waste tonnage.
- **Status**: ⚠️ Investigated — no daily kecamatan waste volume dataset found.
### UPST / TPST Bantargebang
- **URL**: https://upst.jakarta.go.id/ (informational)
- **API**: No documented public API.
- **Status**: ⚠️ No programmatic access available.
---
## Mode B Validation Status
| Level | Observed Data Available | Action |
|-------|------------------------|--------|
| City (Jakarta) | Partial (SIPSN annual/periodic) | Can be ingested as OBSERVED with city-level granularity only |
| Kecamatan (daily) | **NOT AVAILABLE** | Do NOT disaggregate city-level to kecamatan and label OBSERVED |
| Kecamatan (estimated) | Can be derived | Must be labeled DERIVED or ESTIMATED, not OBSERVED |
**Current evaluation mode**: MODE A — SYNTHETIC BENCHMARK ONLY
**Mode B status**: NOT YET AVAILABLE — infrastructure built, awaiting authoritative data
---
## Composition Ratios
| Waste Type | Ratio | Source | Classification |
|-----------|-------|--------|----------------|
| Sisa Makanan (Organic) | 50.2% | Cited as DLH DKI Jakarta statistics | UNVERIFIED — no specific publication cited |
| Plastik | 22.8% | Cited as DLH DKI Jakarta statistics | UNVERIFIED |
| Kertas | 11.5% | Cited as DLH DKI Jakarta statistics | UNVERIFIED |
| Logam | 2.1% | Cited as DLH DKI Jakarta statistics | UNVERIFIED |
| Kaca | 3.2% | Cited as DLH DKI Jakarta statistics | UNVERIFIED |
| Tekstil | 4.2% | Cited as DLH DKI Jakarta statistics | UNVERIFIED |
| Lainnya | 6.0% | Residual | DERIVED |
**Recommended**: Verify composition ratios against official SIPSN or DLH Jakarta annual waste characterization reports.