Data forensics findings
Beyond-DQ artefacts surfaced before modelling.
Forensic findings
Beyond-DQ artefacts surfaced by the silver-clean + forensics layer. These describe how the team neutralised legacy SFA / ERP issues before any modelling ran.
| Finding | Count | Treatment | Detail |
|---|---|---|---|
| Cross-file Outlet_ID integrity | 0 | reported clean | Unusual for legacy SFA exports; suggests upstream curation. Row-level anomalies remain primary forensic focus. |
| Outlet_Type typos normalised | 985 | cleaned | 3 distinct typo->canonical mappings applied |
| Outlet_Size lowercase 'small' detected | 600 | flagged | Lowercase 'small' has a cooler-count profile inconsistent with canonical Small outlets; reclassification applied where cooler_count >= 2. |
| Outlet_Size reclassified via cooler count | 225 | cleaned | Lowercase 'small' rows with cooler_count >= 2 re-mapped to Medium/Large/Extra Large based on cooler thresholds. |
| Outlet_Size imputed from cooler count | 196 | cleaned | Null Outlet_Size values filled using cooler-count thresholds. |
| Lat/Lon swapped values recovered | 200 | cleaned | Source had Latitude and Longitude column values transposed. Swap was deterministic and recoverable (both values land in Sri Lanka after swap). 1.2% of outlets reclaimed. |
| Coordinates outside coarse land-mask | 2,241 | flagged and quarantined (>= 5.0 km) | Detected via `global_land_mask.globe.is_land()` against a 1-arc-min (~1.85 km) Natural Earth land grid. Outlets stratified by distance to the nearest confirmed-land outlet: <0.5km coastal_confirmed, <2km likely_coastal, <5km borderline, >=5km likely_ocean_outlier. QUARANTINED 521 outlets with nearest_land_outlet_km >= 5.0 (the 'likely_ocean_outlier' bucket). The remaining flagged outlets are coastal businesses kept in the clean set; the library's 1-arc-min grid is too coarse to label them ocean. Audit: outputs/audit/sea_coordinate_outlets.csv. Higher-resolution SL land polygon queued for the next iteration. |
| Transaction value classification | 0 | cleaned and flagged | 3-way classification: data_error+null_row quarantined; return/promo_or_error/foc_promo flagged and kept (signal, not noise). |
| Codebook references absent column | 1 | flagged | Codebook documents this field but raw export omits it; treated as documentation drift, not data quality issue. |
| Codebook filename divergence | 1 | flagged | No impact on data; logged as governance finding. |
| Automated-entry signatures | 0 | none found | No (Outlet, SKU) pair with >= 6 consecutive identical Volume_Liters. |
| Stockout months (zero sandwiched between non-zero) | 80,611 | flagged for modeling | Used as constraint indicator in Phase 5 (not quarantined). |
| Dead-then-resurrected outlets | 2,707 | flagged | >= 6 consecutive zero months then resumed — flagged for review. |