Как мы очищаем данные
Наш подход к качеству данных, подробно.
Данные о качестве воздуха с реальных датчиков — это хаос. Приборы ломаются. Показания скачут без видимой причины. Датчик зависает и часами передаёт одно и то же число. Государственная станция меняет единицы измерения без предупреждения.
Если публиковать эти данные как есть, люди сделают неверные выводы. Если тихо удалять плохие части, люди не смогут проверить, что вы сделали. Ни один из этих вариантов нас не устраивает.
Наш подход — быть тщательными и прозрачными: проверить всё что можно, отметить каждую проблему открыто и дать людям увидеть, что именно мы сделали и почему. Вот как.
Архитектура
Три уровня, один принцип
Оригинальные данные священны. Мы никогда их не модифицируем. Вместо этого мы строим чистые данные поверх них — и сохраняем связь между ними, чтобы любой мог проследить любое опубликованное значение до его исходного источника.
Уровень 0
Сырое хранение
Точные ответы, полученные от каждого API, сохранённые как есть. Одна таблица на источник. Ничего не изменено, ничего не потеряно. Это наша основа.
Уровень 1
Чистые и гармонизированные
Все источники приведены к общим единицам, все измерения в едином формате. Каждая строка несёт флаги качества и ссылку на исходные данные. Здесь происходит очистка и валидация.
Уровень 2
Опубликованные открытые данные
Только измерения, прошедшие все проверки качества. Это то, что вы скачиваете — файлы Parquet, списки станций CSV, GeoJSON для картографии. Чистые, надёжные, готовые к использованию.
Контроль качества
Четыре уровня проверок
Каждый уровень ловит разные виды проблем. Измерение должно пройти все четыре, прежде чем попадёт в опубликованный набор данных.
На входе
Ещё до того, как данные попадут в систему, сама база данных применяет базовые правила — обязательные поля не могут быть пустыми, дубликаты отклоняются, координаты должны быть валидными, принимаются только известные коды параметров. Сломанные или неполные ответы API отлавливаются здесь.
Во время очистки
При преобразовании сырых данных в гармонизированный формат каждое измерение проверяется индивидуально: физически ли возможно это значение? PM2.5 выше PM10 (что обычно указывает на проблему датчика)? Отрицательная ли концентрация? Каждая проблема получает конкретный флаг.
Глубокий статистический анализ (PM2.5)
PM2.5 — наш важнейший параметр и наиболее подверженный проблемам датчиков. Мы проводим выделенный многоэтапный процесс очистки:
- Жёсткий предел — значения выше 1 000 мкг/м3 отмечаются как невалидные
- Подозрительные станции — датчики, передающие одно и то же значение более 80% времени или с неправдоподобно высокими базовыми уровнями
- Статистические выбросы — с использованием робастных Z-оценок, адаптирующихся к локальным условиям каждой станции
- Скачки — изолированные одноточечные прыжки, не совпадающие с окружающими показаниями
- Зависшие датчики — одно и то же значение повторяется 6 и более часов подряд
Финальная валидация
Перед публикацией мы запускаем две независимые системы валидации по всему набору данных. Если любая из них находит проблему — даже одну непройденную проверку — публикация блокируется до решения проблемы.
Детали
Проверки валидации
Это конкретные проверки, которые запускаются перед каждой публикацией. Ошибки блокируют экспорт полностью. Предупреждения логируются и проверяются.
| Проверка | Критичность | Что отлавливает |
|---|---|---|
| out_of_range | error | Значения за физическими пределами |
| negative_values | error | Отрицательные концентрации |
| invalid_floats | error | Значения NaN, Infinity |
| orphan_measurements | error | Измерения без зарегистрированной станции |
| duplicate_measurements | error | Дубликаты, которых не должно быть |
| pm25_exceeds_pm10 | warning | Известная проблема датчиков AirKaz |
| stuck_sensors | warning | Зависшие показания датчиков |
| spikes | warning | Резкие скачки значений |
| stale_stations | warning | Активные станции без данных 48+ часов |
Мы знаем, что такой уровень детализации — не для всех. Большинство людей просто хотят скачать данные и верить, что они чистые. Мы надеемся, что так и есть.
Но для тех, кто хочет заглянуть под капот — исследователей, инженеров, всех, кто обжигался на плохих данных — мы хотим, чтобы всё было видно. Методология, флаги, сырые оригиналы. Таким проектом мы хотим быть.