4축 점수 계산

GenD의 데이터 품질 점수는 completeness(완전성)·validity(유효성)·freshness(최신성)·consistency(일관성) 4개 축으로 구성됩니다. 각 축 점수는 그 축에 매핑된 규칙 타입의 통과율이며, 측정된 축만 가중 평균하여 종합 점수(composite)를 산출합니다.
점수는 해당 테이블의 최근 체크 결과(최신 100건) 를 규칙 타입별로 묶어 계산합니다.
축 ↔ 규칙 타입 매핑
각 축은 아래 규칙 타입들의 검사 결과를 모읍니다. 축 점수 = 통과한 규칙 수 / 유효한(에러 아닌) 규칙 수.
| 축 | 묶이는 rule_type | 가중치 | "통과" 기준 |
|---|---|---|---|
| completeness (완전성) | not_null | 0.30 | 대상 컬럼 NULL 0건 |
| validity (유효성) | unique · range · regex | 0.30 | 중복/범위 이탈/패턴 불일치 0건 |
| freshness (최신성) | freshness | 0.20 | 마지막 갱신이 max_hours 이내 |
| consistency (일관성) | row_count · custom | 0.20 | 행 수 임계 충족 / 사용자 SQL passed=true |
유효성(validity)은 "유일성"이 아닙니다
unique 규칙은 별도 축이 아니라 validity 축에 range·regex 와 함께 묶입니다. UI의 "유효성" 컬럼이 이 축입니다.
종합 점수 (composite)
측정된 축만 가중 평균하며, 측정 불가 축의 가중치는 빼고 나머지를 재정규화합니다.
composite = Σ(축점수 × 가중치) / Σ(가중치) # 측정된 축에 대해서만 합산
- 측정 불가 축: 해당 축에 유효한 규칙이 하나도 없으면 그 축은 "측정 불가"로 처리되어 종합에서 제외됩니다(0점으로 가정하지 않음). UI에는
—로 표시됩니다. - 에러 체크 제외: 테이블 부재(
table_not_found), SQL 생성 실패(sql_generation_failed), 실행 오류(execution_error) 등error_kind가 붙은 체크는 데이터 품질 위반이 아니라 측정 불가이므로 점수에서 빠집니다. 이 덕분에 존재하지 않는 테이블이 "정상" 등급처럼 보이지 않습니다. - 측정 가능한 축이 0개이면 종합 0.0 / 등급 F + 사유를 기록합니다.
등급 구간
| 등급 | 종합 점수 |
|---|---|
| A | ≥ 0.95 |
| B | ≥ 0.85 |
| C | ≥ 0.70 |
| D | ≥ 0.50 |
| F | < 0.50 (또는 측정 가능한 체크 없음) |
산출 예시
completeness 100% · validity 50% · freshness — · consistency — 인 테이블:
측정된 축: completeness(0.30), validity(0.30) # freshness·consistency 는 규칙 없음 → 제외
composite = (1.00×0.30 + 0.50×0.30) / (0.30+0.30) = 0.45 / 0.60 = 0.75 → 75% → C
사용 방법
- 대상 테이블에 대해 품질 스캔(또는 점수 산정)을 요청합니다.
- Trino를 통해 활성 규칙을 실행하여 체크 결과를 생성합니다.
- 체크 결과를 4축으로 묶어 종합 점수를 계산하고 이력에 저장합니다.
- 대시보드에서 시간별 품질 추이를 확인합니다.
API 엔드포인트
| Method | Path | Description |
|---|---|---|
| POST | /api/v1/quality/scan | 테이블 종합 스캔 (활성 규칙 실행 + 점수 산정) |
| POST | /api/v1/quality/scores/compute | 기존 체크 결과로 점수 산정 |
| GET | /api/v1/quality/scores | 품질 점수 목록 조회 |
| GET | /api/v1/quality/dashboard | 품질 대시보드 |