3,583 papers
arXiv:2511.01046 70 2 нояб. 2025 г. FREE

Code Generation для Data Analytics: снижение галлюцинаций через схемы данных

КЛЮЧЕВАЯ СУТЬ
LLM выдумывает цифры при работе с таблицами. Спросишь "сколько продаж в мае?" — получишь правдоподобное, но ложное число. Модель работает с вероятностями, а не точным поиском данных. Фишка: не давай LLM сырые данные — дай только схему (столбцы, типы, единицы). Модель пишет Python-код для анализа, код выполняется на реальных данных. Результат: LLM отвечает за логику (КАК считать), Python за факты (ЧТО считать). Никаких галлюцинаций с цифрами.
Адаптировать под запрос

TL;DR

VayuChat — система для анализа данных о качестве воздуха, которая показывает подход к работе с табличными данными через LLM: вместо подачи сырых таблиц описываешь схему данных (столбцы, типы, единицы), и LLM генерирует Python-код для анализа.

LLM галлюцинирует, когда работает с сырыми данными напрямую — выдумывает цифры, путает значения, даёт уверенные, но неверные ответы. Причина: модель пытается "вспомнить" значения из таблицы, но работает с вероятностями, а не с точным поиском. Если попросишь "сколько было продаж в мае?" — получишь правдоподобное, но выдуманное число.

Подход разделяет задачу: LLM получает только описание структуры данных и пишет код, который считает реальные значения. Код выполняется отдельно на реальных данных. LLM отвечает за логику (как считать), данные — за факты (что считать). Два шага: (1) генерация кода по схеме, (2) выполнение на данных.


🔬

Схема метода

ШАГ 1: Описание схемы данных в system prompt → LLM генерирует Python-код
ШАГ 2: Код выполняется на реальных данных → результат (число/график/таблица)

Оба шага в одном чате (ChatGPT Advanced Data Analysis / Claude)

🚀

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

Задача: Анализ продаж интернет-магазина — у тебя CSV с заказами (дата, город, сумма, категория товара). Хочешь понять какие категории растут в разных регионах.

Промпт:

У меня CSV с колонками:
- order_date (дата заказа, формат YYYY-MM-DD)
- city (город доставки)
- amount (сумма заказа, рубли)
- category (категория: электроника, одежда, продукты, дом)

Датафрейм уже загружен как df.

Напиши Python-код, который:
1. Найдёт топ-3 категории по росту в Москве и Питере за последние 3 месяца
2. Построит график сравнения

Только код, без объяснений.

Результат: Модель выдаст код с группировкой по городу и категории, расчётом процента роста, фильтрацией топ-3 и построением графика. После выполнения кода увидишь конкретные цифры и визуализацию — никаких выдуманных значений.


🧠

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

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

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

Метод использует сильную сторону (code generation) для обхода слабости (работа с фактами). LLM не считает сам — пишет инструкцию КАК считать, а выполнение на реальных данных даёт точный результат. Разделение ответственности: модель — за алгоритм, Python — за вычисления.

Рычаги управления: - "Только код, без объяснений" → убери эту фразу, чтобы видеть рассуждения LLM перед кодом — полезно для проверки логики - Детализация схемы данных → чем точнее описал столбцы (формат, единицы, возможные значения), тем точнее код - Примеры операций → добавь "используй .groupby() для группировки, seaborn для графиков" — уточняет стиль кода, который хочешь получить


📋

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

У меня данные в формате {формат: CSV/Excel/JSON}.

Структура данных:
- {столбец_1}: {описание, тип, единицы измерения}
- {столбец_2}: {описание, тип, единицы измерения}
[... остальные столбцы]

Данные уже загружены как {имя_переменной: df / data / table}.

Задача: {что нужно посчитать/проанализировать/визуализировать}

Напиши Python-код для решения. Только код, без объяснений.

Подставляй: - {формат} — CSV, Excel, JSON - {столбец_N} — название столбца, что означает, тип данных (число/текст/дата), единицы (рубли, штуки, метры) - {имя_переменной} — обычно df (dataframe) - {задача} — что конкретно нужно: расчёт, сравнение, график, статистика

🚀 Быстрый старт — вставь в чат ChatGPT (Advanced Data Analysis) или Claude:

Вот шаблон для анализа данных через code generation. Адаптируй под мои данные.
Спроси: какие у меня столбцы, что нужно посчитать.

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

LLM спросит структуру твоих данных и что анализировать — потому что без схемы данных не может написать рабочий код. Она возьмёт паттерн из шаблона и адаптирует под твою задачу.


⚠️

Ограничения

⚠️ Требует подписку и данные: Работает только с ChatGPT Advanced Data Analysis (Plus/Pro) или Claude с загрузкой файлов. Нужны реальные табличные данные в структурированном виде.

⚠️ Только для количественного анализа: Метод для работы с фактами и цифрами. Для творческих задач (написать текст, придумать идею) подход не подходит — там галлюцинации не проблема, а возможность.

⚠️ Не для real-time данных: Если данные обновляются в реальном времени (API, базы данных) — нужна инфраструктура, простой чат не подойдёт.


🔍

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

Команда из IIT Gandhinagar создала VayuChat — веб-платформу для анализа данных о качестве воздуха в Индии. Интегрировали три датасета: непрерывные измерения загрязнения воздуха с 500+ станций (2017-2024), демография штатов, финансирование программ борьбы с загрязнением. Платформа работает через Groq Cloud API и Gemini API с несколькими моделями (GPT-OSS 20B/120B, Qwen3-32B, Llama, DeepSeek-R1, Gemini).

Ключевая находка архитектуры: вместо подачи сырых таблиц в промпт, система описывает только схему данных в system prompt ("есть столбцы X, Y, Z с такими-то единицами"), и LLM генерирует Python-код. Код выполняется в изолированной среде (sandboxed) на реальных датафреймах. Результат — либо визуализация (графики), либо табличный ответ, либо числовой факт. Почему это работает: LLM не видит конкретных значений, поэтому не может их "вспомнить неправильно" — только описывает логику вычислений.

Проверили подход на реальной аналитике: расследовали кризис загрязнения воздуха в Дели (декабрь 2024) через цепочку вопросов — от "какие дни самые грязные?" до "корреляция между скоростью ветра и PM2.5?". Каждый вопрос генерировал код → код выполнялся → результат точный, без галлюцинаций. Нашли сильную обратную корреляцию: падение скорости ветра всего на 0.6 м/с поднимало уровень PM2.5 с "очень плохо" до "опасно" за несколько часов.

Инсайт: последовательные вопросы (sequential questioning) углубляют анализ естественным образом. Первый вопрос выявляет проблему, следующие — причины, паттерны, исторический контекст. Это не просто серия запросов — это исследовательский workflow через диалог, где каждый ответ формирует контекст для следующего вопроса.


💡

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

🔧 Техника: Убрать "только код" → видеть логику рассуждений

Если изменить промпт:

Объясни сначала какую логику будешь использовать, потом напиши код.

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


🔧 Техника: Примеры операций → контроль стиля кода

Если добавить:

Используй pandas методы: .groupby() для группировки, .resample() для временных рядов, seaborn для графиков.

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


🔧 Техника: Sequential questioning для любого исследования

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

Вместо одного сложного запроса: ❌ "Проанализируй мою бизнес-идею со всех сторон: аудитория, конкуренты, монетизация, риски"

Последовательные вопросы: ✅ 1. "Кто целевая аудитория этой идеи?" 2. [получил ответ] "Какие проблемы этой аудитории я решаю?" 3. [получил ответ] "Кто уже решает эти проблемы? Какие есть конкуренты?" 4. [получил ответ] "Чем я отличаюсь от этих конкурентов?" 5. [получил ответ] "Какие риски в этой нише?"

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


🔗

Ресурсы

VayuChat: An LLM-Powered Conversational Interface for Air Quality Data Analytics

Публичная демо: https://huggingface.co/spaces/SustainabilityLabIITGN/VayuChat

Видео: https://www.youtube.com/watch?v=d6rklL05cs4

Авторы: Vedant Acharya, Abhay Pisharodi, Rishabh Mondal, Mohammad Rafiuddin, Nipun Batra

Indian Institute of Technology Gandhinagar, Council on Energy, Environment and Water


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

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

LLM выдумывает цифры при работе с таблицами. Спросишь "сколько продаж в мае?" — получишь правдоподобное, но ложное число. Модель работает с вероятностями, а не точным поиском данных. Фишка: не давай LLM сырые данные — дай только схему (столбцы, типы, единицы). Модель пишет Python-код для анализа, код выполняется на реальных данных. Результат: LLM отвечает за логику (КАК считать), Python за факты (ЧТО считать). Никаких галлюцинаций с цифрами.

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

Разделяй ответственность. LLM не считает сам — пишет инструкцию КАК считать. Два шага в одном чате: (1) модель получает описание структуры данных и генерирует код, (2) код выполняется на реальной таблице — возвращает точные цифры. Это как нанять программиста который видит только техзадание, но не данные клиентов. Программист пишет алгоритм, алгоритм работает с реальной базой. LLM видит схему данных ("колонка order_date, формат YYYY-MM-DD, колонка amount в рублях"), но не значения ("25 января 2024, 15000₽"). Генерирует df.groupby('category')['amount'].sum() — выполнение на данных даёт точный результат.

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

LLM плохо работает с точными фактами. Это не база данных, а генератор текста на основе паттернов. Попросишь "сумма продаж в марте" — модель сгенерирует правдоподобное число, но не может точно "посмотреть" в таблицу. Это работа с вероятностями, а не поиск. Зато LLM отлично пишет код — синтаксис Python, операции pandas, построение графиков. Метод использует сильную сторону (генерация кода) для обхода слабости (работа с фактами). Модель создаёт алгоритм расчёта, Python выполняет на реальных данных — получаешь точность вычислений без галлюцинаций. Разделение: модель за алгоритм, интерпретатор за выполнение.

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

Data analytics с табличными данными → конкретно для количественного анализа (продажи, метрики, статистика), особенно когда нужны точные цифры и расчёты. Работает с CSV, Excel, JSON в ChatGPT Advanced Data Analysis или Claude с загрузкой файлов. НЕ подходит для творческих задач (написать текст, придумать идею) — там галлюцинации не проблема, а возможность. НЕ для real-time данных из API или баз данных — требует загруженный файл.

Мини-рецепт

1. Опиши схему данных: перечисли столбцы с пояснениями — order_date (дата заказа, формат YYYY-MM-DD), amount (сумма в рублях), category (категория товара). Укажи что данные уже загружены как df.

2. Сформулируй задачу анализа: что конкретно нужно посчитать, сравнить, визуализировать. "Найди топ-3 категории по росту в Москве за последние 3 месяца".

3. Добавь "только код, без объяснений": убирает текстовую обёртку, получаешь чистый исполняемый код. Убери эту фразу если хочешь видеть рассуждения модели — полезно для проверки логики.

4. Выполни код: модель сгенерирует Python-код, он автоматически выполнится на загруженных данных — увидишь точные цифры и графики.

Примеры

[ПЛОХО] : Вот таблица продаж за год. Сколько продали в мае? Какие категории растут? — модель попытается "вспомнить" цифры из таблицы, выдумает правдоподобные числа.
[ХОРОШО] : У меня CSV с колонками: order_date (дата, YYYY-MM-DD), city (город), amount (сумма, рубли), category (категория). Данные загружены как df. Напиши код: найди топ-3 категории по росту в Москве и Питере за последние 3 месяца, построй график сравнения. Только код. — модель генерирует код с группировкой, расчётом процента роста, фильтрацией и визуализацией. После выполнения видишь конкретные цифры из реальных данных, никаких выдумок.
Источник: VayuChat: An LLM-Powered Conversational Interface for Air Quality Data Analytics
ArXiv ID: 2511.01046 | Сгенерировано: 2026-01-12 18:44

Концепты не выделены.

📖 Простыми словами

Суть в том, что нейросети — паршивые аналитики, но гениальные переводчики. Когда ты скармливаешь модели огромную таблицу и просишь найти закономерности, она не считает цифры, а пытается «угадать» ответ, основываясь на тексте. Это прямой путь к галлюцинациям и полному бреду в выводах. Исследование VayuChat доказывает: чтобы выжать из AI правду, нельзя давать ему считать «в уме». Нужно использовать подход Text-to-Code — заставлять модель писать код на Python, который сам обработает данные.

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

В работе реально тащат два метода. Первый — описание структуры данных вместо самих данных. Ты не пихаешь в чат 1000 строк, а даешь «карту»: названия столбцов и их смысл. Второй — декомпозиция запроса. Вместо одного вопроса «почему всё плохо?», задачу дробят на цепочку: сначала вытащи цифры, потом сравни с прошлым годом, и только в конце предложи гипотезы. Это снижает когнитивную нагрузку на модель, и она перестает лажать на ровном месте.

Хотя систему VayuChat пилили для экологов, принцип универсален. Тестировали на датчиках воздуха, но это работает для маркетинговых отчетов, личных финансов или планирования отпуска. Неважно, анализируешь ты продажи или выбираешь отель во Вьетнаме — логика пошагового разбора и делегирования расчетов коду спасает любой промпт. SEO умирает, GEO рождается, а точность данных становится важнее красивых слов.

Короче: хватит ждать от нейросети чудес логики, она — языковая модель, а не калькулятор. Если хочешь результат с полезностью 55 из 100 и выше, используй режим Advanced Data Analysis или заставляй модель писать формулы. Главный вывод — декомпозируй или проиграешь. Либо ты ведешь AI за руку по шагам, либо получаешь уверенную херню вместо аналитики.

Сгенерировано: 21.12.2025 17:00 | ArXiv Data Collector

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

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

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