{
  "schema": "reific.missing-data-versus-zero.v1",
  "title": "Missing sensor readings or a real drop?",
  "status": "deterministic_public_data_replay_with_constructed_scenarios",
  "verified_at": "2026-09-18",
  "agent_calls": 0,
  "source": {
    "dataset": "Appliances Energy Prediction",
    "citation": "Candanedo, L. (2017). Appliances Energy Prediction [Dataset]. UCI Machine Learning Repository.",
    "doi": "https://doi.org/10.24432/C5VC8G",
    "description_url": "https://archive.ics.uci.edu/dataset/374/appliances+energy+prediction",
    "archive_url": "https://archive.ics.uci.edu/static/public/374/appliances%2Benergy%2Bprediction.zip",
    "file": "energydata_complete.csv",
    "sha256": "2820bf712ad0275cb18b85a05250926100d8e65ebb9f4d2d016ca91ea152a25d",
    "retrieved_at": "2026-09-15",
    "license": "CC BY 4.0",
    "license_url": "https://creativecommons.org/licenses/by/4.0/",
    "column": "Appliances",
    "unit": "Wh per 10-minute reading",
    "row_numbering": "1-based physical CSV lines; the header is line 1",
    "changes": "Select 12 rows and the timestamp/Appliances columns, normalize CSV serialization, then construct two separately labeled scenarios. The source file is unchanged."
  },
  "window": {
    "selection_rule": "First two hours of the first complete source day; illustrative window, not a representative sample.",
    "start_inclusive": "2016-01-12 00:00:00",
    "end_exclusive": "2016-01-12 02:00:00",
    "first_reading": "2016-01-12 00:00:00",
    "last_reading": "2016-01-12 01:50:00",
    "cadence_seconds": 600,
    "expected_readings": 12,
    "timezone": "Not supplied; timestamps are retained as provided.",
    "interval_label_convention": "The source does not state whether timestamps label interval starts or ends."
  },
  "construction": {
    "rule": "Change only the middle third of the 12 timestamped values: blank in the missing scenario, numeric zero in the zero scenario.",
    "changed_indices_zero_based": [
      4,
      5,
      6,
      7
    ],
    "changed_timestamps": [
      "2016-01-12 00:40:00",
      "2016-01-12 00:50:00",
      "2016-01-12 01:00:00",
      "2016-01-12 01:10:00"
    ],
    "original_values_Wh": [
      310,
      380,
      380,
      370
    ],
    "original_changed_sum_Wh": 1440,
    "unchanged_source_readings": 8,
    "is_real_outage": false
  },
  "scenarios": {
    "original": {
      "label": "Original observations",
      "constructed": false,
      "expected_readings": 12,
      "available_readings": 12,
      "missing_readings": 0,
      "coverage": {
        "numerator": 12,
        "denominator": 12,
        "fraction": 1.0,
        "percent": 100.0
      },
      "available_sum_Wh": 1860,
      "available_mean_Wh": {
        "numerator_Wh": 1860,
        "denominator_readings": 12,
        "value": 155.0
      },
      "full_window_total_Wh": 1860,
      "full_window_mean_Wh": 155.0,
      "synthetic_zero_readings": 0,
      "samples": [
        {
          "timestamp": "2016-01-12 00:00:00",
          "value_Wh": 40,
          "source_row": 44,
          "status": "source_observation"
        },
        {
          "timestamp": "2016-01-12 00:10:00",
          "value_Wh": 30,
          "source_row": 45,
          "status": "source_observation"
        },
        {
          "timestamp": "2016-01-12 00:20:00",
          "value_Wh": 40,
          "source_row": 46,
          "status": "source_observation"
        },
        {
          "timestamp": "2016-01-12 00:30:00",
          "value_Wh": 50,
          "source_row": 47,
          "status": "source_observation"
        },
        {
          "timestamp": "2016-01-12 00:40:00",
          "value_Wh": 310,
          "source_row": 48,
          "status": "source_observation"
        },
        {
          "timestamp": "2016-01-12 00:50:00",
          "value_Wh": 380,
          "source_row": 49,
          "status": "source_observation"
        },
        {
          "timestamp": "2016-01-12 01:00:00",
          "value_Wh": 380,
          "source_row": 50,
          "status": "source_observation"
        },
        {
          "timestamp": "2016-01-12 01:10:00",
          "value_Wh": 370,
          "source_row": 51,
          "status": "source_observation"
        },
        {
          "timestamp": "2016-01-12 01:20:00",
          "value_Wh": 120,
          "source_row": 52,
          "status": "source_observation"
        },
        {
          "timestamp": "2016-01-12 01:30:00",
          "value_Wh": 50,
          "source_row": 53,
          "status": "source_observation"
        },
        {
          "timestamp": "2016-01-12 01:40:00",
          "value_Wh": 40,
          "source_row": 54,
          "status": "source_observation"
        },
        {
          "timestamp": "2016-01-12 01:50:00",
          "value_Wh": 50,
          "source_row": 55,
          "status": "source_observation"
        }
      ]
    },
    "missing": {
      "label": "Four readings missing",
      "constructed": true,
      "expected_readings": 12,
      "available_readings": 8,
      "missing_readings": 4,
      "coverage": {
        "numerator": 8,
        "denominator": 12,
        "fraction": 0.6666666666666666,
        "percent": 66.666667
      },
      "available_sum_Wh": 420,
      "available_mean_Wh": {
        "numerator_Wh": 420,
        "denominator_readings": 8,
        "value": 52.5
      },
      "full_window_total_Wh": null,
      "full_window_mean_Wh": null,
      "synthetic_zero_readings": 0,
      "samples": [
        {
          "timestamp": "2016-01-12 00:00:00",
          "value_Wh": 40,
          "source_row": 44,
          "status": "source_observation"
        },
        {
          "timestamp": "2016-01-12 00:10:00",
          "value_Wh": 30,
          "source_row": 45,
          "status": "source_observation"
        },
        {
          "timestamp": "2016-01-12 00:20:00",
          "value_Wh": 40,
          "source_row": 46,
          "status": "source_observation"
        },
        {
          "timestamp": "2016-01-12 00:30:00",
          "value_Wh": 50,
          "source_row": 47,
          "status": "source_observation"
        },
        {
          "timestamp": "2016-01-12 00:40:00",
          "value_Wh": null,
          "source_row": 48,
          "status": "constructed_missing"
        },
        {
          "timestamp": "2016-01-12 00:50:00",
          "value_Wh": null,
          "source_row": 49,
          "status": "constructed_missing"
        },
        {
          "timestamp": "2016-01-12 01:00:00",
          "value_Wh": null,
          "source_row": 50,
          "status": "constructed_missing"
        },
        {
          "timestamp": "2016-01-12 01:10:00",
          "value_Wh": null,
          "source_row": 51,
          "status": "constructed_missing"
        },
        {
          "timestamp": "2016-01-12 01:20:00",
          "value_Wh": 120,
          "source_row": 52,
          "status": "source_observation"
        },
        {
          "timestamp": "2016-01-12 01:30:00",
          "value_Wh": 50,
          "source_row": 53,
          "status": "source_observation"
        },
        {
          "timestamp": "2016-01-12 01:40:00",
          "value_Wh": 40,
          "source_row": 54,
          "status": "source_observation"
        },
        {
          "timestamp": "2016-01-12 01:50:00",
          "value_Wh": 50,
          "source_row": 55,
          "status": "source_observation"
        }
      ]
    },
    "zero": {
      "label": "Four constructed zeroes",
      "constructed": true,
      "expected_readings": 12,
      "available_readings": 12,
      "missing_readings": 0,
      "coverage": {
        "numerator": 12,
        "denominator": 12,
        "fraction": 1.0,
        "percent": 100.0
      },
      "available_sum_Wh": 420,
      "available_mean_Wh": {
        "numerator_Wh": 420,
        "denominator_readings": 12,
        "value": 35.0
      },
      "full_window_total_Wh": 420,
      "full_window_mean_Wh": 35.0,
      "synthetic_zero_readings": 4,
      "samples": [
        {
          "timestamp": "2016-01-12 00:00:00",
          "value_Wh": 40,
          "source_row": 44,
          "status": "source_observation"
        },
        {
          "timestamp": "2016-01-12 00:10:00",
          "value_Wh": 30,
          "source_row": 45,
          "status": "source_observation"
        },
        {
          "timestamp": "2016-01-12 00:20:00",
          "value_Wh": 40,
          "source_row": 46,
          "status": "source_observation"
        },
        {
          "timestamp": "2016-01-12 00:30:00",
          "value_Wh": 50,
          "source_row": 47,
          "status": "source_observation"
        },
        {
          "timestamp": "2016-01-12 00:40:00",
          "value_Wh": 0,
          "source_row": 48,
          "status": "constructed_zero"
        },
        {
          "timestamp": "2016-01-12 00:50:00",
          "value_Wh": 0,
          "source_row": 49,
          "status": "constructed_zero"
        },
        {
          "timestamp": "2016-01-12 01:00:00",
          "value_Wh": 0,
          "source_row": 50,
          "status": "constructed_zero"
        },
        {
          "timestamp": "2016-01-12 01:10:00",
          "value_Wh": 0,
          "source_row": 51,
          "status": "constructed_zero"
        },
        {
          "timestamp": "2016-01-12 01:20:00",
          "value_Wh": 120,
          "source_row": 52,
          "status": "source_observation"
        },
        {
          "timestamp": "2016-01-12 01:30:00",
          "value_Wh": 50,
          "source_row": 53,
          "status": "source_observation"
        },
        {
          "timestamp": "2016-01-12 01:40:00",
          "value_Wh": 40,
          "source_row": 54,
          "status": "source_observation"
        },
        {
          "timestamp": "2016-01-12 01:50:00",
          "value_Wh": 50,
          "source_row": 55,
          "status": "source_observation"
        }
      ]
    }
  },
  "naive_zero_fill": {
    "description": "Imputing zero for each missing value reproduces the numeric zero scenario, but does not turn missing readings into observations.",
    "source_available_readings": 8,
    "imputed_readings": 4,
    "actual_observation_coverage_fraction": 0.6666666666666666,
    "sum_Wh": 420,
    "denominator_readings": 12,
    "mean_Wh": 35.0,
    "difference_from_available_mean_Wh": -17.5,
    "relative_change_from_available_mean_percent": -33.333333333333336,
    "relative_change_formula": "(35 - 52.5) / 52.5 * 100",
    "is_observed_full_window_mean": false
  },
  "limits": [
    "The missing readings and zeroes are constructed by Reific. Neither altered scenario is an observed equipment or telemetry outage.",
    "This is one illustrative window in one public household dataset, not a frequency estimate or a representative sample of operational failures.",
    "The omitted readings are the high values in this window; missingness is not random. The 52.5 Wh available-only mean does not estimate the original full-window mean of 155 Wh without further assumptions.",
    "Coverage is available values divided by 12 expected timestamps, under the assumed known 10-minute cadence. It is not an uptime, device-health, or value-validity metric.",
    "Even a reported numeric zero in a real system would require telemetry and device context before concluding a physical outage; these zeroes are synthetic.",
    "Energy is measured in Wh, not W. Means are Wh per reading; timestamps do not specify timezone or interval-start/end convention.",
    "No model, detector, agent, product performance, customer outcome, or causal attribution is evaluated. Ordinary code can reproduce these calculations."
  ]
}
