В архиве городской станции есть строка
11/03/2004;04.00.00;-200;1011;….
Что произошло в четыре утра? Концентрация угарного газа стала равна минус
двумстам? Эталонный анализатор молчал, а другой сенсор продолжал работать?
Или программа, читавшая файл, превратила служебный код в физическое число?
Ответ нельзя получить из одной ячейки. Придётся восстановить путь от воздуха у
дороги до таблицы.
Четыре утра внутри одной строки
Возьмём открытый набор
UCI Air Quality.
В нём собраны почасовые показания станции, стоявшей у дороги в итальянском
городе с марта 2004 по февраль 2005 года. Пять металл-оксидных сенсоров
реагировали на смесь газов, а эталонные анализаторы отдельно измеряли
концентрации CO, NOx, NO2 и других веществ. Карточка UCI указывает 9 358
наблюдений и 15 признаков. В файле AirQualityUCI.csv после удаления пустого
хвоста читаются 9 357 непустых почасовых строк. Эти два числа надо хранить
вместе: первое описывает запись в каталоге, второе получено конкретным парсером
из конкретного файла. Диапазоны дат тоже расходятся. Карточка описывает период
«март 2004 — февраль 2005», а текущие байты CSV начинаются 10 марта 2004 года
в 18:00 и заканчиваются 4 апреля 2005 года в 14:00. Время записано как местное;
часовой пояс источник не сообщает.
Полная интересующая нас строка начинается так:
11/03/2004;04.00.00;-200;1011;14;1,3;527;21;1818;34;1197;445;10,1;60,5;0,7465;;
Третий столбец CO(GT) должен содержать концентрацию CO в
. Вместо неё стоит -200. Четвёртый столбец
PT08.S1(CO) хранит отклик металл-оксидного сенсора, равный 1011 в условных
единицах прибора. Значит, воздух не исчез и станция не выключилась целиком.
Отсутствует один результат измерительной цепочки. Соседний прибор сохранил
сигнал.
В этом уроке строка будет нашей уликой и лабораторным объектом. Мы выясним, что считается наблюдением, как измерение создаёт число, почему причины пропусков влияют на среднее, откуда берутся псевдоповторы, как измерить согласие разметчиков и каким образом будущее просачивается в признаки. В уроке 01 мы отделяли модель от системы, а в уроке 02 отделяли физический механизм от подгонки. Теперь сделаем ещё один разрез: отделим мир от файла, который его описывает.
Строка хранит путь, а не воздух
Воздух возле дороги содержит тысячи веществ, капли воды и частицы пыли.
Сенсор реагирует лишь на часть этой смеси. Его чувствительный слой меняет
электрическое сопротивление, схема превращает изменение в напряжение,
контроллер усредняет сигнал за час, а программа записывает результат в
десятичном формате. Эталонный анализатор идёт по другой ветви. Он выдаёт
CO(GT), если измерение прошло успешно, либо служебный код, если результата
нет.

После общего объекта схема раздваивается. Верхняя ветвь ведёт через
металл-оксидный сенсор к PT08.S1(CO)=1011, нижняя через отдельный эталонный
анализатор к CO(GT)=-200. Каналы встречаются лишь при сборке строки.
Последний шаг принадлежит парсеру: именно он должен превратить код -200 в
NA.
Обозначим физическую величину, которую хотим узнать, через . Пусть прибор в момент выдаёт наблюдение . Простейшая модель измерения имеет вид
Здесь означает систематическое смещение, а описывает случайный разброс. Если и ошибки симметричны, среднее повторных измерений приближается к . При старении сенсора смещение может медленно расти. Тогда тысяча повторов уменьшит случайный шум, но не исправит дрейф.
Часто прибор сначала выдаёт сырой сигнал . Калибровочная зависимость связывает его с концентрацией:
Если коэффициенты и найдены по эталонным смесям, концентрацию оценивают так:
У этой формулы есть дата годности. Замена партии сенсоров, другая температура, старение чувствительного слоя или новая прошивка могут изменить и . Таблица без версии калибровки выглядит точной, но число уже нельзя уверенно перевести обратно в физическую величину.
Объект, наблюдение и строка не обязаны совпадать
В UCI Air Quality одна строка описывает один час работы станции. Это единица наблюдения файла. Но физический объект можно выбрать иначе: отдельная молекула, мгновенное состояние воздуха, сутки, эпизод смога или весь год работы станции. Выбор зависит от вопроса.
Предположим, мы предсказываем CO через час. Тогда естественное наблюдение связано с моментом времени: вход содержит сведения до , цель относится к . Если изучаем долговременный дрейф сенсора, объектом становится прибор, а почасовые строки служат повторными измерениями одного объекта. При сравнении районов единицей может быть станция или пара «станция, неделя». Число строк не подсказывает правильный ответ.
Запишем структуру строки индексами:
где обозначает станцию, время, а признак. Даже если в файле только одна станция, индекс полезен. Он напоминает, что перенос на другую станцию ещё не проверен. Таблица из 9 357 часов может быть большой по строкам и очень маленькой по числу мест.
Полезно отдельно назвать три ключа. Ключ строки отличает записи в файле.
Ключ сущности объединяет измерения одного физического объекта.
Ключ независимой группы объединяет строки, которые могут делить скрытую
причину. Для автобусных данных строка имеет ключ
(trip_id, stop_id, timestamp), сущность задаёт trip_id, а зависимая группа
может включать все рейсы одного автобуса за смену.
Единицы нельзя восстановить по величине числа
Число 1011 само по себе не говорит, что измерено. Это могут быть милливольты, сопротивление, код аналого-цифрового преобразователя или уже преобразованная концентрация. Даже знакомые столбцы опасны: температура бывает в градусах Цельсия и Фаренгейта, давление записывают в паскалях и миллиметрах ртутного столба, время хранят как местное или UTC.
Пусть скорость сохранена в километрах в час, а формула ожидает метры в секунду. Преобразование выглядит просто:
Если его забыть, численная ошибка равна множителю . Никакой сложный
алгоритм не догадается о единице из заголовка speed, если обучающие и
проверочные файлы ошибочно обработаны одинаково. Метрика будет хорошей внутри
испорченного соглашения.
Для каждого числового столбца нужен паспорт единицы:
| Поле | Смысл | Единица или шкала | Допустимые значения | Когда доступно |
|---|---|---|---|---|
CO(GT) | концентрация по эталонному анализатору | неотрицательное число; -200 значит пропуск | после часового окна | |
PT08.S1(CO) | отклик сенсора, номинально чувствительного к CO | условные единицы прибора | положительный код; -200 значит пропуск | после часового окна |
T | температура воздуха | проверяется по месту и сезону | после часового окна | |
RH | относительная влажность | от 0 до 100 | после часового окна | |
AH | абсолютная влажность | величина по паспорту UCI | неотрицательное число | после часового окна |
Последний столбец нельзя переименовывать в привычные единицы по догадке. Сначала читают описание источника. Если метаданные неполны, так и пишут: «единица требует подтверждения». Неопределённость лучше выдуманной точности.
Размерности помогают поймать часть ошибок. Если модель теплового баланса складывает температуру и мощность, формула сломана до знакомства с данными. Однако размерностно верная формула ещё не доказывает правильность измерения: два датчика могут выдавать и иметь разные смещения.
Код пропуска может выглядеть как число
В старых форматах пропуск часто кодировали числом: -999, 9999, 0.
Причина была практической. Табличные программы и приборы не всегда умели
хранить особое значение NA. Проблема появляется позже, когда служебный код
попадает в арифметику.
Пусть четыре настоящих измерения CO равны
, , , , а пятая ячейка
содержит -200. Правильное среднее по наблюдаемым значениям:
Если код принять за число, получится
Такую ошибку легко заметить по отрицательному среднему. Сложнее случай, когда пропуск кодируют нулём, а ноль физически возможен. Тогда автоматическое правило не отличит отсутствие измерения от чистого воздуха.
Индикатор наблюдаемости отделяет факт от значения
Для математического разговора введём индикатор
Само значение может быть скрыто, но видно: ячейка заполнена либо пуста. В полной, обычно недоступной таблице существовали бы пары . В опубликованной таблице при остаётся только индикатор.
Среднее по полному набору из часов равно
Обычное среднее после удаления пустых строк записывается иначе:
Индекс cc напоминает термин complete cases: в расчёт входят только
наблюдаемые случаи. Эта формула отвечает на вопрос «каково среднее среди
сохранённых строк?». Она совпадёт со средним полного потока лишь при
дополнительных условиях.
Пусть четыре возможных значения равны , а первые три всегда сохраняются. Последнее сохраняется с вероятностью . Полное среднее:
Если редкий пик исчез, complete-case mean равно
Если пик сохранён, среднее равно 19. Вероятностное среднее этих двух возможных результатов для конкретного отношения будет
Это наглядный расчёт, но для больших выборок удобнее исследовать предел отношения сумм. Он приводит к условному среднему среди наблюдаемых.
Откуда берётся смещение complete-case mean
Пусть обозначает случайно выбранное значение потока, а
задаёт вероятность его увидеть. Распределение среди сохранённых строк перевешивает значения с большой . По формуле условного ожидания
При фиксированном среднее индикатора равно , поэтому
Кроме того,
Следовательно,
Воспользуемся тождеством
После деления получаем точную формулу:
Знак смещения читается без вычислений. Если большие концентрации теряются чаще, убывает и ковариация отрицательна. Среднее сохранённых значений занижено. Если прибор чаще включают во время подозрительных эпизодов, вероятность наблюдения растёт вместе с , и среднее завышается.
У конечной выборки отношение случайных сумм имеет собственную погрешность. Формула выше описывает среднее распределения сохранённых случаев и предел complete-case mean при большом числе независимых наблюдений. Она не обещает, что каждый маленький файл даст одно и то же число.
Три механизма с одной ожидаемой долей пропусков
Названия MCAR, MAR и MNAR описывают не внешний вид таблицы, а зависимость индикатора от величин. Пусть означает CO, а содержит наблюдаемые сведения: час, температуру, влажность и состояние питания.
При MCAR пропуск не зависит ни от , ни от :
Пример: независимый генератор случайно удалил 36% строк. Complete-case mean останется шумным, но систематического перевеса высоких или низких значений нет. В реальном приборе чистый MCAR встречается редко. Даже перебой питания может быть связан со временем суток или погодой.
При MAR после учёта наблюдаемого скрытое значение больше не меняет вероятность сохранения:
Например, ночные измерения теряются чаще, но час известен для каждой строки. Поскольку CO распределён по часам неравномерно, простое среднее всё равно смещается. Зато вероятность наблюдения можно оценивать по известному времени.
При MNAR зависимость от скрытого значения сохраняется даже после учёта доступных признаков:
Так ведёт себя анализатор, который насыщается на большой концентрации. Именно те значения, которые надо было измерить, влияют на собственное исчезновение. По одной наблюдаемой таблице такую зависимость нельзя восстановить без дополнительной модели, резервного прибора или контролируемого опыта.
Чтобы сравнить механизмы, зафиксируем единый вычислительный протокол. Возьмём 48 последовательных значений CO и обозначим номер строки через . Первый час равен 16:00, поэтому настоящий местный час строки вычисляется так:
Целевая доля пропусков равна , а целевая средняя вероятность наблюдения . Сначала зададим сырые оценки:
Для каждого режима подбирается одно смещение :
Операция заменяет значения ниже на , выше на , а остальные не трогает. Смещение ищется бисекцией. Поэтому ожидаемая доля пропусков во всех трёх режимах ровно 36%, хотя число пропусков в одной реализации может различаться.
Случайные числа тоже общие. Начинаем с и считаем в беззнаковой 32-битной арифметике:
Одна и та же последовательность используется для MCAR, MAR и MNAR, после чего
Так переключение режима меняет только вероятности, а не скрытую случайность. Это приём общих случайных чисел: разность результатов становится менее шумной.

Во всех трёх панелях используются 48 последовательных значений CO(GT) с
24 марта 2004 года 16:00 до 26 марта 2004 года 15:00. Синие точки сохранены,
красные кольца скрыты симулятором с seed 23. Ожидаемая доля пропусков равна
36% в каждой панели. Реализованные доли составили 31,25% для MCAR, 25% для
MAR и 33,33% для MNAR. Полное среднее равно
. Наблюдаемые средние равны соответственно
, и , а нормированные IPW-оценки равны
, и .
Один рисунок не доказывает механизм. Реальные пропуски позволяют сравнить частоты по часу, погоде и версии прибора, но MNAR касается скрытых значений. Его нельзя окончательно проверить по ним же. Это допущение о процессе сбора. Чувствительный анализ задаёт несколько правдоподобных механизмов и смотрит, насколько меняется вывод.
Поправка обратными вероятностями
Если для каждой строки известна вероятность сохранения , редкие наблюдаемые случаи можно сделать тяжелее. Оценка Хорвица-Томпсона для среднего полного набора записывается так:
Для фиксированного полного набора пусть содержит все величины, от которых зависит дизайн отбора, и
Здесь обозначает зафиксированный набор значений и правил симуляции. Тогда у каждого слагаемого правильное условное ожидание:
Значит, при верных вероятностях и фиксированном полном наборе среднее оценки равно полному среднему. На практике часто используют нормированную оценку Хайека:
Она не обязана быть точно несмещённой в маленьком наборе, зато меньше зависит от случайного числа сохранённых строк. Аббревиатура IPW расшифровывается как inverse probability weighting, взвешивание обратными вероятностями.
Поправка требует трёх условий. Вероятности должны описывать настоящий механизм. Для каждого интересующего типа строки нужна ненулевая вероятность наблюдения. Наконец, очень малые создают огромные веса и большую дисперсию. Если , одна сохранённая строка получает вес 50 и может определять весь ответ. Если оценены по той же неполной таблице, равенство выше уже не доказывает качество модели вероятностей; её допущения проверяют отдельно.
Нельзя оценить качество весов, сравнив их только с той же неполной таблицей. Нужен резервный канал измерения, журнал сбоев, специальный период сплошного наблюдения либо ограничения из физики. IPW исправляет известный отбор. Она не создаёт сведения о режимах, которые никогда не наблюдались.
Лаборатория отбора: видимая таблица против полного потока
Лаборатория использует те же 48 реальных значений CO(GT), что и рис. 3.2.
Начало фрагмента: 24 марта 2004 года, 16:00. Конец: 26 марта, 15:00. Единица
измерения CO равна . Поверх источника симулятор создаёт
индикаторы . Поэтому красное кольцо не означает настоящий пропуск UCI:
оно показывает значение, намеренно скрытое в опыте.
Проведите четыре серии.
- Выберите MCAR, долю пропусков 36% и seed 23. Запишите полное среднее, среднее наблюдаемых и IPW. Сверьте три разные строки интерфейса: цель, ожидаемую долю и долю, полученную в этой реализации.
- Не меняя долю и seed, переключитесь на MAR. Посмотрите на график вероятности справа. Числа в таблице останутся прежними; изменятся только и сравнения . Свяжите ступеньки с местным часом суток.
- Переключитесь на MNAR. Найдите час с большим CO и малой вероятностью сохранения. Таблица под графиком показывает , , и вклад для ближайших строк. Верните исходный опыт кнопкой «Сбросить: 23».
- Создайте пять новых seed. Для каждого запишите ошибку обычного среднего и oracle-IPW относительно полного. Сравнивайте не один удачный запуск, а распределение ошибок.
Лаборатория специально показывает полное среднее, хотя в настоящей задаче оно скрыто. Это позволяет проверить математическую поправку. После проверки «оракульский» канал надо мысленно закрыть и спросить, какие сведения доступны исследователю.
Выброс, редкое событие и смена единиц
Большое число может быть ошибкой прибора. Оно же может описывать редкий эпизод смога, аварию или пожар. Третий вариант прозаичнее: часть файла записана в других единицах. Все три случая выглядят как точка далеко от основной массы, но требуют разных действий.
Пусть соседние значения CO близки к , а одна строка содержит 18. Для ошибки измерения ищут признаки насыщения сенсора, сервисный флаг, разрыв питания и расхождение с резервным прибором. Для редкого реального события проверяют соседние станции, направление ветра, журнал дорожного движения и длительность эпизода. Для смены единиц ищут резкую границу версии, после которой все значения умножены на один коэффициент.
Можно записать простую модель смены шкалы:
Если постоянно, отношение показания к эталонному каналу скачет около . Один физический выброс обычно не меняет масштаб всех последующих часов.
У выброса нет универсального статуса. Он задаётся относительно модели и процедуры. Значение 18 может быть невозможным для одного прибора, но допустимым для другого. Перед удалением надо назвать проверяемую гипотезу и наблюдение, которое её опровергнет.
Когда тысяча кадров равна нескольким поездкам
Представим четыре автобусных рейса. Камера снимает дорогу каждую секунду, и из каждого рейса берут по 12 кадров. В таблице 48 строк. Соседние кадры почти одинаковы: тот же автобус, погода, объектив и участок дороги. Случайное разбиение строк раздаст кадры каждого рейса и в обучение, и в тест.

Слева показана файловая структура, в центре случайный split, справа split по рейсам. Красный тест в центральной панели выглядит отдельным, но каждый тестовый рейс представлен и синими кадрами в train. Схема утверждает пересечение групп, а не соседство конкретных кадров во времени. Справа тестовый рейс D целиком отделён.
Зависимые строки, ошибочно принятые за независимые повторы, называют псевдоповторами. Они увеличивают размер файла, но дают меньше новой информации, чем независимые объекты.
Количественный ориентир можно получить из модели внутригрупповой корреляции. Пусть есть независимых групп, в каждой по строк. Дисперсия отдельной строки равна , корреляция любых двух строк одной группы равна . Тогда дисперсия среднего по строк:
Величину
называют дизайн-эффектом. Эквивалентное число независимых наблюдений:
Если 20 рейсов дали по 30 строк и , в файле 600 строк, но
Это не буквальный подсчёт рейсов, а сравнение дисперсий в выбранной модели. Число ясно показывает масштаб самообмана: 600 сильно зависимых строк дают точность примерно как 25 независимых.
Разбиение должно повторять будущий перенос
Train/test split не имеет единственной правильной формы. Он моделирует конкретное будущее. Если система будет работать на новых часах той же станции, нужно временное разбиение. Если её перенесут на новые станции, тестовые станции не должны встречаться в обучении. Если появятся новые пациенты, делят по пациентам.
Пусть строки имеют группы . Условие группового разбиения:
Для временного прогноза добавляется порядок:
Иногда нужны оба условия. Например, проверка новых автобусов в будущую неделю может оставить первые недели и часть автобусов для обучения, следующую неделю для настройки, а последнюю неделю новых автобусов для финального теста.
Случайный seed нужен для воспроизводимости внутри допустимых групп. Он не исправляет неверную единицу разбиения. Если кадры одного рейса раскиданы по обеим частям, seed 17 лишь позволяет повторить утечку.
В уроке о честной проверке мы подробно разделим train, validation и test. Здесь достаточно правила: тест имитирует ещё не увиденный случай, а не случайно выбранную строку знакомого случая.
Разметчик тоже измерительный прибор
В задачах классификации метка появляется после инструкции и человеческого решения. Разметчик видит объект не целиком: врач смотрит снимок, модератор читает сообщение, эксперт слушает короткий фрагмент. Его ответ зависит от классов, примеров в инструкции, усталости и неоднозначности объекта.
Пусть два разметчика A и B относят 130 объектов к классам «обычно», «спорно» и «опасно». Их совместные ответы собраны в матрицу
Строки относятся к A, столбцы к B. Диагональ содержит совпадения. Простая доля согласия:
Часть совпадений возникла бы из-за разных частот классов. Суммы строк равны , суммы столбцов . Если ответы разметчиков независимы, но каждый сохраняет свои частоты, ожидаемая доля совпадений:
Коэффициент Коэна вычитает это базовое согласие:

Матрица показывает, где именно расходятся люди. Число считает все совпадения, оценивает совпадение из-за частот классов, а измеряет оставшуюся долю возможного согласия. Одного итогового числа мало: восемь объектов A назвал «обычно», а B «спорно», и это отдельный повод открыть инструкцию.
Каппа не измеряет истинность меток. Два человека могут идеально согласиться и одинаково ошибаться. При очень редком классе значение чувствительно к частотам. Поэтому вместе с публикуют матрицу, определения классов, число разметчиков и способ разрешения конфликтов.
Разногласие может быть свойством объекта
Если эксперты расходятся на случайных объектах, возможна невнимательность. Если разногласия сосредоточены на тёмных снимках, коротких записях или сообщениях на смешанном языке, таблица сообщает о границе определения класса.
Есть несколько способов хранить такую неопределённость. Можно оставить все голоса . Можно сохранить распределение:
Можно передать спорный объект старшему эксперту, но тогда надо записать первичные голоса и правило арбитража. Жёсткая метка большинства удобна, однако она скрывает разницу между голосованием и .
В уроке о классификации метки станут целями функции потерь. Сейчас надо запомнить происхождение : метка тоже измерена, хотя прибором был человек. Для неё нужны версия инструкции, идентификатор разметчика, время ответа и доступный ему материал.
Н. В. Смирнов и сравнение эмпирических распределений
Российский математик Николай Васильевич Смирнов (1900–1966) исследовал непараметрические методы и отклонения эмпирических распределений. В работе 1939 года он изучал распределения предельных отклонений, а позже развивал критерии согласия. Его имя осталось в критерии Колмогорова-Смирнова, который сравнивает накопленные распределения без выбора формы гистограмм.
Если и построены по двум выборкам, статистика имеет вид
Она полезна при аудите: можно сравнить распределение температуры до и после замены сенсора, train и test, строки с меткой и без неё. Само слово «большое» зависит от размеров выборок. Для двух независимых выборок из непрерывного распределения приближённое правило уровня имеет вид
При связях во времени, повторяющихся значениях и подборе момента разрыва этот порог применять механически нельзя. Подходящую перестановочную проверку строят так, чтобы она сохраняла группы или временные блоки; иначе перестановка снова притворится независимой. Даже значимое не объясняет причину. Время, прибор и механизм отбора всё равно придётся исследовать.
Историческая линия полезна здесь по существу. Качество данных проверяют не только по отдельным ячейкам. Иногда дефект виден в расхождении целых распределений. Формальные критерии дают шкалу, а содержательный диагноз связывает её с процедурой измерения.
Утечка приходит из будущего
Представим задачу: в 08:00 надо предсказать задержку автобуса на конечной остановке. Расписание, маршрут, погода и текущая позиция уже известны. Фактическое время прибытия появится в 08:27. Если добавить его в признаки, модель легко вычислит целевую задержку.
Обозначим момент прогноза через . Для каждого признака введём время доступности . Допустимый признак удовлетворяет условию
Это необходимое, но не достаточное условие. В момент должна существовать вся процедура построения признака, включая исходные строки и уже обученные параметры преобразования. Столбец с ранней временной меткой всё равно протекает, если его нормировали средним по полному году или пересчитали после получения тестовой части. Для каждой границы split такие параметры заново находят только по её обучающему прошлому.
Если , признак приходит из будущего. Формально он может сильно коррелировать с целью и прекрасно работать в случайном тесте, поскольку тот же столбец присутствует по обе стороны. В реальном запуске его ещё нет.

Зелёная отметка фиксирует 08:00. Стрелка от actual_arrival возвращается из
08:27 к моменту прогноза: столбец, доступный только в будущем, кодирует ответ
минут, хотя в таблице выглядит как обычное время.
Утечка бывает менее прямой. «Итоговый статус обращения» может назначаться после решения. Среднее за сутки включает часы после прогноза. Нормализация по полному датасету использует статистику тестового периода. Дубликат объекта в train и test переносит его содержание через границу.
Можно представить утечку графом причин. Будущее прибытие влияет и на метку, и на поздний служебный столбец. Если модель получает этот столбец, путь от цели к входу открыт. Строгое временное разбиение не спасает, пока сам признак недоступен в момент применения.
Выборка видит удобную часть мира
Даже полностью заполненная таблица может быть смещена. Датчики ставят там, где есть электричество и связь. Онлайн-опрос читают люди, решившие открыть ссылку. Архив больницы содержит пациентов, попавших к врачу. Механизм включения строки в набор похож на механизм пропуска, но теперь за пределами файла остаются целые объекты.
Пусть означает попадание объекта в выборку. Средний риск модели в таблице:
Нас интересует риск в целевом мире:
Они совпадают при специальных условиях. Одинаковый формат столбцов ничего не говорит о распределениях. Станция у оживлённой дороги не описывает весь город, а один итальянский город не описывает любой климат.
Если известна вероятность отбора , снова появляются веса. Но отсутствующий район с нельзя восстановить умножением. Нужен новый сбор.
Описание целевой совокупности должно быть конкретным: город, период, тип станции, диапазон погоды, режим дорожного движения. Фраза «модель предсказывает качество воздуха» скрывает границы опыта.
Паспорт связывает вывод с байтами
Результат нельзя повторить по фразе «мы взяли UCI Air Quality». Источник может обновиться, парсер по-разному прочитает десятичную запятую, а фильтр изменит число строк. Нужна цепочка происхождения, или lineage.

Сырой файл остаётся неизменным. Схема печатает точный размер, полный SHA-256, фактический диапазон дат и честную отметку о неизвестном часовом поясе. Временной split режет ряд только между целыми неделями. Две нижние строки сохраняют конфликты карточки с текущими байтами и полем лицензии.
Для нашего источника минимальная запись выглядит так:
| Поле паспорта | Зафиксированное значение |
|---|---|
| карточка | https://archive.ics.uci.edu/dataset/360/air+quality |
| архив | https://archive.ics.uci.edu/static/public/360/air+quality.zip |
| DOI | 10.24432/C59K5F |
| снимок метаданных | 18 июля 2026 года |
| файл | AirQualityUCI.csv, версия из архива UCI |
| размер CSV | 785 065 байт |
| SHA-256 CSV | 13277ae5d8581e80b7be09d47c7d3d06fe9b8e957078f2cf6e859f955e62f996 |
| формат | разделитель ;, десятичная запятая, пустые два хвостовых столбца |
| пропуск | код -200 заменяется на NA отдельно в каждом измерительном столбце |
| результат чтения | 9 357 непустых почасовых строк после удаления пустого хвоста |
| временной охват байтов | 10 марта 2004 года 18:00 — 4 апреля 2005 года 14:00 |
| время | местное; источник не сообщает часовой пояс |
| будущий перенос | временной split по целым неделям; перенос на новую станцию этот файл не проверяет |
| коллизия дат | карточка: март 2004 — февраль 2005; текущий CSV: до 4 апреля 2005 |
| коллизия условий | старое примечание: только исследовательские цели; поле License: CC BY 4.0 |
Размер и хэш относятся к текущим байтам, а не к названию набора. Для
воспроизводимости также записывают версию программы, порядок сортировки, seed
и правила разбиения. Если часовой пояс не опубликован, запись
local time; timezone unspecified честнее догадки UTC+1: итальянский год
содержит переход на летнее время.
Паспорт не обязан быть красивым. Он обязан связывать каждое число отчёта с воспроизводимым шагом. В уроке 12 мы соберём расширенный паспорт с карточками признаков и ограничениями применения.
Аудит начинается до первой модели
Первый проход по таблице можно сделать без обучения. Начните с объекта: сформулируйте, что означает строка и какие строки связаны. Затем проверьте схему: типы, единицы, допустимые диапазоны, специальные коды. После этого посчитайте долю пропусков по времени, группам и версиям приборов. Отдельно исследуйте дубликаты и почти одинаковые объекты.
Для каждого столбца полезна запись
Для каждой строки нужна пара
Для всего файла фиксируют источник, лицензию, снимок, хэш и цепочку преобразований. Эти записи короче будущего отчёта об ошибке.
Аудит заканчивается перечнем неопределённостей. Если неизвестна единица, пишут, что она неизвестна. Если причина пропусков может быть MNAR, проводят чувствительный анализ. Если в наборе одна станция, не обещают перенос на новые места. Такой отчёт выглядит скромнее рекламной метрики и даёт больше оснований для решения.
Семь вопросов к любой таблице
Перед тем как перейти к алгоритму, попробуйте ответить без общих слов.
- Что в мире считается одним объектом, а что одной строкой?
- Какая процедура превратила объект в число и в каких единицах?
- Как закодированы сбои, округление и пределы прибора?
- От чего зависит вероятность попадания значения или объекта в таблицу?
- Какие строки делят сущность, время, источник или разметчика?
- Был ли каждый признак доступен в момент будущего решения?
- Какая версия сырого файла, кода и split породила итоговую метрику?
Эти вопросы связаны. Неверная единица наблюдения портит split. Неописанный код пропуска меняет распределение. Поздний столбец создаёт утечку. Смешение версий выглядит как выброс. Поэтому «подготовка данных» не отдельная уборка перед настоящей математикой. Здесь определяется математический объект задачи.
Что мы теперь знаем о строке 04:00
Мы не восстановили скрытое значение CO(GT) за 11 марта 2004 года, 04:00.
Из соседнего сенсора нельзя честно вывести точную концентрацию без
калибровочной модели. Зато граница знания стала ясной.
Мы знаем, что -200 служит кодом пропуска в этом источнике. Знаем, что
PT08.S1(CO)=1011 сохранился, поэтому часть станции работала. Знаем единицу
эталонного CO и различаем её с условным откликом сенсора. Можем записать
для CO(GT) и для PT08.S1(CO). Не знаем, был ли механизм
пропуска MCAR, MAR или MNAR в этот час. Для ответа нужны журналы прибора,
другие каналы и закономерность пропусков во времени.
Именно так читают данные по-взрослому: не выдумывают отсутствующее число, а перечисляют измеренное, преобразованное и неизвестное. Таблица становится сильнее не после заполнения всех клеток, а после точного описания границ.