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
