계기와 수집
데이터 품질과 결측 처리
현장 데이터는 반드시 깨집니다. 통신은 끊기고, 계기는 교체되고, 정전 후에는 이상한 값이 들어옵니다. 문제는 깨지는 것이 아니라 깨진 데이터를 조용히 집계에 섞는 것입니다.
1. 적산값과 사용량
전력량계는 누적(적산) kWh를 줍니다. 사용량은 차분으로 만듭니다.
사용량(t) = 적산(t) - 적산(t-1)
| 시각 | 적산 kWh | 사용량 |
|---|---|---|
| 09:00 | 10,000.0 | - |
| 09:01 | 10,001.2 | 1.2 |
| 09:02 | 10,002.5 | 1.3 |
| 09:03 | (결측) | ? |
| 09:04 | 10,005.0 | 2.5 (2분치) |
적산값의 장점은 결측 구간이 있어도 총량은 보존된다는 것입니다. 09:03이 비어도 09:02~09:04 사이 2.5kWh는 정확합니다. 그래서 순시 kW를 적분하는 방식보다 적산 차분이 우선입니다.
2. 대표적인 품질 문제
| 문제 | 증상 | 원인 |
|---|---|---|
| 결측 | 구간 데이터 없음 | 통신 장애, 수집기 다운 |
| 음수 차분 | 사용량 마이너스 | 계기 교체, 적산 리셋, 롤오버 |
| 스파이크 | 한 구간만 수백 배 | 통신 노이즈, 바이트 순서 오류 |
| 고정값 | 값이 계속 같음 | 계기 멈춤, 게이트웨이 캐시 |
| 0 연속 | 사용량 0 지속 | 설비 정지 or 계기 고장 (구분 필요) |
| 중복 | 같은 시각 여러 건 | MQTT 재전송, 재수집 |
| 시각 오류 | 미래/과거 시각 | 게이트웨이 시계 틀어짐 |
3. 검증 규칙
수집 직후 또는 집계 전에 규칙 기반 검증을 겁니다.
1. 범위 검증: 0 <= 사용량 <= 정격용량(kW) × 구간시간(h) × 1.2
2. 음수 검증: 차분 < 0 이면 리셋/롤오버 판정
3. 변화율 검증: 직전 평균 대비 N배 이상이면 스파이크 의심
4. 고정값 검증: 설비 가동 중인데 M분 이상 값 변화 없음
5. 시각 검증: 서버 시각 기준 ±허용 범위 밖이면 보류
정격용량 기반 상한이 가장 효과적입니다. 100kW 설비가 1분에 50kWh를 쓸 수는 없습니다.
4. 리셋과 롤오버
- 롤오버: 적산값이 최대값(예: 99,999,999)을 넘어 0으로 돌아감 →
최대값 - 이전값 + 현재값 - 계기 교체: 새 계기는 0부터 시작 → 교체 시점 이력을 남기고 이전 구간과 분리
- 수동 리셋: 현장에서 초기화 → 유지보수 이력과 대조
교체 이력이 meter_maintenance에 남아 있으면 자동 판정이 가능합니다. 이력이 없으면 음수 차분은 일단 0 처리 + 플래그를 남기고 사람이 확인합니다.
5. 결측 처리 전략
| 전략 | 방법 | 적합한 경우 |
|---|---|---|
| 그대로 둠 | NULL 유지, 집계 시 표시 | 감사, 원본 보존 |
| 적산 분배 | 결측 후 첫 값의 차분을 구간에 균등 분배 | 적산 계기, 짧은 결측 |
| 선형 보간 | 앞뒤 값으로 보간 | 순시값(kW, 유량) |
| 패턴 대체 | 같은 요일·시간대 평균 | 긴 결측, 보고서용 |
| 0 처리 | 사용 없음으로 간주 | 설비 정지가 확인된 경우만 |
- 필자 생각: 보간값을 원시 테이블에 덮어쓰지 마세요. 원본은 그대로 두고, 보정 테이블이나 품질 플래그 컬럼을 따로 둡니다. 나중에 "이 숫자 진짜예요?"라는 질문에 답할 수 있어야 합니다.
6. 품질 플래그
quality_flag
- 0: 정상
- 1: 보간
- 2: 패턴 대체
- 3: 리셋 보정
- 4: 스파이크 제거
- 9: 검증 필요
집계 테이블에도 결측률 또는 보정 비율을 같이 담으면 화면에서 신뢰도를 표시할 수 있습니다.
| 컬럼 | 설명 |
|---|---|
| kwh | 집계 사용량 |
| sample_count | 실제 수집 건수 |
| expected_count | 기대 건수 (1분 주기면 하루 1440) |
| missing_rate | 결측률 |
7. 재집계
결측이 나중에 채워지는 경우(게이트웨이 버퍼 재전송)가 많습니다.
- 원시 데이터 수신 시 해당 구간을 "재집계 필요"로 표시
- 배치가 표시된 구간만 시간 → 일 → 월 순으로 재계산
- 이미 발행된 보고서는 재생성 여부를 정책으로 결정
집계는 언제든 다시 돌릴 수 있게 멱등하게 만들어야 합니다. INSERT ... ON DUPLICATE KEY UPDATE나 구간 삭제 후 재삽입 패턴을 씁니다.
8. 모니터링
데이터 품질도 운영 지표입니다.
- 수집기별 마지막 수신 시각
- 계기별 일 결측률 순위
- 검증 실패 건수 추이
- 메인 계기 vs 분기 합계 차이율
이 화면이 있으면 현장 담당자보다 먼저 문제를 발견할 수 있습니다.