Михаил Шардин
Михаил Шардин личный блог
17 октября 2025, 06:35

Как я погружаюсь в ML и понимаю, что всё начинается с данных

Экспериментирую с ML. Несколько недель ковыряюсь в данных и всё больше понимаю — алгоритмы это не главное. Главная боль — подготовка данных.
Как я погружаюсь в ML и понимаю, что всё начинается с данных


Уже несколько недель разбираюсь с машинным обучением. Не ради статьи на Смартлабе — захотелось понять, как это устроено изнутри. И чем глубже погружаюсь, тем больше понимаю: вся «магия» моделей начинается задолго до самого обучения.

Собрать данные — не проблема. Подготовить их — проблема. И особенно сложно — сбалансировать классы.

Когда модель учится отличать категории, она должна видеть их примерно в равных долях. Если один класс встречается гораздо чаще других, модель быстро «разучивается думать» и начинает просто угадывать самый частый вариант. В итоге вроде бы всё обучилось, но результат — в мусорку.

На практике это выглядит так:
  • один класс (нейтральный) встречается чуть ли не в половине всех примеров,
  • другие (позитивный и негативный) — заметно реже,
  • при этом удалить лишние примеры нельзя вслепую — можно потерять важный контекст и сместить распределение признаков.

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

Как я погружаюсь в ML и понимаю, что всё начинается с данных
Выглядит вроде бы прилично, но за этими цифрами — десятки вариантов фильтрации, пересемплирования и чистки.

Главная проблема — нейтральные примеры. Их очень много, и именно они чаще всего «смазывают» сигналы в данных.

Удалить слишком много — модель потеряет способность видеть естественные переходные состояния.
Удалить слишком мало — она начнёт всё считать нейтральным. 

Это в продолжение темы.

Поэтому подбор баланса — это не механическая операция, а прямо сложно.
Ведь машинное обучение — это не про «нажал кнопку и получил результат» как в ChatGPT. Это скорее про методичное, почти исследовательское выравнивание весов, классов и смыслов.

Если кто-то тоже бьётся с дисбалансом классов — делитесь опытом в комментариях.
Особенно интересны реальные кейсы, где удалось найти золотую середину между балансом и сохранением репрезентативности данных.

Автор:
Михаил Шардин
🔗 Моя онлайн-визитка
📢 Telegram «Умный Дом Инвестора»

17 октября 2025

24 Комментария
  • Михаил
    17 октября 2025, 07:00
    Никак, потому что не имею дело с классами, а предсказываю распределение доходности
  • Ho_Chu
    17 октября 2025, 07:20

    рискнул бы не согласиться с тезисом о неважности алгоритмов

    взять хотя бы вчерашний день
    из-за произошедших событий придется заново обучать некоторые алгоритмы, хотя другие демонстрируют поразительную стойкость к такого рода явлениям, при этом все используют почти один и тот же входной набор данных

    но, кажется мне, что даже новое переобучение не поможет… а вот почему не поможет, — это надо сильно подумать

  • Максим Павлов
    17 октября 2025, 09:54
    Смотря какой алгоритм используешь. Но почти в любом алгоритме машинного обучения есть параметр по типу «scale_pos_weight», который делает больше веса в обучении на примеры минорного класса. Но лучший вариант — это добрать выборки)
  • V V
    17 октября 2025, 10:56
    Сизифов труд
      • V V
        19 октября 2025, 08:15
        Михаил Шардин, Продолжу из уважения к вашему труду и достижениям. 25 лет назад создал команду для нейросетевого моделирования (и прочих вещей вокруг того, чем является сегодня AI) в одной уважаемой здесь конторе. Как то на совещании высказался: о Голдман то же самое прогнозирует, что и мы. Язвительный CFO отметил: ну конечно, Голдман в замочную скважину у нас подсмотрел прогноз. Был я молод и борз — обозлился. Но спустя 20 лет согласился с ним: команда из десятка спецов  в своей области после двухмесячных трудов выдали прогноз и так же на совещании похвалились тем что другая не менее звонкая глобальная инвестконтора видела рынок аналогично. Какая мораль — воочию увидел, что эффективность рынка — не выдумка. Бесполезно рыться в нем и искать неэффективности. Против частника стоят огромные бабки, вложенные в исследования. Единственно что может сделать частник, чтобы обмануть рынок — иметь долгосрочную (годы) позицию в хорошем активе. Как его найти отдельная бесполезная тема. Сегодня это один, а завтра он уже обделался. Диверсификация конечно полезная вещь. За свои 30 лет в индустрии пережил слом всех моделей и железобетонных закономерностей. Ищите там, что вам по силам. Точно не игра с машинками. Самопсихология в этом плане гораздо полезнее. Хорошо зайти в рынок многие могут — выйти никто.
    • Synthetic
      17 октября 2025, 13:51
      V V, 
      Согласно Гомеру Сизиф был очень умный и хитрый человек. У него одна крупная проблема была. У него блога не было. И телеграм канала.
  • svgr
    17 октября 2025, 12:09
    А чё, нельзя что ли функцию использовать типа ранга? В пакетах должна быть.
    Если нет, то самому можно сделать.
    1) Предварительная сортировка по возрастанию. 
    2) Отсчитываете 1/3 и 2/3 от начала. Получаете номера (и затем соответствующие им значения) границ трёх массивов.
  • Make_hard
    17 октября 2025, 13:01
    Еслм нужны советы/ответы на какие-то вопросы по ML, пиши тут в комменты. 7 лет уже этим занимаюсь)
      • Make_hard
        17 октября 2025, 13:13
        Михаил Шардин, давай пока тут
          • Make_hard
            17 октября 2025, 13:59
            Михаил Шардин,
            3. Есть несколько стратегий: undersampling, oversampling и взвешивание классов. Можно отдельно почитать про каждый, инфы много
            2. Тут не посоветую, подбирается по данным.
            1. Ты используешь undersampling. Вполне корректно. Можно для начала просто рандомно взять необходимое количество сэмплов из общей выборки и провести 5-10 экспериментов, посмотреть как будут меняться метрики классификации в зависимости от взятых рандомно сэмплов. Если сильно меняются — нужно понять почему так происходит. Возможно у тебя внутри класса 0 будут подклассы. Если не меняются — значит просто бери рандомные, они из одного пространства признаков.
  • Александр Чекмарев
    17 октября 2025, 14:16
    тоже задумался над этим (ML) нашел на гитхабе все компоненты (я не программист (мозгов видимо не хватает 🤣)) осталось только собрать всё в одну кучу через GigaChat, и проверить, работает или не работает 🤔
      • Александр Чекмарев
        17 октября 2025, 14:45
        Михаил Шардин, реклама чего? GigaChat о котором все знают, или гитхаба? если зарегистрирован 2 дня назад, нельзя писать комментарии? вы о чем?
  • Ho_Chu
    17 октября 2025, 17:19
    Я согласен с тезисом «мусор на входе = мусор на выходе», но есть пара замечаний/вопросов… Как Вы собираетесь определять НЕмусор на входе уже в работе? 
  • Replikant_mih
    17 октября 2025, 17:31
    А какие модели используются. Вроде, на бустинговые-деревянные модели не особо это влияет. А вообще есть вроде какой-то параметр, которым веса классов можно задать, которые как бы компенсируют. Не помню уже, на бою я использую это или нет. 
  • Пафос Респектыч
    17 октября 2025, 22:26
    Данные, фичи, таргеты, алгоритмы — со всем придётся ковыряться, потому что работает это всё только вместе )
  • svgr
    18 октября 2025, 11:16

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

    Первая попытка – веса сообщениям. Нулевые должны стать в 10 раз легче, чем крайние. И с изменёнными на веса сообщениями работать как до того.

    Вторая попытка – прикрутить какую-либо числовую характеристику сообщениям и попытаться найти такие её значения, что присущи только нулевым сообщениям. Тогда часть из них удастся отфильтровывать на входе. Например, логарифм длины сообщения. Разбить на классы по этому параметру с шагом 0,1. Составить таблицу со столбцами: класс логарифма длины, класс сообщения, z-score, абсолютное значение целевой метрики.

    Вдруг окажется, что можно сгруппировать по первому столбцу с некоторыми функциями от других столбцов (среднее, минимум и т.п.), что часть классов первого столбца можно будет не рассматривать, а в оставшихся будет удобная и подходящая информация.

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн