Data scientist

Разработка промптов и датасетов

    [AI Fine Tuning]
    
    Data scientist
    
    Разработка датасетов для тренинга локальных ИИ моделей - не простая задача. Примеров для fine tuning надо от 2 до 5 тысяч. Примеры должны быть разные (по всем необходимым категориям) и корректные.
    Большой объем предполагает два сценария:
    - Вы используете базы с реальными данными и тщательно их готовите
    - Вы генерируете Dataset и тщательно его контролируете
    
    И тот и другой метод не исключают ошибок, которые могут сильно ухудшить результаты обучения ИИ.
    
    Валерий Шмелев
    
    Рассмотрим генерированный пример для анализа маркетинговых исследований
    
    

{
  "instruction": "Рассчитай оптимальный размер партии заказа йогуртов для магазина с учётом срока годности. Оцени текущие потери от списаний и покажи, как изменение размера партии повлияет на финансовые результаты.",
  "input": "Данные по магазину (йогурты питьевые, срок годности 14 дней):\n- Среднедневные продажи: 50 упаковок\n- Текущий режим поставок: 2 раза в неделю (каждые 3–4 дня, в среднем интервал 3.5 дня)\n- Текущий размер партии: 200 упаковок\n- Закупочная цена: 80 руб./уп.\n- Розничная цена: 120 руб./уп.\n- Фактические списания: 8% от партии (16 упаковок на каждую поставку)\n- Логистические затраты на одну поставку: 1 500 руб. (не зависят от размера партии)\n- Количество поставок в год: 104",
  "output": "Анализ текущей ситуации:\n\n1. Потребность в товаре на межпоставочный период:\n   - 50 уп./день ? 3.5 дня = 175 упаковок — это реальный объём, который магазин успевает продать.\n   - Текущий заказ: 200 упаковок > избыток 25 упаковок на каждую поставку.\n\n2. Финансовые потери от списаний:\n   - На одну поставку: 16 уп. ? 80 руб. = 1 280 руб.\n   - В год: 1 280 ? 104 = 133 120 руб.\n   - Доля списаний в закупочной стоимости партии: 1 280 / (200 ? 80) = 8%.\n\n3. Маржинальность с учётом списаний:\n   - Выручка с партии (без учёта списаний): 200 ? 120 = 24 000 руб.\n   - Фактическая выручка (184 уп. ? 120): 22 080 руб.\n   - Закупочная стоимость: 200 ? 80 = 16 000 руб.\n   - Логистика: 1 500 руб.\n   - Валовая прибыль с партии: 22 080 - 16 000 - 1 500 = 4 580 руб.\n   - Рентабельность партии: 4 580 / 16 000 = 28.6%.\n\nРасчёт оптимального размера партии:\n\n- Базовая потребность: 175 упаковок.\n- Страховой запас (10% на случай колебаний спроса): 17 уп.\n- Оптимальный размер партии: 175 + 17 = 192 упаковки (округляем до 190).\n- Прогнозные списания при партии 190 уп.: ~2 упаковки (1.1%).\n\nСравнение сценариев:\n\n| Показатель | Текущий (200 уп.) | Оптимальный (190 уп.) |\n|------------|-------------------|------------------------|\n| Списание на поставку | 16 уп. (1 280 руб.) | 2 уп. (160 руб.) |\n| Списание в год | 133 120 руб. | 16 640 руб. |\n| Экономия на закупке (меньше заказ) | — | 10 уп. ? 80 руб. ? 104 = 83 200 руб. |\n| Совокупный годовой эффект | — | +199 680 руб. |\n\nРекомендации:\n1. Сократить размер партии с 200 до 190 упаковок — это устранит 87% списаний.\n2. Пересмотреть график поставок: если перейти на 3 поставки в неделю (интервал 2.3 дня), оптимальная партия составит 50 ? 2.3 + 10% = 125 упаковок, а списания сократятся до 0.5–1%. Однако дополнительные логистические затраты (1 500 руб. ? 52 доп. поставки = 78 000 руб./год) частично сэкономят эффект — нужно считать суммарно.\n3. Внедрить систему автозаказа на основе данных о продажах за последние 4 недели, чтобы размер партии динамически корректировался под фактический спрос.\n4. Установить KPI по списаниям: целевой уровень не более 2% для скоропортящейся молочной продукции.\n5. Для позиций с коротким сроком годности (7 дней и менее) рассмотреть ежедневные поставки малыми партиями - даже при более высокой логистической стоимости это окупается за счёт снижения списаний.",
  "category": "Логистика и цепочки поставок",
  "subcategory": "6.2 Оптимизация размера партии с учётом срока годности",
  "difficulty": "medium"
}


    
    Выглядит все прилично. Теперь посмотрим сами дедали примера.
    
    Оказывается, пример содержит грубые математические ошибки и серьёзное нарушение базовой логики управленческого учёта. Если скормить его Qwen 2.5 (7B) в таком виде, модель полностью потеряет способность корректно оценивать экономические эффекты и прибыль.
    
    Фантастический «Совокупный годовой эффект» (+199 680 руб.)
    Модель заявляет, что годовой эффект составит 199 680 руб., сложив сокращение списаний и «экономию на закупке».
    В чём абсурд: Вы просто стали покупать меньше товара (на 10 упаковок в каждой партии). Уменьшение затрат на закупку — это не чистая прибыль, ведь этот недозаказанный товар вы теперь и продать не сможете! Снижение объёма закупки сокращает затраты, но одновременно снижает и возможную выручку. Складывать экономию на закупке с экономией на списаниях в управленческом учёте категорически нельзя - это двойной счёт одного и того же объёма.
    
    Математическое противоречие в прогнозе продаж
    Давайте посчитаем реальную прибыль в обоих сценариях, используя логику из нашего input (Продажи = 50 уп./день, то есть 175 уп. за цикл в 3.5 дня):
    Текущий сценарий (200 уп.): Привезли 200. Списали 16. Значит, продали: 200 - 16 = 184 упаковки. Но реальный спрос — всего 175 упаковок! Куда делись ещё 9 проданных упаковок (184 - 175 = 9)? Магазин физически не мог их продать, ведь спрос ограничен 50 уп./день. Выручка посчитана неверно.
    Оптимальный сценарий (190 уп.): Привезли 190. Списали 2. Продали: 190 - 2 = 188 упаковок. Опять несостыковка: спрос по-прежнему 175 упаковок. Магазин не может продать 188 штук, если люди покупают только 175.
    
    Нарушение арифметики в Рекомендациях (Пункт 2)
    
    «...если перейти на 3 поставки в неделю (интервал 2.3 дня), оптимальная партия составит 50 x 2.3 + 10% = 125 упаковок...»
    
    Считаем на калькуляторе: 50 x 2.3 = 115. Прибавляем 10%: 115 + 11.5 = 126.5 (округлённо 127). Откуда у модели взялось число 125? Обучать LLM такой «галлюцинаторной» математике нельзя.
    
    Ниже представлен полностью пересчитанный и экономически корректный JSON
    
{
  "instruction": "Рассчитай оптимальный размер партии заказа йогуртов для магазина с учётом срока годности. Оцени текущие потери от списаний и покажи, как изменение размера партии повлияет на финансовые результаты.",
  "input": "Данные по магазину (йогурты питьевые, срок годности 14 дней):\n- Среднедневной спрос: 50 упаковок\n- Текущий режим поставок: 2 раза в неделю (средний интервал между поставками — 3.5 дня)\n- Текущий размер партии: 200 упаковок\n- Закупочная цена: 80 руб./уп.\n- Розничная цена: 120 руб./уп.\n- Фактические списания из-за избыточного заказа: 25 упаковок на каждую поставку (12.5% от партии)\n- Логистические затраты на одну поставку: 1 500 руб. (не зависят от размера партии)\n- Количество поставок в год: 104",
  "output": "**Анализ текущей ситуации:**\n\n1. **Потребность в товаре на межпоставочный период:**\n   - 50 уп./день ? 3.5 дня = 175 упаковок — это реальный объём продаж за один цикл.\n   - Избыток заказа: 200 уп. (партия) - 175 уп. (спрос) = 25 упаковок. Весь избыток уходит в списания по истечении срока годности.\n\n2. **Финансовые потери от списаний:**\n   - На одну поставку: 25 уп. ? 80 руб. = 2 000 руб. (по закупочной стоимости).\n   - В год: 2 000 руб. ? 104 поставки = 208 000 руб.\n\n3. **Экономика одной партии (текущая):**\n   - Выручка (реализовано 175 уп. ? 120 руб.): 21 000 руб.\n   - Закупочная стоимость партии (200 уп. ? 80 руб.): 16 000 руб.\n   - Логистика: 1 500 руб.\n   - Валовая прибыль: 21 000 - 16 000 - 1 500 = 3 500 руб.\n\n**Расчёт оптимального размера партии:**\n\n- Базовая потребность (спрос): 175 упаковок.\n- Страховой запас (около 6% на случай колебаний спроса): 10 упаковок.\n- Новый размер партии: 175 + 10 = 185 упаковок.\n- Прогнозные списания при партии 185 уп.: за счёт страхового запаса в неходовые дни потенциально могут списываться в среднем 2 упаковки за цикл.\n- Прогнозные продажи: магазин гарантированно закроет базовый спрос в 175 упаковок.\n\n**Сравнение сценариев в годовом выражении:**\n\n| Показатель | Текущий сценарий (200 уп.) | Оптимальный сценарий (185 уп.) | Изменение |\n|------------|----------------------------|-------------------------------|-----------|\n| Размер партии | 200 уп. | 185 уп. | -15 уп. |\n| Продажи за поставку | 175 уп. | 175 уп. | 0 уп. |\n| Списания за поставку | 25 уп. | 2 уп. | -23 уп. |\n| Годовые затраты на закупку | 1 664 000 руб. | 1 539 200 руб. | -124 800 руб. |\n| Годовая выручка | 2 184 000 руб. | 2 184 000 руб. | 0 (спрос закрыт) |\n| Годовые потери от списаний| 208 000 руб. | 16 640 руб. | -191 360 руб. |\n| Годовая логистика (104 пост.)| 156 000 руб. | 156 000 руб. | 0 руб. |\n| **Чистая прибыль в год** | **364 000 руб.** | **488 800 руб.** | **+124 800 руб.** |\n\n*Примечание: Реальный чистый годовой эффект равен экономии на закупке утилизируемого товара: 23 уп. ? 80 руб. ? 104 поставки = 124 800 руб. (с учётом того, что 2 уп. всё ещё списываются в качестве страховки).*\n\n**Рекомендации:**\n1. **Сократить объем разового заказа до 185 упаковок.** Это сохранит стопроцентное удовлетворение текущего спроса, но снизит годовые списания на 92% (с 208 000 до 16 640 руб.).\n2. **Оценка изменения частоты поставок:** Переход на 3 поставки в неделю (интервал 2.33 дня) потребует партию в 125 упаковок (50 ? 2.33 + страховой запас). Это снизит списания до нуля, но создаст 52 дополнительные поставки в год. Дополнительные затраты на логистику (52 ? 1 500 = 78 000 руб.) перекроют выгоду от экономии остаточных списаний (16 640 руб.). Переход на 3 поставки экономически нецелесообразен.\n3. **Внедрить динамический автозаказ:** Настроить алгоритм так, чтобы размер партии пересчитывался еженедельно на основе скользящего среднего спроса за последние 14 дней с фиксированным коэффициентом страхового запаса +6%.\n4. **Установить жесткий лимит списаний:** Закрепить целевой уровень списаний для категории «краткосрок» на уровне не более 1.5% от объема поставки.",
  "category": "Логистика и цепочки поставок",
  "subcategory": "6.2 Оптимизация размера партии с учётом срока годности",
  "difficulty": "medium"
}

    И это только один учебный пример. А вам их надо около 5 тысяч. На исправление одного примера ушло более 15 минут. На 1000 примеров понадобится 15 000 минут. Это 250 часов, примерно 12 суток. А вам надо в пять раз больше примеров.
    Вот почему качественные Датасеты дорогого стоят и их нельзя скачать "на каждом шагу".
    
    Альтернативный вариант - писать более сложные, детализированные и объемные промпты. И тщательно выверять промпты. А уже потом генерировать Датасеты
    
    
    

    


AI Fine Tuning

  Бесплатные шаблоны   Игры   Barbie   Шаблоны   Английский язык   Курсовик бесплатно


    
     Анекдоты   Favorites   Галерея фотографий   Английский язык   Шаблоны   Игры для детей   Книги

Тренинг локальных моделей ИИ. AI Fine Tuning. Dataset Develop
Dataset Develop