3,583 papers
arXiv:2603.22332 70 20 мар. 2026 г. FREE

Семантическая импутация: как LLM заполняет пропуски в таблицах — и когда это обманывает вас

КЛЮЧЕВАЯ СУТЬ
LLM не считает пропущенные значения в таблице — она их вспоминает. Это не баг, но понимание этого меняет всё остальное. Метод позволяет за один запрос заполнять пропуски в таблицах — без кода, без статистических библиотек, без ручного подбора. Фишка: фраза «предоставляю подмножество датасета» — это не вежливость, а триггер. Она говорит модели: ты знаешь этот тип данных, используй то, что видела при обучении. Без неё модель не понимает, что от неё хотят, и начинает объяснять алгоритмы вместо того чтобы заполнять ячейки. Правильная структура: роль + триггер + блок ограничений — на выходе чистая таблица без мусора.
Адаптировать под запрос

TL;DR

LLM не вычисляет пропущенные значения в таблице — она их вспоминает. Когда вы просите заполнить пустые ячейки, модель обращается к знаниям из обучающего корпуса, а не строит статистическую модель на ваших данных. Это фундаментальное отличие от традиционного подхода, и из него вытекает всё остальное.

Главная находка: LLM отлично работает с "узнаваемыми" данными — публичными датасетами, типовыми отраслевыми форматами, стандартными бизнес-метриками. Она видела это в интернете. Но на синтетических или нетипичных данных она галлюцинирует — уверенно подставляет правдоподобные, но неверные значения. Нет знакомого контекста → нет надёжного результата.

Промпт решает структурную проблему: без правильного промпта LLM либо описывает алгоритм вместо того чтобы заполнить таблицу, либо объясняет логику рассуждений, либо подставляет "NaN". Исследователи нашли рабочую структуру: роль аналитика + фраза-триггер "предоставляю подмножество датасета" + блок ограничений. Эта комбинация даёт чистый, структурированный вывод без мусора.


🔬

Схема метода

ШАГ 1: Роль → "Ты — аналитик данных"
ШАГ 2: Триггер → "Предоставляю подмножество датасета [название/домен]"
ШАГ 3: Таблица → вставить данные с пропусками (пустые ячейки или NaN)
ШАГ 4: Ограничения → не запускай код / не объясняй / не ставь NaN / верни только заполненную таблицу
─────────────────────────────────────────────────────
Один промпт. Один запрос. Один вывод — чистая таблица.

🚀

Пример применения

Задача: Ты эйчар в российской IT-компании. Собрал таблицу по 50 кандидатам на позицию Python-разработчика с hh.ru и Хабр Карьера. У части — заполнена зарплатная вилка, опыт, грейд. У части — пропуски. Хочешь получить рабочую таблицу без дыр, чтобы отдать рекрутеру.

Промпт:

Ты — аналитик данных с опытом в HR-аналитике.

Я предоставляю подмножество датасета по кандидатам 
на позицию Python-разработчика с российского рынка труда.

В таблице ниже есть пропущенные значения (отмечены как [пусто]).
Заполни пропуски на основе типичных паттернов для этого домена.

Ограничения:
- Не объясняй логику заполнения
- Не пиши код
- Не ставь NaN, ?, или любые заглушки
- Верни только заполненную таблицу в том же формате

Таблица:
Грейд | Опыт (лет) | Зарплата (руб.) | Стек
Junior | 1 | [пусто] | Django, PostgreSQL
Middle | [пусто] | 250 000 | FastAPI, Redis, Docker
[пусто] | 6 | 380 000 | Python, Kafka, K8s
Senior | 8 | [пусто] | ML, PyTorch, Airflow

Результат: Модель вернёт таблицу с заполненными пропусками — без объяснений, без кода, без лишних слов. Значения будут соответствовать типичным паттернам российского IT-рынка (Junior + Django = зарплата в диапазоне junior-рынка, 6 лет опыта + Kafka/K8s = скорее всего Senior, и т.д.). Модель использует знания о рынке труда, которые она получила из открытых источников при обучении.


🧠

Почему это работает

Слабость LLM "в лоб" — когда просишь "заполни пропуски", модель не знает: выдать результат или объяснить процесс? Провести расчёт или описать алгоритм? Без инструкций поведение непредсказуемо: одна модель напишет "среднее значение по столбцу = X", другая попробует описать kNN-алгоритм текстом, третья подставит заглушки.

Сильная сторона LLM — огромный объём семантических паттернов. Модель "видела" тысячи таблиц, датасетов, отчётов по найму, финансовым показателям, медицинским данным. Она знает, что Junior Python-разработчик в России зарабатывает примерно столько-то, а не статистически считает это по вашим 50 строкам.

Как метод использует это: Фраза-триггер "предоставляю подмножество датасета" активирует нужный режим: модель понимает, что данные — часть чего-то знакомого, и обращается к паттернам из обучения. Блок ограничений убирает все альтернативные сценарии поведения. Модель получает одну возможную реакцию: заполнить таблицу.

Рычаги управления промптом: - Домен в триггере ("датасет по медицинским показателям" vs "датасет по финансам") → сильнее активирует нужный контекст - Детализация ограничений → убери строку "не объясняй" и увидишь рассуждения модели — полезно для отладки - Размер батча → большие таблицы (300+ строк) лучше резать на куски по 50-100 строк и отправлять отдельными запросами


📋

Шаблон промпта

Ты — аналитик данных.

Я предоставляю подмножество датасета из области {домен}.

В таблице ниже есть пропущенные значения, отмеченные как {маркер_пропуска}.
Заполни их на основе паттернов, характерных для этого домена.

Ограничения:
- Не объясняй логику
- Не пиши код
- Не используй {маркер_пропуска} или любые заглушки в ответе
- Верни только заполненную таблицу в том же формате

Таблица:
{таблица_с_пропусками}

Плейсхолдеры: - {домен} — что за данные: медицина, HR, финансы, e-commerce, логистика. Чем конкретнее — тем лучше - {маркер_пропуска} — как обозначены пропуски у вас: [пусто], -, NaN, ? - {таблица_с_пропусками} — вставить таблицу (markdown, CSV или просто столбцы через Tab из Excel)


🚀 Быстрый старт — вставь в чат:

Вот шаблон для заполнения пропусков в таблице. 
Адаптируй под мою задачу: {твоя задача}.
Задавай вопросы, чтобы заполнить поля.

[вставить шаблон выше]

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


⚠️

Ограничения

⚠️ Нестандартные данные: Если ваши данные нетипичны — специфичные внутренние метрики, нестандартные шкалы, проприетарные форматы — LLM будет галлюцинировать. Уверенно заполнит, но значения будут "правдоподобной выдумкой". Синтетические данные в исследовании провалили этот тест полностью.

⚠️ Объём: Большие таблицы (сотни строк) в чате не работают: контекст переполняется, модель начинает ошибаться в структуре. Для реального масштаба нужен Python + API.

⚠️ Числовая точность: LLM — семантический инструмент, не статистический. Она даст "правдоподобное" значение, не "математически оптимальное". Для задач где нужна точность (медицинская диагностика, финансовая отчётность) — доверяй результату с осторожностью и проверяй.

⚠️ Нет объяснения: Промпт намеренно убирает объяснения. Если хочешь понять почему модель поставила конкретное значение — убери строку "не объясняй логику" из блока ограничений.


🔍

Как исследовали

Команда из Бразилии и Португалии собрала 29 датасетов: 20 публичных (датасеты из UCI и OpenML — Pima Diabetes, Iris, German Credit и другие) и 9 синтетических, сгенерированных с нуля через scikit-learn. Логика хитрая: публичные датасеты наверняка попали в обучающий корпус моделей, а синтетические — точно нет. Это позволило напрямую проверить гипотезу "LLM работает потому что видела эти данные раньше".

В каждый датасет искусственно вносили пропуски трёх типов: случайные (MCAR), зависящие от других переменных (MAR) и коррелирующие с самими пропущенными значениями (MNAR). Доли пропусков: 5%, 10%, 20%. Затем пять LLM (Gemini 3.0 Flash, Claude 4.5 Sonnet, GPT-4.1 Nano, Mistral Devstral, MiMo) сравнивали с шестью классическими методами: kNN, MICE, missForest и другими.

Результат подтвердил гипотезу сильнее, чем ожидалось: на публичных датасетах Gemini и Claude стабильно обыгрывали классику. На синтетических — традиционные методы (особенно MICE) wins hands down. Это прямое доказательство: LLM не считает — она вспоминает. Дополнительный сюрприз — стоимость: Claude 4.5 Sonnet обходится в сотни раз дороже остальных, а результат сопоставим с бесплатным Gemini или дешёвым GPT-4.1 Nano.


💡

Адаптации и экстраполяции

1. Когда проверить надёжность результата

Перед тем как доверять заполненным значениям, добавь в промпт диагностический вопрос отдельным запросом:

💡 Адаптация: диагностика уверенности

Оцени каждое из подставленных значений по шкале 1-3:
1 — высокая уверенность (паттерн хорошо известен)
2 — средняя (есть косвенные данные)
3 — низкая (пришлось угадывать)

Верни таблицу с дополнительным столбцом "Уверенность".

Это покажет где LLM работала уверенно по реальным знаниям, а где — фантазировала.


🔧 Техника: снять ограничения → понять логику

Убери строку "Не объясняй логику" — и модель покажет рассуждения перед каждым значением. Полезно для отладки промпта или когда хочешь проверить, на что опирается модель.


2. Принцип "знакомый контекст" за пределами таблиц

Этот принцип работает шире заполнения таблиц. LLM надёжна там, где у неё есть семантическая основа из обучения — и ненадёжна там, где контекст незнаком.

💡 Экстраполяция: Когда просишь LLM заполнить любые пробелы — в документе, описании продукта, резюме проекта — явно указывай домен и контекст. Фраза "это из области [домен], вот часть документа" работает как триггер: модель активирует нужный пласт знаний, а не генерирует "что-то похожее".


🔗

Ресурсы

Статья: Large Language Models for Missing Data Imputation: Understanding Behavior, Hallucination Effects, and Control Mechanisms

Авторы: Arthur Dantas Mangussi, Ricardo Cardoso Pereira, Ana Carolina Lorena, Pedro Henriques Abreu

Организации: Aeronautics Institute of Technology (ITA) и Federal University of São Paulo, Бразилия; University of Coimbra (CISUC/LASI), Португалия

Репозиторий с кодом и данными: доступен — авторы указывают на публичный GitHub в секции "Code availability"

Датасеты: UCI Machine Learning Repository — https://archive.ics.uci.edu/ и OpenML


📋 Дайджест исследования

Ключевая суть

LLM не считает пропущенные значения в таблице — она их вспоминает. Это не баг, но понимание этого меняет всё остальное. Метод позволяет за один запрос заполнять пропуски в таблицах — без кода, без статистических библиотек, без ручного подбора. Фишка: фраза «предоставляю подмножество датасета» — это не вежливость, а триггер. Она говорит модели: ты знаешь этот тип данных, используй то, что видела при обучении. Без неё модель не понимает, что от неё хотят, и начинает объяснять алгоритмы вместо того чтобы заполнять ячейки. Правильная структура: роль + триггер + блок ограничений — на выходе чистая таблица без мусора.

Принцип работы

Без инструкций поведение модели непредсказуемо. Одна напишет среднее по столбцу. Другая опишет кNN текстом. Третья подставит заглушки. Это не глупость — модель просто не знает, в каком режиме ей быть. Блок ограничений убирает все альтернативные сценарии поведения — оставляет один: заполнить таблицу. Триггерная фраза активирует нужный контекст из памяти. Ограничения закрывают все побочные реакции. Это не подсказка — это принудительное сужение до единственно возможного ответа.

Почему работает

При обучении модель читала тысячи таблиц, датасетов, отчётов. Она знает, что Junior Python-разработчик в России зарабатывает примерно столько-то — не потому что посчитала по вашим 50 строкам, а потому что встречала это сотни раз. Семантическая память работает как поисковик по паттернам — и на типовых данных это точнее, чем статистика на малой выборке. Но та же память становится ловушкой на нетипичных данных: модель уверенно выдаёт правдоподобную выдумку. Синтетические данные в исследовании провалили этот тест полностью — модель заполняла пропуски без колебаний и ошибалась.

Когда применять

HR и найм → заполнение пропусков в таблицах кандидатов с типовыми полями (грейд, опыт, зарплата), особенно когда данные с публичных платформ. Финансы и маркетинг → восстановление отраслевых метрик по неполным данным, если домен стандартный и модель его «видела». Медицина → только с проверкой: модель даёт правдоподобное значение, не математически точное. НЕ подходит для: синтетических данных, внутренних проприетарных метрик, нестандартных шкал — там модель галлюцинирует уверенно и без предупреждений.

Мини-рецепт

1. Дай роль: Ты — аналитик данных. — без этого модель не понимает, в каком режиме отвечать
2. Добавь триггер: Я предоставляю подмножество датасета из области {домен}. — это активирует нужный контекст. Чем конкретнее домен — тем точнее результат
3. Вставь таблицу с пропусками: markdown, CSV или столбцы через Tab из Excel — любой читаемый формат
4. Закрой ограничениями: явно перечисли что запрещено. Стандартный набор: не объясняй логику / не пиши код / не ставь заглушки / верни только заполненную таблицу в том же формате

Если таблица большая (больше 100 строк) — режь на куски по 50 строк и отправляй отдельными запросами. При переполнении контекста модель начинает сбоить на структуре.

Примеры

[ПЛОХО] : Заполни пропуски в таблице кандидатов
[ХОРОШО] : Ты — аналитик данных. Я предоставляю подмножество датасета по кандидатам на позицию Python-разработчика с российского рынка труда. В таблице ниже есть пропущенные значения, отмеченные как [пусто]. Заполни их на основе типичных паттернов для этого домена. Ограничения: не объясняй логику, не пиши код, не ставь [пусто] или любые заглушки, верни только заполненную таблицу в том же формате. [таблица]
Источник: Large Language Models for Missing Data Imputation: Understanding Behavior, Hallucination Effects, and Control Mechanisms
ArXiv ID: 2603.22332 | Сгенерировано: 2026-03-25 04:28

Проблемы LLM

ПроблемаСутьКак обойти
Без явных ограничений модель выбирает формат ответа самаПросишь "заполни пропуски". Модель не знает: вернуть таблицу или объяснить алгоритм? Посчитать среднее или описать kNN текстом? Поставить NaN или придумать значение? Результат непредсказуем: каждый раз разное поведениеДобавь блок ограничений: что не делать. Явно запрети каждый нежелательный вариант: "не объясняй", "не пиши код", "не ставь заглушки", "верни только заполненную таблицу"

Методы

МетодСуть
Триггер домена — активирует нужный контекстУкажи в запросе конкретную область данных. Не просто "заполни таблицу", а "подмножество датасета из области {домен}". Модель обращается к паттернам именно этой области. HR — значит рыночные зарплаты и грейды. Медицина — значит типичные клинические показатели. Почему работает: модель обучена на миллионах таблиц из разных областей. Название домена — ключ к нужному разделу знаний. Полная структура запроса: роль аналитика + фраза "предоставляю подмножество датасета {домен}" + таблица с пропусками + блок запретов. Когда работает: публичные или стандартные данные (HR, финансы, медицина, e-commerce). Когда не работает: нетипичные внутренние метрики, проприетарные шкалы, синтетические данные
📖 Простыми словами

LargeLanguageModelsfor Missing Data Imputation: Understanding Behavior, Hallucination Effects, and Control Mechanisms

arXiv: 2603.22332

LLM не вычисляет пропущенные значения в таблице — она их вспоминает. Когда ты просишь нейронку заполнить пустые ячейки, она не строит сложную статистическую модель на твоих данных, как это делали старые алгоритмы. Она лезет в свои «чертоги разума» и пытается угадать ответ, основываясь на том, что видела в интернете во время обучения. Это фундаментальный сдвиг: вместо математического вывода мы получаем семантическую догадку. Если данных в таблице мало, модель просто игнорирует твой контекст и выдает то, что кажется ей «логичным» в вакууме.

Это как если бы ты пришел к опытному HR-директору с обрывками резюме кандидата, где стерта зарплата. Директор не будет высчитывать среднее арифметическое по твоей табличке из пяти записей. Он просто посмотрит на стек технологий, город и опыт, а потом скажет: «Ну, такой обычно просит 300к». Он берет цифру из головы, из своего гигантского опыта, а не из твоего листочка. Это круто, когда данных мало, но это же и главный риск: модель может уверенно нести чушь, просто потому что «ей так кажется».

Главная проблема в том, что без четкого пинка LLM не понимает, чего ты от нее хочешь. Она зависает в неопределенности: то ли ей реально считать среднее, то ли объяснять тебе теорию вероятностей, то ли просто галлюцинировать. Чтобы это работало, нужны механизмы контроля. Исследование показывает, что модель лажает, если ей не дать жесткую структуру. Нужно явно запрещать ей рассуждать и заставлять выдавать только результат, иначе вместо заполненной таблицы ты получишь сочинение на тему «Почему в IT такие высокие зарплаты».

Этот принцип универсален и применим к любой работе с данными, будь то логистика, медицина или продажи. Мы переходим от эпохи статистической импутации к эре генеративного восстановления. Тестировали это на таблицах, но логика та же: если у тебя в тексте или базе данных дыра, LLM залатает ее не логикой, а ассоциациями. SEO для данных умирает, теперь важно, насколько твой контекст совпадает с тем, что модель «видела» раньше. Если твои данные слишком специфичны или уникальны, модель превратится в сказочника.

Короче: завязывай верить, что нейронка «считает» твои пропуски — она их сочиняет. Чтобы не получить на выходе полную фигню, используй жесткие промпты с ограничением вывода и всегда проверяй адекватность через внешние фильтры. LLM — это не калькулятор, а очень начитанный, но склонный к фантазиям эксперт. Либо ты ставишь его в жесткие рамки, либо он нагаллюцинирует тебе бизнес-катастрофу на ровном месте.

Работа с исследованием

Адаптируйте исследование под ваши задачи или создайте готовый промпт на основе техник из исследования.

0 / 2000
~0.5-2 N-токенов ~10-30с
~0.3-1 N-токенов ~5-15с