3,583 papers
arXiv:2508.17391 82 24 авг. 2025 г. FREE

LLM как zero-shot классификаторы табличных данных: когда работает и почему провал в регрессии

КЛЮЧЕВАЯ СУТЬ
Обнаружено: LLM отлично классифицирует табличные данные (90%+ точности на малых датасетах), но катастрофически проваливается в регрессии — R² уходит в минус. Проблема: модель генерирует токены последовательно, а не вычисляет. Для предсказания числа "127.45" она должна угадать точную последовательность символов "1", "2", "7", ".", "4", "5" — отклонение на 10-20% убивает метрики. Метод позволяет получить классификацию табличных данных БЕЗ обучения модели — загружаешь CSV с 5-70 примерами в промпт, модель выдаёт категорию для новой строки. Точность на малых данных (до 500 строк) сравнима со специализированными ML-моделями: 90-100% в простых задачах, 70-83% в сложных. Несколько примеров (few-shot) создают справочную таблицу в контексте. Модель делает сопоставление паттернов — находит похожие строки в примерах и копирует их метки. Это работает как быстрый старт без кода, датасетов и обучения — только промпт в чат.
Адаптировать под запрос

TL;DR

Большие языковые модели (GPT-5, Claude, DeepSeek, Gemini) могут классифицировать табличные данные без обучения — загрузи CSV в промпт с 5-10 примерами, и модель выдаст категорию для новой строки. Точность на малых данных (до 500 строк) сравнима со специализированными ML-моделями: 90-100% в простых задачах, 70-83% в сложных. Это работает как zero-training baseline — быстрый старт без кода, датасетов и обучения.

Провал в регрессии (предсказание чисел): R² часто уходит в минус — хуже чем константа. Почему: LLM генерируют токены (текст), а не вычисляют числа. Для задачи "предскажи 127.45" модель должна выдать точную последовательность символов "127.45", а не примерное значение. Отклонение в 10-20 единиц убивает метрики. Кластеризация тоже слабо — модель не строит геометрию данных, она просто сопоставляет паттерны в тексте.

Формат сериализации имеет значение: JSON для DeepSeek даёт F1=0.82, а CSV/Markdown только 0.67 на том же датасете. Больше примеров не всегда лучше — на некоторых данных точность падала с 90% до 80% при увеличении от 50% до 75% примеров (вероятно, шум в дополнительных строках). Классификация работает потому что LLM распознают паттерны в признаках и генерируют дискретные метки, а не точные числа.


🔬

Схема метода

ШАГ 1: Подготовь данные

Таблица → текстовый формат (CSV/JSON/Markdown)
Примеры: 5-70 строк с признаками и метками классов

ШАГ 2: Промпт с few-shot примерами

Промпт: "Вот таблица с примерами. Определи класс для новой строки."
→ Модель видит паттерны в примерах

ШАГ 3: Получи предсказание

Результат: метка класса (текст)
Формат: "Class A" или "1" или "высокий риск"

Всё делается в одном запросе к чату — без API, без циклов.


🚀

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

Задача: У тебя интернет-магазин косметики. Есть 50 клиентов с историей покупок. Нужно быстро сегментировать новых по поведению: "разовый", "постоянный" или "VIP". Обычно это делают через ML-модель, но у тебя нет времени на обучение — надо сейчас.

Промпт:

Вот таблица клиентов с историей покупок и их типами:

| Покупок за год | Средний чек (₽) | Возвратов (%) | Тип |
|----------------|------------------|---------------|------|
| 2 | 1200 | 10 | разовый |
| 8 | 3500 | 5 | постоянный |
| 15 | 8000 | 2 | VIP |
| 1 | 900 | 20 | разовый |
| 6 | 2800 | 8 | постоянный |
| 22 | 12000 | 1 | VIP |
| 3 | 1500 | 15 | разовый |
| 10 | 4200 | 4 | постоянный |

Определи тип нового клиента на основе этих примеров:
Покупок за год: 7, Средний чек: 3200₽, Возвратов: 6%

Верни только тип: разовый / постоянный / VIP

Результат:

Модель выдаст категорию ("постоянный") на основе паттернов в примерах. Не нужен Python, pandas, scikit-learn — только чат. Точность на простых задачах вроде этой — 85-95% по результатам исследования.


🧠

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

LLM плохо генерируют точные числа — если попросить предсказать "доход клиента = 127 543.27₽", модель выдаст примерное значение типа "130 000" или "125 000", потому что она генерирует текст токен за токеном, а не вычисляет. Для регрессии это катастрофа: ошибка в 2-3% убивает R², а модель может промахнуться на 10-20%.

Но LLM отлично распознают паттерны в признаках и сопоставляют с примерами. Классификация — это pattern matching: "если покупок >10 и чек >5000 → это похоже на VIP из примеров". Модель не считает вероятности, она находит похожие строки в контексте и копирует их метку.

Метод использует сильную сторону LLM (понимание структуры и паттернов в тексте) и избегает слабой (точная числовая генерация). Few-shot примеры создают внутреннюю справочную таблицу в контексте — модель сопоставляет новую строку с ней.

Формат сериализации влияет потому что JSON даёт явную структуру {"feature": value}, которую модель лучше парсит, чем неструктурированный CSV. Для DeepSeek JSON поднял F1 с 0.67 до 0.82 — это разница между "плохо" и "хорошо".


📋

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

Вот таблица с примерами:

{таблица_в_формате_CSV_или_JSON}

Каждая строка содержит признаки и целевую переменную "{название_целевой}".

Определи значение "{название_целевой}" для новой строки на основе паттернов в примерах:

{данные_новой_строки}

Верни только значение "{название_целевой}": {возможные_значения}

Что подставлять:

  • {таблица} — 5-70 примеров с признаками и метками. Формат: CSV (универсально) или JSON (для DeepSeek/GPT лучше).
  • {название_целевой} — что предсказываем ("тип клиента", "уровень риска", "категория товара").
  • {данные_новой_строки} — строка для классификации в том же формате.
  • {возможные_значения} — список классов ("A/B/C" или "низкий/средний/высокий").

Важно: Для регрессии (предсказание чисел) этот метод НЕ работает — точность в 5-10 раз хуже простой линейной регрессии.


⚠️

Ограничения

⚠️ Размер данных: Работает только на малых данных (до 500 строк). При большем объёме LLM не видят все примеры из-за лимита контекста, паттерны размываются.

⚠️ Регрессия — провал: Предсказание чисел даёт R² от -1.4 до 0.2 (отрицательный R² = хуже константы). Классические модели дают 0.5-0.9. LLM не умеют точную числовую генерацию.

⚠️ Кластеризация слабо: Silhouette score часто отрицательный. LLM не строят геометрию данных, они сопоставляют текстовые паттерны. Для кластеризации нужны специализированные алгоритмы.

⚠️ Формат важен: Разница между CSV и JSON может быть 15-20% в F1-score для некоторых моделей. Тестируй оба формата.

⚠️ Больше ≠ лучше: В некоторых датасетах точность падала при увеличении числа примеров с 50% до 75% (с 90% до 80% F1). Вероятно, дополнительные примеры вносили шум. Оптимум — 30-50 примеров, не обязательно все доступные.


🔍

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

Команда из Греции взяла 6 LLM (GPT-5, GPT-4o, GPT-o3, DeepSeek, Gemini) и проверила их на 9 малых датасетах (150-500 строк) для классификации, регрессии и кластеризации. Сравнивали с классическими ML-моделями (Random Forest, LightGBM, CatBoost) и табличными фундаментальными моделями (TabPFN, TabICL — это transformer'ы, обученные специально для табличных задач).

Схема теста: Датасет делили 70/30 (train/test). Из train брали от 25% до 100% примеров, сериализовали в текст (CSV/JSON/Markdown) и скармливали LLM как few-shot промпт. Модель выдавала метку → сравнивали с ground truth. Никакого fine-tuning, только in-context learning.

Главная находка: В классификации LLM выдали 90-100% accuracy на простых данных (Iris, Bankrupt), 70-83% на сложных (Lupus с дисбалансом классов). Это почти как TabPFN (специально обученная модель) и не хуже Random Forest. В регрессии — катастрофа: R² от -1.4 до 0.2, пока классика даёт 0.5-0.9. Причина: LLM генерируют токены, а не вычисляют числа. Ошибка в предсказании "127.45" вместо "128.12" = мелочь для человека, но провал для MSE.

Сюрприз: Больше данных иногда вредило. На датасете Bankrupt точность упала с 100% (при 50% примеров) до 80% (при 75%). Вероятно, дополнительные строки содержали шум или противоречивые паттерны, которые сбивали модель.

Формат сериализации: Для DeepSeek JSON дал F1=0.82, а CSV/Markdown только 0.67 на датасете Lupus — разница 15%. Для GPT-5 формат почти не влиял (0.75 во всех случаях). Это значит разные модели по-разному парсят структуру.

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


💡

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

💡 Адаптация для текстовых признаков:

Исследование использовало только числовые таблицы (z-score нормализация). Но LLM сильны в тексте — попробуй смешанные признаки:

Вот примеры клиентов с отзывами и поведением:

| Отзыв | Покупок | Возвратов | Тип |
|-------|---------|-----------|-----|
| "Отличный сервис!" | 8 | 5% | постоянный |
| "Долго ждал, больше не куплю" | 1 | 20% | разовый |
| "Супер качество, буду брать ещё" | 15 | 2% | VIP |

Определи тип нового клиента:
Отзыв: "Всё понравилось, рекомендую", Покупок: 6, Возвратов: 8%

LLM могут учитывать семантику текста + числовые паттерны одновременно. Классические ML-модели требуют отдельного пайплайна для текста (TF-IDF/embeddings).


🔧 Техника: Многоступенчатая классификация

Если классов много (>10), LLM путаются. Разбей на иерархию:

ШАГ 1: Грубая категория
"Определи тип клиента: новый / активный / ушедший"

ШАГ 2: Детализация
"Теперь определи подтип активного клиента: постоянный / VIP / оптовик"

Это снижает когнитивную нагрузку на модель — 3 варианта на шаг против 10 сразу.


💡 Комбинация: LLM для фильтрации + ML для точности

ШАГ 1: LLM быстро отсеивает явный мусор
"Определи клиентов с риском 'высокий' или 'критический'"

ШАГ 2: ML-модель дожимает оставшихся
На отфильтрованных данных обучи CatBoost для точного скоринга

LLM как первичный фильтр — быстро, без обучения. ML как точная доводка — на меньшем объёме данных, быстрее обучается.


🔗

Ресурсы

Large Language Models as Universal Predictors? An Empirical Study on Small Tabular Datasets

Nikolaos Pavlidis, Vasilis Perifanis, Symeon Symeonidis, Pavlos S. Efraimidis

Institute for Language and Speech Processing, Athena Research Center, Greece

Department of Electrical and Computer Engineering, Democritus University of Thrace, Greece


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

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

Обнаружено: LLM отлично классифицирует табличные данные (90%+ точности на малых датасетах), но катастрофически проваливается в регрессии — R² уходит в минус. Проблема: модель генерирует токены последовательно, а не вычисляет. Для предсказания числа "127.45" она должна угадать точную последовательность символов "1", "2", "7", ".", "4", "5" — отклонение на 10-20% убивает метрики. Метод позволяет получить классификацию табличных данных БЕЗ обучения модели — загружаешь CSV с 5-70 примерами в промпт, модель выдаёт категорию для новой строки. Точность на малых данных (до 500 строк) сравнима со специализированными ML-моделями: 90-100% в простых задачах, 70-83% в сложных. Несколько примеров (few-shot) создают справочную таблицу в контексте. Модель делает сопоставление паттернов — находит похожие строки в примерах и копирует их метки. Это работает как быстрый старт без кода, датасетов и обучения — только промпт в чат.

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

LLM не вычисляет вероятности и не строит геометрию данных. Она делает текстовое сопоставление: видит в контексте "покупок >10 и чек >5000 → VIP" из примеров, находит похожую строку среди новых данных, копирует метку. Классификация работает потому что модель генерирует дискретные метки ("A", "B", "VIP") — достаточно распознать паттерн, не нужна точность до последней цифры. Регрессия требует точной числовой генерации "127.45" — модель промахивается на 10-20%, метрики летят вниз. Формат сериализации влияет: JSON даёт явную структуру {"feature": value}, которую модель лучше парсит, чем неструктурированный CSV. Для DeepSeek JSON поднял F1 с 0.67 до 0.82 на одном датасете — это разница между "плохо" и "хорошо".

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

Метод использует сильную сторону LLM (понимание структуры и паттернов в тексте) и избегает слабой (точная числовая генерация). Модель обучена на огромных объёмах текста с таблицами — она видела миллионы примеров формата "признаки → метка" и научилась находить закономерности. Few-shot примеры создают внутреннюю справочную таблицу в контексте — модель сопоставляет новую строку с ней, а не вычисляет. Это как детектив, который ищет похожие дела в архиве, а не строит математическую модель. Парадокс с количеством примеров: на некоторых датасетах точность падала с 90% до 80% F1 при увеличении от 50% до 75% доступных примеров. Вероятная причина — дополнительные примеры вносили шум или противоречили основным паттернам. Оптимум — 30-50 отборных примеров, не обязательно все доступные. Регрессия проваливается потому что LLM генерирует текст токен за токеном — для "127.45" нужно угадать точную последовательность из 6 символов. Ошибка в 2-3% ("125.30" вместо "127.45") убивает R², а модель может промахнуться на 10-20%. Отсюда R² от -1.4 до 0.2 (отрицательный = хуже константы).

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

Табличные данные (до 500 строк) → задачи классификации (определить категорию, сегмент, класс риска), особенно когда нужен быстрый baseline без кода и обучения моделей. Идеально для: сегментация клиентов, определение уровня риска, категоризация товаров/заявок, первичный анализ малых данных. НЕ подходит для: - Регрессии (предсказание чисел) — точность в 5-10 раз хуже простой линейной регрессии - Кластеризации — Silhouette score часто отрицательный - Больших данных (>500 строк) — паттерны размываются, контекст переполняется - Задач требующих точности >95% в продакшене

Мини-рецепт

1. Подготовь примеры: Возьми 30-50 строк твоих табличных данных с признаками и целевой переменной (меткой класса). Формат: CSV (универсально) или JSON (для DeepSeek/GPT лучше на 10-15% точности).

2. Создай промпт: Вот таблица с примерами: [таблица]. Определи значение "[целевая_переменная]" для новой строки: [данные]. Верни только: [возможные_значения]

3. Укажи возможные классы: Явно перечисли все варианты ("A/B/C" или "низкий/средний/высокий") — это снижает галлюцинации.

4. Протестируй формат: Если точность <80%, попробуй другой формат сериализации (CSV → JSON или наоборот). Разница может быть до 20% в F1-score.

5. Оптимизируй количество: Если результат плывёт, попробуй УМЕНЬШИТЬ число примеров до 20-30 самых характерных — больше не всегда лучше.

Примеры

[ПЛОХО] : Предскажи доход клиента в рублях на основе этих 50 примеров: [таблица с доходами]. Новый клиент: возраст 35, покупок 12, средний чек 4500 (Регрессия — LLM выдаст примерное число типа "150000" вместо точного "147543", R² уйдёт в минус)
[ХОРОШО] : Вот таблица клиентов интернет-магазина косметики с типами: | Покупок/год | Средний чек | Возвратов (%) | Тип | | 2 | 1200 | 10 | разовый | | 8 | 3500 | 5 | постоянный | | 15 | 8000 | 2 | VIP | | 6 | 2800 | 8 | постоянный | | 22 | 12000 | 1 | VIP | Определи тип нового клиента: Покупок/год: 7, Средний чек: 3200, Возвратов: 6%. Верни только: разовый / постоянный / VIP (Классификация — модель находит паттерн "7 покупок + 3200 чек + 6% возвратов ≈ постоянный" из примеров, точность 85-95%)
Источник: Large Language Models as Universal Predictors? An Empirical Study on Small Tabular Datasets
ArXiv ID: 2508.17391 | Сгенерировано: 2026-01-12 01:51

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

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

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