중앙은행이 정책금리 결정을 발표하거나 통계청이 새로운 인플레이션 인쇄물을 발표할 때, 원시 발표는 종종 소음과 함께 도착합니다: 암호화 유물, 부분 페이지, 부족한 필드 또는 전달과 모순되는 수정. 많은 집적자처럼 순진하게 데이터를 제공하면 문제를 개발자에게 직접 전달합니다.
FXMacroData에서 우리는 데이터 품질을 최우선 제품 관심사로 취급합니다. 모든 통화에서 모든 지표는 Firestore에 작성되고 API를 통해 노출되기 전에 결정적 검증 파이프 라인을 통과합니다. 이 게시물은 파이프라인을 층별로 다운로드 한 순간부터 쿼리 할 수있는 값이 되는 순간까지
와 같은 최종점 /v1/announcements/{currency}/{indicator}-
파이프 라인 에 대한 한눈
단계 1: 흡입
단계 1 섭취: 구조화된 소스 포터
Validation starts before a single value is extracted. Every currency has a dedicated fetcher class that targets an official primary source — the central bank website, the national statistics bureau, or a government data portal. We deliberately avoid secondary aggregators in the ingest path: their lag, licensing terms, and occasional silent revisions introduce uncertainty we cannot control.
Fetchers는 비동기 Python 클래스입니다. async with 컨텍스트 관리자 패턴입니다. aiohttp.ClientSession 현실적인 User-Agent 그리고 통제된 타임오웃을; 출구에서 그들은 가져오기 성공 또는 상승 여부에 관계없이 깨끗하게 닫습니다. 각 가져오기에 내부, 분석은 엄격합니다: HTML는 분석됩니다 lxml 아니면 BeautifulSoup 원시 마크업에 대한 regex 재발보다는 정확한 요소 선택자를 사용하여, JSON API는 필드가 부재하거나 상류로 이름을 변경하면 즉시 올리는 입력된 액세스 키를 통해 액세스됩니다.
Fetcher 계약 필요한 출력 키
{
"date": "2026-03-31", # ISO-8601 날짜 문자열
"val": 3.5, # float 절대 string 하지마
"announcement_datetime": "..." # UTC ISO-8601 사용 가능하다면
}
출력 계약은 포터 경계에서 실행됩니다. date 아니면 val 다음 단계에 도달하기 전에 폐기됩니다. announcement_datetime 입력 시 선택적이지만 API 소비자에게 이벤트 타이밍을 노출시키는 출판 전면 최종 지점에서는 필요합니다.
단계 2: 스케마 확인
단계 2 스키마 검사: 유형 및 완전성 검증
원시 포터 출력은 각 레코드에 네 개의 검사를 적용하는 스키마 검증자에게 전달됩니다:
날짜 형식
Parsed as an ISO-8601 date. Non-parseable strings, future dates beyond a two-day grace window, and dates before 1960 are all rejected.
값 유형
val 유한 파이썬에 강제해야 합니다. float- NaN Inf, 그리고 비수열 (예를 들어, "n/a", empty strings) are rejected rather than coerced to zero.
중복 감지
두 개의 레코드가 같은 것을 공유한다면 (currency, indicator, date) 키, 파이프라인은 가장 최근에 섭취한 것을 저장하고 충돌을 기록합니다.
통화지표 결합
모든 기록은 공개된 지표 카탈로그에 의해 검증됩니다. unemployment 해당 지표가 노출되지 않는 통화에 대해 오류가 발생하고 랜드를 중지합니다.
스키마 오류는 로 표시된 구조화된 클라우드 로깅 항목으로 표면화됩니다. severity=ERROR stage=schema_check, 그리고 원래의 포터 이름. 이것은 GCP 콘솔에서 크로스 러닝을 간단하게 만듭니다.
단계 3: 외부 필터
단계 3 범위 및 외향 필터
구조적 유효성은 필요하지만 충분하지 않습니다. 250.0 USD CPI에 대한 문법적 유효하지만 분명히 잘못된 단계 3는 이러한 의미 오류를 잡기 위해 두 가지 보완적인 검사를 적용합니다.
하드 레인지 경계
각 지표에는 선택적인 항목이 포함된 카탈로그 항목이 있습니다. min_val 그리고 max_val 유력한 역사적인 범위에서 유도된 한계와 관대한 안전 지평을 더합니다. 예를 들어 정책 금리는 -5.0 그리고 30.0 연간 인플레이션은 -30.0 그리고 300.0 % 초인플레이션 에피소드를 수용 할 수 있을 만큼 넓고 신흥 시장의 합법적인 데이터를 제한하지 않습니다. 이 경계 밖의 값은 수동 검토를 기다리고 있습니다.
롤링 z 스코어 오버일러 검출
파이프라인에서는 Firestore에서 최소 24개월의 역사를 가진 지표에 대해 36개월의 롤링 평균과 표준편차를 계산하고 z 점수를 초과한 새로운 기록을 표시합니다. |4.0|하드 린드와 달리 z 점수 플래그는 자동으로 기록을 폐기하지 않습니다. 그들은 리뷰 항목을 만들고 outlier_flag: true API 사용자가 선택적으로 자신의 워크플로우에서 외형 표지록을 필터할 수 있도록 Firestore 문서로 필터를 입력합니다.
왜 3σ 대신 4σ이 있을까요?
거시 지표는 실제로 뚱뚱한 꼬리를 보여줍니다. COVID-19 공급 충격, 2022 에너지 위기, 그리고 중앙 은행의 빠른 하이킹 사이클 모두 통계적으로 드문 그러나 실제 판독을 생산했습니다. 3σ 문턱은 정권 변화 중에 정확한 판독이 가장 중요한 때 합법적인 데이터를 격리 할 것입니다.
단계 4: 횡단 근원 화해
단계 4 융합 조정
For a subset of high-importance indicators — central bank policy rates, headline CPI, and unemployment — the pipeline maintains a secondary source to cross-reference against. This is not a live fallback at request time (all data served to users comes exclusively from Firestore); it is an ingest-time consistency check.
When the primary and secondary values for the same (currency, indicator, date) 설정 가능한 허용 범위를 초과하는 경우 경보가 발생하고 주요 값은 조사 중 유지됩니다. 정책금리 용량은 5 basis pointsCPI의 경우요 0.1 percentage points. 용도 는 의도적으로 좁은 이 지표 들 을 위해, 작은 오차 는 종종 분석 오류, 보고 지연, 또는 예비 대 최종 수정 충돌을 나타냅니다.
원천
- 중앙은행 공식 발표
- 국가 통계청
- 정부 데이터 포털
교차 참조
- 병행 공식 최종점 (예를 들어 BIS)
- 수정 표지판을 달고 있는 역사 기록
- 이전 기간에 대한 내부 일관성 검사
기록별 교차 확인 외에도 파이프 라인은 월간 연속성 검사: 새로운 기록이 변화의 대상이면 N 12개월 평균 변화의 표준편차가 발생하면, 후보 개정 충돌로 취급됩니다. 예비 발표는 최종 개정과 종종 다릅니다. 파이프 라인은 두 값을 기록하고 revised 날짜의 값이 처음 공개된 후 업데이트될 때 표시합니다.
단계 5: 사업 일절의 무결성
단계 5 업무 일일적 무결성
최종 검증 단계에서는 미묘하지만 중요한 한계점을 해결합니다. announcement_datetime 유효한 일일일일 시장 시간대 통계에 따르면, 통계에 관한 통계에 의하면, 통계청과 중앙은행은 주말이나 공휴일에 통지를 발표하지 않습니다.
검증자가 전화합니다 is_valid_announcement_date(currency, local_date), 코드베이스에 유지되는 통화 시간대 정의 및 완전한 휴가 달력과 날짜를 비교하는 것입니다. API AUD, EUR, GBP, JPY, USD, CAD, CHF, NZD 및 다른 모든 에 의해 서비스되는 모든 통화에는 자체 독립 시간대 및 휴가 테이블이 있습니다. 통화는 FX 세션에서 상속되지 않습니다. 뉴욕의 금요일은 시드니의 토요일이 될 수 있으며 검증자는 이것을 정확하게 처리합니다.
일일 유효성 확인 (간단화)
def is_valid_announcement_date [공고 유효한 날짜](currency: str, local_date: date) -> bool: tz = CURRENCY_TIMEZONE[currency] # 주말을 거부하라 if local_date.weekday() >= 5: 반환 False # 공휴일을 거부하라 if local_date in _build_holiday_set(currency, local_date.year): 반환 False 반환 True
계산된 날짜가 이 검사를 실패하면, next_valid_announcement_date 다음 일일까지 진행합니다. 예를 들어 다음 월요일까지 크리스마스 발표를 롤링합니다. 이것은 API 소비자에게 제공되는 출시 달력 엔드포인트에 수동 청소없이 거래 달력에서 직접 사용할 수있는 날짜가 항상 포함되어 있음을 보장합니다. 이러한 일일 규칙은 또한 카탈로그의 통화 중 시간이 부족하거나 휴가 데이터가 없으면 빌드 실패하는 CI 테스트 스위트에서 시행됩니다.
발매 일정에 대한 정확성: 연산 연산 종료 시점부터 다가오는 이벤트 날짜는 다음 FED 회의 또는 RBA 금리 결정과 같이 통화 시장 시간대에 유효한 일일로 보장됩니다. /api/v1/calendar/{currency} 이 검증된 스케줄을 직접 반영합니다.
===== 감시 ======
지속적인 감시 및 경고
검증 파이프 라인을 한 번 통과하는 것은 충분하지 않습니다. 파이프라인은 일정으로 실행됩니다. 클라우드 작업 및 백필 워크플로우에 의해 트리거됩니다. 그리고 각 실행은 모니터링 레이어를 먹이는 구조화된 텔레미터리를 생성합니다.
단계적 경고
파이프라인 단계의 장애는 클라우드 로깅으로 즉시 입력하여 분류합니다.
컨텐츠 해시
모든 파이어스토어 글에는 content_hash 시끄러운 상류 수정들을 감지하고 표면으로 내보내는 것.
고장난 점검
독자는 저장된 데이터가 요청된 범위에서 N일 이상 뒤떨어지는 것을 감지하고, 침묵으로 노후된 값을 반환하는 대신 간격 신호를 표면으로 나타냅니다.
피처가 데이터를 반환하지 않을 때 네트워크 타임 아웃, 상류 사이트 변경 또는 응답 구조 변경 파이프 라인은 요청 시간에 상류 호출을 다시 실행하지 않습니다. 대신 검증 실패를 발산하고 빈 결과를 반환합니다. DataUnavailableError 이것은 일시적으로라도 API 계층에 도달하는 데서 구식 또는 부분적으로 검증된 데이터를 방지합니다.
===== 수정 처리 ======
수정 및 재설정 을 처리 하는 것
매크로 데이터 수정은 삶의 사실이다. 초기 GDP 추정치는 두 번 또는 세 번 수정된다. 월급은 크게 재설정된다. 파이프 라인은 묵묵히 덮어쓰기보다는 수정을 명시적으로 처리한다:
- 첫 인쇄물 보관: 파이프라인은 주어진 값의 첫 번째 값을 저장합니다.
(currency, indicator, date)과 함께revised: false깃발 - 수정 감지: 다음의 섭취 시, 날짜의 값이 지표의 수정 문턱보다 더 많이 변경되면 문서는 업데이트되고
revised: true설정되어 있습니다. - 역사 보존: 원래의 첫 인쇄 값은
prior_val감사 및 비교 목적으로 - API 투명성: -
revised이 필드는 API 응답에 노출되어 있어 소비 응용 프로그램은 최종 판독에서 예비 판독을 구별할 수 있습니다.
이것은 초판 인쇄와 후속 수정이 수만 개의 일자리로 다를 수 있는 비 농업 임금 등 지표에 가장 중요합니다. 농부 외의 임금 종합-
API 소비자들에게 무슨 의미일까요?
API 소비자 들 에게 무슨 의미 인가
이 파이프 라인의 실질적인 결과는 API에 대한 문의를 하는 모든 사람들에게:
- 아니
NaN아니면null일련의 값 유효하지 않은 값이 있는 레코드는 구멍으로 통과하는 대신 단계 2에서 제외됩니다. - 믿을 수 있는 날짜 응답의 모든 날짜는 해당 통화 시장의 일일에 유효한 달력 날짜이며 거래 달력이나 백트테스팅 엔진에서 직접 사용할 수 있습니다.
- Announcement timestamps at second precision 사용 가능 한 경우
announcement_datetime정식 발표의 정확한 UTC 초를 반영하고, 자정 포지셔널을 반영하지 않습니다. - 수정 표지판
revised필드에서 사전 또는 최종 판독을 할 것인지 구별 할 수 있습니다. - 일관성 있는 지표 단위 비율 지표는 항상 소수점 (예:
5.25아니0.0525), 중앙은행 공식 웹사이트에 있는 표현과 일치합니다.
어떤 지표 정책금리, 주력 CPI, 실업 에 대한 문의와 응답은 이미 다섯 단계를 통과했습니다. 지표 카탈로그는 각 시리즈를 먹이는 출처를 정확하게 문서화하여 모든 데이터 포인트의 출처가 독립적으로 확인할 수 있습니다.
CTA를 종료합니다.