Sobes.tech
Back to questions
Middle
10

Как работать с неполными данными из разных серверов и таблиц?

Companies where asked
ПлатформаОФД

Answer from AI

sobes.tech AI

Что хотят услышать интервьюеры:

Нужно показать, что данные из разных источников можно не “склеивать силой”, а сначала привести к единому качеству и смыслу. Важно уметь находить пропуски, понимать их природу и выбирать стратегию обработки: удаление, импутацию, агрегацию или использование моделей, устойчивых к пропускам. Также ожидают понимание, что для разных таблиц и серверов критичны идентификаторы, согласование схем и контроль качества данных.

Определение:

Неполные данные — это данные, в которых часть значений отсутствует, не согласована или недоступна при объединении из разных источников. В задачах интеграции это обычно означает, что одна таблица содержит не все признаки, другая — не все ключи, а данные на разных серверах могут различаться по формату, времени обновления и качеству. Работа с такими данными включает: поиск пропусков, выравнивание схем, объединение по ключам, выбор стратегии заполнения пропусков и проверку итогового качества.

Пример использования:

Допустим, есть таблица клиентов в одной БД и таблица транзакций в другой. В первой у части клиентов нет возраста, во второй у части транзакций нет города клиента, а связь идет по client_id. Сначала данные объединяют по ключу, затем анализируют пропуски: возраст можно заполнить медианой по сегменту, а неизвестный город оставить как отдельную категорию "unknown", если это важно для модели.

import pandas as pd

clients = pd.DataFrame({
    "client_id": [1, 2, 3, 4],
    "age": [25, None, 41, None],
    "city": ["Moscow", "Kazan", None, "SPb"]
})

transactions = pd.DataFrame({
    "client_id": [1, 2, 3, 5],
    "amount": [1000, 2500, 700, 900]
})

df = transactions.merge(clients, on="client_id", how="left")

# Заполнение числового пропуска
df["age"] = df["age"].fillna(df["age"].median())

# Заполнение категориального пропуска
df["city"] = df["city"].fillna("unknown")

print(df)

Пояснение кода:

Сначала данные из двух таблиц объединяются по client_id через left join, чтобы сохранить все транзакции и добавить доступные атрибуты клиента. Затем числовой признак age заполняется медианой, что обычно устойчивее среднего при выбросах. Категориальный признак city заполняется строкой "unknown", чтобы модель или аналитика могли учитывать факт отсутствия значения отдельно от конкретного города.

Ключевые моменты:

  • Сначала нужно понять, почему данные неполные: пропуск на источнике, ошибка выгрузки, разные схемы или несоответствие ключей.
  • Объединение данных из разных серверов и таблиц лучше делать через стабильные ключи и заранее согласованную схему.
  • Стратегия обработки пропусков зависит от типа признака: удаление, медиана/мода, отдельная категория, интерполяция или модельная импутация.
  • Если пропуск сам по себе информативен, его важно сохранять как признак, а не просто скрывать заполнением.
  • Перед обучением модели нужно проверить, не внесло ли объединение дубликаты, смещение выборки или утечку данных.
  • Для production-пайплайна полезны валидации качества: доля пропусков, количество несовпавших ключей, контроль версий данных и мониторинг дрейфа.